diff --git a/common/bin/lombok.config b/common/bin/lombok.config
new file mode 100644
index 000000000000..5b36730b2027
--- /dev/null
+++ b/common/bin/lombok.config
@@ -0,0 +1,2 @@
+config.stopBubbling = true
+lombok.log.fieldName = LOG
\ No newline at end of file
diff --git a/common/bin/pom.xml b/common/bin/pom.xml
new file mode 100644
index 000000000000..b0afb32d2153
--- /dev/null
+++ b/common/bin/pom.xml
@@ -0,0 +1,176 @@
+
+
+
+
+
+ platform
+ org.open-metadata
+ 1.12.0-SNAPSHOT
+
+ 4.0.0
+
+ 2.1.4-1
+
+
+ common
+ OpenMetadata Common
+
+
+
+ org.slf4j
+ slf4j-api
+ ${slf4j.version}
+
+
+
+ org.projectlombok
+ lombok
+
+
+
+ org.junit.jupiter
+ junit-jupiter-api
+ ${org.junit.jupiter.version}
+ test
+
+
+
+ org.jsonschema2pojo
+ jsonschema2pojo-core
+ ${jsonschema2pojo.version}
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+ com.google.code.gson
+ gson
+
+
+ org.yaml
+ snakeyaml
+
+
+ org.apache.commons
+ commons-lang3
+
+
+ commons-lang
+ commons-lang
+
+
+
+
+ org.apache.commons
+ commons-lang3
+ 3.18.0
+
+
+ io.dropwizard
+ dropwizard-jersey
+ ${dropwizard.version}
+ compile
+
+
+ ch.qos.logback
+ logback-core
+
+
+ ch.qos.logback
+ logback-classic
+
+
+ org.slf4j
+ log4j-over-slf4j
+
+
+
+
+ commons-codec
+ commons-codec
+ 1.17.1
+
+
+
+
+
+ release
+
+
+
+ org.apache.maven.plugins
+ maven-source-plugin
+ ${maven-source-plugin.version}
+
+
+ attach-sources
+
+ jar-no-fork
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-javadoc-plugin
+ ${maven-javadoc-plugin.version}
+
+ none
+
+
+
+ attach-javadocs
+
+ jar
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-gpg-plugin
+ 3.0.1
+
+
+ sign-artifacts
+ verify
+
+ sign
+
+
+
+ --pinentry-mode
+ loopback
+
+
+
+
+
+
+
+
+
+
+
+
+
+ com.theoryinpractise
+ googleformatter-maven-plugin
+
+
+
+
diff --git a/common/bin/src/test/resources/json/dim_location/v1.json b/common/bin/src/test/resources/json/dim_location/v1.json
new file mode 100644
index 000000000000..daf83ebe92b0
--- /dev/null
+++ b/common/bin/src/test/resources/json/dim_location/v1.json
@@ -0,0 +1,53 @@
+{
+ "instance": {
+ "name": "dim_location",
+ "id": "25f2c29c-bc32-4a54-a014-c0a6ded20165",
+ "documentation": "this is the table to hold data on dim_location",
+ "owner": {
+ "id": "05612b35-e1ee-4067-83c5-830dcb5ed5b2",
+ "name": "user5655",
+ "ownerType": "user"
+ },
+ "href": "http://localhost:8585/api/v1/databases/null/tables/dim_location"
+ },
+ "tableType": "REGULAR",
+ "fullyQualifiedName": "hive.dim_location",
+ "tier": "unknown",
+ "columns": [
+ {
+ "name": "location_id",
+ "columnDataType": "NUMERIC",
+ "documentation": "The ID of the Shopify POS. This column is the primary key for the locations table. The location_id is null for orders not placed through Shopify POS, such as those placed through the online store.",
+ "piiTags": [
+ "pii"
+ ],
+ "columnConstraint": "NULL",
+ "ordinalPosition": 1
+ },
+ {
+ "name": "shop_id",
+ "columnDataType": "NUMERIC",
+ "documentation": "The ID of the store. This column is a foreign key reference to the shop_id column in the shops table.",
+ "piiTags": [
+ "pii"
+ ],
+ "columnConstraint": "NULL",
+ "ordinalPosition": 1
+ },
+ {
+ "name": "name",
+ "columnDataType": "VARCHAR",
+ "documentation": "Name of the POS location as provided by the merchant. For example, 150 Elgin Street or Downtown Boutique.",
+ "piiTags": [
+ "pii"
+ ],
+ "columnConstraint": "NULL",
+ "ordinalPosition": 1
+ }
+ ],
+ "tableConstraints": [],
+ "usage": {
+ "usageCount": 46420,
+ "percentileRank": 8.797669437407297
+ }
+}
\ No newline at end of file
diff --git a/common/bin/src/test/resources/json/dim_location/v2.json b/common/bin/src/test/resources/json/dim_location/v2.json
new file mode 100644
index 000000000000..a9da1d1d53e0
--- /dev/null
+++ b/common/bin/src/test/resources/json/dim_location/v2.json
@@ -0,0 +1,57 @@
+{
+ "instance": {
+ "name": "dim_location",
+ "id": "25f2c29c-bc32-4a54-a014-c0a6ded20165",
+ "documentation": "This is the table to hold data on dim_location.",
+ "owner": {
+ "id": "05612b35-e1ee-4067-83c5-830dcb5ed5b2",
+ "name": "user5655",
+ "ownerType": "user"
+ },
+ "href": "http://localhost:8585/api/v1/databases/null/tables/dim_location"
+ },
+ "tableType": "REGULAR",
+ "fullyQualifiedName": "hive.dim_location",
+ "tier": "unknown",
+ "columns": [
+ {
+ "name": "location_id",
+ "columnDataType": "NUMERIC",
+ "documentation": "The ID of the Shopify POS. This column is the primary key for the locations table. The location_id is null for orders not placed through Shopify POS, such as those placed through the online store.",
+ "columnConstraint": "NULL",
+ "ordinalPosition": 1
+ },
+ {
+ "name": "shop_id",
+ "columnDataType": "NUMERIC",
+ "documentation": "The ID of the store. This column is a foreign key reference to the shop_id column in the shops table.",
+ "columnConstraint": "NULL",
+ "ordinalPosition": 1
+ },
+ {
+ "name": "name",
+ "columnDataType": "VARCHAR",
+ "documentation": "Name of the POS location as provided by the merchant. For example, 150 Elgin Street or Downtown Boutique.",
+ "piiTags": [
+ "pii"
+ ],
+ "columnConstraint": "NULL",
+ "ordinalPosition": 1
+ },
+ {
+ "name": "created_on",
+ "columnDataType": "VARCHAR",
+ "documentation": "Date when this shop was created.",
+ "piiTags": [
+ "pii"
+ ],
+ "columnConstraint": "NULL",
+ "ordinalPosition": 1
+ }
+ ],
+ "tableConstraints": [],
+ "usage": {
+ "usageCount": 56420,
+ "percentileRank": 9.79
+ }
+}
\ No newline at end of file
diff --git a/common/bin/src/test/resources/json/entity/testEntity.json b/common/bin/src/test/resources/json/entity/testEntity.json
new file mode 100644
index 000000000000..9f80ae8cd41b
--- /dev/null
+++ b/common/bin/src/test/resources/json/entity/testEntity.json
@@ -0,0 +1,39 @@
+{
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Test entity",
+ "description": "Test entity json defintion",
+ "type": "object",
+
+ "definitions": {
+ "uri": {
+ "description": "Type used for UUID",
+ "type": "string",
+ "format": "uri"
+ }
+ },
+
+ "properties" : {
+ "stringProperty": {
+ "description": "Locally defined property in test",
+ "type": "string"
+ },
+
+ "uriProperty": {
+ "description": "Locally defined property in test",
+ "$ref": "#/definitions/uri"
+ },
+
+ "uuidProperty" : {
+ "description": "Type referenced from another json file",
+ "$ref" : "../type/basic.json#/definitions/uuid"
+ },
+
+ "objectTypeProperty" : {
+ "description": "Object type referenced from another json file",
+ "$ref" : "../type/objectType.json"
+ }
+ },
+
+ "required": ["stringProperty"]
+}
+
diff --git a/common/bin/src/test/resources/json/type/basic.json b/common/bin/src/test/resources/json/type/basic.json
new file mode 100644
index 000000000000..16afa1a1ad3b
--- /dev/null
+++ b/common/bin/src/test/resources/json/type/basic.json
@@ -0,0 +1,14 @@
+{
+ "$id": "https://streaminlinedata.ai/type/common.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Common types",
+ "description": "Common reusable types",
+ "definitions": {
+ "uuid": {
+ "description": "Type used for UUID",
+ "type": "string",
+ "format": "uuid"
+ }
+ }
+}
+
diff --git a/common/bin/src/test/resources/json/type/objectType.json b/common/bin/src/test/resources/json/type/objectType.json
new file mode 100644
index 000000000000..657375419605
--- /dev/null
+++ b/common/bin/src/test/resources/json/type/objectType.json
@@ -0,0 +1,19 @@
+{
+ "$id": "https://streaminlinedata.ai/type/objectType.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Test object type",
+ "description": "Test object type",
+ "type": "object",
+ "properties": {
+ "ot1": {
+ "description": "Driver class to use for the JDBC connection",
+ "type": "string"
+ },
+ "ot2": {
+ "description": "URL to connect to JDBC server",
+ "type": "string"
+ }
+ },
+
+ "required": ["ot1", "ot2"]
+}
diff --git a/openmetadata-integration-tests/src/test/java/org/openmetadata/it/tests/RdfTagsTierCertificationIT.java b/openmetadata-integration-tests/src/test/java/org/openmetadata/it/tests/RdfTagsTierCertificationIT.java
new file mode 100644
index 000000000000..3ef762ebb7ce
--- /dev/null
+++ b/openmetadata-integration-tests/src/test/java/org/openmetadata/it/tests/RdfTagsTierCertificationIT.java
@@ -0,0 +1,303 @@
+/*
+ * Copyright 2026 Collate.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.openmetadata.it.tests;
+
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import java.time.Duration;
+import java.util.List;
+import java.util.UUID;
+import org.awaitility.Awaitility;
+import org.junit.jupiter.api.Tag;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.condition.EnabledIf;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
+import org.openmetadata.it.factories.DatabaseSchemaTestFactory;
+import org.openmetadata.it.factories.DatabaseServiceTestFactory;
+import org.openmetadata.it.factories.TableTestFactory;
+import org.openmetadata.it.util.RdfTestUtils;
+import org.openmetadata.it.util.SdkClients;
+import org.openmetadata.it.util.TestNamespace;
+import org.openmetadata.it.util.TestNamespaceExtension;
+import org.openmetadata.schema.entity.data.Table;
+import org.openmetadata.schema.type.AssetCertification;
+import org.openmetadata.schema.type.TagLabel;
+import org.openmetadata.sdk.client.OpenMetadataClient;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Integration tests for the RDF/Fuseki pipeline verifying that classification tags, Tier
+ * assignments, and asset certifications are materialised as real RDF links rather than synthetic
+ * FQN URIs or opaque JSON literals.
+ *
+ *
Exercises the mapper guarantees added to {@code RdfPropertyMapper}:
+ *
+ * - {@code om:hasTag} points at {@code entity/tag/{uuid}} (never a fabricated {@code tag/FQN}
+ * URI) so a SPARQL walk from an asset reaches the real Tag entity.
+ * - Tier-classified assets also get an {@code om:hasTier} shortcut.
+ * - Certifications decompose into {@code om:hasCertification}, {@code om:certificationLevel},
+ * {@code om:certificationAppliedAt}, {@code om:certificationExpiresAt} — not a JSON string
+ * literal under {@code om:certification}.
+ *
+ */
+@Execution(ExecutionMode.SAME_THREAD)
+@Tag("integration")
+@Tag("rdf")
+@ExtendWith(TestNamespaceExtension.class)
+class RdfTagsTierCertificationIT {
+
+ private static final Logger LOG = LoggerFactory.getLogger(RdfTagsTierCertificationIT.class);
+ private static final ObjectMapper MAPPER = new ObjectMapper();
+ private static final String ENTITY_URI_PREFIX = "https://open-metadata.org/entity/";
+ private static final String ENTITY_TAG_URI_PREFIX = ENTITY_URI_PREFIX + "tag/";
+ private static final String SYNTHETIC_TAG_URI_PREFIX = "https://open-metadata.org/tag/";
+ private static final String OM_NS = "https://open-metadata.org/ontology/";
+ private static final Duration AWAIT_TIMEOUT = Duration.ofSeconds(60);
+ private static final Duration POLL_INTERVAL = Duration.ofSeconds(1);
+
+ static boolean isRdfEnabled() {
+ return RdfTestUtils.isRdfEnabled();
+ }
+
+ @Test
+ @EnabledIf("isRdfEnabled")
+ void classificationTag_linksToRealTagEntityUri(TestNamespace ns) {
+ Table table =
+ createTableWithTags(
+ ns,
+ new TagLabel()
+ .withTagFQN("PII.Sensitive")
+ .withSource(TagLabel.TagSource.CLASSIFICATION)
+ .withLabelType(TagLabel.LabelType.MANUAL));
+
+ String entityUri = entityUri("table", table.getId());
+
+ awaitTagBoundByFqn(entityUri, "hasTag", "PII.Sensitive");
+
+ String tagUri = fetchTagUri(entityUri, "hasTag", "PII.Sensitive");
+ assertTrue(
+ tagUri.startsWith(ENTITY_TAG_URI_PREFIX),
+ "hasTag must resolve to entity/tag/{uuid}; got: " + tagUri);
+ assertFalse(
+ tagUri.startsWith(SYNTHETIC_TAG_URI_PREFIX),
+ "hasTag must not use the synthetic tag/FQN URI; got: " + tagUri);
+ }
+
+ @Test
+ @EnabledIf("isRdfEnabled")
+ void tierTag_emitsHasTierShortcut(TestNamespace ns) {
+ Table table =
+ createTableWithTags(
+ ns,
+ new TagLabel()
+ .withTagFQN("Tier.Tier1")
+ .withSource(TagLabel.TagSource.CLASSIFICATION)
+ .withLabelType(TagLabel.LabelType.MANUAL));
+
+ String entityUri = entityUri("table", table.getId());
+
+ awaitTagBoundByFqn(entityUri, "hasTier", "Tier.Tier1");
+
+ String tierUri = fetchTagUri(entityUri, "hasTier", "Tier.Tier1");
+ assertTrue(
+ tierUri.startsWith(ENTITY_TAG_URI_PREFIX),
+ "hasTier target must be entity/tag/{uuid}; got: " + tierUri);
+
+ boolean typedAsTag =
+ RdfTestUtils.executeSparqlAsk(
+ "ASK { GRAPH ?g { <" + tierUri + "> a <" + OM_NS + "Tag> } }");
+ assertTrue(typedAsTag, "hasTier target " + tierUri + " must be rdf:type om:Tag");
+ }
+
+ @Test
+ @EnabledIf("isRdfEnabled")
+ void certification_emitsStructuredTriplesNotJsonBlob(TestNamespace ns) {
+ OpenMetadataClient client = SdkClients.adminClient();
+ Table table = createTableWithTags(ns);
+
+ TagLabel certTag =
+ new TagLabel()
+ .withTagFQN("Certification.Bronze")
+ .withSource(TagLabel.TagSource.CLASSIFICATION)
+ .withLabelType(TagLabel.LabelType.MANUAL);
+ long now = System.currentTimeMillis();
+ table.setCertification(
+ new AssetCertification()
+ .withTagLabel(certTag)
+ .withAppliedDate(now)
+ .withExpiryDate(now + Duration.ofDays(30).toMillis()));
+ client.tables().update(table.getId().toString(), table);
+
+ String entityUri = entityUri("table", table.getId());
+
+ awaitAsk(
+ "hasCertification edge should appear and target a Bronze tag",
+ "ASK { GRAPH ?g { <"
+ + entityUri
+ + "> <"
+ + OM_NS
+ + "hasCertification> ?cert . "
+ + "?cert <"
+ + OM_NS
+ + "tagFQN> \"Certification.Bronze\" } }");
+
+ String certUri = fetchTagUri(entityUri, "hasCertification", "Certification.Bronze");
+ assertTrue(
+ certUri.startsWith(ENTITY_TAG_URI_PREFIX),
+ "hasCertification target must be entity/tag/{uuid}; got: " + certUri);
+
+ awaitAsk(
+ "certificationLevel literal should be 'Bronze'",
+ "ASK { GRAPH ?g { <" + entityUri + "> <" + OM_NS + "certificationLevel> \"Bronze\" } }");
+
+ awaitAsk(
+ "certificationAppliedAt must be a non-string literal",
+ "ASK { GRAPH ?g { <"
+ + entityUri
+ + "> <"
+ + OM_NS
+ + "certificationAppliedAt> ?t"
+ + " FILTER(isLiteral(?t) && DATATYPE(?t) != ) } }");
+
+ boolean jsonLiteralLeaks =
+ RdfTestUtils.executeSparqlAsk(
+ "ASK { GRAPH ?g { <"
+ + entityUri
+ + "> <"
+ + OM_NS
+ + "certification> ?o FILTER(isLiteral(?o)) } }");
+ assertFalse(jsonLiteralLeaks, "Certification must not be stored as a JSON string literal");
+ }
+
+ @Test
+ @EnabledIf("isRdfEnabled")
+ void tagEntity_isReachableAndTyped(TestNamespace ns) {
+ Table table =
+ createTableWithTags(
+ ns,
+ new TagLabel()
+ .withTagFQN("PII.Sensitive")
+ .withSource(TagLabel.TagSource.CLASSIFICATION)
+ .withLabelType(TagLabel.LabelType.MANUAL));
+ String entityUri = entityUri("table", table.getId());
+ awaitAsk(
+ "hasTag target must be an om:Tag with om:tagFQN 'PII.Sensitive'",
+ "ASK { GRAPH ?g { <"
+ + entityUri
+ + "> <"
+ + OM_NS
+ + "hasTag> ?tag . "
+ + "?tag a <"
+ + OM_NS
+ + "Tag> ; "
+ + "<"
+ + OM_NS
+ + "tagFQN> \"PII.Sensitive\" } }");
+ }
+
+ /* ----------------------------- helpers ---------------------------------- */
+
+ private Table createTableWithTags(TestNamespace ns, TagLabel... tagLabels) {
+ var service = DatabaseServiceTestFactory.createPostgres(ns);
+ var schema = DatabaseSchemaTestFactory.createSimple(ns, service);
+ Table table = TableTestFactory.createSimple(ns, schema.getFullyQualifiedName());
+ if (tagLabels.length > 0) {
+ table.setTags(List.of(tagLabels));
+ SdkClients.adminClient().tables().update(table.getId().toString(), table);
+ table = SdkClients.adminClient().tables().get(table.getId().toString(), "tags,certification");
+ }
+ return table;
+ }
+
+ private static String entityUri(String type, UUID id) {
+ return ENTITY_URI_PREFIX + type + "/" + id;
+ }
+
+ /**
+ * Wait until a predicate link from the entity to some tag resource identified by tagFQN exists.
+ * Independent of the tag URI shape (entity/real vs synthetic) so this doubles as a
+ * "RDF listener has caught up" probe.
+ */
+ private static void awaitTagBoundByFqn(String entityUri, String predicate, String tagFqn) {
+ String sparql =
+ "ASK { GRAPH ?g { <"
+ + entityUri
+ + "> <"
+ + OM_NS
+ + predicate
+ + "> ?tag . "
+ + "?tag <"
+ + OM_NS
+ + "tagFQN> \""
+ + tagFqn
+ + "\" } }";
+ awaitAsk(predicate + " should eventually bind a tag with FQN '" + tagFqn + "'", sparql);
+ }
+
+ /** Retrieves the concrete URI bound to `entityUri predicate ?tag` where tag has the given FQN. */
+ private static String fetchTagUri(String entityUri, String predicate, String tagFqn) {
+ String sparql =
+ "SELECT ?tag WHERE { GRAPH ?g { <"
+ + entityUri
+ + "> <"
+ + OM_NS
+ + predicate
+ + "> ?tag . "
+ + "?tag <"
+ + OM_NS
+ + "tagFQN> \""
+ + tagFqn
+ + "\" } } LIMIT 1";
+ String json = RdfTestUtils.executeSparqlSelect(sparql);
+ if (json == null) {
+ fail("SPARQL SELECT returned null for predicate " + predicate);
+ }
+ try {
+ JsonNode results = MAPPER.readTree(json).path("results").path("bindings");
+ if (!results.isArray() || results.size() == 0) {
+ fail("No binding found for predicate " + predicate + " on " + entityUri);
+ }
+ String uri = results.get(0).path("tag").path("value").asText();
+ LOG.info(
+ "RDF: {} --{}--> {} (expected prefix {})",
+ entityUri,
+ predicate,
+ uri,
+ ENTITY_TAG_URI_PREFIX);
+ return uri;
+ } catch (Exception e) {
+ fail("Could not parse SPARQL response: " + e.getMessage() + "; body=" + json);
+ return null;
+ }
+ }
+
+ private static void awaitAsk(String message, String sparql) {
+ try {
+ Awaitility.await(message)
+ .atMost(AWAIT_TIMEOUT)
+ .pollInterval(POLL_INTERVAL)
+ .until(() -> RdfTestUtils.executeSparqlAsk(sparql));
+ } catch (Exception e) {
+ LOG.warn("Await failed for query: {}", sparql);
+ throw e;
+ }
+ assertTrue(RdfTestUtils.executeSparqlAsk(sparql), message);
+ }
+}
diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/rdf/translator/RdfPropertyMapper.java b/openmetadata-service/src/main/java/org/openmetadata/service/rdf/translator/RdfPropertyMapper.java
index 810b6cb5d3e5..f6e2860995b9 100644
--- a/openmetadata-service/src/main/java/org/openmetadata/service/rdf/translator/RdfPropertyMapper.java
+++ b/openmetadata-service/src/main/java/org/openmetadata/service/rdf/translator/RdfPropertyMapper.java
@@ -16,10 +16,12 @@
import org.apache.jena.vocabulary.RDFS;
import org.apache.jena.vocabulary.SKOS;
import org.openmetadata.schema.EntityInterface;
+import org.openmetadata.schema.entity.classification.Tag;
import org.openmetadata.schema.entity.data.GlossaryTerm;
import org.openmetadata.schema.type.Include;
import org.openmetadata.service.Entity;
import org.openmetadata.service.rdf.RdfUtils;
+import org.openmetadata.service.util.FullyQualifiedName;
/**
* Maps all entity properties to RDF triples based on context definitions
@@ -31,6 +33,8 @@ public class RdfPropertyMapper {
private final ObjectMapper objectMapper;
private final Map contextCache;
private final Map glossaryTermIdCache = new ConcurrentHashMap<>();
+ private final Map classificationTagIdCache = new ConcurrentHashMap<>();
+ private static final String TIER_CLASSIFICATION_PREFIX = "Tier.";
// Common namespace URIs
private static final String OM_NS = "https://open-metadata.org/ontology/";
@@ -43,10 +47,10 @@ public class RdfPropertyMapper {
// Properties that should be mapped to structured RDF instead of JSON literals
private static final Set STRUCTURED_PROPERTIES =
- Set.of("votes", "lifeCycle", "customProperties", "extension");
+ Set.of("lifeCycle", "customProperties", "extension", "certification");
// Properties that should be omitted from RDF because they are audit/helper data.
- private static final Set IGNORED_PROPERTIES = Set.of("changeDescription");
+ private static final Set IGNORED_PROPERTIES = Set.of("changeDescription", "votes");
// Lineage properties that need special handling
private static final Set LINEAGE_PROPERTIES =
@@ -126,6 +130,20 @@ private void processContextMappings(
continue;
}
+ // Structured properties (certification, lifeCycle, etc.) are handled before the JSON-LD
+ // context lookup so they get proper RDF triples even when no context entry exists for them.
+ if (STRUCTURED_PROPERTIES.contains(fieldName)
+ && fieldValue != null
+ && !fieldValue.isNull()
+ && (fieldValue.isObject() || fieldValue.isArray())) {
+ if (fieldValue.isArray()) {
+ addStructuredArrayProperty(fieldName, fieldValue, entityResource, model);
+ } else {
+ addStructuredProperty(fieldName, fieldValue, entityResource, model);
+ }
+ continue;
+ }
+
// Look up the mapping in context
Object mapping = contextMap.get(fieldName);
if (mapping != null) {
@@ -242,7 +260,7 @@ private void addEntityReference(
resource.addProperty(property, refResource);
// Also add type information for the reference
- refResource.addProperty(RDF.type, model.createResource(getRdfType(refType)));
+ refResource.addProperty(RDF.type, createTypeResource(refType, model));
// Add basic properties of the reference
if (value.has("name")) {
@@ -268,73 +286,106 @@ private void addEntityReference(
private void addTagLabel(Resource resource, Property property, JsonNode tagLabel, Model model) {
String tagFqn = tagLabel.get("tagFQN").asText();
+ String source = tagLabel.has("source") ? tagLabel.get("source").asText() : "Classification";
+ boolean isGlossary = "Glossary".equalsIgnoreCase(source);
- // Create a URI for the tag based on its FQN
- // Convert FQN like "PII.None" to a valid URI
- String tagUri = baseUri + "tag/" + tagFqn.replace(".", "/");
- Resource tagResource = model.createResource(tagUri);
-
- // Link the entity to the tag
+ Resource tagResource = resolveTagResource(tagFqn, source, tagLabel, model);
resource.addProperty(property, tagResource);
- // Add tag type
- tagResource.addProperty(RDF.type, model.createResource(OM_NS + "Tag"));
+ if (isGlossary) {
+ tagResource.addProperty(RDF.type, createTypeResource("glossaryTerm", model));
+ tagResource.addProperty(RDF.type, model.createResource(SKOS.getURI() + "Concept"));
+ resource.addProperty(model.createProperty(OM_NS, "hasGlossaryTerm"), tagResource);
+ } else {
+ tagResource.addProperty(RDF.type, createTypeResource("tag", model));
+ tagResource.addProperty(RDF.type, model.createResource(OM_NS + "Tag"));
+ if (tagFqn.startsWith(TIER_CLASSIFICATION_PREFIX)) {
+ resource.addProperty(model.createProperty(OM_NS, "hasTier"), tagResource);
+ }
+ }
- // Add tagFQN as a property
tagResource.addProperty(model.createProperty(OM_NS, "tagFQN"), tagFqn);
-
- // Add tag name if available
+ tagResource.addProperty(model.createProperty(OM_NS, "tagSource"), source);
if (tagLabel.has("name")) {
tagResource.addProperty(RDFS.label, tagLabel.get("name").asText());
}
-
- // Add displayName if available
if (tagLabel.has("displayName")) {
tagResource.addProperty(SKOS.prefLabel, tagLabel.get("displayName").asText());
}
-
- // Add labelType
if (tagLabel.has("labelType")) {
tagResource.addProperty(
model.createProperty(OM_NS, "labelType"), tagLabel.get("labelType").asText());
}
-
- // Add source (Classification or Glossary)
- if (tagLabel.has("source")) {
- String source = tagLabel.get("source").asText();
- tagResource.addProperty(model.createProperty(OM_NS, "tagSource"), source);
-
- // Also add appropriate type based on source
- if ("Glossary".equalsIgnoreCase(source)) {
- tagResource.addProperty(RDF.type, model.createResource(SKOS.getURI() + "Concept"));
- addGlossaryTermReference(resource, tagFqn, tagLabel, model);
- }
- }
-
- // Add state
if (tagLabel.has("state")) {
tagResource.addProperty(
model.createProperty(OM_NS, "tagState"), tagLabel.get("state").asText());
}
-
- // Add description if available
if (tagLabel.has("description")) {
tagResource.addProperty(
model.createProperty(DCT_NS, "description"), tagLabel.get("description").asText());
}
}
- private void addGlossaryTermReference(
- Resource resource, String termFqn, JsonNode tagLabel, Model model) {
- UUID termId = resolveGlossaryTermId(termFqn, tagLabel);
- if (termId == null) {
- return;
+ /**
+ * Resolves a TagLabel to the canonical entity URI. When the underlying tag or glossary term can
+ * be looked up by FQN, the asset is linked to the real entity (e.g. {@code entity/tag/{uuid}})
+ * so SPARQL traversals reach the tag's metadata, owners, classification, etc. Falls back to a
+ * deterministic synthetic URI only if lookup fails (e.g. tag deleted concurrently).
+ */
+ private Resource resolveTagResource(
+ String tagFqn, String source, JsonNode tagLabel, Model model) {
+ UUID id =
+ "Glossary".equalsIgnoreCase(source)
+ ? resolveGlossaryTermId(tagFqn, tagLabel)
+ : resolveClassificationTagId(tagFqn, tagLabel);
+ String entityType = "Glossary".equalsIgnoreCase(source) ? "glossaryTerm" : "tag";
+ if (id != null) {
+ return model.createResource(baseUri + "entity/" + entityType + "/" + id);
+ }
+ return model.createResource(baseUri + "tag/" + tagFqn.replace(".", "/"));
+ }
+
+ private String extractCertificationLevel(String tagFqn) {
+ if (tagFqn == null || tagFqn.isBlank()) {
+ return null;
+ }
+ try {
+ String[] parts = FullyQualifiedName.split(tagFqn);
+ if (parts.length < 2) {
+ return null;
+ }
+ return FullyQualifiedName.unquoteName(parts[parts.length - 1]);
+ } catch (Exception e) {
+ LOG.debug("Could not extract certification level from FQN {}", tagFqn);
+ return null;
+ }
+ }
+
+ private UUID resolveClassificationTagId(String tagFqn, JsonNode tagLabel) {
+ if (tagFqn == null || tagFqn.isEmpty()) {
+ return null;
+ }
+ UUID cached = classificationTagIdCache.get(tagFqn);
+ if (cached != null) {
+ return cached;
}
+ try {
+ UUID resolvedId = tryResolveUuidFromHref(tagLabel);
+ if (resolvedId != null) {
+ classificationTagIdCache.put(tagFqn, resolvedId);
+ return resolvedId;
+ }
- String termUri = baseUri + "entity/glossaryTerm/" + termId;
- Resource termResource = model.createResource(termUri);
- resource.addProperty(model.createProperty(OM_NS, "hasGlossaryTerm"), termResource);
- termResource.addProperty(RDF.type, model.createResource(getRdfType("glossaryTerm")));
+ Tag tag = Entity.getEntityByName(Entity.TAG, tagFqn, "", Include.NON_DELETED, false);
+ UUID id = tag != null ? tag.getId() : null;
+ if (id != null) {
+ classificationTagIdCache.put(tagFqn, id);
+ }
+ return id;
+ } catch (Exception e) {
+ LOG.debug("Could not resolve classification tag id for FQN {}: {}", tagFqn, e.getMessage());
+ return null;
+ }
}
private UUID resolveGlossaryTermId(String termFqn, JsonNode tagLabel) {
@@ -347,14 +398,14 @@ private UUID resolveGlossaryTermId(String termFqn, JsonNode tagLabel) {
}
try {
- UUID resolvedTermId = tryResolveGlossaryTermIdFromHref(tagLabel);
+ UUID resolvedTermId = tryResolveUuidFromHref(tagLabel);
if (resolvedTermId != null) {
glossaryTermIdCache.put(termFqn, resolvedTermId);
return resolvedTermId;
}
GlossaryTerm term =
- Entity.getEntityByName(Entity.GLOSSARY_TERM, termFqn, "id", Include.NON_DELETED, false);
+ Entity.getEntityByName(Entity.GLOSSARY_TERM, termFqn, "", Include.NON_DELETED, false);
UUID termId = term != null ? term.getId() : null;
if (termId != null) {
glossaryTermIdCache.put(termFqn, termId);
@@ -366,7 +417,7 @@ private UUID resolveGlossaryTermId(String termFqn, JsonNode tagLabel) {
}
}
- private UUID tryResolveGlossaryTermIdFromHref(JsonNode tagLabel) {
+ private UUID tryResolveUuidFromHref(JsonNode tagLabel) {
if (tagLabel == null || !tagLabel.has("href")) {
return null;
}
@@ -403,9 +454,9 @@ private UUID tryResolveGlossaryTermIdFromHref(JsonNode tagLabel) {
private void addStructuredProperty(
String fieldName, JsonNode value, Resource entityResource, Model model) {
switch (fieldName) {
- case "votes" -> addVotes(value, entityResource, model);
case "lifeCycle" -> addLifeCycle(value, entityResource, model);
case "extension" -> addExtension(value, entityResource, model);
+ case "certification" -> addCertification(value, entityResource, model);
default -> LOG.warn("Unknown structured property: {}", fieldName);
}
}
@@ -424,37 +475,43 @@ private void addStructuredArrayProperty(
}
/**
- * Converts Votes to structured RDF triples. Enables SPARQL queries like: "Find all entities with
- * more than 10 upvotes" without exposing individual voter identities as graph edges.
+ * Converts AssetCertification into a real RDF link. Emits {@code asset om:hasCertification} to
+ * the resolved tag resource (canonical {@code entity/tag/{uuid}} when the tag can be looked up,
+ * falling back to a synthetic {@code tag/{fqn}} URI only if lookup fails), plus the
+ * certification level (last FQN segment) and the applied/expiry timestamps as typed literals —
+ * instead of dumping the whole JSON as a string literal under {@code om:certification}.
*/
- private void addVotes(JsonNode votes, Resource entityResource, Model model) {
- if (votes == null || votes.isNull()) {
+ private void addCertification(JsonNode certification, Resource entityResource, Model model) {
+ if (certification == null || certification.isNull() || !certification.has("tagLabel")) {
return;
}
-
- // Create a resource for votes
- String votesUri = baseUri + "votes/" + entityResource.getLocalName();
- Resource votesNode = model.createResource(votesUri);
-
- // Link entity to votes
- Property hasVotes = model.createProperty(OM_NS, "hasVotes");
- entityResource.addProperty(hasVotes, votesNode);
-
- // Add type
- votesNode.addProperty(RDF.type, model.createResource(OM_NS + "Votes"));
-
- // Add upVotes count
- if (votes.has("upVotes")) {
- votesNode.addProperty(
- model.createProperty(OM_NS, "upVotes"),
- model.createTypedLiteral(votes.get("upVotes").asInt()));
+ JsonNode tagLabel = certification.get("tagLabel");
+ if (!tagLabel.has("tagFQN")) {
+ return;
+ }
+ String tagFqn = tagLabel.get("tagFQN").asText();
+ String source = tagLabel.has("source") ? tagLabel.get("source").asText() : "Classification";
+ Resource tagResource = resolveTagResource(tagFqn, source, tagLabel, model);
+ tagResource.addProperty(RDF.type, model.createResource(OM_NS + "Tag"));
+ tagResource.addProperty(model.createProperty(OM_NS, "tagFQN"), tagFqn);
+ if (tagLabel.has("name")) {
+ tagResource.addProperty(RDFS.label, tagLabel.get("name").asText());
}
- // Add downVotes count
- if (votes.has("downVotes")) {
- votesNode.addProperty(
- model.createProperty(OM_NS, "downVotes"),
- model.createTypedLiteral(votes.get("downVotes").asInt()));
+ entityResource.addProperty(model.createProperty(OM_NS, "hasCertification"), tagResource);
+ String level = extractCertificationLevel(tagFqn);
+ if (level != null) {
+ entityResource.addProperty(model.createProperty(OM_NS, "certificationLevel"), level);
+ }
+ if (certification.has("appliedDate") && certification.get("appliedDate").isNumber()) {
+ entityResource.addProperty(
+ model.createProperty(OM_NS, "certificationAppliedAt"),
+ model.createTypedLiteral(certification.get("appliedDate").asLong()));
+ }
+ if (certification.has("expiryDate") && certification.get("expiryDate").isNumber()) {
+ entityResource.addProperty(
+ model.createProperty(OM_NS, "certificationExpiresAt"),
+ model.createTypedLiteral(certification.get("expiryDate").asLong()));
}
}
@@ -698,7 +755,7 @@ private void addLineageEdge(
relatedEntityResource = model.createResource(relatedEntityUri);
// Add type to the related entity
- relatedEntityResource.addProperty(RDF.type, model.createResource(getRdfType(entityType)));
+ relatedEntityResource.addProperty(RDF.type, createTypeResource(entityType, model));
// Add name if available
if (relatedEntityNode.has("name")) {
@@ -796,7 +853,7 @@ private void addLineageDetails(
model.createProperty(PROV_NS, "wasGeneratedBy"), pipelineResource);
// Add pipeline type
- pipelineResource.addProperty(RDF.type, model.createResource(getRdfType(pipelineType)));
+ pipelineResource.addProperty(RDF.type, createTypeResource(pipelineType, model));
}
// Add column lineage
@@ -895,8 +952,7 @@ private void addFullLineage(JsonNode lineage, Resource entityResource, Model mod
entityResource.addProperty(hasLineageNode, nodeResource);
// Add type to the node
- nodeResource.addProperty(
- RDF.type, model.createResource(getRdfType(node.get("type").asText())));
+ nodeResource.addProperty(RDF.type, createTypeResource(node.get("type").asText(), model));
// Add name if available
if (node.has("name")) {
@@ -1063,4 +1119,23 @@ private String getContextName(String entityType) {
private String getRdfType(String entityType) {
return RdfUtils.getRdfType(entityType);
}
+
+ private Resource createTypeResource(String entityType, Model model) {
+ String curieOrUri = getRdfType(entityType);
+ if (curieOrUri == null || curieOrUri.isEmpty()) {
+ return model.createResource();
+ }
+ if (curieOrUri.startsWith("http://") || curieOrUri.startsWith("https://")) {
+ return model.createResource(curieOrUri);
+ }
+ int separatorIndex = curieOrUri.indexOf(':');
+ if (separatorIndex <= 0 || separatorIndex == curieOrUri.length() - 1) {
+ return model.createResource(curieOrUri);
+ }
+ String namespace = getNamespace(curieOrUri.substring(0, separatorIndex));
+ if (namespace == null) {
+ return model.createResource(curieOrUri);
+ }
+ return model.createResource(namespace + curieOrUri.substring(separatorIndex + 1));
+ }
}
diff --git a/openmetadata-service/src/test/java/org/openmetadata/service/rdf/RdfPropertyMapperTest.java b/openmetadata-service/src/test/java/org/openmetadata/service/rdf/RdfPropertyMapperTest.java
index b59adc5e5ca0..ca55bee53116 100644
--- a/openmetadata-service/src/test/java/org/openmetadata/service/rdf/RdfPropertyMapperTest.java
+++ b/openmetadata-service/src/test/java/org/openmetadata/service/rdf/RdfPropertyMapperTest.java
@@ -17,7 +17,6 @@
import org.apache.jena.rdf.model.Property;
import org.apache.jena.rdf.model.RDFList;
import org.apache.jena.rdf.model.Resource;
-import org.apache.jena.rdf.model.Statement;
import org.apache.jena.rdf.model.StmtIterator;
import org.apache.jena.vocabulary.RDF;
import org.apache.jena.vocabulary.RDFS;
@@ -105,56 +104,26 @@ void testStructuredDispatchIgnoresChangeDescription() throws Exception {
class VotesTests {
@Test
- @DisplayName("Votes should keep counts but omit voter relationship edges")
- void testVotesStructured() throws Exception {
+ @DisplayName("Votes are ignored during RDF field processing (audit/helper data)")
+ void testVotesAreIgnored() throws Exception {
ObjectNode votes = objectMapper.createObjectNode();
votes.put("upVotes", 10);
votes.put("downVotes", 2);
- ArrayNode upVoters = objectMapper.createArrayNode();
- ObjectNode voter = objectMapper.createObjectNode();
- voter.put("id", UUID.randomUUID().toString());
- voter.put("type", "user");
- voter.put("name", "test_user");
- upVoters.add(voter);
- votes.set("upVoters", upVoters);
-
- java.lang.reflect.Method method =
- RdfPropertyMapper.class.getDeclaredMethod(
- "addVotes", JsonNode.class, Resource.class, Model.class);
- method.setAccessible(true);
- method.invoke(propertyMapper, votes, entityResource, model);
-
- // Verify structured RDF was created
- Property hasVotes = model.createProperty(OM_NS, "hasVotes");
- assertTrue(model.contains(entityResource, hasVotes), "Entity should have hasVotes property");
+ ObjectNode entityJson = objectMapper.createObjectNode();
+ entityJson.set("votes", votes);
- Resource votesResource =
- model.listObjectsOfProperty(entityResource, hasVotes).next().asResource();
+ invokePrivate(
+ "processContextMappings",
+ new Class[] {Map.class, JsonNode.class, Resource.class, Model.class},
+ Map.of("votes", Map.of("@id", "om:hasVotes", "@type", "@json")),
+ entityJson,
+ entityResource,
+ model);
- // Verify type
- assertTrue(
- model.contains(votesResource, RDF.type, model.createResource(OM_NS + "Votes")),
- "Votes should have correct type");
-
- // Verify upVotes is stored as integer
- Property upVotesProp = model.createProperty(OM_NS, "upVotes");
- assertTrue(model.contains(votesResource, upVotesProp), "Votes should have upVotes");
- Statement stmt = model.getProperty(votesResource, upVotesProp);
- assertEquals(10, stmt.getInt(), "upVotes should be 10");
-
- // Verify downVotes is stored as integer
- Property downVotesProp = model.createProperty(OM_NS, "downVotes");
- assertTrue(model.contains(votesResource, downVotesProp), "Votes should have downVotes");
- stmt = model.getProperty(votesResource, downVotesProp);
- assertEquals(2, stmt.getInt(), "downVotes should be 2");
-
- // Verify individual voter references are not stored as graph edges
- Property upVotersProp = model.createProperty(OM_NS, "upVoters");
- assertFalse(model.contains(votesResource, upVotersProp), "Votes should not expose upVoters");
assertFalse(
- model.contains(votesResource, model.createProperty(OM_NS, "downVoters")),
- "Votes should not expose downVoters");
+ model.contains(entityResource, model.createProperty(OM_NS, "hasVotes")),
+ "Votes helper nodes should not be emitted into RDF");
}
}
@@ -742,8 +711,8 @@ void testProcessFieldMappingHandlesJsonContainersTypedValuesAndExtensions() thro
}
@Test
- @DisplayName("container, votes, and extension helpers should cover remaining value branches")
- void testContainerVotesAndExtensionHelpersCoverRemainingBranches() throws Exception {
+ @DisplayName("container and extension helpers should cover remaining value branches")
+ void testContainerAndExtensionHelpersCoverRemainingBranches() throws Exception {
ArrayNode listOfReferences = objectMapper.createArrayNode();
UUID upstreamId = UUID.randomUUID();
listOfReferences.add(entityReferenceNode("table", upstreamId.toString(), "orders", null));
@@ -766,30 +735,6 @@ void testContainerVotesAndExtensionHelpersCoverRemainingBranches() throws Except
.map(node -> node.asResource().getURI())
.toList());
- ObjectNode votes = objectMapper.createObjectNode();
- votes.put("upVotes", 2);
- ArrayNode downVoters = objectMapper.createArrayNode();
- UUID reviewerId = UUID.randomUUID();
- downVoters.add(entityReferenceNode("user", reviewerId.toString(), "reviewer", null));
- votes.set("downVoters", downVoters);
- invokePrivate(
- "addVotes",
- new Class[] {JsonNode.class, Resource.class, Model.class},
- votes,
- entityResource,
- model);
- Resource votesResource =
- model
- .listObjectsOfProperty(entityResource, model.createProperty(OM_NS, "hasVotes"))
- .next()
- .asResource();
- assertFalse(
- model.contains(
- votesResource,
- model.createProperty(OM_NS, "downVoters"),
- model.createResource(BASE_URI + "entity/user/" + reviewerId)),
- "Vote helpers should not emit voter references");
-
ObjectNode extension = objectMapper.createObjectNode();
extension.put("threshold", 2.5);
extension.set("settings", objectMapper.createObjectNode().put("env", "prod"));
@@ -841,7 +786,9 @@ void testStructuredPropertyDispatchAndCustomProperties() throws Exception {
votes,
entityResource,
model);
- assertTrue(model.contains(entityResource, model.createProperty(OM_NS, "hasVotes")));
+ assertFalse(
+ model.contains(entityResource, model.createProperty(OM_NS, "hasVotes")),
+ "votes is ignored by the structured-property dispatch");
ObjectNode lifeCycle = objectMapper.createObjectNode();
lifeCycle.set(
diff --git a/openmetadata-spec/bin/.factorypath b/openmetadata-spec/bin/.factorypath
new file mode 100644
index 000000000000..b7c8fc070827
--- /dev/null
+++ b/openmetadata-spec/bin/.factorypath
@@ -0,0 +1,3 @@
+
+
+
diff --git a/openmetadata-spec/bin/lombok.config b/openmetadata-spec/bin/lombok.config
new file mode 100644
index 000000000000..5b36730b2027
--- /dev/null
+++ b/openmetadata-spec/bin/lombok.config
@@ -0,0 +1,2 @@
+config.stopBubbling = true
+lombok.log.fieldName = LOG
\ No newline at end of file
diff --git a/openmetadata-spec/bin/pom.xml b/openmetadata-spec/bin/pom.xml
new file mode 100644
index 000000000000..9d68616afda4
--- /dev/null
+++ b/openmetadata-spec/bin/pom.xml
@@ -0,0 +1,205 @@
+
+
+
+ platform
+ org.open-metadata
+ 1.12.0-SNAPSHOT
+
+ 4.0.0
+
+ openmetadata-spec
+ OpenMetadata Specification
+
+
+ 21
+ 21
+ 2.0.12-1
+ 3.6.0
+ 3.3.1
+
+
+
+
+
+ org.open-metadata
+ common
+ ${project.version}
+
+
+ com.jayway.jsonpath
+ json-path
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+ javax.ws.rs
+ javax.ws.rs-api
+ 2.1.1
+
+
+ org.antlr
+ antlr4-runtime
+
+
+ com.fasterxml.jackson.core
+ jackson-annotations
+
+
+ javax.validation
+ validation-api
+ 2.0.1.Final
+
+
+ org.slf4j
+ slf4j-api
+ ${slf4j.version}
+
+
+ io.github.resilience4j
+ resilience4j-retry
+
+
+ jakarta.json
+ jakarta.json-api
+ 2.1.3
+ compile
+
+
+ com.fasterxml.jackson.datatype
+ jackson-datatype-jsr353
+
+
+ com.fasterxml.jackson.module
+ jackson-module-blackbird
+ ${jackson.version}
+
+
+ com.github.java-json-tools
+ json-patch
+
+
+ com.networknt
+ json-schema-validator
+ ${json-schema-validator.version}
+ compile
+
+
+
+
+
+ release
+
+
+
+ org.apache.maven.plugins
+ maven-source-plugin
+ ${maven-source-plugin.version}
+
+
+ attach-sources
+
+ jar-no-fork
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-javadoc-plugin
+ ${maven-javadoc-plugin.version}
+
+ none
+
+
+
+ attach-javadocs
+
+ jar
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-gpg-plugin
+ 3.0.1
+
+
+ sign-artifacts
+ verify
+
+ sign
+
+
+
+ --pinentry-mode
+ loopback
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ com.theoryinpractise
+ googleformatter-maven-plugin
+
+
+ org.antlr
+ antlr4-maven-plugin
+ ${antlr.version}
+
+
+ generate-resources
+
+ antlr4
+
+
+
+
+
+ org.jsonschema2pojo
+ jsonschema2pojo-maven-plugin
+ ${jsonschema2pojo.version}
+
+ ${basedir}/src/main/resources/json/schema
+ org.openmetadata.schema
+ true
+ true
+ true
+ org.openmetadata.annotations.OpenMetadataAnnotator
+
+
+
+ org.open-metadata
+ common
+ ${project.version}
+
+
+
+
+
+ generate
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-source-plugin
+ ${maven-source-plugin.version}
+
+
+
+
diff --git a/openmetadata-spec/bin/src/main/antlr4/org/openmetadata/schema/EntityLink.g4 b/openmetadata-spec/bin/src/main/antlr4/org/openmetadata/schema/EntityLink.g4
new file mode 100644
index 000000000000..62ac7a9b4c51
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/antlr4/org/openmetadata/schema/EntityLink.g4
@@ -0,0 +1,166 @@
+grammar EntityLink;
+
+entitylink
+ : RESERVED_START (separator entity_type separator nameOrFqn)+
+ (separator entity_field (separator nameOrFqn)*)* '>' EOF
+ ;
+
+
+entity_type
+ : ENTITY_TYPE # entityType
+ ;
+
+nameOrFqn
+ : NAME_OR_FQN
+ | ENTITY_TYPE
+ | ENTITY_FIELD
+ ;
+
+entity_field
+ : ENTITY_FIELD # entityField
+ ;
+
+
+separator
+ : '::'
+ ;
+
+RESERVED_START
+ : '<#E'
+ ;
+
+ENTITY_TYPE
+ : 'table'
+ | 'topic'
+ | 'classification'
+ | 'dashboard'
+ | 'pipeline'
+ | 'database'
+ | 'databaseSchema'
+ | 'glossary'
+ | 'glossaryTerm'
+ | 'databaseService'
+ | 'messagingService'
+ | 'metadataService'
+ | 'dashboardService'
+ | 'pipelineService'
+ | 'mlmodelService'
+ | 'storageService'
+ | 'searchService'
+ | 'securityService'
+ | 'driveService'
+ | 'webhook'
+ | 'mlmodel'
+ | 'team'
+ | 'user'
+ | 'bot'
+ | 'role'
+ | 'policy'
+ | 'testSuite'
+ | 'testCase'
+ | 'testDefinition'
+ | 'testConnectionDefinition'
+ | 'dataInsightChart'
+ | 'dataInsightCustomChart'
+ | 'kpi'
+ | 'alert'
+ | 'container'
+ | 'tag'
+ | 'dashboardDataModel'
+ | 'subscription'
+ | 'chart'
+ | 'domain'
+ | 'dataProduct'
+ | 'dataContract'
+ | 'sampleData'
+ | 'storedProcedure'
+ | 'searchIndex'
+ | 'appMarketPlaceDefinition'
+ | 'app'
+ | 'persona'
+ | 'docStore'
+ | 'page'
+ | 'KnowLedgePanels'
+ | 'govern'
+ | 'all'
+ | 'customMetric'
+ | 'eventsubscription'
+ | 'ingestionPipeline'
+ | 'apiCollection'
+ | 'apiEndpoint'
+ | 'apiService'
+ | 'workflowDefinition'
+ | 'spreadsheet'
+ | 'worksheet'
+ | 'webAnalyticEvent'
+ | 'llmService'
+ | 'metric'
+ | 'report'
+ | 'query'
+ | 'directory'
+ | 'file'
+ | 'type'
+ | 'aiApplication'
+ | 'llmModel'
+ | 'promptTemplate'
+ | 'aiGovernancePolicy'
+ | 'notificationTemplate'
+ | 'workflow'
+ | 'document'
+ | 'learningResource'
+ | 'mcpService'
+ | 'mcpServer'
+ | 'mcpExecution'
+ ;
+
+ENTITY_FIELD
+ : 'description'
+ | 'columns'
+ | 'schemaFields'
+ | 'tags'
+ | 'tasks'
+ | 'mlFeatures'
+ | 'schemaText'
+ | 'owner'
+ | 'reviewers'
+ | 'synonyms'
+ | 'relatedTerms'
+ | 'references'
+ | 'extension'
+ | 'displayName'
+ | 'name'
+ | 'messageSchema'
+ | 'charts'
+ | 'dataModel'
+ | 'constraint'
+ | 'tableConstraints'
+ | 'partitions'
+ | 'replicationFactor'
+ | 'sourceUrl'
+ | 'mutuallyExclusive'
+ | 'experts'
+ | 'fields'
+ | 'followers'
+ | 'appConfiguration'
+ | 'appSchedule'
+ | 'votes'
+ | 'profile'
+ | 'roles'
+ | 'deleted'
+ | 'lifeCycle'
+ | 'api_client_id'
+ | 'sourceHash'
+ | 'testCaseResult'
+ | 'tests'
+ | 'pipelineStatus'
+ | 'dataProducts'
+ | 'parameterValues'
+ | 'retentionPeriod'
+ | 'parent'
+ ;
+
+
+
+NAME_OR_FQN
+ : ( ~[:>] | ':' ~[:] | . '>' . )+
+ ;
diff --git a/openmetadata-spec/bin/src/main/antlr4/org/openmetadata/schema/Fqn.g4 b/openmetadata-spec/bin/src/main/antlr4/org/openmetadata/schema/Fqn.g4
new file mode 100644
index 000000000000..2aad7c487ef8
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/antlr4/org/openmetadata/schema/Fqn.g4
@@ -0,0 +1,30 @@
+grammar Fqn;
+
+fqn
+ : name ('.' name)* EOF
+ ;
+
+name
+ : NAME # unquotedName
+ | NAME_WITH_RESERVED # quotedName
+ ;
+
+NAME
+ : NON_RESERVED+
+ ;
+
+NAME_WITH_RESERVED
+ : QUOTE NON_RESERVED* (RESERVED NON_RESERVED*)+ QUOTE
+ ;
+
+QUOTE
+ : '"'
+ ;
+
+NON_RESERVED
+ : ~[".]
+ ;
+
+RESERVED
+ : '.'
+ ;
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/antlr4/org/openmetadata/schema/JdbcUri.g4 b/openmetadata-spec/bin/src/main/antlr4/org/openmetadata/schema/JdbcUri.g4
new file mode 100644
index 000000000000..36f9701c6b08
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/antlr4/org/openmetadata/schema/JdbcUri.g4
@@ -0,0 +1,99 @@
+grammar JdbcUri;
+
+jdbcUrl
+ : 'jdbc:' DATABASE_TYPE serverName? PORT_NUMBER? ('/' databaseName)? (CONNECTION_ARG_INIT CONNECTION_ARG (AMP CONNECTION_ARG)*)? schemaTable?
+ ;
+
+schemaTable
+ : COLON (schemaName PERIOD)? tableName
+ ;
+
+databaseName
+ : IDENTIFIER?
+ ;
+
+schemaName
+ : IDENTIFIER
+ ;
+
+tableName
+ : IDENTIFIER
+ ;
+
+
+DATABASE_TYPE
+ : 'mysql'
+ | 'postgresql'
+ | 'oracle:thin'
+ | 'clickhouse'
+ | 'trino'
+ | 'presto'
+ | 'vertica'
+ | 'hive2'
+ | 'redshift'
+ ;
+
+URI_SEPARATOR
+ : '://'
+ | ':@//'
+ | ':@'
+ ;
+
+serverName
+ : HOST_NAME
+ | IPV4_ADDRESS
+ | IPV6_ADDRESS
+ | URI_SEPARATOR IDENTIFIER
+ | URI_SEPARATOR
+ ;
+
+PORT_NUMBER
+ : COLON [0-9]+
+ ;
+
+IDENTIFIER
+ : [a-zA-Z][a-zA-Z0-9_]*
+ ;
+
+
+HOST_NAME
+ : URI_SEPARATOR [a-zA-Z][a-zA-Z0-9.-]*[a-zA-Z0-9]
+ ;
+
+
+IPV4_ADDRESS
+ : URI_SEPARATOR [0-9]+ PERIOD [0-9]+ PERIOD [0-9]+ PERIOD [0-9]+
+ ;
+
+IPV6_ADDRESS
+ : URI_SEPARATOR '[' HEXDIGIT+ (COLON HEXDIGIT+)* (COLON IPV4_ADDRESS)? ']'
+ ;
+
+HEXDIGIT
+ : [0-9a-fA-F]
+ ;
+
+CONNECTION_ARG
+ : IDENTIFIER '=' IDENTIFIER
+ ;
+
+CONNECTION_ARG_INIT
+ : '?'
+ ;
+
+PERIOD
+ : '.'
+ ;
+
+COLON
+ : ':'
+ ;
+
+AMP
+ : '&'
+ ;
+
+WS
+ : [ \t\r\n]+ -> skip
+ ;
+
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/aggregated_cost_analysis_report_data_index.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/aggregated_cost_analysis_report_data_index.json
new file mode 100644
index 000000000000..179efb276ad9
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/aggregated_cost_analysis_report_data_index.json
@@ -0,0 +1,74 @@
+{
+ "mappings": {
+ "properties": {
+ "id": {
+ "type": "keyword"
+ },
+ "timestamp": {
+ "type": "date"
+ },
+ "reportDataType": {
+ "type": "keyword"
+ },
+ "data": {
+ "properties": {
+ "unusedDataAssets": {
+ "properties": {
+ "count": {
+ "properties": {
+ "threeDays": {"type": "float"},
+ "sevenDays": {"type": "float"},
+ "fourteenDays": {"type": "float"},
+ "thirtyDays": {"type": "float"},
+ "sixtyDays": {"type": "float"}
+ }
+ },
+ "size": {
+ "properties": {
+ "threeDays": {"type": "float"},
+ "sevenDays": {"type": "float"},
+ "fourteenDays": {"type": "float"},
+ "thirtyDays": {"type": "float"},
+ "sixtyDays": {"type": "float"}
+ }
+ },
+ "totalSize": {"type": "float"},
+ "totalCount": {"type": "float"}
+ }
+ },
+ "frequentlyUsedDataAssets": {
+ "properties": {
+ "count": {
+ "properties": {
+ "threeDays": {"type": "float"},
+ "sevenDays": {"type": "float"},
+ "fourteenDays": {"type": "float"},
+ "thirtyDays": {"type": "float"},
+ "sixtyDays": {"type": "float"}
+ }
+ },
+ "size": {
+ "properties": {
+ "threeDays": {"type": "float"},
+ "sevenDays": {"type": "float"},
+ "fourteenDays": {"type": "float"},
+ "thirtyDays": {"type": "float"},
+ "sixtyDays": {"type": "float"}
+ }
+ },
+ "totalSize": {"type": "float"},
+ "totalCount": {"type": "float"}
+ }
+ },
+ "totalCount": {"type": "float"},
+ "totalSize": {"type": "float"},
+ "serviceName": {"type": "keyword"},
+ "serviceType": {"type": "keyword"},
+ "entityType": {"type": "keyword"},
+ "serviceOwner": {"type": "keyword"}
+ }
+ },
+ "entityType": {"type": "keyword"}
+ }
+ }
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/ai_agent_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/ai_agent_index_mapping.json
new file mode 100644
index 000000000000..bbc2b9090ef6
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/ai_agent_index_mapping.json
@@ -0,0 +1,704 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "text"
+ },
+ "upstreamLineage": {
+ "type": "object"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "mlFeatures": {
+ "properties": {
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "term_vector": "with_positions_offsets"
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "featureSources": {
+ "properties": {
+ "name": {
+ "type": "text"
+ },
+ "dataType": {
+ "type": "text"
+ }
+ }
+ }
+ }
+ },
+ "mlHyperParameters": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "value": {
+ "type": "text"
+ }
+ }
+ },
+ "target": {
+ "type": "text"
+ },
+ "dashboard": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "mlStore": {
+ "properties": {
+ "storage": {
+ "type": "text"
+ },
+ "imageRepository": {
+ "type": "text"
+ }
+ }
+ },
+ "server": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "usageSummary": {
+ "properties": {
+ "dailyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "weeklyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "monthlyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "date": {
+ "type": "date",
+ "format": "strict_date_optional_time||yyyy-MM-dd HH:mm:ss||epoch_millis"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/ai_governance_policy_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/ai_governance_policy_index_mapping.json
new file mode 100644
index 000000000000..c9a2b9fc72ac
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/ai_governance_policy_index_mapping.json
@@ -0,0 +1,712 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "text"
+ },
+ "upstreamLineage": {
+ "type": "object"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "mlFeatures": {
+ "properties": {
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "term_vector": "with_positions_offsets"
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "featureSources": {
+ "properties": {
+ "name": {
+ "type": "text"
+ },
+ "dataType": {
+ "type": "text"
+ }
+ }
+ }
+ }
+ },
+ "mlHyperParameters": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "value": {
+ "type": "text"
+ }
+ }
+ },
+ "target": {
+ "type": "text"
+ },
+ "dashboard": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "mlStore": {
+ "properties": {
+ "storage": {
+ "type": "text"
+ },
+ "imageRepository": {
+ "type": "text"
+ }
+ }
+ },
+ "server": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "usageSummary": {
+ "properties": {
+ "dailyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "weeklyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "monthlyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "date": {
+ "type": "date",
+ "format": "strict_date_optional_time||yyyy-MM-dd HH:mm:ss||epoch_millis"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/api_collection_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/api_collection_index_mapping.json
new file mode 100644
index 000000000000..c36fa4d03d72
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/api_collection_index_mapping.json
@@ -0,0 +1,747 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "text"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "apiEndpoints": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "text"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/api_endpoint_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/api_endpoint_index_mapping.json
new file mode 100644
index 000000000000..172cfb6b955b
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/api_endpoint_index_mapping.json
@@ -0,0 +1,971 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "apiCollection": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "requestSchema": {
+ "properties": {
+ "schemaFields": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "similarity": "boolean",
+ "analyzer": "om_analyzer",
+ "term_vector": "with_positions_offsets"
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "children": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "responseSchema": {
+ "properties": {
+ "schemaFields": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "similarity": "boolean",
+ "analyzer": "om_analyzer",
+ "term_vector": "with_positions_offsets"
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "children": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "name": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "requestFieldNames": {
+ "type": "keyword"
+ },
+ "responseFieldNames": {
+ "type": "keyword"
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/api_service_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/api_service_index_mapping.json
new file mode 100644
index 000000000000..cff3ff99564b
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/api_service_index_mapping.json
@@ -0,0 +1,446 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "index_options": "docs",
+ "term_vector": "with_positions_offsets"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "pipelines": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/chart_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/chart_index_mapping.json
new file mode 100644
index 000000000000..d01450a51146
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/chart_index_mapping.json
@@ -0,0 +1,698 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "chartType": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "keyword"
+ },
+ "href": {
+ "type": "text"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "dashboards": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "text"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "term_vector": "with_positions_offsets"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/classification_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/classification_index_mapping.json
new file mode 100644
index 000000000000..61625c63ace0
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/classification_index_mapping.json
@@ -0,0 +1,361 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "reviewers": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text",
+ "similarity": "boolean",
+ "analyzer": "om_analyzer",
+ "term_vector": "with_positions_offsets"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "disabled": {
+ "type": "text"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/column_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/column_index_mapping.json
new file mode 100644
index 000000000000..c8e6f2d55f30
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/column_index_mapping.json
@@ -0,0 +1,620 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 7
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 10,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "dataType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "dataTypeDisplay": {
+ "type": "text"
+ },
+ "constraint": {
+ "type": "keyword"
+ },
+ "ordinalPosition": {
+ "type": "integer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "table": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "database": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "databaseSchema": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "text"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text",
+ "similarity": "boolean"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "version": {
+ "type": "float"
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/container_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/container_index_mapping.json
new file mode 100644
index 000000000000..e43a56c4874b
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/container_index_mapping.json
@@ -0,0 +1,952 @@
+{
+ "settings": {
+ "analysis": {
+ "tokenizer": {
+ "edge_ngram_tokenizer": {
+ "type": "edge_ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "edge_ngram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ },
+ "index": {}
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "keyword"
+ },
+ "fullPath": {
+ "type": "keyword"
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "parent": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "text"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "dataModel": {
+ "properties": {
+ "isPartitioned": {
+ "type": "boolean"
+ },
+ "columns": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "dataTypeDisplay": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "ordinalPosition": {
+ "type": "integer"
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "children": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "prefix": {
+ "type": "text"
+ },
+ "numberOfObjects": {
+ "type": "double"
+ },
+ "size": {
+ "type": "long"
+ },
+ "fileFormats": {
+ "type": "keyword"
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "usageSummary": {
+ "properties": {
+ "dailyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "weeklyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "monthlyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "date": {
+ "type": "date",
+ "format": "strict_date_optional_time||yyyy-MM-dd HH:mm:ss||epoch_millis"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "columnNames": {
+ "type": "keyword"
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/dashboard_data_model_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/dashboard_data_model_index_mapping.json
new file mode 100644
index 000000000000..89106e3b1d2d
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/dashboard_data_model_index_mapping.json
@@ -0,0 +1,806 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "version": {
+ "type": "float"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "keyword"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "dataModelType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "columns": {
+ "properties": {
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "dataTypeDisplay": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "term_vector": "with_positions_offsets"
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "ordinalPosition": {
+ "type": "integer"
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ }
+ }
+ },
+ "columnNames": {
+ "type": "keyword"
+ },
+ "project": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/dashboard_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/dashboard_index_mapping.json
new file mode 100644
index 000000000000..b54e245c00ad
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/dashboard_index_mapping.json
@@ -0,0 +1,839 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "keyword"
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "charts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "text"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "term_vector": "with_positions_offsets"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "dataModels": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "text"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "term_vector": "with_positions_offsets"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "project": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "usageSummary": {
+ "properties": {
+ "dailyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "weeklyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "monthlyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "date": {
+ "type": "date",
+ "format": "strict_date_optional_time||yyyy-MM-dd HH:mm:ss||epoch_millis"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/dashboard_service_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/dashboard_service_index_mapping.json
new file mode 100644
index 000000000000..a3313483fc11
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/dashboard_service_index_mapping.json
@@ -0,0 +1,445 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text",
+ "index_options": "docs"
+ },
+ "pipelines": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "index_options": "docs",
+ "term_vector": "with_positions_offsets"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/data_products_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/data_products_index_mapping.json
new file mode 100644
index 000000000000..7c34faaa9d5c
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/data_products_index_mapping.json
@@ -0,0 +1,643 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "reviewers": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "assets": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "inputPorts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "outputPorts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/database_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/database_index_mapping.json
new file mode 100644
index 000000000000..403cc26438c6
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/database_index_mapping.json
@@ -0,0 +1,718 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "text"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "location": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "usageSummary": {
+ "properties": {
+ "dailyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "weeklyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "monthlyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "date": {
+ "type": "date",
+ "format": "strict_date_optional_time||yyyy-MM-dd HH:mm:ss||epoch_millis"
+ }
+ }
+ },
+ "databaseSchemas": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "text"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/database_schema_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/database_schema_index_mapping.json
new file mode 100644
index 000000000000..6e51ed087e7b
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/database_schema_index_mapping.json
@@ -0,0 +1,682 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "version": {
+ "type": "float"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "database": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "usageSummary": {
+ "properties": {
+ "dailyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "weeklyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "monthlyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "date": {
+ "type": "date",
+ "format": "strict_date_optional_time||yyyy-MM-dd HH:mm:ss||epoch_millis"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "sourceUrl": {
+ "type": "text"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/database_service_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/database_service_index_mapping.json
new file mode 100644
index 000000000000..0d9b37ef781b
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/database_service_index_mapping.json
@@ -0,0 +1,449 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "index_options": "docs",
+ "term_vector": "with_positions_offsets"
+ },
+ "pipelines": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "href": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/directory_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/directory_index_mapping.json
new file mode 100644
index 000000000000..1c167e1b8d37
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/directory_index_mapping.json
@@ -0,0 +1,788 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "text"
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "parent": {
+ "properties": {
+ "id": {
+ "type": "keyword"
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "directoryType": {
+ "type": "keyword"
+ },
+ "path": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "driveId": {
+ "type": "keyword"
+ },
+ "isShared": {
+ "type": "boolean"
+ },
+ "numberOfFiles": {
+ "type": "long"
+ },
+ "numberOfSubDirectories": {
+ "type": "long"
+ },
+ "totalSize": {
+ "type": "long"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "suggest": {
+ "type": "completion",
+ "contexts": [
+ {
+ "name": "deleted",
+ "type": "category",
+ "path": "deleted"
+ }
+ ]
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/domain_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/domain_index_mapping.json
new file mode 100644
index 000000000000..971bf210d372
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/domain_index_mapping.json
@@ -0,0 +1,464 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "domainType": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "experts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/drive_service_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/drive_service_index_mapping.json
new file mode 100644
index 000000000000..eba110d77e3b
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/drive_service_index_mapping.json
@@ -0,0 +1,320 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "serviceType": {
+ "type": "keyword"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword"
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword"
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "totalVotes": {
+ "type": "long"
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "suggest": {
+ "type": "completion",
+ "contexts": [
+ {
+ "name": "deleted",
+ "type": "category",
+ "path": "deleted"
+ }
+ ]
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/file_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/file_index_mapping.json
new file mode 100644
index 000000000000..d8684473b2f9
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/file_index_mapping.json
@@ -0,0 +1,840 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "directory": {
+ "properties": {
+ "id": {
+ "type": "keyword"
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "text"
+ },
+ "fileType": {
+ "type": "keyword"
+ },
+ "mimeType": {
+ "type": "keyword"
+ },
+ "fileExtension": {
+ "type": "keyword"
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "path": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "driveFileId": {
+ "type": "keyword"
+ },
+ "size": {
+ "type": "long"
+ },
+ "checksum": {
+ "type": "keyword"
+ },
+ "isShared": {
+ "type": "boolean"
+ },
+ "fileVersion": {
+ "type": "keyword"
+ },
+ "createdTime": {
+ "type": "date"
+ },
+ "modifiedTime": {
+ "type": "date"
+ },
+ "lastModifiedBy": {
+ "properties": {
+ "id": {
+ "type": "keyword"
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "suggest": {
+ "type": "completion",
+ "contexts": [
+ {
+ "name": "deleted",
+ "type": "category",
+ "path": "deleted"
+ }
+ ]
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/glossary_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/glossary_index_mapping.json
new file mode 100644
index 000000000000..d985b9e70ac2
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/glossary_index_mapping.json
@@ -0,0 +1,423 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "index_options": "docs",
+ "term_vector": "with_positions_offsets"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "reviewers": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "usageCount": {
+ "type": "integer"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "termCount": {
+ "type": "integer"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/glossary_term_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/glossary_term_index_mapping.json
new file mode 100644
index 000000000000..0376916225fc
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/glossary_term_index_mapping.json
@@ -0,0 +1,576 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "index_options": "docs",
+ "term_vector": "with_positions_offsets"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "synonyms": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "glossary": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ },
+ "mutuallyExclusive": {
+ "type": "boolean"
+ }
+ }
+ },
+ "children": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "relatedTerms": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "reviewers": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "usageCount": {
+ "type": "integer"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "childrenCount": {
+ "type": "integer"
+ },
+ "mutuallyExclusive": {
+ "type": "boolean"
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/ingestion_pipeline_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/ingestion_pipeline_index_mapping.json
new file mode 100644
index 000000000000..299cd73eccbc
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/ingestion_pipeline_index_mapping.json
@@ -0,0 +1,467 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "deployed": {
+ "type": "text"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "pipelineType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "pipelineStatuses": {
+ "properties": {
+ "pipelineState": {
+ "type": "keyword"
+ },
+ "runId": {
+ "type": "keyword"
+ },
+ "timestamp": {
+ "type": "long"
+ },
+ "startDate": {
+ "type": "long"
+ },
+ "endDate": {
+ "type": "long"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "applicationType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "airflowConfig": {
+ "properties": {
+ "scheduleInterval": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ }
+ }
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/llm_model_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/llm_model_index_mapping.json
new file mode 100644
index 000000000000..c9a2b9fc72ac
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/llm_model_index_mapping.json
@@ -0,0 +1,712 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "text"
+ },
+ "upstreamLineage": {
+ "type": "object"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "mlFeatures": {
+ "properties": {
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "term_vector": "with_positions_offsets"
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "featureSources": {
+ "properties": {
+ "name": {
+ "type": "text"
+ },
+ "dataType": {
+ "type": "text"
+ }
+ }
+ }
+ }
+ },
+ "mlHyperParameters": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "value": {
+ "type": "text"
+ }
+ }
+ },
+ "target": {
+ "type": "text"
+ },
+ "dashboard": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "mlStore": {
+ "properties": {
+ "storage": {
+ "type": "text"
+ },
+ "imageRepository": {
+ "type": "text"
+ }
+ }
+ },
+ "server": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "usageSummary": {
+ "properties": {
+ "dailyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "weeklyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "monthlyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "date": {
+ "type": "date",
+ "format": "strict_date_optional_time||yyyy-MM-dd HH:mm:ss||epoch_millis"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/llm_service_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/llm_service_index_mapping.json
new file mode 100644
index 000000000000..1e1a97dfeea5
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/llm_service_index_mapping.json
@@ -0,0 +1,543 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "index_options": "docs",
+ "term_vector": "with_positions_offsets"
+ },
+ "pipelines": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "href": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/mcp_execution_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/mcp_execution_index_mapping.json
new file mode 100644
index 000000000000..03e763aa21ef
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/mcp_execution_index_mapping.json
@@ -0,0 +1,351 @@
+{
+ "settings": {
+ "index": {
+ "priority": 500
+ },
+ "analysis": {
+ "tokenizer": {
+ "edge_ngram_tokenizer": {
+ "type": "edge_ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "edge_ngram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "id": {
+ "type": "keyword"
+ },
+ "timestamp": {
+ "type": "date"
+ },
+ "@timestamp": {
+ "type": "date"
+ },
+ "endTimestamp": {
+ "type": "date"
+ },
+ "durationMs": {
+ "type": "float"
+ },
+ "status": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "executedBy": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "sessionId": {
+ "type": "keyword"
+ },
+ "serverId": {
+ "type": "keyword"
+ },
+ "server": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "serverType": {
+ "type": "keyword"
+ },
+ "transportType": {
+ "type": "keyword"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword"
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tags": {
+ "type": "nested",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ }
+ }
+ },
+ "domain": {
+ "properties": {
+ "id": {
+ "type": "keyword"
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ }
+ }
+ },
+ "applicationContext": {
+ "properties": {
+ "id": {
+ "type": "keyword"
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "keyword"
+ }
+ }
+ },
+ "toolCalls": {
+ "type": "nested",
+ "properties": {
+ "toolName": {
+ "type": "keyword"
+ },
+ "success": {
+ "type": "boolean"
+ },
+ "latencyMs": {
+ "type": "float"
+ },
+ "timestamp": {
+ "type": "date"
+ },
+ "errorMessage": {
+ "type": "text"
+ }
+ }
+ },
+ "resourceAccesses": {
+ "type": "nested",
+ "properties": {
+ "resourceUri": {
+ "type": "keyword"
+ },
+ "accessType": {
+ "type": "keyword"
+ },
+ "success": {
+ "type": "boolean"
+ },
+ "timestamp": {
+ "type": "date"
+ }
+ }
+ },
+ "promptUses": {
+ "type": "nested",
+ "properties": {
+ "promptName": {
+ "type": "keyword"
+ },
+ "timestamp": {
+ "type": "date"
+ },
+ "tokensGenerated": {
+ "type": "integer"
+ }
+ }
+ },
+ "dataAccessed": {
+ "type": "nested",
+ "properties": {
+ "accessType": {
+ "type": "keyword"
+ },
+ "recordCount": {
+ "type": "integer"
+ },
+ "piiAccessed": {
+ "type": "boolean"
+ },
+ "sensitivityLevel": {
+ "type": "keyword"
+ },
+ "timestamp": {
+ "type": "date"
+ }
+ }
+ },
+ "complianceChecks": {
+ "type": "nested",
+ "properties": {
+ "checkName": {
+ "type": "keyword"
+ },
+ "passed": {
+ "type": "boolean"
+ },
+ "severity": {
+ "type": "keyword"
+ },
+ "timestamp": {
+ "type": "date"
+ }
+ }
+ },
+ "metrics": {
+ "properties": {
+ "totalToolCalls": {
+ "type": "integer"
+ },
+ "successfulToolCalls": {
+ "type": "integer"
+ },
+ "totalResourceAccesses": {
+ "type": "integer"
+ },
+ "totalPromptUses": {
+ "type": "integer"
+ },
+ "piiDataAccessed": {
+ "type": "boolean"
+ },
+ "highSensitivityDataAccessed": {
+ "type": "boolean"
+ },
+ "highRiskOperations": {
+ "type": "integer"
+ },
+ "complianceViolations": {
+ "type": "integer"
+ }
+ }
+ },
+ "errorMessage": {
+ "type": "text"
+ },
+ "environment": {
+ "type": "keyword"
+ },
+ "serverVersion": {
+ "type": "keyword"
+ },
+ "protocolVersion": {
+ "type": "keyword"
+ },
+ "deleted": {
+ "type": "boolean"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/mcp_server_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/mcp_server_index_mapping.json
new file mode 100644
index 000000000000..7f97108d126b
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/mcp_server_index_mapping.json
@@ -0,0 +1,634 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "serverType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "transportType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "protocolVersion": {
+ "type": "keyword"
+ },
+ "developmentStage": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "serverInfo": {
+ "type": "object",
+ "properties": {
+ "serverName": {
+ "type": "text"
+ },
+ "serverVersion": {
+ "type": "keyword"
+ },
+ "vendor": {
+ "type": "text"
+ }
+ }
+ },
+ "capabilities": {
+ "type": "object",
+ "properties": {
+ "toolsSupported": {
+ "type": "boolean"
+ },
+ "resourcesSupported": {
+ "type": "boolean"
+ },
+ "promptsSupported": {
+ "type": "boolean"
+ },
+ "loggingSupported": {
+ "type": "boolean"
+ },
+ "samplingSupported": {
+ "type": "boolean"
+ }
+ }
+ },
+ "tools": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "toolCategory": {
+ "type": "keyword"
+ },
+ "riskLevel": {
+ "type": "keyword"
+ }
+ }
+ },
+ "resources": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "resourceType": {
+ "type": "keyword"
+ },
+ "uri": {
+ "type": "keyword"
+ }
+ }
+ },
+ "prompts": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "promptType": {
+ "type": "keyword"
+ }
+ }
+ },
+ "governanceMetadata": {
+ "type": "object",
+ "properties": {
+ "registrationStatus": {
+ "type": "keyword"
+ },
+ "riskAssessment": {
+ "type": "object",
+ "properties": {
+ "riskLevel": {
+ "type": "keyword"
+ }
+ }
+ },
+ "dataClassification": {
+ "type": "object",
+ "properties": {
+ "accessesPII": {
+ "type": "boolean"
+ },
+ "accessesSensitiveData": {
+ "type": "boolean"
+ }
+ }
+ }
+ }
+ },
+ "dataAccessSummary": {
+ "type": "object",
+ "properties": {
+ "sensitivityLevel": {
+ "type": "keyword"
+ },
+ "piiAccess": {
+ "type": "boolean"
+ },
+ "externalApiAccess": {
+ "type": "boolean"
+ },
+ "fileSystemAccess": {
+ "type": "boolean"
+ },
+ "networkAccess": {
+ "type": "boolean"
+ },
+ "databaseAccess": {
+ "type": "boolean"
+ }
+ }
+ },
+ "usageMetrics": {
+ "type": "object",
+ "properties": {
+ "totalInvocations": {
+ "type": "long"
+ },
+ "successRate": {
+ "type": "float"
+ },
+ "averageLatencyMs": {
+ "type": "float"
+ },
+ "uniqueUsers": {
+ "type": "integer"
+ }
+ }
+ },
+ "securityMetrics": {
+ "type": "object",
+ "properties": {
+ "authenticationRequired": {
+ "type": "boolean"
+ },
+ "authorizationEnforced": {
+ "type": "boolean"
+ },
+ "auditLoggingEnabled": {
+ "type": "boolean"
+ },
+ "encryptionInTransit": {
+ "type": "boolean"
+ },
+ "sandboxed": {
+ "type": "boolean"
+ }
+ }
+ },
+ "sourceCode": {
+ "type": "text"
+ },
+ "deploymentUrl": {
+ "type": "text"
+ },
+ "documentation": {
+ "type": "text"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object"
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lifeCycle": {
+ "type": "object"
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/mcp_service_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/mcp_service_index_mapping.json
new file mode 100644
index 000000000000..3121d01a26cb
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/mcp_service_index_mapping.json
@@ -0,0 +1,514 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "id": {
+ "type": "text"
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "index_options": "docs",
+ "term_vector": "with_positions_offsets"
+ },
+ "pipelines": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "href": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object"
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/messaging_service_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/messaging_service_index_mapping.json
new file mode 100644
index 000000000000..fa04ea4fff4c
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/messaging_service_index_mapping.json
@@ -0,0 +1,445 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "index_options": "docs",
+ "term_vector": "with_positions_offsets"
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "pipelines": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "href": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/metadata_service_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/metadata_service_index_mapping.json
new file mode 100644
index 000000000000..6a04ca913e11
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/metadata_service_index_mapping.json
@@ -0,0 +1,399 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "index_options": "docs",
+ "term_vector": "with_positions_offsets"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "pipelines": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ },
+ "provider": {
+ "type": "text"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/metric_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/metric_index_mapping.json
new file mode 100644
index 000000000000..08a1713c3823
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/metric_index_mapping.json
@@ -0,0 +1,713 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "expression": {
+ "properties": {
+ "language": {
+ "type": "text"
+ },
+ "code": {
+ "type": "text"
+ }
+ }
+ },
+ "metricType": {
+ "type": "keyword"
+ },
+ "unitOfMeasurement": {
+ "type": "keyword"
+ },
+ "granularity": {
+ "type": "keyword"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "reviewers": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "relatedMetrics": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "usageCount": {
+ "type": "integer"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/mlmodel_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/mlmodel_index_mapping.json
new file mode 100644
index 000000000000..2d4f2f6a9af9
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/mlmodel_index_mapping.json
@@ -0,0 +1,847 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "text"
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "mlFeatures": {
+ "properties": {
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "term_vector": "with_positions_offsets"
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "featureSources": {
+ "properties": {
+ "name": {
+ "type": "text"
+ },
+ "dataType": {
+ "type": "text"
+ }
+ }
+ }
+ }
+ },
+ "mlHyperParameters": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "value": {
+ "type": "text"
+ }
+ }
+ },
+ "target": {
+ "type": "text"
+ },
+ "dashboard": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "mlStore": {
+ "properties": {
+ "storage": {
+ "type": "text"
+ },
+ "imageRepository": {
+ "type": "text"
+ }
+ }
+ },
+ "server": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "usageSummary": {
+ "properties": {
+ "dailyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "weeklyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "monthlyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "date": {
+ "type": "date",
+ "format": "strict_date_optional_time||yyyy-MM-dd HH:mm:ss||epoch_millis"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/mlmodel_service_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/mlmodel_service_index_mapping.json
new file mode 100644
index 000000000000..27090f769832
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/mlmodel_service_index_mapping.json
@@ -0,0 +1,446 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "index_options": "docs",
+ "term_vector": "with_positions_offsets"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "pipelines": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "href": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/pipeline_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/pipeline_index_mapping.json
new file mode 100644
index 000000000000..ea5227c5ce7f
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/pipeline_index_mapping.json
@@ -0,0 +1,754 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "version": {
+ "type": "float"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "sourceUrl": {
+ "type": "text"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "startDate": {
+ "type": "text"
+ },
+ "tasks": {
+ "properties": {
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "term_vector": "with_positions_offsets"
+ },
+ "sourceUrl": {
+ "type": "text"
+ },
+ "taskType": {
+ "type": "text"
+ },
+ "startDate": {
+ "type": "text"
+ },
+ "endDate": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/pipeline_service_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/pipeline_service_index_mapping.json
new file mode 100644
index 000000000000..8032596cb815
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/pipeline_service_index_mapping.json
@@ -0,0 +1,444 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "index_options": "docs",
+ "term_vector": "with_positions_offsets"
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "pipelines": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "href": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/pipeline_status_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/pipeline_status_index_mapping.json
new file mode 100644
index 000000000000..f59d8f2ec546
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/pipeline_status_index_mapping.json
@@ -0,0 +1,112 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17,
+ "number_of_shards": 1,
+ "number_of_replicas": 1
+ },
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "pipelineId": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "pipelineFqn": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "pipelineName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "serviceName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "executionStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "timestamp": {
+ "type": "date",
+ "format": "epoch_millis"
+ },
+ "endTime": {
+ "type": "date",
+ "format": "epoch_millis"
+ },
+ "startTime": {
+ "type": "date",
+ "format": "epoch_millis"
+ },
+ "lastRunTime": {
+ "type": "date",
+ "format": "epoch_millis"
+ },
+ "runtime": {
+ "type": "long"
+ },
+ "scheduleInterval": {
+ "type": "keyword"
+ },
+ "tableId": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "tableFqn": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "entityType": {
+ "type": "keyword"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/prompt_template_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/prompt_template_index_mapping.json
new file mode 100644
index 000000000000..c9a2b9fc72ac
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/prompt_template_index_mapping.json
@@ -0,0 +1,712 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "text"
+ },
+ "upstreamLineage": {
+ "type": "object"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "mlFeatures": {
+ "properties": {
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "term_vector": "with_positions_offsets"
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "featureSources": {
+ "properties": {
+ "name": {
+ "type": "text"
+ },
+ "dataType": {
+ "type": "text"
+ }
+ }
+ }
+ }
+ },
+ "mlHyperParameters": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "value": {
+ "type": "text"
+ }
+ }
+ },
+ "target": {
+ "type": "text"
+ },
+ "dashboard": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "mlStore": {
+ "properties": {
+ "storage": {
+ "type": "text"
+ },
+ "imageRepository": {
+ "type": "text"
+ }
+ }
+ },
+ "server": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "usageSummary": {
+ "properties": {
+ "dailyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "weeklyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "monthlyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "date": {
+ "type": "date",
+ "format": "strict_date_optional_time||yyyy-MM-dd HH:mm:ss||epoch_millis"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/query_cost_record_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/query_cost_record_index_mapping.json
new file mode 100644
index 000000000000..37422e8be2b8
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/query_cost_record_index_mapping.json
@@ -0,0 +1,540 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "query": {
+ "properties": {
+ "id": {
+ "type": "keyword"
+ },
+ "checksum": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "processedLineage": {
+ "type": "boolean"
+ },
+ "name": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "index_options": "docs",
+ "term_vector": "with_positions_offsets"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "duration": {
+ "type": "long"
+ },
+ "users": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "query": {
+ "type": "text",
+ "index": false
+ },
+ "queryDate": {
+ "type": "long"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "queryUsedIn": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "description": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "labelType": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "source": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "state": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "cost": {
+ "type": "float"
+ },
+ "timestamp": {
+ "type": "date"
+ },
+ "@timestamp": {
+ "type": "date"
+ },
+ "totalDuration": {
+ "type": "long"
+ },
+ "count": {
+ "type": "long"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/query_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/query_index_mapping.json
new file mode 100644
index 000000000000..f8cd1aad1541
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/query_index_mapping.json
@@ -0,0 +1,523 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "checksum": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "processedLineage": {
+ "type": "boolean"
+ },
+ "name": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "index_options": "docs",
+ "term_vector": "with_positions_offsets"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "duration": {
+ "type": "long"
+ },
+ "users": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "query": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "queryDate": {
+ "type": "long"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "queryUsedIn": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "description": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "labelType": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "source": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "state": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/search_entity_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/search_entity_index_mapping.json
new file mode 100644
index 000000000000..c33454f4587e
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/search_entity_index_mapping.json
@@ -0,0 +1,809 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "edge_ngram_tokenizer": {
+ "type": "edge_ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "edge_ngram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fields": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "dataTypeDisplay": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "index_options": "docs",
+ "analyzer": "om_analyzer",
+ "term_vector": "with_positions_offsets"
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "children": {
+ "properties": {
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "dataTypeDisplay": {
+ "type": "text"
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "href": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "indexType": {
+ "type": "text"
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/search_service_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/search_service_index_mapping.json
new file mode 100644
index 000000000000..cff3ff99564b
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/search_service_index_mapping.json
@@ -0,0 +1,446 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "index_options": "docs",
+ "term_vector": "with_positions_offsets"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "pipelines": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/security_service_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/security_service_index_mapping.json
new file mode 100644
index 000000000000..a0024c38d04a
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/security_service_index_mapping.json
@@ -0,0 +1,593 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "index_options": "docs",
+ "term_vector": "with_positions_offsets"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "href": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "connection": {
+ "properties": {
+ "config": {
+ "properties": {
+ "type": {
+ "type": "keyword"
+ },
+ "hostPort": {
+ "type": "text"
+ },
+ "authType": {
+ "type": "object"
+ },
+ "verifySSL": {
+ "type": "keyword"
+ },
+ "sslConfig": {
+ "type": "object"
+ },
+ "connectionOptions": {
+ "type": "object"
+ },
+ "connectionArguments": {
+ "type": "object"
+ }
+ }
+ }
+ }
+ },
+ "pipelines": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "testConnectionResult": {
+ "properties": {
+ "lastUpdatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "status": {
+ "type": "keyword"
+ },
+ "steps": {
+ "properties": {
+ "name": {
+ "type": "text"
+ },
+ "mandatory": {
+ "type": "boolean"
+ },
+ "description": {
+ "type": "text"
+ },
+ "passed": {
+ "type": "boolean"
+ },
+ "message": {
+ "type": "text"
+ },
+ "errorLog": {
+ "type": "text"
+ }
+ }
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "ingestionRunner": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "changeDescription": {
+ "type": "object"
+ },
+ "incrementalChangeDescription": {
+ "type": "object"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "suggest": {
+ "type": "completion",
+ "contexts": {
+ "name": "deleted",
+ "type": "category"
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/spreadsheet_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/spreadsheet_index_mapping.json
new file mode 100644
index 000000000000..67337f1755c5
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/spreadsheet_index_mapping.json
@@ -0,0 +1,829 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "text"
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "directory": {
+ "properties": {
+ "id": {
+ "type": "keyword"
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "mimeType": {
+ "type": "keyword"
+ },
+ "path": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "driveFileId": {
+ "type": "keyword"
+ },
+ "size": {
+ "type": "long"
+ },
+ "fileVersion": {
+ "type": "keyword"
+ },
+ "createdTime": {
+ "type": "date"
+ },
+ "modifiedTime": {
+ "type": "date"
+ },
+ "lastModifiedBy": {
+ "properties": {
+ "id": {
+ "type": "keyword"
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "worksheetNames": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "worksheetNamesFuzzy": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "totalVotes": {
+ "type": "long"
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "suggest": {
+ "type": "completion",
+ "contexts": [
+ {
+ "name": "deleted",
+ "type": "category",
+ "path": "deleted"
+ }
+ ]
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/storage_service_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/storage_service_index_mapping.json
new file mode 100644
index 000000000000..e88cde21aa1b
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/storage_service_index_mapping.json
@@ -0,0 +1,441 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "index_options": "docs",
+ "term_vector": "with_positions_offsets"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "pipelines": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/stored_procedure_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/stored_procedure_index_mapping.json
new file mode 100644
index 000000000000..3bcc49fff2d9
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/stored_procedure_index_mapping.json
@@ -0,0 +1,827 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "storedProcedureCode": {
+ "properties": {
+ "language": {
+ "type": "text"
+ },
+ "code": {
+ "type": "text"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "databaseSchema": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "database": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "processedLineage": {
+ "type": "boolean"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "code": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "sourceUrl": {
+ "type": "keyword"
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/table_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/table_index_mapping.json
new file mode 100644
index 000000000000..98bdec5352e6
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/table_index_mapping.json
@@ -0,0 +1,1071 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "schemaDefinition": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "keyword"
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "tableType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "columns": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "dataTypeDisplay": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text",
+ "similarity": "boolean"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "ordinalPosition": {
+ "type": "integer"
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ }
+ }
+ },
+ "columnNames": {
+ "type": "keyword"
+ },
+ "databaseSchema": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "text"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "database": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "location": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "locationPath": {
+ "type": "keyword"
+ },
+ "usageSummary": {
+ "properties": {
+ "dailyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "weeklyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "monthlyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "date": {
+ "type": "date",
+ "format": "strict_date_optional_time||yyyy-MM-dd HH:mm:ss||epoch_millis"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "processedLineage": {
+ "type": "boolean"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "upstreamEntityRelationship": {
+ "properties": {
+ "entity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "relatedEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "entityRelationship": {
+ "properties": {
+ "entity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "relatedEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "columnDescriptionStatus": {
+ "type": "keyword"
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "changeSummary": {
+ "type": "object",
+ "dynamic": false
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/tag_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/tag_index_mapping.json
new file mode 100644
index 000000000000..d42f307ae37e
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/tag_index_mapping.json
@@ -0,0 +1,407 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "disabled": {
+ "type": "boolean"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "reviewers": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "classification": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/team_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/team_index_mapping.json
new file mode 100644
index 000000000000..90debfcc9e7c
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/team_index_mapping.json
@@ -0,0 +1,364 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "index_options": "docs",
+ "term_vector": "with_positions_offsets"
+ },
+ "teamType": {
+ "type": "text"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "email": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "users": {
+ "enabled": false
+ },
+ "userCount": {
+ "type": "long"
+ },
+ "parents": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "defaultRoles": {
+ "enabled": false
+ },
+ "isJoinable": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "isBot": {
+ "type": "boolean"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/test_case_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/test_case_index_mapping.json
new file mode 100644
index 000000000000..1549ba155ae9
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/test_case_index_mapping.json
@@ -0,0 +1,865 @@
+{
+ "settings": {
+ "analysis": {
+ "tokenizer": {
+ "edge_ngram_tokenizer": {
+ "type": "edge_ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit",
+ "custom"
+ ],
+ "custom_token_chars": "_"
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "edge_ngram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "term_vector": "with_positions_offsets"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "entityLink": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "nonNormalized": {
+ "type": "keyword"
+ }
+ }
+ },
+ "testPlatforms": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "parameterValues": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "value": {
+ "type": "text"
+ }
+ }
+ },
+ "testDefinition": {
+ "properties": {
+ "id": {
+ "type": "text"
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "type": {
+ "type": "keyword"
+ }
+ }
+ },
+ "testCaseType": {
+ "type": "keyword"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "dataQualityDimension": {
+ "type": "keyword"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "testSuite": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ },
+ "executable": {
+ "type": "text"
+ }
+ }
+ },
+ "testSuites": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ },
+ "executable": {
+ "type": "text"
+ }
+ }
+ },
+ "testCaseResult": {
+ "properties": {
+ "result": {
+ "type": "text"
+ },
+ "testCaseStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "testResultValue": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "value": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ }
+ }
+ },
+ "timestamp": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text",
+ "index_options": "docs"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ },
+ "type": "nested"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "createdBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "originEntityFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "table": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "database": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "databaseSchema": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "reviewers": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/test_case_resolution_status_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/test_case_resolution_status_index_mapping.json
new file mode 100644
index 000000000000..98acac92da1a
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/test_case_resolution_status_index_mapping.json
@@ -0,0 +1,868 @@
+{
+ "settings": {
+ "analysis": {
+ "tokenizer": {
+ "edge_ngram_tokenizer": {
+ "type": "edge_ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "edge_ngram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "stateId": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "timestamp": {
+ "type": "date"
+ },
+ "@timestamp": {
+ "type": "date"
+ },
+ "testCaseResolutionStatusType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 8
+ }
+ }
+ },
+ "testCaseResolutionStatusDetails": {
+ "type": "object",
+ "dynamic": true,
+ "properties": {
+ "assignee": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "resolved": {
+ "properties": {
+ "testCaseFailureReason": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 15
+ }
+ }
+ },
+ "testCaseFailureComment": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "resolvedBy": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "metrics": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "value": {
+ "type": "float"
+ }
+ }
+ },
+ "updatedBy": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ },
+ "term_vector": "with_positions_offsets"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "updatedAt": {
+ "type": "date"
+ },
+ "testCaseReference": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ },
+ "term_vector": "with_positions_offsets"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "table": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "database": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "databaseSchema": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "testSuite": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "testCase": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityFQN": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ },
+ "tags": {
+ "type": "nested",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text",
+ "index_options": "docs"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/test_case_result_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/test_case_result_index_mapping.json
new file mode 100644
index 000000000000..968c364dc536
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/test_case_result_index_mapping.json
@@ -0,0 +1,510 @@
+{
+ "settings": {
+ "index": {
+ "priority": 500
+ },
+ "analysis": {
+ "tokenizer": {
+ "edge_ngram_tokenizer": {
+ "type": "edge_ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "edge_ngram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "result": {
+ "type": "text"
+ },
+ "testCaseStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "timestamp": {
+ "type": "date"
+ },
+ "@timestamp": {
+ "type": "date"
+ },
+ "testResultValue": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "value": {
+ "type": "text"
+ },
+ "predictedValue": {
+ "type": "text"
+ }
+ }
+ },
+ "testCase": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "term_vector": "with_positions_offsets"
+ },
+ "testPlatforms": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityLink": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "nonNormalized": {
+ "type": "keyword"
+ }
+ }
+ },
+ "parameterValues": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "value": {
+ "type": "text"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "tags": {
+ "type": "nested",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text",
+ "index_options": "docs"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ }
+ }
+ },
+ "testDefinition": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "entityType": {
+ "type": "keyword"
+ },
+ "dataQualityDimension": {
+ "type": "keyword"
+ }
+ }
+ },
+ "testSuite": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ },
+ "executable": {
+ "type": "text"
+ }
+ }
+ },
+ "testSuites": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ },
+ "executable": {
+ "type": "text"
+ }
+ }
+ },
+ "table": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ }
+ }
+ },
+ "databaseSchema": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "database": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/test_suite_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/test_suite_index_mapping.json
new file mode 100644
index 000000000000..17eb61a01b04
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/test_suite_index_mapping.json
@@ -0,0 +1,533 @@
+{
+ "settings": {
+ "analysis": {
+ "tokenizer": {
+ "edge_ngram_tokenizer": {
+ "type": "edge_ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "edge_ngram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "term_vector": "with_positions_offsets"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "lastResultTimestamp": {
+ "type": "long"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ },
+ "executable": {
+ "type": "boolean"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "table": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "database": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "databaseSchema": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/topic_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/topic_index_mapping.json
new file mode 100644
index 000000000000..1265f2beb7cc
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/topic_index_mapping.json
@@ -0,0 +1,834 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "edge_ngram_tokenizer": {
+ "type": "edge_ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "edge_ngram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "keyword"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "messageSchema": {
+ "properties": {
+ "schemaText": {
+ "type": "text"
+ },
+ "schemaType": {
+ "type": "text"
+ },
+ "schemaFields": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "children": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "fieldNames": {
+ "type": "keyword"
+ },
+ "cleanupPolicies": {
+ "type": "keyword"
+ },
+ "replicationFactor": {
+ "type": "integer"
+ },
+ "maximumMessageSize": {
+ "type": "long"
+ },
+ "retentionSize": {
+ "type": "long"
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/user_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/user_index_mapping.json
new file mode 100644
index 000000000000..0ca1642b61e5
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/user_index_mapping.json
@@ -0,0 +1,362 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "email": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "isAdmin": {
+ "type": "boolean"
+ },
+ "isBot": {
+ "type": "boolean"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "teams": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "roles": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "inheritedRoles": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/en/worksheet_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/worksheet_index_mapping.json
new file mode 100644
index 000000000000..70703bb99111
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/en/worksheet_index_mapping.json
@@ -0,0 +1,953 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "text"
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "spreadsheet": {
+ "properties": {
+ "id": {
+ "type": "keyword"
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "worksheetId": {
+ "type": "keyword"
+ },
+ "index": {
+ "type": "integer"
+ },
+ "rowCount": {
+ "type": "long"
+ },
+ "columnCount": {
+ "type": "long"
+ },
+ "isHidden": {
+ "type": "boolean"
+ },
+ "columnNames": {
+ "type": "keyword"
+ },
+ "columnNamesFuzzy": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "columnDescriptionStatus": {
+ "type": "keyword"
+ },
+ "columns": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "dataTypeDisplay": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text",
+ "similarity": "boolean"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "ordinalPosition": {
+ "type": "integer"
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "children": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "dataType": {
+ "type": "keyword"
+ },
+ "dataTypeDisplay": {
+ "type": "keyword"
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "totalVotes": {
+ "type": "long"
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "suggest": {
+ "type": "completion",
+ "contexts": [
+ {
+ "name": "deleted",
+ "type": "category",
+ "path": "deleted"
+ }
+ ]
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/entity_report_data_index.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/entity_report_data_index.json
new file mode 100644
index 000000000000..e59d80da95db
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/entity_report_data_index.json
@@ -0,0 +1,49 @@
+{
+ "mappings": {
+ "properties": {
+ "timestamp": {
+ "type": "date"
+ },
+ "reportDataType": {
+ "type": "keyword"
+ },
+ "data": {
+ "properties": {
+ "id": {
+ "type": "text"
+ },
+ "serviceName": {
+ "type": "keyword"
+ },
+ "team": {
+ "type": "keyword"
+ },
+ "entityTier": {
+ "type": "keyword"
+ },
+ "entityType": {
+ "type": "keyword"
+ },
+ "organization": {
+ "type": "text"
+ },
+ "hasOwner": {
+ "type": "integer"
+ },
+ "missingOwner": {
+ "type": "integer"
+ },
+ "missingDescriptions": {
+ "type": "integer"
+ },
+ "completedDescriptions": {
+ "type": "integer"
+ },
+ "entityCount": {
+ "type": "integer"
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/indexMapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/indexMapping.json
new file mode 100644
index 000000000000..bda49897067a
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/indexMapping.json
@@ -0,0 +1,591 @@
+{
+ "table": {
+ "indexName": "table_search_index",
+ "indexMappingFile": "/elasticsearch/%s/table_index_mapping.json",
+ "alias": "table",
+ "parentAliases": [
+ "database",
+ "databaseSchema",
+ "databaseService",
+ "all",
+ "dataAsset",
+ "dataAssetEmbeddings"
+ ],
+ "childAliases": [
+ "testSuite",
+ "testCase",
+ "testCaseResolutionStatus",
+ "testCaseResult",
+ "tableColumn"
+ ]
+ },
+ "tableColumn": {
+ "indexName": "column_search_index",
+ "indexMappingFile": "/elasticsearch/%s/column_index_mapping.json",
+ "alias": "tableColumn",
+ "parentAliases": ["all", "table", "dataAsset"],
+ "childAliases": []
+ },
+ "storedProcedure": {
+ "indexName": "stored_procedure_search_index",
+ "indexMappingFile": "/elasticsearch/%s/stored_procedure_index_mapping.json",
+ "alias": "storedProcedure",
+ "parentAliases": [
+ "database",
+ "databaseSchema",
+ "databaseService",
+ "all",
+ "dataAsset",
+ "dataAssetEmbeddings"
+ ],
+ "childAliases": []
+ },
+ "databaseSchema": {
+ "indexName": "database_schema_search_index",
+ "indexMappingFile": "/elasticsearch/%s/database_schema_index_mapping.json",
+ "alias": "databaseSchema",
+ "parentAliases": [
+ "database",
+ "databaseService",
+ "all",
+ "dataAsset",
+ "dataAssetEmbeddings"
+ ],
+ "childAliases": [
+ "table",
+ "storedProcedure",
+ "testSuite",
+ "testCase",
+ "testCaseResolutionStatus",
+ "testCaseResult"
+ ]
+ },
+ "database": {
+ "indexName": "database_search_index",
+ "alias": "database",
+ "indexMappingFile": "/elasticsearch/%s/database_index_mapping.json",
+ "parentAliases": [
+ "databaseService",
+ "all",
+ "dataAsset",
+ "dataAssetEmbeddings"
+ ],
+ "childAliases": [
+ "databaseSchema",
+ "table",
+ "storedProcedure",
+ "testSuite",
+ "testCase",
+ "testCaseResolutionStatus",
+ "testCaseResult"
+ ]
+ },
+ "chart": {
+ "indexName": "chart_search_index",
+ "alias": "chart",
+ "indexMappingFile": "/elasticsearch/%s/chart_index_mapping.json",
+ "parentAliases": [
+ "dashboard",
+ "dashboardService",
+ "all",
+ "dataAsset",
+ "dataAssetEmbeddings"
+ ],
+ "childAliases": []
+ },
+ "dashboard": {
+ "indexName": "dashboard_search_index",
+ "indexMappingFile": "/elasticsearch/%s/dashboard_index_mapping.json",
+ "alias": "dashboard",
+ "parentAliases": [
+ "dashboardService",
+ "all",
+ "dataAsset",
+ "dataAssetEmbeddings"
+ ],
+ "childAliases": [
+ "chart"
+ ]
+ },
+ "dashboardDataModel": {
+ "indexName": "dashboard_data_model_search_index",
+ "indexMappingFile": "/elasticsearch/%s/dashboard_data_model_index_mapping.json",
+ "alias": "dashboardDataModel",
+ "parentAliases": [
+ "dashboardService",
+ "all",
+ "dataAsset",
+ "dataAssetEmbeddings"
+ ],
+ "childAliases": []
+ },
+ "pipeline": {
+ "indexName": "pipeline_search_index",
+ "indexMappingFile": "/elasticsearch/%s/pipeline_index_mapping.json",
+ "alias": "pipeline",
+ "parentAliases": [
+ "pipelineService",
+ "all",
+ "dataAsset",
+ "dataAssetEmbeddings"
+ ],
+ "childAliases": []
+ },
+ "pipelineStatus": {
+ "indexName": "pipeline_status_search_index",
+ "indexMappingFile": "/elasticsearch/%s/pipeline_status_index_mapping.json",
+ "alias": "pipelineStatus",
+ "parentAliases": [],
+ "childAliases": []
+ },
+ "topic": {
+ "indexName": "topic_search_index",
+ "indexMappingFile": "/elasticsearch/%s/topic_index_mapping.json",
+ "alias": "topic",
+ "parentAliases": [
+ "messagingService",
+ "all",
+ "dataAsset",
+ "dataAssetEmbeddings"
+ ],
+ "childAliases": []
+ },
+ "container": {
+ "indexName": "container_search_index",
+ "indexMappingFile": "/elasticsearch/%s/container_index_mapping.json",
+ "alias": "container",
+ "parentAliases": [
+ "storageService",
+ "all",
+ "dataAsset"
+ ],
+ "childAliases": []
+ },
+ "directory": {
+ "indexName": "directory_search_index",
+ "indexMappingFile": "/elasticsearch/%s/directory_index_mapping.json",
+ "alias": "directory",
+ "parentAliases": [
+ "driveService",
+ "all",
+ "dataAsset"
+ ],
+ "childAliases": [
+ "file",
+ "spreadsheet"
+ ]
+ },
+ "file": {
+ "indexName": "file_search_index",
+ "indexMappingFile": "/elasticsearch/%s/file_index_mapping.json",
+ "alias": "file",
+ "parentAliases": [
+ "driveService",
+ "directory",
+ "all",
+ "dataAsset"
+ ],
+ "childAliases": []
+ },
+ "spreadsheet": {
+ "indexName": "spreadsheet_search_index",
+ "indexMappingFile": "/elasticsearch/%s/spreadsheet_index_mapping.json",
+ "alias": "spreadsheet",
+ "parentAliases": [
+ "driveService",
+ "directory",
+ "all",
+ "dataAsset"
+ ],
+ "childAliases": [
+ "worksheet"
+ ]
+ },
+ "worksheet": {
+ "indexName": "worksheet_search_index",
+ "indexMappingFile": "/elasticsearch/%s/worksheet_index_mapping.json",
+ "alias": "worksheet",
+ "parentAliases": [
+ "driveService",
+ "spreadsheet",
+ "all",
+ "dataAsset"
+ ],
+ "childAliases": []
+ },
+ "searchIndex": {
+ "indexName": "search_entity_search_index",
+ "indexMappingFile": "/elasticsearch/%s/search_entity_index_mapping.json",
+ "alias": "searchIndex",
+ "parentAliases": [
+ "searchService",
+ "all",
+ "dataAsset",
+ "dataAssetEmbeddings"
+ ],
+ "childAliases": []
+ },
+ "query": {
+ "indexName": "query_search_index",
+ "indexMappingFile": "/elasticsearch/%s/query_index_mapping.json",
+ "alias": "query",
+ "parentAliases": ["all"],
+ "childAliases": []
+ },
+ "mlmodel": {
+ "indexName": "mlmodel_search_index",
+ "indexMappingFile": "/elasticsearch/%s/mlmodel_index_mapping.json",
+ "alias": "mlmodel",
+ "parentAliases": [
+ "all",
+ "dataAsset",
+ "mlModelService",
+ "dataAssetEmbeddings"
+ ],
+ "childAliases": []
+ },
+ "testCase": {
+ "indexName": "test_case_search_index",
+ "indexMappingFile": "/elasticsearch/%s/test_case_index_mapping.json",
+ "alias": "testCase",
+ "parentAliases": ["testSuite", "all"],
+ "childAliases": ["testCaseResolutionStatus", "testCaseResult"]
+ },
+ "testCaseResult": {
+ "indexName": "test_case_result_search_index",
+ "indexMappingFile": "/elasticsearch/%s/test_case_result_index_mapping.json",
+ "alias": "testCaseResult",
+ "parentAliases": ["testSuite", "testCase"],
+ "childAliases": []
+ },
+ "testSuite": {
+ "indexName": "test_suite_search_index",
+ "indexMappingFile": "/elasticsearch/%s/test_suite_index_mapping.json",
+ "alias": "testSuite",
+ "parentAliases": ["all"],
+ "childAliases": ["testCase", "testCaseResolutionStatus", "testCaseResult"]
+ },
+ "dataProduct": {
+ "indexName": "data_product_search_index",
+ "indexMappingFile": "/elasticsearch/%s/data_products_index_mapping.json",
+ "alias": "dataProduct",
+ "parentAliases": [
+ "domain",
+ "all",
+ "dataAsset",
+ "dataAssetEmbeddings"
+ ],
+ "childAliases": []
+ },
+ "domain": {
+ "indexName": "domain_search_index",
+ "indexMappingFile": "/elasticsearch/%s/domain_index_mapping.json",
+ "alias": "domain",
+ "parentAliases": ["all"],
+ "childAliases": ["dataProduct"]
+ },
+ "metric": {
+ "indexName": "metric_search_index",
+ "indexMappingFile": "/elasticsearch/%s/metric_index_mapping.json",
+ "alias": "metric",
+ "parentAliases": [
+ "all",
+ "dataAsset",
+ "dataAssetEmbeddings"
+ ],
+ "childAliases": []
+ },
+ "glossary": {
+ "indexName": "glossary_search_index",
+ "indexMappingFile": "/elasticsearch/%s/glossary_index_mapping.json",
+ "alias": "glossary",
+ "parentAliases": [
+ "all",
+ "dataAssetEmbeddings"
+ ],
+ "childAliases": [
+ "glossaryTerm"
+ ]
+ },
+ "glossaryTerm": {
+ "indexName": "glossary_term_search_index",
+ "indexMappingFile": "/elasticsearch/%s/glossary_term_index_mapping.json",
+ "alias": "glossaryTerm",
+ "parentAliases": [
+ "all",
+ "glossary",
+ "dataAsset",
+ "dataAssetEmbeddings"
+ ],
+ "childAliases": []
+ },
+ "tag": {
+ "indexName": "tag_search_index",
+ "indexMappingFile": "/elasticsearch/%s/tag_index_mapping.json",
+ "alias": "tag",
+ "parentAliases": [
+ "classification",
+ "all",
+ "dataAsset"
+ ],
+ "childAliases": []
+ },
+ "classification": {
+ "indexName": "classification_search_index",
+ "indexMappingFile": "/elasticsearch/%s/classification_index_mapping.json",
+ "alias": "classification",
+ "parentAliases": ["all"],
+ "childAliases": ["tag"]
+ },
+ "user": {
+ "indexName": "user_search_index",
+ "indexMappingFile": "/elasticsearch/%s/user_index_mapping.json",
+ "alias": "user",
+ "parentAliases": [],
+ "childAliases": []
+ },
+ "team": {
+ "indexName": "team_search_index",
+ "indexMappingFile": "/elasticsearch/%s/team_index_mapping.json",
+ "alias": "team",
+ "parentAliases": [],
+ "childAliases": []
+ },
+ "entityReportData": {
+ "indexName": "entity_report_data_index",
+ "indexMappingFile": "/elasticsearch/entity_report_data_index.json",
+ "alias": "entityReportData",
+ "parentAliases": [],
+ "childAliases": []
+ },
+ "webAnalyticEntityViewReportData": {
+ "indexName": "web_analytic_entity_view_report_data_index",
+ "indexMappingFile": "/elasticsearch/web_analytic_entity_view_report_data_index.json",
+ "alias": "webAnalyticEntityViewReportData",
+ "parentAliases": [],
+ "childAliases": []
+ },
+ "webAnalyticUserActivityReportData": {
+ "indexName": "web_analytic_user_activity_report_data_index",
+ "indexMappingFile": "/elasticsearch/web_analytic_user_activity_report_data_index.json",
+ "alias": "webAnalyticUserActivityReportData",
+ "parentAliases": [],
+ "childAliases": []
+ },
+ "rawCostAnalysisReportData": {
+ "indexName": "raw_cost_analysis_report_data_index",
+ "indexMappingFile": "/elasticsearch/raw_cost_analysis_report_data_index.json",
+ "alias": "RawCostAnalysisReportData",
+ "parentAliases": [],
+ "childAliases": []
+ },
+ "aggregatedCostAnalysisReportData": {
+ "indexName": "aggregated_cost_analysis_report_data_index",
+ "indexMappingFile": "/elasticsearch/aggregated_cost_analysis_report_data_index.json",
+ "alias": "AggregatedCostAnalysisReportData",
+ "parentAliases": [],
+ "childAliases": []
+ },
+ "databaseService": {
+ "indexName": "database_service_search_index",
+ "indexMappingFile": "/elasticsearch/%s/database_service_index_mapping.json",
+ "alias": "databaseService",
+ "parentAliases": ["all", "service"],
+ "childAliases": [
+ "database",
+ "databaseSchema",
+ "storedProcedure",
+ "table",
+ "testSuite",
+ "testCase",
+ "testCaseResolutionStatus",
+ "testCaseResult"
+ ]
+ },
+ "messagingService": {
+ "indexName": "messaging_service_search_index",
+ "indexMappingFile": "/elasticsearch/%s/messaging_service_index_mapping.json",
+ "alias": "messagingService",
+ "parentAliases": ["all", "service"],
+ "childAliases": ["topic"]
+ },
+ "pipelineService": {
+ "indexName": "pipeline_service_search_index",
+ "indexMappingFile": "/elasticsearch/%s/pipeline_service_index_mapping.json",
+ "alias": "pipelineService",
+ "parentAliases": ["all", "service"],
+ "childAliases": ["pipeline"]
+ },
+ "dashboardService": {
+ "indexName": "dashboard_service_search_index",
+ "indexMappingFile": "/elasticsearch/%s/dashboard_service_index_mapping.json",
+ "alias": "dashboardService",
+ "parentAliases": ["all", "service"],
+ "childAliases": ["dashboard", "dashboardDataModel", "chart"]
+ },
+ "searchService": {
+ "indexName": "search_service_search_index",
+ "indexMappingFile": "/elasticsearch/%s/search_service_index_mapping.json",
+ "alias": "searchService",
+ "parentAliases": ["all", "service"],
+ "childAliases": ["searchIndex"]
+ },
+ "driveService": {
+ "indexName": "drive_service_search_index",
+ "indexMappingFile": "/elasticsearch/%s/drive_service_index_mapping.json",
+ "alias": "driveService",
+ "parentAliases": ["all", "service"],
+ "childAliases": ["directory", "file", "spreadsheet", "worksheet"]
+ },
+ "securityService": {
+ "indexName": "security_service_search_index",
+ "indexMappingFile": "/elasticsearch/%s/security_service_index_mapping.json",
+ "alias": "securityService",
+ "parentAliases": ["all", "service"],
+ "childAliases": []
+ },
+ "storageService": {
+ "indexName": "storage_service_search_index",
+ "indexMappingFile": "/elasticsearch/%s/storage_service_index_mapping.json",
+ "alias": "storageService",
+ "parentAliases": ["all", "service"],
+ "childAliases": ["container"]
+ },
+ "metadataService": {
+ "indexName": "metadata_service_search_index",
+ "indexMappingFile": "/elasticsearch/%s/metadata_service_index_mapping.json",
+ "alias": "metadataService",
+ "parentAliases": [],
+ "childAliases": []
+ },
+ "mlmodelService": {
+ "indexName": "mlmodel_service_search_index",
+ "indexMappingFile": "/elasticsearch/%s/mlmodel_service_index_mapping.json",
+ "alias": "mlModelService",
+ "parentAliases": ["all", "service"],
+ "childAliases": ["mlmodel"]
+ },
+ "apiService": {
+ "indexName": "api_service_search_index",
+ "indexMappingFile": "/elasticsearch/%s/api_service_index_mapping.json",
+ "alias": "apiService",
+ "parentAliases": ["all", "service"],
+ "childAliases": ["apiCollection", "apiEndpoint"]
+ },
+ "apiCollection": {
+ "indexName": "api_collection_search_index",
+ "alias": "apiCollection",
+ "indexMappingFile": "/elasticsearch/%s/api_collection_index_mapping.json",
+ "parentAliases": [
+ "apiService",
+ "all",
+ "dataAsset",
+ "dataAssetEmbeddings"
+ ],
+ "childAliases": [
+ "apiEndpoint"
+ ]
+ },
+ "apiEndpoint": {
+ "indexName": "api_endpoint_search_index",
+ "alias": "apiEndpoint",
+ "indexMappingFile": "/elasticsearch/%s/api_endpoint_index_mapping.json",
+ "parentAliases": [
+ "apiService",
+ "apiCollection",
+ "all",
+ "dataAsset",
+ "dataAssetEmbeddings"
+ ],
+ "childAliases": []
+ },
+ "testCaseResolutionStatus": {
+ "indexName": "test_case_resolution_status_search_index",
+ "indexMappingFile": "/elasticsearch/%s/test_case_resolution_status_index_mapping.json",
+ "alias": "testCaseResolutionStatus",
+ "parentAliases": [],
+ "childAliases": []
+ },
+ "ingestionPipeline": {
+ "indexName": "ingestion_pipeline_search_index",
+ "indexMappingFile": "/elasticsearch/%s/ingestion_pipeline_index_mapping.json",
+ "alias": "ingestionPipeline",
+ "parentAliases": [],
+ "childAliases": []
+ },
+ "queryCostRecord": {
+ "indexName": "query_cost_record_search_index",
+ "indexMappingFile": "/elasticsearch/%s/query_cost_record_index_mapping.json",
+ "alias": "queryCostRecord",
+ "parentAliases": [],
+ "childAliases": []
+ },
+ "llmService": {
+ "indexName": "llm_service_search_index",
+ "indexMappingFile": "/elasticsearch/%s/llm_service_index_mapping.json",
+ "alias": "llmService",
+ "parentAliases": ["all", "service"],
+ "childAliases": ["llmModel"]
+ },
+ "mcpService": {
+ "indexName": "mcp_service_search_index",
+ "indexMappingFile": "/elasticsearch/%s/mcp_service_index_mapping.json",
+ "alias": "mcpService",
+ "parentAliases": [
+ "all",
+ "service"
+ ],
+ "childAliases": ["mcpServer"]
+ },
+ "aiAgent": {
+ "indexName": "ai_agent_search_index",
+ "indexMappingFile": "/elasticsearch/%s/ai_agent_index_mapping.json",
+ "alias": "aiAgent",
+ "parentAliases": ["all"],
+ "childAliases": []
+ },
+ "llmModel": {
+ "indexName": "llm_model_search_index",
+ "indexMappingFile": "/elasticsearch/%s/llm_model_index_mapping.json",
+ "alias": "llmModel",
+ "parentAliases": ["llmService", "all"],
+ "childAliases": []
+ },
+ "promptTemplate": {
+ "indexName": "prompt_template_search_index",
+ "indexMappingFile": "/elasticsearch/%s/prompt_template_index_mapping.json",
+ "alias": "promptTemplate",
+ "parentAliases": ["all"],
+ "childAliases": []
+ },
+ "aiGovernancePolicy": {
+ "indexName": "ai_governance_policy_search_index",
+ "indexMappingFile": "/elasticsearch/%s/ai_governance_policy_index_mapping.json",
+ "alias": "aiGovernancePolicy",
+ "parentAliases": [
+ "all"
+ ],
+ "childAliases": []
+ },
+ "mcpServer": {
+ "indexName": "mcp_server_search_index",
+ "indexMappingFile": "/elasticsearch/%s/mcp_server_index_mapping.json",
+ "alias": "mcpServer",
+ "parentAliases": [
+ "mcpService",
+ "all"
+ ],
+ "childAliases": [
+ "mcpExecution"
+ ]
+ },
+ "mcpExecution": {
+ "indexName": "mcp_execution_search_index",
+ "indexMappingFile": "/elasticsearch/%s/mcp_execution_index_mapping.json",
+ "alias": "mcpExecution",
+ "parentAliases": [
+ "mcpServer"
+ ],
+ "childAliases": []
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/ai_agent_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/ai_agent_index_mapping.json
new file mode 100644
index 000000000000..82fdf3c84e22
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/ai_agent_index_mapping.json
@@ -0,0 +1,709 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "text"
+ },
+ "upstreamLineage": {
+ "type": "object"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "mlFeatures": {
+ "properties": {
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "term_vector": "with_positions_offsets"
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "featureSources": {
+ "properties": {
+ "name": {
+ "type": "text"
+ },
+ "dataType": {
+ "type": "text"
+ }
+ }
+ }
+ }
+ },
+ "mlHyperParameters": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "value": {
+ "type": "text"
+ }
+ }
+ },
+ "target": {
+ "type": "text"
+ },
+ "dashboard": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "mlStore": {
+ "properties": {
+ "storage": {
+ "type": "text"
+ },
+ "imageRepository": {
+ "type": "text"
+ }
+ }
+ },
+ "server": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "usageSummary": {
+ "properties": {
+ "dailyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "weeklyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "monthlyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "date": {
+ "type": "date",
+ "format": "strict_date_optional_time||yyyy-MM-dd HH:mm:ss||epoch_millis"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/ai_governance_policy_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/ai_governance_policy_index_mapping.json
new file mode 100644
index 000000000000..e9dff9b2b828
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/ai_governance_policy_index_mapping.json
@@ -0,0 +1,717 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "text"
+ },
+ "upstreamLineage": {
+ "type": "object"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "mlFeatures": {
+ "properties": {
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "term_vector": "with_positions_offsets"
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "featureSources": {
+ "properties": {
+ "name": {
+ "type": "text"
+ },
+ "dataType": {
+ "type": "text"
+ }
+ }
+ }
+ }
+ },
+ "mlHyperParameters": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "value": {
+ "type": "text"
+ }
+ }
+ },
+ "target": {
+ "type": "text"
+ },
+ "dashboard": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "mlStore": {
+ "properties": {
+ "storage": {
+ "type": "text"
+ },
+ "imageRepository": {
+ "type": "text"
+ }
+ }
+ },
+ "server": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "usageSummary": {
+ "properties": {
+ "dailyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "weeklyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "monthlyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "date": {
+ "type": "date",
+ "format": "strict_date_optional_time||yyyy-MM-dd HH:mm:ss||epoch_millis"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/api_collection_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/api_collection_index_mapping.json
new file mode 100644
index 000000000000..e125214ddc98
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/api_collection_index_mapping.json
@@ -0,0 +1,720 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "version": {
+ "type": "float"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "apiEndpoints": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "text"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/api_endpoint_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/api_endpoint_index_mapping.json
new file mode 100644
index 000000000000..1b81b53e5165
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/api_endpoint_index_mapping.json
@@ -0,0 +1,934 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "apiCollection": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "requestSchema": {
+ "properties": {
+ "schemaFields": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "index_options": "docs",
+ "analyzer": "om_analyzer_jp"
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "children": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "responseSchema": {
+ "properties": {
+ "schemaFields": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "index_options": "docs",
+ "analyzer": "om_analyzer_jp"
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "children": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "requestFieldNames": {
+ "type": "keyword"
+ },
+ "responseFieldNames": {
+ "type": "keyword"
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/api_service_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/api_service_index_mapping.json
new file mode 100644
index 000000000000..ae015a6cfbf5
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/api_service_index_mapping.json
@@ -0,0 +1,441 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp"
+ },
+ "pipelines": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/chart_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/chart_index_mapping.json
new file mode 100644
index 000000000000..8d30a8b09c3c
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/chart_index_mapping.json
@@ -0,0 +1,726 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "chartType": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "keyword"
+ },
+ "href": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "dashboards": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "text"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "term_vector": "with_positions_offsets"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/classification_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/classification_index_mapping.json
new file mode 100644
index 000000000000..5146766f152d
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/classification_index_mapping.json
@@ -0,0 +1,299 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "similarity": "boolean"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "reviewers": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "disabled": {
+ "type": "text"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/column_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/column_index_mapping.json
new file mode 100644
index 000000000000..a9e41ccf43b7
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/column_index_mapping.json
@@ -0,0 +1,625 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "dataType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "dataTypeDisplay": {
+ "type": "text"
+ },
+ "constraint": {
+ "type": "keyword"
+ },
+ "ordinalPosition": {
+ "type": "integer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "table": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "database": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "databaseSchema": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "text"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text",
+ "similarity": "boolean"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "version": {
+ "type": "float"
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/container_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/container_index_mapping.json
new file mode 100644
index 000000000000..abddb5364546
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/container_index_mapping.json
@@ -0,0 +1,874 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "similarity": "boolean"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "keyword"
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "parent": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "text"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "dataModel": {
+ "properties": {
+ "isPartitioned": {
+ "type": "boolean"
+ },
+ "columns": {
+ "properties": {
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "dataTypeDisplay": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp"
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "ordinalPosition": {
+ "type": "integer"
+ }
+ }
+ }
+ }
+ },
+ "children": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "prefix": {
+ "type": "text"
+ },
+ "numberOfObjects": {
+ "type": "double"
+ },
+ "size": {
+ "type": "integer"
+ },
+ "fileFormats": {
+ "type": "keyword"
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "usageSummary": {
+ "properties": {
+ "dailyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "weeklyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "monthlyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "date": {
+ "type": "date",
+ "format": "strict_date_optional_time||yyyy-MM-dd HH:mm:ss||epoch_millis"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "columnNames": {
+ "type": "keyword"
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/dashboard_data_model_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/dashboard_data_model_index_mapping.json
new file mode 100644
index 000000000000..4298af04f18a
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/dashboard_data_model_index_mapping.json
@@ -0,0 +1,759 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "similarity": "boolean"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "keyword"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "dataModelType": {
+ "type": "keyword"
+ },
+ "columns": {
+ "properties": {
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "dataTypeDisplay": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "index_options": "docs",
+ "analyzer": "om_analyzer_jp",
+ "norms": false
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "ordinalPosition": {
+ "type": "integer"
+ }
+ }
+ },
+ "columnNames": {
+ "type": "keyword"
+ },
+ "project": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/dashboard_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/dashboard_index_mapping.json
new file mode 100644
index 000000000000..c6bbeefe036c
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/dashboard_index_mapping.json
@@ -0,0 +1,821 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "similarity": "boolean"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "keyword"
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "charts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "text"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "project": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "dataModels": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "text"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "usageSummary": {
+ "properties": {
+ "dailyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "weeklyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "monthlyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "date": {
+ "type": "date",
+ "format": "strict_date_optional_time||yyyy-MM-dd HH:mm:ss||epoch_millis"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/dashboard_service_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/dashboard_service_index_mapping.json
new file mode 100644
index 000000000000..e5eb26c5fdd9
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/dashboard_service_index_mapping.json
@@ -0,0 +1,439 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "pipelines": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/data_products_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/data_products_index_mapping.json
new file mode 100644
index 000000000000..39b9818ce14b
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/data_products_index_mapping.json
@@ -0,0 +1,646 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "similarity": "boolean"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "reviewers": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "assets": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "inputPorts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "outputPorts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/database_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/database_index_mapping.json
new file mode 100644
index 000000000000..4e8543cfc103
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/database_index_mapping.json
@@ -0,0 +1,709 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "similarity": "boolean"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "version": {
+ "type": "float"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "location": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "usageSummary": {
+ "properties": {
+ "dailyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "weeklyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "monthlyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "date": {
+ "type": "date",
+ "format": "strict_date_optional_time||yyyy-MM-dd HH:mm:ss||epoch_millis"
+ }
+ }
+ },
+ "databaseSchemas": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "text"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/database_schema_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/database_schema_index_mapping.json
new file mode 100644
index 000000000000..cbf44c10cd80
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/database_schema_index_mapping.json
@@ -0,0 +1,673 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "similarity": "boolean"
+ },
+ "version": {
+ "type": "float"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "database": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "usageSummary": {
+ "properties": {
+ "dailyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "weeklyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "monthlyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "date": {
+ "type": "date",
+ "format": "strict_date_optional_time||yyyy-MM-dd HH:mm:ss||epoch_millis"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "sourceUrl": {
+ "type": "text"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/database_service_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/database_service_index_mapping.json
new file mode 100644
index 000000000000..6630bfec621d
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/database_service_index_mapping.json
@@ -0,0 +1,444 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp"
+ },
+ "pipelines": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "href": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/directory_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/directory_index_mapping.json
new file mode 100644
index 000000000000..9a377c7b800a
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/directory_index_mapping.json
@@ -0,0 +1,770 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "directoryType": {
+ "type": "keyword"
+ },
+ "path": {
+ "type": "keyword"
+ },
+ "isShared": {
+ "type": "boolean"
+ },
+ "parent": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "usageSummary": {
+ "properties": {
+ "dailyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "weeklyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "monthlyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "date": {
+ "type": "date",
+ "format": "strict_date_optional_time||yyyy-MM-dd HH:mm:ss||epoch_millis"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "updatedBy": {
+ "type": "keyword"
+ },
+ "updatedAt": {
+ "type": "date"
+ }
+ }
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/domain_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/domain_index_mapping.json
new file mode 100644
index 000000000000..08e6f9b4b3ea
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/domain_index_mapping.json
@@ -0,0 +1,402 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 10,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "domainType": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "similarity": "boolean"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "experts": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/drive_service_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/drive_service_index_mapping.json
new file mode 100644
index 000000000000..b469241dab49
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/drive_service_index_mapping.json
@@ -0,0 +1,432 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp"
+ },
+ "pipelines": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/file_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/file_index_mapping.json
new file mode 100644
index 000000000000..e3d1746cd9ca
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/file_index_mapping.json
@@ -0,0 +1,785 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "fileType": {
+ "type": "keyword"
+ },
+ "mimeType": {
+ "type": "keyword"
+ },
+ "fileExtension": {
+ "type": "keyword"
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "path": {
+ "type": "keyword"
+ },
+ "size": {
+ "type": "long"
+ },
+ "checksum": {
+ "type": "keyword"
+ },
+ "isShared": {
+ "type": "boolean"
+ },
+ "directory": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "usageSummary": {
+ "properties": {
+ "dailyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "weeklyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "monthlyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "date": {
+ "type": "date",
+ "format": "strict_date_optional_time||yyyy-MM-dd HH:mm:ss||epoch_millis"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "updatedBy": {
+ "type": "keyword"
+ },
+ "updatedAt": {
+ "type": "date"
+ }
+ }
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/glossary_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/glossary_index_mapping.json
new file mode 100644
index 000000000000..b9687fb48ef8
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/glossary_index_mapping.json
@@ -0,0 +1,419 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "similarity": "boolean"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "reviewers": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "usageCount": {
+ "type": "integer"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "termCount": {
+ "type": "integer"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/glossary_term_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/glossary_term_index_mapping.json
new file mode 100644
index 000000000000..5e52a1f95c08
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/glossary_term_index_mapping.json
@@ -0,0 +1,573 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "similarity": "boolean"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "synonyms": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "glossary": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "similarity": "boolean"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ },
+ "mutuallyExclusive": {
+ "type": "boolean"
+ }
+ }
+ },
+ "children": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "relatedTerms": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "reviewers": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "usageCount": {
+ "type": "integer"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "childrenCount": {
+ "type": "integer"
+ },
+ "mutuallyExclusive": {
+ "type": "boolean"
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/ingestion_pipeline_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/ingestion_pipeline_index_mapping.json
new file mode 100644
index 000000000000..6e8b2131e907
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/ingestion_pipeline_index_mapping.json
@@ -0,0 +1,438 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "deployed": {
+ "type": "text"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "pipelineType": {
+ "type": "keyword"
+ },
+ "pipelineStatuses": {
+ "properties": {
+ "pipelineState": {
+ "type": "keyword"
+ },
+ "runId": {
+ "type": "keyword"
+ },
+ "timestamp": {
+ "type": "long"
+ },
+ "startDate": {
+ "type": "long"
+ },
+ "endDate": {
+ "type": "long"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "applicationType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "airflowConfig": {
+ "properties": {
+ "scheduleInterval": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ }
+ }
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/llm_model_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/llm_model_index_mapping.json
new file mode 100644
index 000000000000..e9dff9b2b828
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/llm_model_index_mapping.json
@@ -0,0 +1,717 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "text"
+ },
+ "upstreamLineage": {
+ "type": "object"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "mlFeatures": {
+ "properties": {
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "term_vector": "with_positions_offsets"
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "featureSources": {
+ "properties": {
+ "name": {
+ "type": "text"
+ },
+ "dataType": {
+ "type": "text"
+ }
+ }
+ }
+ }
+ },
+ "mlHyperParameters": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "value": {
+ "type": "text"
+ }
+ }
+ },
+ "target": {
+ "type": "text"
+ },
+ "dashboard": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "mlStore": {
+ "properties": {
+ "storage": {
+ "type": "text"
+ },
+ "imageRepository": {
+ "type": "text"
+ }
+ }
+ },
+ "server": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "usageSummary": {
+ "properties": {
+ "dailyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "weeklyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "monthlyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "date": {
+ "type": "date",
+ "format": "strict_date_optional_time||yyyy-MM-dd HH:mm:ss||epoch_millis"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/llm_service_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/llm_service_index_mapping.json
new file mode 100644
index 000000000000..e93cad614125
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/llm_service_index_mapping.json
@@ -0,0 +1,548 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "index_options": "docs",
+ "term_vector": "with_positions_offsets"
+ },
+ "pipelines": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "href": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/mcp_execution_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/mcp_execution_index_mapping.json
new file mode 100644
index 000000000000..4a2e1a225524
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/mcp_execution_index_mapping.json
@@ -0,0 +1,376 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "id": {
+ "type": "keyword"
+ },
+ "timestamp": {
+ "type": "date"
+ },
+ "@timestamp": {
+ "type": "date"
+ },
+ "endTimestamp": {
+ "type": "date"
+ },
+ "durationMs": {
+ "type": "float"
+ },
+ "status": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "executedBy": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "sessionId": {
+ "type": "keyword"
+ },
+ "serverId": {
+ "type": "keyword"
+ },
+ "server": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "serverType": {
+ "type": "keyword"
+ },
+ "transportType": {
+ "type": "keyword"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword"
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tags": {
+ "type": "nested",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ }
+ }
+ },
+ "domain": {
+ "properties": {
+ "id": {
+ "type": "keyword"
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ }
+ }
+ },
+ "applicationContext": {
+ "properties": {
+ "id": {
+ "type": "keyword"
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "keyword"
+ }
+ }
+ },
+ "toolCalls": {
+ "type": "nested",
+ "properties": {
+ "toolName": {
+ "type": "keyword"
+ },
+ "success": {
+ "type": "boolean"
+ },
+ "latencyMs": {
+ "type": "float"
+ },
+ "timestamp": {
+ "type": "date"
+ },
+ "errorMessage": {
+ "type": "text"
+ }
+ }
+ },
+ "resourceAccesses": {
+ "type": "nested",
+ "properties": {
+ "resourceUri": {
+ "type": "keyword"
+ },
+ "accessType": {
+ "type": "keyword"
+ },
+ "success": {
+ "type": "boolean"
+ },
+ "timestamp": {
+ "type": "date"
+ }
+ }
+ },
+ "promptUses": {
+ "type": "nested",
+ "properties": {
+ "promptName": {
+ "type": "keyword"
+ },
+ "timestamp": {
+ "type": "date"
+ },
+ "tokensGenerated": {
+ "type": "integer"
+ }
+ }
+ },
+ "dataAccessed": {
+ "type": "nested",
+ "properties": {
+ "accessType": {
+ "type": "keyword"
+ },
+ "recordCount": {
+ "type": "integer"
+ },
+ "piiAccessed": {
+ "type": "boolean"
+ },
+ "sensitivityLevel": {
+ "type": "keyword"
+ },
+ "timestamp": {
+ "type": "date"
+ }
+ }
+ },
+ "complianceChecks": {
+ "type": "nested",
+ "properties": {
+ "checkName": {
+ "type": "keyword"
+ },
+ "passed": {
+ "type": "boolean"
+ },
+ "severity": {
+ "type": "keyword"
+ },
+ "timestamp": {
+ "type": "date"
+ }
+ }
+ },
+ "metrics": {
+ "properties": {
+ "totalToolCalls": {
+ "type": "integer"
+ },
+ "successfulToolCalls": {
+ "type": "integer"
+ },
+ "totalResourceAccesses": {
+ "type": "integer"
+ },
+ "totalPromptUses": {
+ "type": "integer"
+ },
+ "piiDataAccessed": {
+ "type": "boolean"
+ },
+ "highSensitivityDataAccessed": {
+ "type": "boolean"
+ },
+ "highRiskOperations": {
+ "type": "integer"
+ },
+ "complianceViolations": {
+ "type": "integer"
+ }
+ }
+ },
+ "errorMessage": {
+ "type": "text"
+ },
+ "environment": {
+ "type": "keyword"
+ },
+ "serverVersion": {
+ "type": "keyword"
+ },
+ "protocolVersion": {
+ "type": "keyword"
+ },
+ "deleted": {
+ "type": "boolean"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/mcp_server_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/mcp_server_index_mapping.json
new file mode 100644
index 000000000000..08f6ceda1796
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/mcp_server_index_mapping.json
@@ -0,0 +1,639 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "serverType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "transportType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "protocolVersion": {
+ "type": "keyword"
+ },
+ "developmentStage": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "serverInfo": {
+ "type": "object",
+ "properties": {
+ "serverName": {
+ "type": "text"
+ },
+ "serverVersion": {
+ "type": "keyword"
+ },
+ "vendor": {
+ "type": "text"
+ }
+ }
+ },
+ "capabilities": {
+ "type": "object",
+ "properties": {
+ "toolsSupported": {
+ "type": "boolean"
+ },
+ "resourcesSupported": {
+ "type": "boolean"
+ },
+ "promptsSupported": {
+ "type": "boolean"
+ },
+ "loggingSupported": {
+ "type": "boolean"
+ },
+ "samplingSupported": {
+ "type": "boolean"
+ }
+ }
+ },
+ "tools": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "toolCategory": {
+ "type": "keyword"
+ },
+ "riskLevel": {
+ "type": "keyword"
+ }
+ }
+ },
+ "resources": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "resourceType": {
+ "type": "keyword"
+ },
+ "uri": {
+ "type": "keyword"
+ }
+ }
+ },
+ "prompts": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "promptType": {
+ "type": "keyword"
+ }
+ }
+ },
+ "governanceMetadata": {
+ "type": "object",
+ "properties": {
+ "registrationStatus": {
+ "type": "keyword"
+ },
+ "riskAssessment": {
+ "type": "object",
+ "properties": {
+ "riskLevel": {
+ "type": "keyword"
+ }
+ }
+ },
+ "dataClassification": {
+ "type": "object",
+ "properties": {
+ "accessesPII": {
+ "type": "boolean"
+ },
+ "accessesSensitiveData": {
+ "type": "boolean"
+ }
+ }
+ }
+ }
+ },
+ "dataAccessSummary": {
+ "type": "object",
+ "properties": {
+ "sensitivityLevel": {
+ "type": "keyword"
+ },
+ "piiAccess": {
+ "type": "boolean"
+ },
+ "externalApiAccess": {
+ "type": "boolean"
+ },
+ "fileSystemAccess": {
+ "type": "boolean"
+ },
+ "networkAccess": {
+ "type": "boolean"
+ },
+ "databaseAccess": {
+ "type": "boolean"
+ }
+ }
+ },
+ "usageMetrics": {
+ "type": "object",
+ "properties": {
+ "totalInvocations": {
+ "type": "long"
+ },
+ "successRate": {
+ "type": "float"
+ },
+ "averageLatencyMs": {
+ "type": "float"
+ },
+ "uniqueUsers": {
+ "type": "integer"
+ }
+ }
+ },
+ "securityMetrics": {
+ "type": "object",
+ "properties": {
+ "authenticationRequired": {
+ "type": "boolean"
+ },
+ "authorizationEnforced": {
+ "type": "boolean"
+ },
+ "auditLoggingEnabled": {
+ "type": "boolean"
+ },
+ "encryptionInTransit": {
+ "type": "boolean"
+ },
+ "sandboxed": {
+ "type": "boolean"
+ }
+ }
+ },
+ "sourceCode": {
+ "type": "text"
+ },
+ "deploymentUrl": {
+ "type": "text"
+ },
+ "documentation": {
+ "type": "text"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object"
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lifeCycle": {
+ "type": "object"
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/mcp_service_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/mcp_service_index_mapping.json
new file mode 100644
index 000000000000..69dc9d2b60a7
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/mcp_service_index_mapping.json
@@ -0,0 +1,519 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "id": {
+ "type": "text"
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "index_options": "docs",
+ "term_vector": "with_positions_offsets"
+ },
+ "pipelines": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "href": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object"
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/messaging_service_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/messaging_service_index_mapping.json
new file mode 100644
index 000000000000..7c2ee7bd0c9c
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/messaging_service_index_mapping.json
@@ -0,0 +1,440 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp"
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "pipelines": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "href": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/metadata_service_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/metadata_service_index_mapping.json
new file mode 100644
index 000000000000..7a612ff31b91
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/metadata_service_index_mapping.json
@@ -0,0 +1,354 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp"
+ },
+ "pipelines": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ },
+ "provider": {
+ "type": "text"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/metric_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/metric_index_mapping.json
new file mode 100644
index 000000000000..082fa1201e6e
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/metric_index_mapping.json
@@ -0,0 +1,697 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "index_options": "docs"
+ },
+ "expression": {
+ "properties": {
+ "language": {
+ "type": "text"
+ },
+ "code": {
+ "type": "text"
+ }
+ }
+ },
+ "metricType": {
+ "type": "keyword"
+ },
+ "unitOfMeasurement": {
+ "type": "keyword"
+ },
+ "granularity": {
+ "type": "keyword"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "reviewers": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "relatedMetrics": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "usageCount": {
+ "type": "integer"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/mlmodel_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/mlmodel_index_mapping.json
new file mode 100644
index 000000000000..b98478bf0eea
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/mlmodel_index_mapping.json
@@ -0,0 +1,823 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "text"
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "mlFeatures": {
+ "properties": {
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp"
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "featureSources": {
+ "properties": {
+ "name": {
+ "type": "text"
+ },
+ "dataType": {
+ "type": "text"
+ }
+ }
+ }
+ }
+ },
+ "mlHyperParameters": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp"
+ },
+ "value": {
+ "type": "text"
+ }
+ }
+ },
+ "target": {
+ "type": "text"
+ },
+ "dashboard": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "mlStore": {
+ "properties": {
+ "storage": {
+ "type": "text"
+ },
+ "imageRepository": {
+ "type": "text"
+ }
+ }
+ },
+ "server": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "usageSummary": {
+ "properties": {
+ "dailyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "weeklyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "monthlyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "date": {
+ "type": "date",
+ "format": "strict_date_optional_time||yyyy-MM-dd HH:mm:ss||epoch_millis"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/mlmodel_service_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/mlmodel_service_index_mapping.json
new file mode 100644
index 000000000000..ffea41953286
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/mlmodel_service_index_mapping.json
@@ -0,0 +1,441 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "pipelines": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "href": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/pipeline_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/pipeline_index_mapping.json
new file mode 100644
index 000000000000..ac62855eb46b
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/pipeline_index_mapping.json
@@ -0,0 +1,711 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp"
+ },
+ "version": {
+ "type": "float"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "text"
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "tasks": {
+ "properties": {
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp"
+ },
+ "sourceUrl": {
+ "type": "text"
+ },
+ "taskType": {
+ "type": "text"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/pipeline_service_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/pipeline_service_index_mapping.json
new file mode 100644
index 000000000000..98dd8de4aa57
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/pipeline_service_index_mapping.json
@@ -0,0 +1,439 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp"
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "pipelines": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "href": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/pipeline_status_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/pipeline_status_index_mapping.json
new file mode 100644
index 000000000000..f59d8f2ec546
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/pipeline_status_index_mapping.json
@@ -0,0 +1,112 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17,
+ "number_of_shards": 1,
+ "number_of_replicas": 1
+ },
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "pipelineId": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "pipelineFqn": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "pipelineName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "serviceName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "executionStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "timestamp": {
+ "type": "date",
+ "format": "epoch_millis"
+ },
+ "endTime": {
+ "type": "date",
+ "format": "epoch_millis"
+ },
+ "startTime": {
+ "type": "date",
+ "format": "epoch_millis"
+ },
+ "lastRunTime": {
+ "type": "date",
+ "format": "epoch_millis"
+ },
+ "runtime": {
+ "type": "long"
+ },
+ "scheduleInterval": {
+ "type": "keyword"
+ },
+ "tableId": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "tableFqn": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "entityType": {
+ "type": "keyword"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/prompt_template_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/prompt_template_index_mapping.json
new file mode 100644
index 000000000000..e9dff9b2b828
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/prompt_template_index_mapping.json
@@ -0,0 +1,717 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "text"
+ },
+ "upstreamLineage": {
+ "type": "object"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "mlFeatures": {
+ "properties": {
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "term_vector": "with_positions_offsets"
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "featureSources": {
+ "properties": {
+ "name": {
+ "type": "text"
+ },
+ "dataType": {
+ "type": "text"
+ }
+ }
+ }
+ }
+ },
+ "mlHyperParameters": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "value": {
+ "type": "text"
+ }
+ }
+ },
+ "target": {
+ "type": "text"
+ },
+ "dashboard": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "mlStore": {
+ "properties": {
+ "storage": {
+ "type": "text"
+ },
+ "imageRepository": {
+ "type": "text"
+ }
+ }
+ },
+ "server": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "usageSummary": {
+ "properties": {
+ "dailyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "weeklyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "monthlyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "date": {
+ "type": "date",
+ "format": "strict_date_optional_time||yyyy-MM-dd HH:mm:ss||epoch_millis"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/query_cost_record_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/query_cost_record_index_mapping.json
new file mode 100644
index 000000000000..227a5dda0b47
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/query_cost_record_index_mapping.json
@@ -0,0 +1,517 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "query": {
+ "properties": {
+ "id": {
+ "type": "keyword"
+ },
+ "checksum": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "processedLineage": {
+ "type": "boolean"
+ },
+ "name": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "index_options": "docs",
+ "term_vector": "with_positions_offsets"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "duration": {
+ "type": "long"
+ },
+ "users": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "query": {
+ "type": "text",
+ "index": false
+ },
+ "queryDate": {
+ "type": "long"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "queryUsedIn": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "description": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "labelType": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "source": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "state": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "cost": {
+ "type": "float"
+ },
+ "timestamp": {
+ "type": "date"
+ },
+ "@timestamp": {
+ "type": "date"
+ },
+ "count": {
+ "type": "long"
+ },
+ "totalDuration": {
+ "type": "long"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/query_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/query_index_mapping.json
new file mode 100644
index 000000000000..eeb749d8b169
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/query_index_mapping.json
@@ -0,0 +1,514 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "duration": {
+ "type": "long"
+ },
+ "users": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "votes": {
+ "properties": {
+ "upVotes": {
+ "type": "long"
+ },
+ "downVotes": {
+ "type": "long"
+ },
+ "upVoters": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "downVoters": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ }
+ }
+ },
+ "query": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp"
+ },
+ "queryDate": {
+ "type": "long"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "queryUsedIn": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tier": {
+ "properties": {
+ "description": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "labelType": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "source": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "state": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/search_entity_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/search_entity_index_mapping.json
new file mode 100644
index 000000000000..6ac15cffbb89
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/search_entity_index_mapping.json
@@ -0,0 +1,796 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fields": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "dataTypeDisplay": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "index_options": "docs",
+ "analyzer": "om_analyzer_jp",
+ "norms": false
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "children": {
+ "properties": {
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "dataTypeDisplay": {
+ "type": "text"
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "href": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "indexType": {
+ "type": "text"
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/search_service_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/search_service_index_mapping.json
new file mode 100644
index 000000000000..ae015a6cfbf5
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/search_service_index_mapping.json
@@ -0,0 +1,441 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp"
+ },
+ "pipelines": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/security_service_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/security_service_index_mapping.json
new file mode 100644
index 000000000000..7097ca5cffe9
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/security_service_index_mapping.json
@@ -0,0 +1,609 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp"
+ },
+ "pipelines": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp"
+ }
+ }
+ },
+ "followers": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp"
+ }
+ }
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp"
+ }
+ }
+ },
+ "followers": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "suggest": {
+ "type": "completion",
+ "contexts": [
+ {
+ "name": "deleted",
+ "type": "category"
+ }
+ ]
+ },
+ "domain": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp"
+ }
+ }
+ },
+ "connection": {
+ "properties": {
+ "config": {
+ "properties": {
+ "type": {
+ "type": "keyword"
+ },
+ "hostPort": {
+ "type": "keyword"
+ }
+ }
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "changeDescription": {
+ "properties": {
+ "fieldsAdded": {
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "newValue": {
+ "type": "text"
+ }
+ }
+ },
+ "fieldsUpdated": {
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "newValue": {
+ "type": "text"
+ },
+ "oldValue": {
+ "type": "text"
+ }
+ }
+ },
+ "fieldsDeleted": {
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "oldValue": {
+ "type": "text"
+ }
+ }
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "href": {
+ "type": "text"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/spreadsheet_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/spreadsheet_index_mapping.json
new file mode 100644
index 000000000000..da38cc093cde
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/spreadsheet_index_mapping.json
@@ -0,0 +1,770 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "mimeType": {
+ "type": "keyword"
+ },
+ "path": {
+ "type": "keyword"
+ },
+ "size": {
+ "type": "long"
+ },
+ "directory": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "usageSummary": {
+ "properties": {
+ "dailyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "weeklyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "monthlyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "date": {
+ "type": "date",
+ "format": "strict_date_optional_time||yyyy-MM-dd HH:mm:ss||epoch_millis"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "updatedBy": {
+ "type": "keyword"
+ },
+ "updatedAt": {
+ "type": "date"
+ }
+ }
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/storage_service_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/storage_service_index_mapping.json
new file mode 100644
index 000000000000..665799638f0d
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/storage_service_index_mapping.json
@@ -0,0 +1,436 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp"
+ },
+ "pipelines": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/stored_procedure_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/stored_procedure_index_mapping.json
new file mode 100644
index 000000000000..731bbed20021
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/stored_procedure_index_mapping.json
@@ -0,0 +1,903 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp"
+ },
+ "storedProcedureCode": {
+ "properties": {
+ "language": {
+ "type": "text"
+ },
+ "code": {
+ "type": "text"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "databaseSchema": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "database": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "processedLineage": {
+ "type": "boolean"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "votes": {
+ "properties": {
+ "upVotes": {
+ "type": "long"
+ },
+ "downVotes": {
+ "type": "long"
+ },
+ "upVoters": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "downVoters": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ }
+ }
+ },
+ "code": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "sourceUrl": {
+ "type": "keyword"
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/table_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/table_index_mapping.json
new file mode 100644
index 000000000000..705fba021c3d
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/table_index_mapping.json
@@ -0,0 +1,1052 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "schemaDefinition": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "keyword"
+ },
+ "tableType": {
+ "type": "keyword"
+ },
+ "columns": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "dataTypeDisplay": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp"
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "ordinalPosition": {
+ "type": "integer"
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ }
+ }
+ },
+ "columnNames": {
+ "type": "keyword"
+ },
+ "databaseSchema": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "text"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "database": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "upstreamEntityRelationship": {
+ "properties": {
+ "entity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "relatedEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "entityRelationship": {
+ "properties": {
+ "entity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "relatedEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "location": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "locationPath": {
+ "type": "keyword"
+ },
+ "usageSummary": {
+ "properties": {
+ "dailyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "weeklyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "monthlyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "date": {
+ "type": "date",
+ "format": "strict_date_optional_time||yyyy-MM-dd HH:mm:ss||epoch_millis"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "processedLineage": {
+ "type": "boolean"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "columnDescriptionStatus": {
+ "type": "keyword"
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/tag_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/tag_index_mapping.json
new file mode 100644
index 000000000000..e9d180584a2e
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/tag_index_mapping.json
@@ -0,0 +1,356 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "text"
+ },
+ "disabled": {
+ "type": "boolean"
+ },
+ "classification": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "reviewers": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long"
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/team_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/team_index_mapping.json
new file mode 100644
index 000000000000..38ddf70819f3
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/team_index_mapping.json
@@ -0,0 +1,356 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "teamType": {
+ "type": "text"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "users": {
+ "enabled": false
+ },
+ "userCount": {
+ "type": "long"
+ },
+ "parents": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "defaultRoles": {
+ "enabled": false
+ },
+ "isJoinable": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "isBot": {
+ "type": "boolean"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/test_case_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/test_case_index_mapping.json
new file mode 100644
index 000000000000..13fdc4ad0a34
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/test_case_index_mapping.json
@@ -0,0 +1,879 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "originEntityFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp"
+ },
+ "entityLink": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "nonNormalized": {
+ "type": "keyword"
+ }
+ }
+ },
+ "testPlatforms": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "parameterValues": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "value": {
+ "type": "text"
+ }
+ }
+ },
+ "testDefinition": {
+ "properties": {
+ "id": {
+ "type": "text"
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp"
+ },
+ "type": {
+ "type": "keyword"
+ }
+ }
+ },
+ "testCaseType": {
+ "type": "keyword"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "dataQualityDimension": {
+ "type": "keyword"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text",
+ "index_options": "docs"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ },
+ "type": "nested"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "testSuite": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ },
+ "executable": {
+ "type": "text"
+ }
+ }
+ },
+ "testSuites": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ },
+ "executable": {
+ "type": "text"
+ }
+ }
+ },
+ "testCaseResult": {
+ "properties": {
+ "result": {
+ "type": "text"
+ },
+ "testCaseStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "testResultValue": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "value": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ }
+ }
+ },
+ "timestamp": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "createdBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "table": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "database": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "databaseSchema": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "reviewers": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/test_case_resolution_status_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/test_case_resolution_status_index_mapping.json
new file mode 100644
index 000000000000..4a4e0f000291
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/test_case_resolution_status_index_mapping.json
@@ -0,0 +1,836 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "stateId": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "timestamp": {
+ "type": "date"
+ },
+ "@timestamp": {
+ "type": "date"
+ },
+ "testCaseResolutionStatusType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 8
+ }
+ }
+ },
+ "testCaseResolutionStatusDetails": {
+ "type": "object",
+ "dynamic": true,
+ "properties": {
+ "assignee": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "resolved": {
+ "properties": {
+ "testCaseFailureReason": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 15
+ }
+ }
+ },
+ "testCaseFailureComment": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "resolvedBy": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "metrics": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "value": {
+ "type": "float"
+ }
+ }
+ },
+ "updatedBy": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ },
+ "term_vector": "with_positions_offsets"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "updatedAt": {
+ "type": "date"
+ },
+ "testCaseReference": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "table": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "database": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "databaseSchema": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "testSuite": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "testCase": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityFQN": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ },
+ "tags": {
+ "type": "nested",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text",
+ "index_options": "docs"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/test_case_result_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/test_case_result_index_mapping.json
new file mode 100644
index 000000000000..80f9b7eb2d0d
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/test_case_result_index_mapping.json
@@ -0,0 +1,483 @@
+{
+ "settings": {
+ "index": {
+ "priority": 500,
+ "max_ngram_diff": 7
+ },
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 10,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "result": {
+ "type": "text"
+ },
+ "testCaseStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "timestamp": {
+ "type": "date"
+ },
+ "@timestamp": {
+ "type": "date"
+ },
+ "testResultValue": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ }
+ },
+ "value": {
+ "type": "text"
+ },
+ "predictedValue": {
+ "type": "text"
+ }
+ },
+ "testCase": {
+ "id": {
+ "type": "text"
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp"
+ },
+ "testPlatforms": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityLink": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "nonNormalized": {
+ "type": "keyword"
+ }
+ }
+ },
+ "parameterValues": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "value": {
+ "type": "text"
+ }
+ }
+ },
+ "testCaseType": {
+ "type": "keyword"
+ },
+ "entityType": {
+ "type": "keyword"
+ },
+ "dataQualityDimension": {
+ "type": "keyword"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "tags": {
+ "type": "nested",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text",
+ "index_options": "docs"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ }
+ },
+ "testDefinition": {
+ "properties": {
+ "id": {
+ "type": "text"
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "type": {
+ "type": "keyword"
+ }
+ }
+ },
+ "testSuite": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ },
+ "executable": {
+ "type": "text"
+ }
+ }
+ },
+ "testSuites": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ },
+ "executable": {
+ "type": "text"
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/test_suite_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/test_suite_index_mapping.json
new file mode 100644
index 000000000000..260b00a787b5
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/test_suite_index_mapping.json
@@ -0,0 +1,531 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "lastResultTimestamp": {
+ "type": "long"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ },
+ "executable": {
+ "type": "boolean"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "table": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "database": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "databaseSchema": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/topic_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/topic_index_mapping.json
new file mode 100644
index 000000000000..3ea0e1b164d6
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/topic_index_mapping.json
@@ -0,0 +1,806 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "keyword"
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "messageSchema": {
+ "properties": {
+ "schemaType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "schemaText": {
+ "type": "text"
+ },
+ "schemaFields": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "index_options": "docs",
+ "analyzer": "om_analyzer_jp",
+ "norms": false
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "children": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "fieldNames": {
+ "type": "keyword"
+ },
+ "cleanupPolicies": {
+ "type": "keyword"
+ },
+ "replicationFactor": {
+ "type": "integer"
+ },
+ "maximumMessageSize": {
+ "type": "long"
+ },
+ "retentionSize": {
+ "type": "long"
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/user_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/user_index_mapping.json
new file mode 100644
index 000000000000..855c6ce25436
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/user_index_mapping.json
@@ -0,0 +1,350 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "email": {
+ "type": "text"
+ },
+ "isAdmin": {
+ "type": "text"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "teams": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "roles": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "inheritedRoles": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/worksheet_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/worksheet_index_mapping.json
new file mode 100644
index 000000000000..996c4f730ecd
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/jp/worksheet_index_mapping.json
@@ -0,0 +1,843 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_analyzer_jp": {
+ "tokenizer": "kuromoji_tokenizer",
+ "type": "custom",
+ "filter": [
+ "kuromoji_baseform",
+ "kuromoji_part_of_speech",
+ "kuromoji_number",
+ "kuromoji_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "worksheetId": {
+ "type": "keyword"
+ },
+ "index": {
+ "type": "integer"
+ },
+ "rowCount": {
+ "type": "long"
+ },
+ "columnCount": {
+ "type": "long"
+ },
+ "isHidden": {
+ "type": "boolean"
+ },
+ "columns": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "dataTypeDisplay": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer_jp"
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "ordinalPosition": {
+ "type": "integer"
+ }
+ }
+ },
+ "columnNames": {
+ "type": "keyword"
+ },
+ "spreadsheet": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "usageSummary": {
+ "properties": {
+ "dailyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "weeklyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "monthlyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "date": {
+ "type": "date",
+ "format": "strict_date_optional_time||yyyy-MM-dd HH:mm:ss||epoch_millis"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "columnDescriptionStatus": {
+ "type": "keyword"
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "updatedBy": {
+ "type": "keyword"
+ },
+ "updatedAt": {
+ "type": "date"
+ }
+ }
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/raw_cost_analysis_report_data_index.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/raw_cost_analysis_report_data_index.json
new file mode 100644
index 000000000000..224fba82f4cf
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/raw_cost_analysis_report_data_index.json
@@ -0,0 +1,241 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "id": {
+ "type": "keyword"
+ },
+ "data": {
+ "properties": {
+ "entity": {
+ "properties": {
+ "id": {
+ "type": "keyword"
+ },
+ "href": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "text"
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "description": {
+ "type": "text"
+ },
+ "displayName": {
+ "type": "text"
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ }
+ }
+ },
+ "lifeCycle": {
+ "properties": {
+ "created": {
+ "properties": {
+ "timestamp": {
+ "type": "date"
+ },
+ "accessedBy": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "accessedByAProcess": {
+ "type": "keyword"
+ }
+ }
+ },
+ "updated": {
+ "properties": {
+ "timestamp": {
+ "type": "date"
+ },
+ "accessedBy": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "accessedByAProcess": {
+ "type": "keyword"
+ }
+ }
+ },
+ "accessed": {
+ "properties": {
+ "timestamp": {
+ "type": "date"
+ },
+ "accessedBy": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "accessedByAProcess": {
+ "type": "keyword"
+ }
+ }
+ }
+ }
+ },
+ "sizeInByte": {
+ "type": "double"
+ }
+ }
+ },
+ "timestamp": {
+ "type": "date"
+ },
+ "reportDataType": {
+ "type": "keyword"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/ai_agent_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/ai_agent_index_mapping.json
new file mode 100644
index 000000000000..19703c425022
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/ai_agent_index_mapping.json
@@ -0,0 +1,723 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "text"
+ },
+ "upstreamLineage": {
+ "type": "object"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "mlFeatures": {
+ "properties": {
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "term_vector": "with_positions_offsets"
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "featureSources": {
+ "properties": {
+ "name": {
+ "type": "text"
+ },
+ "dataType": {
+ "type": "text"
+ }
+ }
+ }
+ }
+ },
+ "mlHyperParameters": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "value": {
+ "type": "text"
+ }
+ }
+ },
+ "target": {
+ "type": "text"
+ },
+ "dashboard": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "mlStore": {
+ "properties": {
+ "storage": {
+ "type": "text"
+ },
+ "imageRepository": {
+ "type": "text"
+ }
+ }
+ },
+ "server": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "usageSummary": {
+ "properties": {
+ "dailyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "weeklyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "monthlyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "date": {
+ "type": "date",
+ "format": "strict_date_optional_time||yyyy-MM-dd HH:mm:ss||epoch_millis"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/ai_governance_policy_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/ai_governance_policy_index_mapping.json
new file mode 100644
index 000000000000..a0501dede4d4
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/ai_governance_policy_index_mapping.json
@@ -0,0 +1,731 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "text"
+ },
+ "upstreamLineage": {
+ "type": "object"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "mlFeatures": {
+ "properties": {
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "term_vector": "with_positions_offsets"
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "featureSources": {
+ "properties": {
+ "name": {
+ "type": "text"
+ },
+ "dataType": {
+ "type": "text"
+ }
+ }
+ }
+ }
+ },
+ "mlHyperParameters": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "value": {
+ "type": "text"
+ }
+ }
+ },
+ "target": {
+ "type": "text"
+ },
+ "dashboard": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "mlStore": {
+ "properties": {
+ "storage": {
+ "type": "text"
+ },
+ "imageRepository": {
+ "type": "text"
+ }
+ }
+ },
+ "server": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "usageSummary": {
+ "properties": {
+ "dailyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "weeklyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "monthlyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "date": {
+ "type": "date",
+ "format": "strict_date_optional_time||yyyy-MM-dd HH:mm:ss||epoch_millis"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/api_collection_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/api_collection_index_mapping.json
new file mode 100644
index 000000000000..3a6b4292272e
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/api_collection_index_mapping.json
@@ -0,0 +1,764 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "text"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "apiEndpoints": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "text"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/api_endpoint_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/api_endpoint_index_mapping.json
new file mode 100644
index 000000000000..57c5b1d1031f
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/api_endpoint_index_mapping.json
@@ -0,0 +1,988 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "apiCollection": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "requestSchema": {
+ "properties": {
+ "schemaFields": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "similarity": "boolean",
+ "analyzer": "om_analyzer",
+ "term_vector": "with_positions_offsets"
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "children": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "responseSchema": {
+ "properties": {
+ "schemaFields": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "similarity": "boolean",
+ "analyzer": "om_analyzer",
+ "term_vector": "with_positions_offsets"
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "children": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "name": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "requestFieldNames": {
+ "type": "keyword"
+ },
+ "responseFieldNames": {
+ "type": "keyword"
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/api_service_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/api_service_index_mapping.json
new file mode 100644
index 000000000000..3be0ac43516c
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/api_service_index_mapping.json
@@ -0,0 +1,463 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "index_options": "docs",
+ "term_vector": "with_positions_offsets"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "pipelines": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/chart_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/chart_index_mapping.json
new file mode 100644
index 000000000000..c753bae4eabd
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/chart_index_mapping.json
@@ -0,0 +1,715 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "chartType": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "keyword"
+ },
+ "href": {
+ "type": "text"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "dashboards": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "text"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "term_vector": "with_positions_offsets"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/classification_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/classification_index_mapping.json
new file mode 100644
index 000000000000..17b74cbd0e3f
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/classification_index_mapping.json
@@ -0,0 +1,373 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "reviewers": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text",
+ "similarity": "boolean",
+ "analyzer": "om_analyzer",
+ "term_vector": "with_positions_offsets"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "text"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "disabled": {
+ "type": "text"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/column_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/column_index_mapping.json
new file mode 100644
index 000000000000..0230c20515a1
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/column_index_mapping.json
@@ -0,0 +1,639 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 7
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 10,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "dataType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "dataTypeDisplay": {
+ "type": "text"
+ },
+ "constraint": {
+ "type": "keyword"
+ },
+ "ordinalPosition": {
+ "type": "integer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "table": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "database": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "databaseSchema": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "text"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text",
+ "similarity": "boolean"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "version": {
+ "type": "float"
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/container_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/container_index_mapping.json
new file mode 100644
index 000000000000..22a1d78cbbda
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/container_index_mapping.json
@@ -0,0 +1,925 @@
+{
+ "settings": {
+ "analysis": {
+ "tokenizer": {
+ "edge_ngram_tokenizer": {
+ "type": "edge_ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "edge_ngram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ },
+ "index": {}
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "keyword"
+ },
+ "fullPath": {
+ "type": "keyword"
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "parent": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "text"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "dataModel": {
+ "properties": {
+ "isPartitioned": {
+ "type": "boolean"
+ },
+ "columns": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "dataTypeDisplay": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "ordinalPosition": {
+ "type": "integer"
+ }
+ }
+ }
+ }
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "children": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "prefix": {
+ "type": "text"
+ },
+ "numberOfObjects": {
+ "type": "double"
+ },
+ "size": {
+ "type": "long"
+ },
+ "fileFormats": {
+ "type": "keyword"
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "usageSummary": {
+ "properties": {
+ "dailyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "weeklyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "monthlyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "date": {
+ "type": "date",
+ "format": "strict_date_optional_time||yyyy-MM-dd HH:mm:ss||epoch_millis"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "columnNames": {
+ "type": "keyword"
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/dashboard_data_model_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/dashboard_data_model_index_mapping.json
new file mode 100644
index 000000000000..f303c44687c0
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/dashboard_data_model_index_mapping.json
@@ -0,0 +1,778 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "version": {
+ "type": "float"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "keyword"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "dataModelType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "columns": {
+ "properties": {
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "dataTypeDisplay": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "term_vector": "with_positions_offsets"
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "ordinalPosition": {
+ "type": "integer"
+ }
+ }
+ },
+ "columnNames": {
+ "type": "keyword"
+ },
+ "project": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/dashboard_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/dashboard_index_mapping.json
new file mode 100644
index 000000000000..a98e727084e8
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/dashboard_index_mapping.json
@@ -0,0 +1,856 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "keyword"
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "charts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "text"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "term_vector": "with_positions_offsets"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "dataModels": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "text"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "term_vector": "with_positions_offsets"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "project": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "usageSummary": {
+ "properties": {
+ "dailyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "weeklyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "monthlyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "date": {
+ "type": "date",
+ "format": "strict_date_optional_time||yyyy-MM-dd HH:mm:ss||epoch_millis"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/dashboard_service_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/dashboard_service_index_mapping.json
new file mode 100644
index 000000000000..eb32ecf5f194
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/dashboard_service_index_mapping.json
@@ -0,0 +1,462 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text",
+ "index_options": "docs"
+ },
+ "pipelines": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "index_options": "docs",
+ "term_vector": "with_positions_offsets"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/data_products_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/data_products_index_mapping.json
new file mode 100644
index 000000000000..33a36fccd183
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/data_products_index_mapping.json
@@ -0,0 +1,655 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "reviewers": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "assets": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "inputPorts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "outputPorts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/database_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/database_index_mapping.json
new file mode 100644
index 000000000000..28ddf6277ff6
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/database_index_mapping.json
@@ -0,0 +1,735 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "text"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "location": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "usageSummary": {
+ "properties": {
+ "dailyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "weeklyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "monthlyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "date": {
+ "type": "date",
+ "format": "strict_date_optional_time||yyyy-MM-dd HH:mm:ss||epoch_millis"
+ }
+ }
+ },
+ "databaseSchemas": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "text"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/database_schema_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/database_schema_index_mapping.json
new file mode 100644
index 000000000000..1c6dc4fd99dd
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/database_schema_index_mapping.json
@@ -0,0 +1,699 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "version": {
+ "type": "float"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "database": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "usageSummary": {
+ "properties": {
+ "dailyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "weeklyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "monthlyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "date": {
+ "type": "date",
+ "format": "strict_date_optional_time||yyyy-MM-dd HH:mm:ss||epoch_millis"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "sourceUrl": {
+ "type": "text"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/database_service_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/database_service_index_mapping.json
new file mode 100644
index 000000000000..5b8b45a1de75
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/database_service_index_mapping.json
@@ -0,0 +1,466 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "index_options": "docs",
+ "term_vector": "with_positions_offsets"
+ },
+ "pipelines": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "href": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/directory_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/directory_index_mapping.json
new file mode 100644
index 000000000000..be12a419f4e1
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/directory_index_mapping.json
@@ -0,0 +1,671 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "serviceType": {
+ "type": "keyword"
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword"
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "parent": {
+ "properties": {
+ "id": {
+ "type": "keyword"
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "directoryType": {
+ "type": "keyword"
+ },
+ "path": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "driveId": {
+ "type": "keyword"
+ },
+ "isShared": {
+ "type": "boolean"
+ },
+ "numberOfFiles": {
+ "type": "long"
+ },
+ "numberOfSubDirectories": {
+ "type": "long"
+ },
+ "totalSize": {
+ "type": "long"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword"
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword"
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "totalVotes": {
+ "type": "long"
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "updatedBy": {
+ "type": "keyword"
+ },
+ "updatedAt": {
+ "type": "date"
+ }
+ }
+ },
+ "suggest": {
+ "type": "completion",
+ "contexts": [
+ {
+ "name": "deleted",
+ "type": "category",
+ "path": "deleted"
+ }
+ ]
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/domain_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/domain_index_mapping.json
new file mode 100644
index 000000000000..8eeb4352d71b
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/domain_index_mapping.json
@@ -0,0 +1,482 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "domainType": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "experts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/drive_service_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/drive_service_index_mapping.json
new file mode 100644
index 000000000000..64b9603d1cd9
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/drive_service_index_mapping.json
@@ -0,0 +1,333 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "serviceType": {
+ "type": "keyword"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword"
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword"
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "totalVotes": {
+ "type": "long"
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "suggest": {
+ "type": "completion",
+ "contexts": [
+ {
+ "name": "deleted",
+ "type": "category",
+ "path": "deleted"
+ }
+ ]
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/file_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/file_index_mapping.json
new file mode 100644
index 000000000000..7ba08002a671
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/file_index_mapping.json
@@ -0,0 +1,726 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "serviceType": {
+ "type": "keyword"
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword"
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "directory": {
+ "properties": {
+ "id": {
+ "type": "keyword"
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "fileType": {
+ "type": "keyword"
+ },
+ "mimeType": {
+ "type": "keyword"
+ },
+ "fileExtension": {
+ "type": "keyword"
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "path": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "driveFileId": {
+ "type": "keyword"
+ },
+ "size": {
+ "type": "long"
+ },
+ "checksum": {
+ "type": "keyword"
+ },
+ "isShared": {
+ "type": "boolean"
+ },
+ "fileVersion": {
+ "type": "keyword"
+ },
+ "createdTime": {
+ "type": "date"
+ },
+ "modifiedTime": {
+ "type": "date"
+ },
+ "lastModifiedBy": {
+ "properties": {
+ "id": {
+ "type": "keyword"
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword"
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword"
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "totalVotes": {
+ "type": "long"
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "updatedBy": {
+ "type": "keyword"
+ },
+ "updatedAt": {
+ "type": "date"
+ }
+ }
+ },
+ "suggest": {
+ "type": "completion",
+ "contexts": [
+ {
+ "name": "deleted",
+ "type": "category",
+ "path": "deleted"
+ }
+ ]
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/glossary_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/glossary_index_mapping.json
new file mode 100644
index 000000000000..08931778c2ae
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/glossary_index_mapping.json
@@ -0,0 +1,441 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "index_options": "docs",
+ "term_vector": "with_positions_offsets"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "reviewers": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "usageCount": {
+ "type": "integer"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "termCount": {
+ "type": "integer"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/glossary_term_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/glossary_term_index_mapping.json
new file mode 100644
index 000000000000..6779763ead55
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/glossary_term_index_mapping.json
@@ -0,0 +1,594 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "index_options": "docs",
+ "term_vector": "with_positions_offsets"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "synonyms": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "glossary": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ },
+ "mutuallyExclusive": {
+ "type": "boolean"
+ }
+ }
+ },
+ "children": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "relatedTerms": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "reviewers": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "usageCount": {
+ "type": "integer"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "childrenCount": {
+ "type": "integer"
+ },
+ "mutuallyExclusive": {
+ "type": "boolean"
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/ingestion_pipeline_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/ingestion_pipeline_index_mapping.json
new file mode 100644
index 000000000000..38a8601421fe
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/ingestion_pipeline_index_mapping.json
@@ -0,0 +1,479 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "deployed": {
+ "type": "text"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "pipelineType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "pipelineStatuses": {
+ "properties": {
+ "pipelineState": {
+ "type": "keyword"
+ },
+ "runId": {
+ "type": "keyword"
+ },
+ "timestamp": {
+ "type": "long"
+ },
+ "startDate": {
+ "type": "long"
+ },
+ "endDate": {
+ "type": "long"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "applicationType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "airflowConfig": {
+ "properties": {
+ "scheduleInterval": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ }
+ }
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/llm_model_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/llm_model_index_mapping.json
new file mode 100644
index 000000000000..a0501dede4d4
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/llm_model_index_mapping.json
@@ -0,0 +1,731 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "text"
+ },
+ "upstreamLineage": {
+ "type": "object"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "mlFeatures": {
+ "properties": {
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "term_vector": "with_positions_offsets"
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "featureSources": {
+ "properties": {
+ "name": {
+ "type": "text"
+ },
+ "dataType": {
+ "type": "text"
+ }
+ }
+ }
+ }
+ },
+ "mlHyperParameters": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "value": {
+ "type": "text"
+ }
+ }
+ },
+ "target": {
+ "type": "text"
+ },
+ "dashboard": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "mlStore": {
+ "properties": {
+ "storage": {
+ "type": "text"
+ },
+ "imageRepository": {
+ "type": "text"
+ }
+ }
+ },
+ "server": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "usageSummary": {
+ "properties": {
+ "dailyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "weeklyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "monthlyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "date": {
+ "type": "date",
+ "format": "strict_date_optional_time||yyyy-MM-dd HH:mm:ss||epoch_millis"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/llm_service_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/llm_service_index_mapping.json
new file mode 100644
index 000000000000..dfef19dcad45
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/llm_service_index_mapping.json
@@ -0,0 +1,562 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "index_options": "docs",
+ "term_vector": "with_positions_offsets"
+ },
+ "pipelines": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "href": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/mcp_execution_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/mcp_execution_index_mapping.json
new file mode 100644
index 000000000000..20e43a6e7e0e
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/mcp_execution_index_mapping.json
@@ -0,0 +1,390 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "id": {
+ "type": "keyword"
+ },
+ "timestamp": {
+ "type": "date"
+ },
+ "@timestamp": {
+ "type": "date"
+ },
+ "endTimestamp": {
+ "type": "date"
+ },
+ "durationMs": {
+ "type": "float"
+ },
+ "status": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "executedBy": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "sessionId": {
+ "type": "keyword"
+ },
+ "serverId": {
+ "type": "keyword"
+ },
+ "server": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "serverType": {
+ "type": "keyword"
+ },
+ "transportType": {
+ "type": "keyword"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword"
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tags": {
+ "type": "nested",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ }
+ }
+ },
+ "domain": {
+ "properties": {
+ "id": {
+ "type": "keyword"
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ }
+ }
+ },
+ "applicationContext": {
+ "properties": {
+ "id": {
+ "type": "keyword"
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "keyword"
+ }
+ }
+ },
+ "toolCalls": {
+ "type": "nested",
+ "properties": {
+ "toolName": {
+ "type": "keyword"
+ },
+ "success": {
+ "type": "boolean"
+ },
+ "latencyMs": {
+ "type": "float"
+ },
+ "timestamp": {
+ "type": "date"
+ },
+ "errorMessage": {
+ "type": "text"
+ }
+ }
+ },
+ "resourceAccesses": {
+ "type": "nested",
+ "properties": {
+ "resourceUri": {
+ "type": "keyword"
+ },
+ "accessType": {
+ "type": "keyword"
+ },
+ "success": {
+ "type": "boolean"
+ },
+ "timestamp": {
+ "type": "date"
+ }
+ }
+ },
+ "promptUses": {
+ "type": "nested",
+ "properties": {
+ "promptName": {
+ "type": "keyword"
+ },
+ "timestamp": {
+ "type": "date"
+ },
+ "tokensGenerated": {
+ "type": "integer"
+ }
+ }
+ },
+ "dataAccessed": {
+ "type": "nested",
+ "properties": {
+ "accessType": {
+ "type": "keyword"
+ },
+ "recordCount": {
+ "type": "integer"
+ },
+ "piiAccessed": {
+ "type": "boolean"
+ },
+ "sensitivityLevel": {
+ "type": "keyword"
+ },
+ "timestamp": {
+ "type": "date"
+ }
+ }
+ },
+ "complianceChecks": {
+ "type": "nested",
+ "properties": {
+ "checkName": {
+ "type": "keyword"
+ },
+ "passed": {
+ "type": "boolean"
+ },
+ "severity": {
+ "type": "keyword"
+ },
+ "timestamp": {
+ "type": "date"
+ }
+ }
+ },
+ "metrics": {
+ "properties": {
+ "totalToolCalls": {
+ "type": "integer"
+ },
+ "successfulToolCalls": {
+ "type": "integer"
+ },
+ "totalResourceAccesses": {
+ "type": "integer"
+ },
+ "totalPromptUses": {
+ "type": "integer"
+ },
+ "piiDataAccessed": {
+ "type": "boolean"
+ },
+ "highSensitivityDataAccessed": {
+ "type": "boolean"
+ },
+ "highRiskOperations": {
+ "type": "integer"
+ },
+ "complianceViolations": {
+ "type": "integer"
+ }
+ }
+ },
+ "errorMessage": {
+ "type": "text"
+ },
+ "environment": {
+ "type": "keyword"
+ },
+ "serverVersion": {
+ "type": "keyword"
+ },
+ "protocolVersion": {
+ "type": "keyword"
+ },
+ "deleted": {
+ "type": "boolean"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/mcp_server_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/mcp_server_index_mapping.json
new file mode 100644
index 000000000000..dcf14d99fc00
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/mcp_server_index_mapping.json
@@ -0,0 +1,653 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "serverType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "transportType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "protocolVersion": {
+ "type": "keyword"
+ },
+ "developmentStage": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "serverInfo": {
+ "type": "object",
+ "properties": {
+ "serverName": {
+ "type": "text"
+ },
+ "serverVersion": {
+ "type": "keyword"
+ },
+ "vendor": {
+ "type": "text"
+ }
+ }
+ },
+ "capabilities": {
+ "type": "object",
+ "properties": {
+ "toolsSupported": {
+ "type": "boolean"
+ },
+ "resourcesSupported": {
+ "type": "boolean"
+ },
+ "promptsSupported": {
+ "type": "boolean"
+ },
+ "loggingSupported": {
+ "type": "boolean"
+ },
+ "samplingSupported": {
+ "type": "boolean"
+ }
+ }
+ },
+ "tools": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "toolCategory": {
+ "type": "keyword"
+ },
+ "riskLevel": {
+ "type": "keyword"
+ }
+ }
+ },
+ "resources": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "resourceType": {
+ "type": "keyword"
+ },
+ "uri": {
+ "type": "keyword"
+ }
+ }
+ },
+ "prompts": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "promptType": {
+ "type": "keyword"
+ }
+ }
+ },
+ "governanceMetadata": {
+ "type": "object",
+ "properties": {
+ "registrationStatus": {
+ "type": "keyword"
+ },
+ "riskAssessment": {
+ "type": "object",
+ "properties": {
+ "riskLevel": {
+ "type": "keyword"
+ }
+ }
+ },
+ "dataClassification": {
+ "type": "object",
+ "properties": {
+ "accessesPII": {
+ "type": "boolean"
+ },
+ "accessesSensitiveData": {
+ "type": "boolean"
+ }
+ }
+ }
+ }
+ },
+ "dataAccessSummary": {
+ "type": "object",
+ "properties": {
+ "sensitivityLevel": {
+ "type": "keyword"
+ },
+ "piiAccess": {
+ "type": "boolean"
+ },
+ "externalApiAccess": {
+ "type": "boolean"
+ },
+ "fileSystemAccess": {
+ "type": "boolean"
+ },
+ "networkAccess": {
+ "type": "boolean"
+ },
+ "databaseAccess": {
+ "type": "boolean"
+ }
+ }
+ },
+ "usageMetrics": {
+ "type": "object",
+ "properties": {
+ "totalInvocations": {
+ "type": "long"
+ },
+ "successRate": {
+ "type": "float"
+ },
+ "averageLatencyMs": {
+ "type": "float"
+ },
+ "uniqueUsers": {
+ "type": "integer"
+ }
+ }
+ },
+ "securityMetrics": {
+ "type": "object",
+ "properties": {
+ "authenticationRequired": {
+ "type": "boolean"
+ },
+ "authorizationEnforced": {
+ "type": "boolean"
+ },
+ "auditLoggingEnabled": {
+ "type": "boolean"
+ },
+ "encryptionInTransit": {
+ "type": "boolean"
+ },
+ "sandboxed": {
+ "type": "boolean"
+ }
+ }
+ },
+ "sourceCode": {
+ "type": "text"
+ },
+ "deploymentUrl": {
+ "type": "text"
+ },
+ "documentation": {
+ "type": "text"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object"
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lifeCycle": {
+ "type": "object"
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/mcp_service_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/mcp_service_index_mapping.json
new file mode 100644
index 000000000000..3e27f5cdab5a
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/mcp_service_index_mapping.json
@@ -0,0 +1,533 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "id": {
+ "type": "text"
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "index_options": "docs",
+ "term_vector": "with_positions_offsets"
+ },
+ "pipelines": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "href": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object"
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/messaging_service_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/messaging_service_index_mapping.json
new file mode 100644
index 000000000000..4d4360bbd43f
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/messaging_service_index_mapping.json
@@ -0,0 +1,462 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "index_options": "docs",
+ "term_vector": "with_positions_offsets"
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "pipelines": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "href": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/metadata_service_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/metadata_service_index_mapping.json
new file mode 100644
index 000000000000..39d7417e8fe7
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/metadata_service_index_mapping.json
@@ -0,0 +1,417 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "index_options": "docs",
+ "term_vector": "with_positions_offsets"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "pipelines": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ },
+ "provider": {
+ "type": "text"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/metric_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/metric_index_mapping.json
new file mode 100644
index 000000000000..d255839eb1e8
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/metric_index_mapping.json
@@ -0,0 +1,683 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "expression": {
+ "properties": {
+ "language": {
+ "type": "text"
+ },
+ "code": {
+ "type": "text"
+ }
+ }
+ },
+ "metricType": {
+ "type": "keyword"
+ },
+ "unitOfMeasurement": {
+ "type": "keyword"
+ },
+ "granularity": {
+ "type": "keyword"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "reviewers": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "relatedMetrics": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "usageCount": {
+ "type": "integer"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/mlmodel_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/mlmodel_index_mapping.json
new file mode 100644
index 000000000000..1e0a0a13f43e
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/mlmodel_index_mapping.json
@@ -0,0 +1,864 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "text"
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "mlFeatures": {
+ "properties": {
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "term_vector": "with_positions_offsets"
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "featureSources": {
+ "properties": {
+ "name": {
+ "type": "text"
+ },
+ "dataType": {
+ "type": "text"
+ }
+ }
+ }
+ }
+ },
+ "mlHyperParameters": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "value": {
+ "type": "text"
+ }
+ }
+ },
+ "target": {
+ "type": "text"
+ },
+ "dashboard": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "mlStore": {
+ "properties": {
+ "storage": {
+ "type": "text"
+ },
+ "imageRepository": {
+ "type": "text"
+ }
+ }
+ },
+ "server": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "usageSummary": {
+ "properties": {
+ "dailyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "weeklyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "monthlyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "date": {
+ "type": "date",
+ "format": "strict_date_optional_time||yyyy-MM-dd HH:mm:ss||epoch_millis"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/mlmodel_service_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/mlmodel_service_index_mapping.json
new file mode 100644
index 000000000000..bc3d4d53811e
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/mlmodel_service_index_mapping.json
@@ -0,0 +1,463 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "index_options": "docs",
+ "term_vector": "with_positions_offsets"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "pipelines": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "href": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/pipeline_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/pipeline_index_mapping.json
new file mode 100644
index 000000000000..3fbe642d2e72
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/pipeline_index_mapping.json
@@ -0,0 +1,771 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "version": {
+ "type": "float"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "sourceUrl": {
+ "type": "text"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "startDate": {
+ "type": "text"
+ },
+ "tasks": {
+ "properties": {
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "term_vector": "with_positions_offsets"
+ },
+ "sourceUrl": {
+ "type": "text"
+ },
+ "taskType": {
+ "type": "text"
+ },
+ "startDate": {
+ "type": "text"
+ },
+ "endDate": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/pipeline_service_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/pipeline_service_index_mapping.json
new file mode 100644
index 000000000000..c7a604d4575c
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/pipeline_service_index_mapping.json
@@ -0,0 +1,461 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "index_options": "docs",
+ "term_vector": "with_positions_offsets"
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "pipelines": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "href": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/pipeline_status_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/pipeline_status_index_mapping.json
new file mode 100644
index 000000000000..f59d8f2ec546
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/pipeline_status_index_mapping.json
@@ -0,0 +1,112 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17,
+ "number_of_shards": 1,
+ "number_of_replicas": 1
+ },
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "pipelineId": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "pipelineFqn": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "pipelineName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "serviceName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "executionStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "timestamp": {
+ "type": "date",
+ "format": "epoch_millis"
+ },
+ "endTime": {
+ "type": "date",
+ "format": "epoch_millis"
+ },
+ "startTime": {
+ "type": "date",
+ "format": "epoch_millis"
+ },
+ "lastRunTime": {
+ "type": "date",
+ "format": "epoch_millis"
+ },
+ "runtime": {
+ "type": "long"
+ },
+ "scheduleInterval": {
+ "type": "keyword"
+ },
+ "tableId": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "tableFqn": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "entityType": {
+ "type": "keyword"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/prompt_template_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/prompt_template_index_mapping.json
new file mode 100644
index 000000000000..a0501dede4d4
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/prompt_template_index_mapping.json
@@ -0,0 +1,731 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "text"
+ },
+ "upstreamLineage": {
+ "type": "object"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "mlFeatures": {
+ "properties": {
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "term_vector": "with_positions_offsets"
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "featureSources": {
+ "properties": {
+ "name": {
+ "type": "text"
+ },
+ "dataType": {
+ "type": "text"
+ }
+ }
+ }
+ }
+ },
+ "mlHyperParameters": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "value": {
+ "type": "text"
+ }
+ }
+ },
+ "target": {
+ "type": "text"
+ },
+ "dashboard": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "mlStore": {
+ "properties": {
+ "storage": {
+ "type": "text"
+ },
+ "imageRepository": {
+ "type": "text"
+ }
+ }
+ },
+ "server": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "usageSummary": {
+ "properties": {
+ "dailyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "weeklyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "monthlyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "date": {
+ "type": "date",
+ "format": "strict_date_optional_time||yyyy-MM-dd HH:mm:ss||epoch_millis"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/query_cost_record_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/query_cost_record_index_mapping.json
new file mode 100644
index 000000000000..aa13df7a27f7
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/query_cost_record_index_mapping.json
@@ -0,0 +1,559 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "query": {
+ "properties": {
+ "id": {
+ "type": "keyword"
+ },
+ "checksum": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "processedLineage": {
+ "type": "boolean"
+ },
+ "name": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "index_options": "docs",
+ "term_vector": "with_positions_offsets"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "duration": {
+ "type": "long"
+ },
+ "users": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "query": {
+ "type": "text",
+ "index": false
+ },
+ "queryDate": {
+ "type": "long"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "queryUsedIn": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "description": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "labelType": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "source": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "state": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "cost": {
+ "type": "float"
+ },
+ "timestamp": {
+ "type": "date"
+ },
+ "@timestamp": {
+ "type": "date"
+ },
+ "totalDuration": {
+ "type": "long"
+ },
+ "count": {
+ "type": "long"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/query_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/query_index_mapping.json
new file mode 100644
index 000000000000..c75138e68728
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/query_index_mapping.json
@@ -0,0 +1,536 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "keyword"
+ },
+ "checksum": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "processedLineage": {
+ "type": "boolean"
+ },
+ "name": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "index_options": "docs",
+ "term_vector": "with_positions_offsets"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "duration": {
+ "type": "long"
+ },
+ "users": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "query": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "queryDate": {
+ "type": "long"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "queryUsedIn": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "description": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "labelType": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "source": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "state": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/search_entity_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/search_entity_index_mapping.json
new file mode 100644
index 000000000000..42be6ab4ebff
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/search_entity_index_mapping.json
@@ -0,0 +1,826 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "edge_ngram_tokenizer": {
+ "type": "edge_ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "edge_ngram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fields": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "dataTypeDisplay": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "index_options": "docs",
+ "analyzer": "om_analyzer",
+ "term_vector": "with_positions_offsets"
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "children": {
+ "properties": {
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "dataTypeDisplay": {
+ "type": "text"
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "href": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "indexType": {
+ "type": "text"
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/search_service_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/search_service_index_mapping.json
new file mode 100644
index 000000000000..3be0ac43516c
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/search_service_index_mapping.json
@@ -0,0 +1,463 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "index_options": "docs",
+ "term_vector": "with_positions_offsets"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "pipelines": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/security_service_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/security_service_index_mapping.json
new file mode 100644
index 000000000000..a06988289c3f
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/security_service_index_mapping.json
@@ -0,0 +1,592 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "index_options": "docs",
+ "term_vector": "with_positions_offsets"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "href": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "connection": {
+ "properties": {
+ "config": {
+ "properties": {
+ "type": {
+ "type": "keyword"
+ },
+ "hostPort": {
+ "type": "text"
+ },
+ "authType": {
+ "type": "object"
+ },
+ "verifySSL": {
+ "type": "keyword"
+ },
+ "sslConfig": {
+ "type": "object"
+ },
+ "connectionOptions": {
+ "type": "object"
+ },
+ "connectionArguments": {
+ "type": "object"
+ }
+ }
+ }
+ }
+ },
+ "pipelines": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "testConnectionResult": {
+ "properties": {
+ "lastUpdatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "status": {
+ "type": "keyword"
+ },
+ "steps": {
+ "properties": {
+ "name": {
+ "type": "text"
+ },
+ "mandatory": {
+ "type": "boolean"
+ },
+ "description": {
+ "type": "text"
+ },
+ "passed": {
+ "type": "boolean"
+ },
+ "message": {
+ "type": "text"
+ },
+ "errorLog": {
+ "type": "text"
+ }
+ }
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "ingestionRunner": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "changeDescription": {
+ "type": "object"
+ },
+ "incrementalChangeDescription": {
+ "type": "object"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "suggest": {
+ "type": "completion",
+ "contexts": {
+ "name": "deleted",
+ "type": "category"
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/spreadsheet_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/spreadsheet_index_mapping.json
new file mode 100644
index 000000000000..307909569845
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/spreadsheet_index_mapping.json
@@ -0,0 +1,725 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "serviceType": {
+ "type": "keyword"
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword"
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "directory": {
+ "properties": {
+ "id": {
+ "type": "keyword"
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "mimeType": {
+ "type": "keyword"
+ },
+ "path": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "driveFileId": {
+ "type": "keyword"
+ },
+ "size": {
+ "type": "long"
+ },
+ "fileVersion": {
+ "type": "keyword"
+ },
+ "createdTime": {
+ "type": "date"
+ },
+ "modifiedTime": {
+ "type": "date"
+ },
+ "lastModifiedBy": {
+ "properties": {
+ "id": {
+ "type": "keyword"
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "worksheetNames": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "worksheetNamesFuzzy": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword"
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword"
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "totalVotes": {
+ "type": "long"
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "updatedBy": {
+ "type": "keyword"
+ },
+ "updatedAt": {
+ "type": "date"
+ }
+ }
+ },
+ "suggest": {
+ "type": "completion",
+ "contexts": [
+ {
+ "name": "deleted",
+ "type": "category",
+ "path": "deleted"
+ }
+ ]
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/storage_service_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/storage_service_index_mapping.json
new file mode 100644
index 000000000000..51fcea9302a0
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/storage_service_index_mapping.json
@@ -0,0 +1,458 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "index_options": "docs",
+ "term_vector": "with_positions_offsets"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "pipelines": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/stored_procedure_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/stored_procedure_index_mapping.json
new file mode 100644
index 000000000000..37b25ea16527
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/stored_procedure_index_mapping.json
@@ -0,0 +1,844 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "storedProcedureCode": {
+ "properties": {
+ "language": {
+ "type": "text"
+ },
+ "code": {
+ "type": "text"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "databaseSchema": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "database": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "processedLineage": {
+ "type": "boolean"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "code": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "sourceUrl": {
+ "type": "keyword"
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/table_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/table_index_mapping.json
new file mode 100644
index 000000000000..a4da935bad97
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/table_index_mapping.json
@@ -0,0 +1,1058 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "schemaDefinition": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "keyword"
+ },
+ "tableType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "columns": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "dataTypeDisplay": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text",
+ "similarity": "boolean"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "ordinalPosition": {
+ "type": "integer"
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ }
+ }
+ },
+ "columnNames": {
+ "type": "keyword"
+ },
+ "databaseSchema": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "text"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "database": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "location": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "locationPath": {
+ "type": "keyword"
+ },
+ "usageSummary": {
+ "properties": {
+ "dailyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "weeklyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "monthlyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "date": {
+ "type": "date",
+ "format": "strict_date_optional_time||yyyy-MM-dd HH:mm:ss||epoch_millis"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "processedLineage": {
+ "type": "boolean"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "entityRelationship": {
+ "properties": {
+ "entity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "relatedEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "columnDescriptionStatus": {
+ "type": "keyword"
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "changeSummary": {
+ "type": "object",
+ "dynamic": false
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/tag_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/tag_index_mapping.json
new file mode 100644
index 000000000000..877ee0777cb2
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/tag_index_mapping.json
@@ -0,0 +1,420 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "disabled": {
+ "type": "boolean"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "reviewers": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "classification": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/team_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/team_index_mapping.json
new file mode 100644
index 000000000000..20c790a58228
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/team_index_mapping.json
@@ -0,0 +1,383 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "index_options": "docs",
+ "term_vector": "with_positions_offsets"
+ },
+ "teamType": {
+ "type": "text"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "email": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "users": {
+ "enabled": false
+ },
+ "userCount": {
+ "type": "long"
+ },
+ "parents": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "defaultRoles": {
+ "enabled": false
+ },
+ "isJoinable": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "isBot": {
+ "type": "boolean"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/test_case_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/test_case_index_mapping.json
new file mode 100644
index 000000000000..79d7c3cbfa78
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/test_case_index_mapping.json
@@ -0,0 +1,881 @@
+{
+ "settings": {
+ "analysis": {
+ "tokenizer": {
+ "edge_ngram_tokenizer": {
+ "type": "edge_ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "edge_ngram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "term_vector": "with_positions_offsets"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "entityLink": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "nonNormalized": {
+ "type": "keyword"
+ }
+ }
+ },
+ "testPlatforms": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "parameterValues": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "value": {
+ "type": "text"
+ }
+ }
+ },
+ "testDefinition": {
+ "properties": {
+ "id": {
+ "type": "text"
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "type": {
+ "type": "keyword"
+ }
+ }
+ },
+ "testCaseType": {
+ "type": "keyword"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "dataQualityDimension": {
+ "type": "keyword"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "testSuite": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ },
+ "executable": {
+ "type": "text"
+ }
+ }
+ },
+ "testSuites": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ },
+ "executable": {
+ "type": "text"
+ }
+ }
+ },
+ "testCaseResult": {
+ "properties": {
+ "result": {
+ "type": "text"
+ },
+ "testCaseStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "testResultValue": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "value": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ }
+ }
+ },
+ "timestamp": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text",
+ "index_options": "docs"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ },
+ "type": "nested"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "createdBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "originEntityFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "table": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "database": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "databaseSchema": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "reviewers": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/test_case_resolution_status_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/test_case_resolution_status_index_mapping.json
new file mode 100644
index 000000000000..b3636861b800
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/test_case_resolution_status_index_mapping.json
@@ -0,0 +1,886 @@
+{
+ "settings": {
+ "analysis": {
+ "tokenizer": {
+ "edge_ngram_tokenizer": {
+ "type": "edge_ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "edge_ngram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "stateId": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "timestamp": {
+ "type": "date"
+ },
+ "@timestamp": {
+ "type": "date"
+ },
+ "testCaseResolutionStatusType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 8
+ }
+ }
+ },
+ "testCaseResolutionStatusDetails": {
+ "type": "object",
+ "dynamic": true,
+ "properties": {
+ "assignee": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "resolved": {
+ "properties": {
+ "testCaseFailureReason": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 15
+ }
+ }
+ },
+ "testCaseFailureComment": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "resolvedBy": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "metrics": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "value": {
+ "type": "float"
+ }
+ }
+ },
+ "updatedBy": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ },
+ "term_vector": "with_positions_offsets"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "updatedAt": {
+ "type": "date"
+ },
+ "testCaseReference": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ },
+ "term_vector": "with_positions_offsets"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "table": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "database": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "databaseSchema": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "testSuite": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "testCase": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityFQN": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ },
+ "tags": {
+ "type": "nested",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text",
+ "index_options": "docs"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/test_case_result_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/test_case_result_index_mapping.json
new file mode 100644
index 000000000000..227e716afa84
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/test_case_result_index_mapping.json
@@ -0,0 +1,528 @@
+{
+ "settings": {
+ "index": {
+ "priority": 500
+ },
+ "analysis": {
+ "tokenizer": {
+ "edge_ngram_tokenizer": {
+ "type": "edge_ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "edge_ngram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "result": {
+ "type": "text"
+ },
+ "testCaseStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "timestamp": {
+ "type": "date"
+ },
+ "@timestamp": {
+ "type": "date"
+ },
+ "testResultValue": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "value": {
+ "type": "text"
+ },
+ "predictedValue": {
+ "type": "text"
+ }
+ }
+ },
+ "testCase": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "term_vector": "with_positions_offsets"
+ },
+ "testPlatforms": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityLink": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "nonNormalized": {
+ "type": "keyword"
+ }
+ }
+ },
+ "parameterValues": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "value": {
+ "type": "text"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "tags": {
+ "type": "nested",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text",
+ "index_options": "docs"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ }
+ }
+ },
+ "testDefinition": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "entityType": {
+ "type": "keyword"
+ },
+ "dataQualityDimension": {
+ "type": "keyword"
+ }
+ }
+ },
+ "testSuite": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ },
+ "executable": {
+ "type": "text"
+ }
+ }
+ },
+ "testSuites": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ },
+ "executable": {
+ "type": "text"
+ }
+ }
+ },
+ "table": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ }
+ }
+ },
+ "databaseSchema": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "database": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/test_suite_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/test_suite_index_mapping.json
new file mode 100644
index 000000000000..2ac5a264ed1c
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/test_suite_index_mapping.json
@@ -0,0 +1,551 @@
+{
+ "settings": {
+ "analysis": {
+ "tokenizer": {
+ "edge_ngram_tokenizer": {
+ "type": "edge_ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "edge_ngram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "term_vector": "with_positions_offsets"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "lastResultTimestamp": {
+ "type": "long"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ },
+ "executable": {
+ "type": "boolean"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "table": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "database": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "databaseSchema": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/topic_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/topic_index_mapping.json
new file mode 100644
index 000000000000..f765d3ea65cf
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/topic_index_mapping.json
@@ -0,0 +1,851 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "edge_ngram_tokenizer": {
+ "type": "edge_ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "edge_ngram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "keyword"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "messageSchema": {
+ "properties": {
+ "schemaText": {
+ "type": "text"
+ },
+ "schemaType": {
+ "type": "text"
+ },
+ "schemaFields": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "children": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "fieldNames": {
+ "type": "keyword"
+ },
+ "cleanupPolicies": {
+ "type": "keyword"
+ },
+ "replicationFactor": {
+ "type": "integer"
+ },
+ "maximumMessageSize": {
+ "type": "long"
+ },
+ "retentionSize": {
+ "type": "long"
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/user_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/user_index_mapping.json
new file mode 100644
index 000000000000..dbcd828192e6
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/user_index_mapping.json
@@ -0,0 +1,381 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "email": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "isAdmin": {
+ "type": "boolean"
+ },
+ "isBot": {
+ "type": "boolean"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "teams": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "roles": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "inheritedRoles": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/worksheet_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/worksheet_index_mapping.json
new file mode 100644
index 000000000000..68bf9a877479
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/ru/worksheet_index_mapping.json
@@ -0,0 +1,785 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase",
+ "asciifolding"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "word_delimiter_filter",
+ "lowercase",
+ "asciifolding",
+ "russian_stop",
+ "russian_snowball",
+ "english_stop",
+ "om_kstem"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "compound_word_delimiter_graph",
+ "lowercase",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ },
+ "russian_stop": {
+ "type": "stop",
+ "stopwords": "_russian_"
+ },
+ "english_stop": {
+ "type": "stop",
+ "stopwords": "_english_"
+ },
+ "russian_snowball": {
+ "name": "russian",
+ "type": "stemmer"
+ },
+ "om_kstem": {
+ "type": "kstem"
+ },
+ "asciifolding": {
+ "type": "asciifolding"
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "serviceType": {
+ "type": "keyword"
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword"
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "spreadsheet": {
+ "properties": {
+ "id": {
+ "type": "keyword"
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "worksheetId": {
+ "type": "keyword"
+ },
+ "index": {
+ "type": "integer"
+ },
+ "rowCount": {
+ "type": "long"
+ },
+ "columnCount": {
+ "type": "long"
+ },
+ "isHidden": {
+ "type": "boolean"
+ },
+ "columnNames": {
+ "type": "keyword"
+ },
+ "columnNamesFuzzy": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "columnDescriptionStatus": {
+ "type": "keyword"
+ },
+ "columns": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "dataType": {
+ "type": "keyword"
+ },
+ "dataTypeDisplay": {
+ "type": "keyword"
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "ordinalPosition": {
+ "type": "integer"
+ },
+ "children": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "dataType": {
+ "type": "keyword"
+ },
+ "dataTypeDisplay": {
+ "type": "keyword"
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword"
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword"
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "totalVotes": {
+ "type": "long"
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "updatedBy": {
+ "type": "keyword"
+ },
+ "updatedAt": {
+ "type": "date"
+ }
+ }
+ },
+ "suggest": {
+ "type": "completion",
+ "contexts": [
+ {
+ "name": "deleted",
+ "type": "category",
+ "path": "deleted"
+ }
+ ]
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/web_analytic_entity_view_report_data_index.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/web_analytic_entity_view_report_data_index.json
new file mode 100644
index 000000000000..a18a92cc4b52
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/web_analytic_entity_view_report_data_index.json
@@ -0,0 +1,37 @@
+{
+ "mappings": {
+ "properties": {
+ "timestamp": {
+ "type": "date"
+ },
+ "reportDataType": {
+ "type": "keyword"
+ },
+ "data": {
+ "properties": {
+ "entityType": {
+ "type": "keyword"
+ },
+ "entityTier": {
+ "type": "keyword"
+ },
+ "entityFqn": {
+ "type": "keyword"
+ },
+ "entityHref": {
+ "type": "keyword"
+ },
+ "owner": {
+ "type": "keyword"
+ },
+ "ownerId": {
+ "type": "text"
+ },
+ "views": {
+ "type": "integer"
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/web_analytic_user_activity_report_data_index.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/web_analytic_user_activity_report_data_index.json
new file mode 100644
index 000000000000..9eb8024c6567
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/web_analytic_user_activity_report_data_index.json
@@ -0,0 +1,37 @@
+{
+ "mappings": {
+ "properties": {
+ "timestamp": {
+ "type": "date"
+ },
+ "reportDataType": {
+ "type": "keyword"
+ },
+ "data": {
+ "properties": {
+ "userName": {
+ "type": "keyword"
+ },
+ "userId": {
+ "type": "text"
+ },
+ "team": {
+ "type": "keyword"
+ },
+ "totalSessions": {
+ "type": "integer"
+ },
+ "totalSessionDuration": {
+ "type": "double"
+ },
+ "totalPageView": {
+ "type": "integer"
+ },
+ "lastSession": {
+ "type": "long"
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/ai_agent_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/ai_agent_index_mapping.json
new file mode 100644
index 000000000000..f9e78c0f364b
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/ai_agent_index_mapping.json
@@ -0,0 +1,699 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 2,
+ "max_gram": 3,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "text"
+ },
+ "upstreamLineage": {
+ "type": "object"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "mlFeatures": {
+ "properties": {
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "term_vector": "with_positions_offsets"
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "featureSources": {
+ "properties": {
+ "name": {
+ "type": "text"
+ },
+ "dataType": {
+ "type": "text"
+ }
+ }
+ }
+ }
+ },
+ "mlHyperParameters": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "value": {
+ "type": "text"
+ }
+ }
+ },
+ "target": {
+ "type": "text"
+ },
+ "dashboard": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "mlStore": {
+ "properties": {
+ "storage": {
+ "type": "text"
+ },
+ "imageRepository": {
+ "type": "text"
+ }
+ }
+ },
+ "server": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "usageSummary": {
+ "properties": {
+ "dailyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "weeklyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "monthlyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "date": {
+ "type": "date",
+ "format": "strict_date_optional_time||yyyy-MM-dd HH:mm:ss||epoch_millis"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/ai_governance_policy_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/ai_governance_policy_index_mapping.json
new file mode 100644
index 000000000000..bedc59536aba
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/ai_governance_policy_index_mapping.json
@@ -0,0 +1,707 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 2,
+ "max_gram": 3,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "text"
+ },
+ "upstreamLineage": {
+ "type": "object"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "mlFeatures": {
+ "properties": {
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "term_vector": "with_positions_offsets"
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "featureSources": {
+ "properties": {
+ "name": {
+ "type": "text"
+ },
+ "dataType": {
+ "type": "text"
+ }
+ }
+ }
+ }
+ },
+ "mlHyperParameters": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "value": {
+ "type": "text"
+ }
+ }
+ },
+ "target": {
+ "type": "text"
+ },
+ "dashboard": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "mlStore": {
+ "properties": {
+ "storage": {
+ "type": "text"
+ },
+ "imageRepository": {
+ "type": "text"
+ }
+ }
+ },
+ "server": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "usageSummary": {
+ "properties": {
+ "dailyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "weeklyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "monthlyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "date": {
+ "type": "date",
+ "format": "strict_date_optional_time||yyyy-MM-dd HH:mm:ss||epoch_millis"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/api_collection_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/api_collection_index_mapping.json
new file mode 100644
index 000000000000..e86da4b52861
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/api_collection_index_mapping.json
@@ -0,0 +1,720 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "text"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "apiEndpoints": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "text"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/api_endpoint_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/api_endpoint_index_mapping.json
new file mode 100644
index 000000000000..bf1f64a7634a
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/api_endpoint_index_mapping.json
@@ -0,0 +1,935 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 10,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 7
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "index_options": "freqs",
+ "term_vector": "with_positions_offsets"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "apiCollection": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "requestSchema": {
+ "properties": {
+ "schemaFields": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "index_options": "docs",
+ "analyzer": "om_analyzer",
+ "term_vector": "with_positions_offsets"
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "children": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "responseSchema": {
+ "properties": {
+ "schemaFields": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "index_options": "docs",
+ "analyzer": "om_analyzer",
+ "term_vector": "with_positions_offsets"
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "children": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "requestFieldNames": {
+ "type": "keyword"
+ },
+ "responseFieldNames": {
+ "type": "keyword"
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/api_service_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/api_service_index_mapping.json
new file mode 100644
index 000000000000..d78a79a5e9d8
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/api_service_index_mapping.json
@@ -0,0 +1,429 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "pipelines": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/chart_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/chart_index_mapping.json
new file mode 100644
index 000000000000..c250ee0c43d2
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/chart_index_mapping.json
@@ -0,0 +1,712 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 2,
+ "max_gram": 3,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "chartType": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "keyword"
+ },
+ "href": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "deleted": {
+ "type": "text"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long"
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "dashboards": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "text"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "term_vector": "with_positions_offsets"
+ },
+ "deleted": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/classification_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/classification_index_mapping.json
new file mode 100644
index 000000000000..55e292d86e7e
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/classification_index_mapping.json
@@ -0,0 +1,287 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 2,
+ "max_gram": 3,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "reviewers": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "similarity": "boolean"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "disabled": {
+ "type": "text"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/column_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/column_index_mapping.json
new file mode 100644
index 000000000000..af6274af661b
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/column_index_mapping.json
@@ -0,0 +1,617 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 2,
+ "max_gram": 3,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "dataType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "dataTypeDisplay": {
+ "type": "text"
+ },
+ "constraint": {
+ "type": "keyword"
+ },
+ "ordinalPosition": {
+ "type": "integer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "table": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "database": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "databaseSchema": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "text"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "version": {
+ "type": "float"
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/container_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/container_index_mapping.json
new file mode 100644
index 000000000000..bf07cb257abc
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/container_index_mapping.json
@@ -0,0 +1,876 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "similarity": "boolean"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "keyword"
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "parent": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "text"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "dataModel": {
+ "properties": {
+ "isPartitioned": {
+ "type": "boolean"
+ },
+ "columns": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "dataTypeDisplay": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "ordinalPosition": {
+ "type": "integer"
+ }
+ }
+ }
+ }
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "children": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "prefix": {
+ "type": "text"
+ },
+ "numberOfObjects": {
+ "type": "double"
+ },
+ "size": {
+ "type": "integer"
+ },
+ "fileFormats": {
+ "type": "keyword"
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "usageSummary": {
+ "properties": {
+ "dailyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "weeklyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "monthlyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "date": {
+ "type": "date",
+ "format": "strict_date_optional_time||yyyy-MM-dd HH:mm:ss||epoch_millis"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "columnNames": {
+ "type": "keyword"
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/dashboard_data_model_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/dashboard_data_model_index_mapping.json
new file mode 100644
index 000000000000..7a4874e25f2f
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/dashboard_data_model_index_mapping.json
@@ -0,0 +1,757 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "similarity": "boolean"
+ },
+ "version": {
+ "type": "float"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "keyword"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "dataModelType": {
+ "type": "keyword"
+ },
+ "columns": {
+ "properties": {
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "dataTypeDisplay": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "index_options": "docs",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "norms": false
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "ordinalPosition": {
+ "type": "integer"
+ }
+ }
+ },
+ "columnNames": {
+ "type": "keyword"
+ },
+ "project": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/dashboard_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/dashboard_index_mapping.json
new file mode 100644
index 000000000000..2a0bf0b4ca0a
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/dashboard_index_mapping.json
@@ -0,0 +1,778 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "similarity": "boolean"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "keyword"
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "charts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "project": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "usageSummary": {
+ "properties": {
+ "dailyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "weeklyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "monthlyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "date": {
+ "type": "date",
+ "format": "strict_date_optional_time||yyyy-MM-dd HH:mm:ss||epoch_millis"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/dashboard_service_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/dashboard_service_index_mapping.json
new file mode 100644
index 000000000000..b8839a092d3d
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/dashboard_service_index_mapping.json
@@ -0,0 +1,425 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "pipelines": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/data_products_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/data_products_index_mapping.json
new file mode 100644
index 000000000000..57b7f0c8cf59
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/data_products_index_mapping.json
@@ -0,0 +1,639 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "similarity": "boolean"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "reviewers": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "assets": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "inputPorts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "outputPorts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/database_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/database_index_mapping.json
new file mode 100644
index 000000000000..82b79b92a0cf
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/database_index_mapping.json
@@ -0,0 +1,692 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 2,
+ "max_gram": 3,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "similarity": "boolean"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "text"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "location": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "usageSummary": {
+ "properties": {
+ "dailyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "weeklyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "monthlyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "date": {
+ "type": "date",
+ "format": "strict_date_optional_time||yyyy-MM-dd HH:mm:ss||epoch_millis"
+ }
+ }
+ },
+ "databaseSchemas": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "text"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/database_schema_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/database_schema_index_mapping.json
new file mode 100644
index 000000000000..9b5748f061ee
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/database_schema_index_mapping.json
@@ -0,0 +1,652 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 2,
+ "max_gram": 3,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "similarity": "boolean"
+ },
+ "version": {
+ "type": "float"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "database": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "usageSummary": {
+ "properties": {
+ "dailyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "weeklyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "monthlyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "date": {
+ "type": "date",
+ "format": "strict_date_optional_time||yyyy-MM-dd HH:mm:ss||epoch_millis"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "deleted": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "text"
+ },
+ "totalVotes": {
+ "type": "long"
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/database_service_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/database_service_index_mapping.json
new file mode 100644
index 000000000000..58cd48fb55c8
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/database_service_index_mapping.json
@@ -0,0 +1,432 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "pipelines": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "href": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/directory_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/directory_index_mapping.json
new file mode 100644
index 000000000000..79048659730a
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/directory_index_mapping.json
@@ -0,0 +1,743 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ },
+ "index": {}
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "directoryType": {
+ "type": "keyword"
+ },
+ "path": {
+ "type": "keyword"
+ },
+ "isShared": {
+ "type": "boolean"
+ },
+ "parent": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "usageSummary": {
+ "properties": {
+ "dailyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "weeklyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "monthlyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "date": {
+ "type": "date",
+ "format": "strict_date_optional_time||yyyy-MM-dd HH:mm:ss||epoch_millis"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "updatedBy": {
+ "type": "keyword"
+ },
+ "updatedAt": {
+ "type": "date"
+ }
+ }
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/domain_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/domain_index_mapping.json
new file mode 100644
index 000000000000..d27ce4d7db0c
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/domain_index_mapping.json
@@ -0,0 +1,402 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 2,
+ "max_gram": 3,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "domainType": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "similarity": "boolean"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "experts": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/drive_service_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/drive_service_index_mapping.json
new file mode 100644
index 000000000000..be7c335c69be
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/drive_service_index_mapping.json
@@ -0,0 +1,397 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "pipelines": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/file_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/file_index_mapping.json
new file mode 100644
index 000000000000..b59448d76373
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/file_index_mapping.json
@@ -0,0 +1,758 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ },
+ "index": {}
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "fileType": {
+ "type": "keyword"
+ },
+ "mimeType": {
+ "type": "keyword"
+ },
+ "fileExtension": {
+ "type": "keyword"
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "path": {
+ "type": "keyword"
+ },
+ "size": {
+ "type": "long"
+ },
+ "checksum": {
+ "type": "keyword"
+ },
+ "isShared": {
+ "type": "boolean"
+ },
+ "directory": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "usageSummary": {
+ "properties": {
+ "dailyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "weeklyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "monthlyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "date": {
+ "type": "date",
+ "format": "strict_date_optional_time||yyyy-MM-dd HH:mm:ss||epoch_millis"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "updatedBy": {
+ "type": "keyword"
+ },
+ "updatedAt": {
+ "type": "date"
+ }
+ }
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/glossary_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/glossary_index_mapping.json
new file mode 100644
index 000000000000..4b16d41c17e3
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/glossary_index_mapping.json
@@ -0,0 +1,362 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 2,
+ "max_gram": 3,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "similarity": "boolean"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "synonyms": {
+ "type": "text"
+ },
+ "usageCount": {
+ "type": "integer"
+ },
+ "termCount": {
+ "type": "integer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/glossary_term_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/glossary_term_index_mapping.json
new file mode 100644
index 000000000000..dac786d82ed7
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/glossary_term_index_mapping.json
@@ -0,0 +1,536 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17
+ },
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 2,
+ "max_gram": 3,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "similarity": "boolean"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "synonyms": {
+ "type": "text"
+ },
+ "glossary": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ },
+ "mutuallyExclusive": {
+ "type": "boolean"
+ }
+ }
+ },
+ "children": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "relatedTerms": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "reviewers": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "usageCount": {
+ "type": "integer"
+ },
+ "entityType": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "mutuallyExclusive": {
+ "type": "boolean"
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/ingestion_pipeline_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/ingestion_pipeline_index_mapping.json
new file mode 100644
index 000000000000..d93e951a2aa6
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/ingestion_pipeline_index_mapping.json
@@ -0,0 +1,433 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 2,
+ "max_gram": 3,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "deployed": {
+ "type": "text"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "pipelineType": {
+ "type": "keyword"
+ },
+ "pipelineStatuses": {
+ "properties": {
+ "pipelineState": {
+ "type": "keyword"
+ },
+ "runId": {
+ "type": "keyword"
+ },
+ "timestamp": {
+ "type": "long"
+ },
+ "startDate": {
+ "type": "long"
+ },
+ "endDate": {
+ "type": "long"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "applicationType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "airflowConfig": {
+ "properties": {
+ "scheduleInterval": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ }
+ }
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/llm_model_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/llm_model_index_mapping.json
new file mode 100644
index 000000000000..bedc59536aba
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/llm_model_index_mapping.json
@@ -0,0 +1,707 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 2,
+ "max_gram": 3,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "text"
+ },
+ "upstreamLineage": {
+ "type": "object"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "mlFeatures": {
+ "properties": {
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "term_vector": "with_positions_offsets"
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "featureSources": {
+ "properties": {
+ "name": {
+ "type": "text"
+ },
+ "dataType": {
+ "type": "text"
+ }
+ }
+ }
+ }
+ },
+ "mlHyperParameters": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "value": {
+ "type": "text"
+ }
+ }
+ },
+ "target": {
+ "type": "text"
+ },
+ "dashboard": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "mlStore": {
+ "properties": {
+ "storage": {
+ "type": "text"
+ },
+ "imageRepository": {
+ "type": "text"
+ }
+ }
+ },
+ "server": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "usageSummary": {
+ "properties": {
+ "dailyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "weeklyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "monthlyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "date": {
+ "type": "date",
+ "format": "strict_date_optional_time||yyyy-MM-dd HH:mm:ss||epoch_millis"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/llm_service_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/llm_service_index_mapping.json
new file mode 100644
index 000000000000..67c5c8e8a4d3
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/llm_service_index_mapping.json
@@ -0,0 +1,538 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 2,
+ "max_gram": 3,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "index_options": "docs",
+ "term_vector": "with_positions_offsets"
+ },
+ "pipelines": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "href": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/mcp_execution_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/mcp_execution_index_mapping.json
new file mode 100644
index 000000000000..894182c0388a
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/mcp_execution_index_mapping.json
@@ -0,0 +1,366 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 2,
+ "max_gram": 3,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "id": {
+ "type": "keyword"
+ },
+ "timestamp": {
+ "type": "date"
+ },
+ "@timestamp": {
+ "type": "date"
+ },
+ "endTimestamp": {
+ "type": "date"
+ },
+ "durationMs": {
+ "type": "float"
+ },
+ "status": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "executedBy": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "sessionId": {
+ "type": "keyword"
+ },
+ "serverId": {
+ "type": "keyword"
+ },
+ "server": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "serverType": {
+ "type": "keyword"
+ },
+ "transportType": {
+ "type": "keyword"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword"
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tags": {
+ "type": "nested",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ }
+ }
+ },
+ "domain": {
+ "properties": {
+ "id": {
+ "type": "keyword"
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ }
+ }
+ },
+ "applicationContext": {
+ "properties": {
+ "id": {
+ "type": "keyword"
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "keyword"
+ }
+ }
+ },
+ "toolCalls": {
+ "type": "nested",
+ "properties": {
+ "toolName": {
+ "type": "keyword"
+ },
+ "success": {
+ "type": "boolean"
+ },
+ "latencyMs": {
+ "type": "float"
+ },
+ "timestamp": {
+ "type": "date"
+ },
+ "errorMessage": {
+ "type": "text"
+ }
+ }
+ },
+ "resourceAccesses": {
+ "type": "nested",
+ "properties": {
+ "resourceUri": {
+ "type": "keyword"
+ },
+ "accessType": {
+ "type": "keyword"
+ },
+ "success": {
+ "type": "boolean"
+ },
+ "timestamp": {
+ "type": "date"
+ }
+ }
+ },
+ "promptUses": {
+ "type": "nested",
+ "properties": {
+ "promptName": {
+ "type": "keyword"
+ },
+ "timestamp": {
+ "type": "date"
+ },
+ "tokensGenerated": {
+ "type": "integer"
+ }
+ }
+ },
+ "dataAccessed": {
+ "type": "nested",
+ "properties": {
+ "accessType": {
+ "type": "keyword"
+ },
+ "recordCount": {
+ "type": "integer"
+ },
+ "piiAccessed": {
+ "type": "boolean"
+ },
+ "sensitivityLevel": {
+ "type": "keyword"
+ },
+ "timestamp": {
+ "type": "date"
+ }
+ }
+ },
+ "complianceChecks": {
+ "type": "nested",
+ "properties": {
+ "checkName": {
+ "type": "keyword"
+ },
+ "passed": {
+ "type": "boolean"
+ },
+ "severity": {
+ "type": "keyword"
+ },
+ "timestamp": {
+ "type": "date"
+ }
+ }
+ },
+ "metrics": {
+ "properties": {
+ "totalToolCalls": {
+ "type": "integer"
+ },
+ "successfulToolCalls": {
+ "type": "integer"
+ },
+ "totalResourceAccesses": {
+ "type": "integer"
+ },
+ "totalPromptUses": {
+ "type": "integer"
+ },
+ "piiDataAccessed": {
+ "type": "boolean"
+ },
+ "highSensitivityDataAccessed": {
+ "type": "boolean"
+ },
+ "highRiskOperations": {
+ "type": "integer"
+ },
+ "complianceViolations": {
+ "type": "integer"
+ }
+ }
+ },
+ "errorMessage": {
+ "type": "text"
+ },
+ "environment": {
+ "type": "keyword"
+ },
+ "serverVersion": {
+ "type": "keyword"
+ },
+ "protocolVersion": {
+ "type": "keyword"
+ },
+ "deleted": {
+ "type": "boolean"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/mcp_server_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/mcp_server_index_mapping.json
new file mode 100644
index 000000000000..cb79b774bda1
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/mcp_server_index_mapping.json
@@ -0,0 +1,629 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 2,
+ "max_gram": 3,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "serverType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "transportType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "protocolVersion": {
+ "type": "keyword"
+ },
+ "developmentStage": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "serverInfo": {
+ "type": "object",
+ "properties": {
+ "serverName": {
+ "type": "text"
+ },
+ "serverVersion": {
+ "type": "keyword"
+ },
+ "vendor": {
+ "type": "text"
+ }
+ }
+ },
+ "capabilities": {
+ "type": "object",
+ "properties": {
+ "toolsSupported": {
+ "type": "boolean"
+ },
+ "resourcesSupported": {
+ "type": "boolean"
+ },
+ "promptsSupported": {
+ "type": "boolean"
+ },
+ "loggingSupported": {
+ "type": "boolean"
+ },
+ "samplingSupported": {
+ "type": "boolean"
+ }
+ }
+ },
+ "tools": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "toolCategory": {
+ "type": "keyword"
+ },
+ "riskLevel": {
+ "type": "keyword"
+ }
+ }
+ },
+ "resources": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "resourceType": {
+ "type": "keyword"
+ },
+ "uri": {
+ "type": "keyword"
+ }
+ }
+ },
+ "prompts": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "promptType": {
+ "type": "keyword"
+ }
+ }
+ },
+ "governanceMetadata": {
+ "type": "object",
+ "properties": {
+ "registrationStatus": {
+ "type": "keyword"
+ },
+ "riskAssessment": {
+ "type": "object",
+ "properties": {
+ "riskLevel": {
+ "type": "keyword"
+ }
+ }
+ },
+ "dataClassification": {
+ "type": "object",
+ "properties": {
+ "accessesPII": {
+ "type": "boolean"
+ },
+ "accessesSensitiveData": {
+ "type": "boolean"
+ }
+ }
+ }
+ }
+ },
+ "dataAccessSummary": {
+ "type": "object",
+ "properties": {
+ "sensitivityLevel": {
+ "type": "keyword"
+ },
+ "piiAccess": {
+ "type": "boolean"
+ },
+ "externalApiAccess": {
+ "type": "boolean"
+ },
+ "fileSystemAccess": {
+ "type": "boolean"
+ },
+ "networkAccess": {
+ "type": "boolean"
+ },
+ "databaseAccess": {
+ "type": "boolean"
+ }
+ }
+ },
+ "usageMetrics": {
+ "type": "object",
+ "properties": {
+ "totalInvocations": {
+ "type": "long"
+ },
+ "successRate": {
+ "type": "float"
+ },
+ "averageLatencyMs": {
+ "type": "float"
+ },
+ "uniqueUsers": {
+ "type": "integer"
+ }
+ }
+ },
+ "securityMetrics": {
+ "type": "object",
+ "properties": {
+ "authenticationRequired": {
+ "type": "boolean"
+ },
+ "authorizationEnforced": {
+ "type": "boolean"
+ },
+ "auditLoggingEnabled": {
+ "type": "boolean"
+ },
+ "encryptionInTransit": {
+ "type": "boolean"
+ },
+ "sandboxed": {
+ "type": "boolean"
+ }
+ }
+ },
+ "sourceCode": {
+ "type": "text"
+ },
+ "deploymentUrl": {
+ "type": "text"
+ },
+ "documentation": {
+ "type": "text"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object"
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lifeCycle": {
+ "type": "object"
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/mcp_service_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/mcp_service_index_mapping.json
new file mode 100644
index 000000000000..f166500e3e2c
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/mcp_service_index_mapping.json
@@ -0,0 +1,509 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 2,
+ "max_gram": 3,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "id": {
+ "type": "text"
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "index_options": "docs",
+ "term_vector": "with_positions_offsets"
+ },
+ "pipelines": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "href": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object"
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/messaging_service_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/messaging_service_index_mapping.json
new file mode 100644
index 000000000000..cf49c3bc5287
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/messaging_service_index_mapping.json
@@ -0,0 +1,427 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "pipelines": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "href": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/metadata_service_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/metadata_service_index_mapping.json
new file mode 100644
index 000000000000..1efd07403428
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/metadata_service_index_mapping.json
@@ -0,0 +1,335 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "pipelines": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ },
+ "provider": {
+ "type": "text"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/metric_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/metric_index_mapping.json
new file mode 100644
index 000000000000..12dc8aaf3fd5
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/metric_index_mapping.json
@@ -0,0 +1,689 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 2,
+ "max_gram": 3,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "index_options": "docs"
+ },
+ "expression": {
+ "properties": {
+ "language": {
+ "type": "text"
+ },
+ "code": {
+ "type": "text"
+ }
+ }
+ },
+ "metricType": {
+ "type": "keyword"
+ },
+ "unitOfMeasurement": {
+ "type": "keyword"
+ },
+ "granularity": {
+ "type": "keyword"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "reviewers": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "relatedMetrics": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "usageCount": {
+ "type": "integer"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/mlmodel_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/mlmodel_index_mapping.json
new file mode 100644
index 000000000000..11c8edb1b19c
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/mlmodel_index_mapping.json
@@ -0,0 +1,817 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 2,
+ "max_gram": 3,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "text"
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "mlFeatures": {
+ "properties": {
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "featureSources": {
+ "properties": {
+ "name": {
+ "type": "text"
+ },
+ "dataType": {
+ "type": "text"
+ }
+ }
+ }
+ }
+ },
+ "mlHyperParameters": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "value": {
+ "type": "text"
+ }
+ }
+ },
+ "target": {
+ "type": "text"
+ },
+ "dashboard": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "mlStore": {
+ "properties": {
+ "storage": {
+ "type": "text"
+ },
+ "imageRepository": {
+ "type": "text"
+ }
+ }
+ },
+ "server": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "usageSummary": {
+ "properties": {
+ "dailyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "weeklyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "monthlyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "date": {
+ "type": "date",
+ "format": "strict_date_optional_time||yyyy-MM-dd HH:mm:ss||epoch_millis"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/mlmodel_service_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/mlmodel_service_index_mapping.json
new file mode 100644
index 000000000000..95a597ba8a61
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/mlmodel_service_index_mapping.json
@@ -0,0 +1,429 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "pipelines": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "href": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/pipeline_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/pipeline_index_mapping.json
new file mode 100644
index 000000000000..23c504b3b145
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/pipeline_index_mapping.json
@@ -0,0 +1,714 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 2,
+ "max_gram": 3,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "version": {
+ "type": "float"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "text"
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "tasks": {
+ "properties": {
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "sourceUrl": {
+ "type": "text"
+ },
+ "taskType": {
+ "type": "text"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/pipeline_service_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/pipeline_service_index_mapping.json
new file mode 100644
index 000000000000..7d7ee6afe986
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/pipeline_service_index_mapping.json
@@ -0,0 +1,425 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "pipelines": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "href": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/pipeline_status_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/pipeline_status_index_mapping.json
new file mode 100644
index 000000000000..f59d8f2ec546
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/pipeline_status_index_mapping.json
@@ -0,0 +1,112 @@
+{
+ "settings": {
+ "index": {
+ "max_ngram_diff": 17,
+ "number_of_shards": 1,
+ "number_of_replicas": 1
+ },
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "pipelineId": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "pipelineFqn": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "pipelineName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "serviceName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "executionStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "timestamp": {
+ "type": "date",
+ "format": "epoch_millis"
+ },
+ "endTime": {
+ "type": "date",
+ "format": "epoch_millis"
+ },
+ "startTime": {
+ "type": "date",
+ "format": "epoch_millis"
+ },
+ "lastRunTime": {
+ "type": "date",
+ "format": "epoch_millis"
+ },
+ "runtime": {
+ "type": "long"
+ },
+ "scheduleInterval": {
+ "type": "keyword"
+ },
+ "tableId": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "tableFqn": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "entityType": {
+ "type": "keyword"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/prompt_template_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/prompt_template_index_mapping.json
new file mode 100644
index 000000000000..bedc59536aba
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/prompt_template_index_mapping.json
@@ -0,0 +1,707 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 2,
+ "max_gram": 3,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "similarity": "boolean",
+ "term_vector": "with_positions_offsets"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "text"
+ },
+ "upstreamLineage": {
+ "type": "object"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "mlFeatures": {
+ "properties": {
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "term_vector": "with_positions_offsets"
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "featureSources": {
+ "properties": {
+ "name": {
+ "type": "text"
+ },
+ "dataType": {
+ "type": "text"
+ }
+ }
+ }
+ }
+ },
+ "mlHyperParameters": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "value": {
+ "type": "text"
+ }
+ }
+ },
+ "target": {
+ "type": "text"
+ },
+ "dashboard": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "mlStore": {
+ "properties": {
+ "storage": {
+ "type": "text"
+ },
+ "imageRepository": {
+ "type": "text"
+ }
+ }
+ },
+ "server": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "usageSummary": {
+ "properties": {
+ "dailyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "weeklyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "monthlyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "date": {
+ "type": "date",
+ "format": "strict_date_optional_time||yyyy-MM-dd HH:mm:ss||epoch_millis"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "votes": {
+ "type": "object",
+ "dynamic": false,
+ "properties": {
+ "upVotes": {
+ "type": "integer"
+ },
+ "downVotes": {
+ "type": "integer"
+ }
+ }
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "descriptionSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tagSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "tierSources": {
+ "type": "object",
+ "dynamic": false
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/query_cost_record_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/query_cost_record_index_mapping.json
new file mode 100644
index 000000000000..44483a303259
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/query_cost_record_index_mapping.json
@@ -0,0 +1,523 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 2,
+ "max_gram": 3,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "query": {
+ "properties": {
+ "id": {
+ "type": "keyword"
+ },
+ "checksum": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "processedLineage": {
+ "type": "boolean"
+ },
+ "name": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "index_options": "docs",
+ "term_vector": "with_positions_offsets"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "duration": {
+ "type": "long"
+ },
+ "users": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "query": {
+ "type": "text",
+ "index": false
+ },
+ "queryDate": {
+ "type": "long"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "queryUsedIn": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "description": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "labelType": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "source": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "state": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "cost": {
+ "type": "float"
+ },
+ "timestamp": {
+ "type": "date"
+ },
+ "@timestamp": {
+ "type": "date"
+ },
+ "count": {
+ "type": "long"
+ },
+ "totalDuration": {
+ "type": "long"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/query_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/query_index_mapping.json
new file mode 100644
index 000000000000..6bf9dab6b170
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/query_index_mapping.json
@@ -0,0 +1,449 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 2,
+ "max_gram": 3,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "ik_max_word"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "duration": {
+ "type": "long"
+ },
+ "users": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "query": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "queryDate": {
+ "type": "long"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "queryUsedIn": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tier": {
+ "properties": {
+ "description": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "labelType": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "source": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "state": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/search_entity_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/search_entity_index_mapping.json
new file mode 100644
index 000000000000..e9800c7e815a
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/search_entity_index_mapping.json
@@ -0,0 +1,780 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 2,
+ "max_gram": 3,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fields": {
+ "properties": {
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "dataTypeDisplay": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "index_options": "docs",
+ "analyzer": "om_analyzer",
+ "norms": false,
+ "term_vector": "with_positions_offsets"
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "children": {
+ "properties": {
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "dataTypeDisplay": {
+ "type": "text"
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "href": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "indexType": {
+ "type": "text"
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/search_service_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/search_service_index_mapping.json
new file mode 100644
index 000000000000..d78a79a5e9d8
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/search_service_index_mapping.json
@@ -0,0 +1,429 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "pipelines": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/security_service_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/security_service_index_mapping.json
new file mode 100644
index 000000000000..4815af195e26
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/security_service_index_mapping.json
@@ -0,0 +1,624 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "pipelines": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ }
+ }
+ },
+ "followers": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ }
+ }
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ }
+ }
+ },
+ "followers": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "suggest": {
+ "type": "completion",
+ "contexts": [
+ {
+ "name": "deleted",
+ "type": "category"
+ }
+ ]
+ },
+ "domain": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ }
+ }
+ },
+ "connection": {
+ "properties": {
+ "config": {
+ "properties": {
+ "type": {
+ "type": "keyword"
+ },
+ "hostPort": {
+ "type": "keyword"
+ }
+ }
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "changeDescription": {
+ "properties": {
+ "fieldsAdded": {
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "newValue": {
+ "type": "text"
+ }
+ }
+ },
+ "fieldsUpdated": {
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "newValue": {
+ "type": "text"
+ },
+ "oldValue": {
+ "type": "text"
+ }
+ }
+ },
+ "fieldsDeleted": {
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "oldValue": {
+ "type": "text"
+ }
+ }
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "href": {
+ "type": "text"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/spreadsheet_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/spreadsheet_index_mapping.json
new file mode 100644
index 000000000000..c2a609f00a7c
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/spreadsheet_index_mapping.json
@@ -0,0 +1,743 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ },
+ "index": {}
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "mimeType": {
+ "type": "keyword"
+ },
+ "path": {
+ "type": "keyword"
+ },
+ "size": {
+ "type": "long"
+ },
+ "directory": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "usageSummary": {
+ "properties": {
+ "dailyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "weeklyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "monthlyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "date": {
+ "type": "date",
+ "format": "strict_date_optional_time||yyyy-MM-dd HH:mm:ss||epoch_millis"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "updatedBy": {
+ "type": "keyword"
+ },
+ "updatedAt": {
+ "type": "date"
+ }
+ }
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/storage_service_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/storage_service_index_mapping.json
new file mode 100644
index 000000000000..34a246a52b55
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/storage_service_index_mapping.json
@@ -0,0 +1,422 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "pipelines": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/stored_procedure_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/stored_procedure_index_mapping.json
new file mode 100644
index 000000000000..e3d692961c18
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/stored_procedure_index_mapping.json
@@ -0,0 +1,903 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 2,
+ "max_gram": 3,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "storedProcedureCode": {
+ "properties": {
+ "language": {
+ "type": "text"
+ },
+ "code": {
+ "type": "text"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "databaseSchema": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "database": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "processedLineage": {
+ "type": "boolean"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "votes": {
+ "properties": {
+ "upVotes": {
+ "type": "long"
+ },
+ "downVotes": {
+ "type": "long"
+ },
+ "upVoters": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "downVoters": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ }
+ }
+ },
+ "code": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "sourceUrl": {
+ "type": "keyword"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/table_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/table_index_mapping.json
new file mode 100644
index 000000000000..5d160188175b
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/table_index_mapping.json
@@ -0,0 +1,1043 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 2,
+ "max_gram": 3,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "schemaDefinition": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "keyword"
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "upstreamEntityRelationship": {
+ "properties": {
+ "entity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "relatedEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "entityRelationship": {
+ "properties": {
+ "entity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "relatedEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "tableType": {
+ "type": "keyword"
+ },
+ "columns": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "dataTypeDisplay": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "ordinalPosition": {
+ "type": "integer"
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ }
+ }
+ },
+ "columnNames": {
+ "type": "keyword"
+ },
+ "databaseSchema": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "text"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "database": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "lifeCycle": {
+ "type": "object",
+ "dynamic": false
+ },
+ "location": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "locationPath": {
+ "type": "keyword"
+ },
+ "usageSummary": {
+ "properties": {
+ "dailyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "weeklyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "monthlyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "date": {
+ "type": "date",
+ "format": "strict_date_optional_time||yyyy-MM-dd HH:mm:ss||epoch_millis"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "processedLineage": {
+ "type": "boolean"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "columnDescriptionStatus": {
+ "type": "keyword"
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/tag_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/tag_index_mapping.json
new file mode 100644
index 000000000000..cbb68e2d20a7
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/tag_index_mapping.json
@@ -0,0 +1,351 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 2,
+ "max_gram": 3,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "disabled": {
+ "type": "boolean"
+ },
+ "classification": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "reviewers": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/team_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/team_index_mapping.json
new file mode 100644
index 000000000000..a2acb2cf10ac
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/team_index_mapping.json
@@ -0,0 +1,334 @@
+{
+ "settings": {
+ "analysis": {
+ "tokenizer": {
+ "edge_ngram_tokenizer": {
+ "type": "edge_ngram",
+ "min_gram": 3,
+ "max_gram": 20,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ },
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "word_delimiter_filter",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "edge_ngram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "kstem"
+ },
+ "word_delimiter_filter": {
+ "type": "word_delimiter",
+ "preserve_original": true
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "teamType": {
+ "type": "text"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "users": {
+ "enabled": false
+ },
+ "userCount": {
+ "type": "long"
+ },
+ "parents": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "defaultRoles": {
+ "enabled": false
+ },
+ "isJoinable": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "isBot": {
+ "type": "boolean"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/test_case_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/test_case_index_mapping.json
new file mode 100644
index 000000000000..1bd7d33a4264
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/test_case_index_mapping.json
@@ -0,0 +1,869 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "originEntityFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "fields": {
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "entityLink": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "nonNormalized": {
+ "type": "keyword"
+ }
+ }
+ },
+ "testPlatforms": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text",
+ "index_options": "docs"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ },
+ "type": "nested"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "parameterValues": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "value": {
+ "type": "text"
+ }
+ }
+ },
+ "testDefinition": {
+ "properties": {
+ "id": {
+ "type": "text"
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "fields": {
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ }
+ }
+ },
+ "testCaseType": {
+ "type": "keyword"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "dataQualityDimension": {
+ "type": "keyword"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "testSuite": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ },
+ "executable": {
+ "type": "text"
+ }
+ }
+ },
+ "testSuites": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ },
+ "executable": {
+ "type": "text"
+ }
+ }
+ },
+ "testCaseResult": {
+ "properties": {
+ "result": {
+ "type": "text"
+ },
+ "testCaseStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "testResultValue": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "value": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ }
+ }
+ },
+ "timestamp": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "createdBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "table": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "database": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "databaseSchema": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "reviewers": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/test_case_resolution_status_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/test_case_resolution_status_index_mapping.json
new file mode 100644
index 000000000000..b7bba43008f4
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/test_case_resolution_status_index_mapping.json
@@ -0,0 +1,825 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 1,
+ "max_gram": 2,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "stateId": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "timestamp": {
+ "type": "date"
+ },
+ "@timestamp": {
+ "type": "date"
+ },
+ "testCaseResolutionStatusType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 8
+ }
+ }
+ },
+ "testCaseResolutionStatusDetails": {
+ "type": "object",
+ "dynamic": true,
+ "properties": {
+ "assignee": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "resolved": {
+ "properties": {
+ "testCaseFailureReason": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 15
+ }
+ }
+ },
+ "testCaseFailureComment": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "resolvedBy": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "metrics": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "value": {
+ "type": "float"
+ }
+ }
+ },
+ "updatedBy": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "om_analyzer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ },
+ "term_vector": "with_positions_offsets"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "updatedAt": {
+ "type": "date"
+ },
+ "testCaseReference": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "table": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "database": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "databaseSchema": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "testSuite": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "testCase": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityFQN": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ },
+ "tags": {
+ "type": "nested",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text",
+ "index_options": "docs"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/test_case_result_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/test_case_result_index_mapping.json
new file mode 100644
index 000000000000..023d490e8387
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/test_case_result_index_mapping.json
@@ -0,0 +1,482 @@
+{
+ "settings": {
+ "index": {
+ "priority": 500,
+ "max_ngram_diff": 7
+ },
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 3,
+ "max_gram": 10,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "result": {
+ "type": "text"
+ },
+ "testCaseStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "timestamp": {
+ "type": "date"
+ },
+ "@timestamp": {
+ "type": "date"
+ },
+ "testResultValue": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "value": {
+ "type": "text"
+ },
+ "predictedValue": {
+ "type": "text"
+ }
+ }
+ },
+ "testCase": {
+ "properties": {
+ "id": {
+ "type": "text"
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word"
+ },
+ "testPlatforms": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityLink": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "nonNormalized": {
+ "type": "keyword"
+ }
+ }
+ },
+ "parameterValues": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "value": {
+ "type": "text"
+ }
+ }
+ },
+ "testCaseType": {
+ "type": "keyword"
+ },
+ "entityType": {
+ "type": "keyword"
+ },
+ "dataQualityDimension": {
+ "type": "keyword"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "tags": {
+ "type": "nested",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text",
+ "index_options": "docs"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ }
+ }
+ },
+ "testDefinition": {
+ "properties": {
+ "id": {
+ "type": "text"
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "type": {
+ "type": "keyword"
+ }
+ }
+ },
+ "testSuite": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ },
+ "executable": {
+ "type": "text"
+ }
+ }
+ },
+ "testSuites": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ },
+ "executable": {
+ "type": "text"
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/test_suite_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/test_suite_index_mapping.json
new file mode 100644
index 000000000000..3aa7ad33dbbf
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/test_suite_index_mapping.json
@@ -0,0 +1,494 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "lastResultTimestamp": {
+ "type": "long"
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ },
+ "executable": {
+ "type": "boolean"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "table": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "database": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "databaseSchema": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/topic_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/topic_index_mapping.json
new file mode 100644
index 000000000000..d000c8f917fb
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/topic_index_mapping.json
@@ -0,0 +1,757 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_ngram": {
+ "type": "custom",
+ "tokenizer": "n_gram_tokenizer",
+ "filter": [
+ "lowercase"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ },
+ "tokenizer": {
+ "n_gram_tokenizer": {
+ "type": "ngram",
+ "min_gram": 2,
+ "max_gram": 3,
+ "token_chars": [
+ "letter",
+ "digit"
+ ]
+ }
+ }
+ },
+ "index": {
+ "max_ngram_diff": 1
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "sourceUrl": {
+ "type": "keyword"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "extension": {
+ "type": "flattened"
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "messageSchema": {
+ "properties": {
+ "schemaType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "schemaText": {
+ "type": "text"
+ },
+ "schemaFields": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "fieldNames": {
+ "type": "keyword"
+ },
+ "cleanupPolicies": {
+ "type": "keyword"
+ },
+ "replicationFactor": {
+ "type": "integer"
+ },
+ "maximumMessageSize": {
+ "type": "long"
+ },
+ "retentionSize": {
+ "type": "long"
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "followers": {
+ "type": "keyword"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "appliedDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ },
+ "expiryDate": {
+ "type": "date",
+ "format": "strict_date_optional_time||epoch_millis"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/user_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/user_index_mapping.json
new file mode 100644
index 000000000000..7f8c8c01e67f
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/user_index_mapping.json
@@ -0,0 +1,306 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ }
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ }
+ }
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "email": {
+ "type": "text"
+ },
+ "isAdmin": {
+ "type": "text"
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "teams": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "roles": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "inheritedRoles": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/worksheet_index_mapping.json b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/worksheet_index_mapping.json
new file mode 100644
index 000000000000..e6835a29fb7f
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/elasticsearch/zh/worksheet_index_mapping.json
@@ -0,0 +1,818 @@
+{
+ "settings": {
+ "analysis": {
+ "normalizer": {
+ "lowercase_normalizer": {
+ "type": "custom",
+ "char_filter": [],
+ "filter": [
+ "lowercase"
+ ]
+ }
+ },
+ "analyzer": {
+ "om_analyzer": {
+ "tokenizer": "letter",
+ "filter": [
+ "lowercase",
+ "om_stemmer"
+ ]
+ },
+ "om_compound_analyzer": {
+ "tokenizer": "standard",
+ "filter": [
+ "lowercase",
+ "compound_word_delimiter_graph",
+ "flatten_graph"
+ ]
+ }
+ },
+ "filter": {
+ "om_stemmer": {
+ "type": "stemmer",
+ "name": "english"
+ },
+ "compound_word_delimiter_graph": {
+ "type": "word_delimiter_graph",
+ "generate_word_parts": true,
+ "generate_number_parts": true,
+ "split_on_case_change": true,
+ "split_on_numerics": true,
+ "catenate_words": false,
+ "catenate_numbers": false,
+ "catenate_all": false,
+ "preserve_original": true,
+ "stem_english_possessive": true
+ }
+ }
+ },
+ "index": {}
+ },
+ "mappings": {
+ "properties": {
+ "changeDescription": {
+ "enabled": false
+ },
+ "incrementalChangeDescription": {
+ "enabled": false
+ },
+ "id": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "name": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "fqnParts": {
+ "type": "keyword"
+ },
+ "displayName": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ },
+ "actualCase": {
+ "type": "keyword",
+ "ignore_above": 256
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ },
+ "compound": {
+ "type": "text",
+ "analyzer": "om_compound_analyzer"
+ }
+ }
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "version": {
+ "type": "float"
+ },
+ "updatedAt": {
+ "type": "date",
+ "format": "epoch_second"
+ },
+ "updatedBy": {
+ "type": "text"
+ },
+ "href": {
+ "type": "text"
+ },
+ "worksheetId": {
+ "type": "keyword"
+ },
+ "index": {
+ "type": "integer"
+ },
+ "rowCount": {
+ "type": "long"
+ },
+ "columnCount": {
+ "type": "long"
+ },
+ "isHidden": {
+ "type": "boolean"
+ },
+ "columns": {
+ "properties": {
+ "name": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256,
+ "normalizer": "lowercase_normalizer"
+ },
+ "ngram": {
+ "type": "text",
+ "analyzer": "om_ngram"
+ }
+ }
+ },
+ "dataType": {
+ "type": "text"
+ },
+ "dataTypeDisplay": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text",
+ "analyzer": "ik_max_word",
+ "search_analyzer": "ik_smart"
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "ordinalPosition": {
+ "type": "integer"
+ }
+ }
+ },
+ "columnNames": {
+ "type": "keyword"
+ },
+ "spreadsheet": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "service": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "owners": {
+ "type": "nested",
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "domains": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "dataProducts": {
+ "properties": {
+ "id": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 36
+ }
+ }
+ },
+ "type": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "displayName": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "href": {
+ "type": "text"
+ }
+ }
+ },
+ "usageSummary": {
+ "properties": {
+ "dailyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "weeklyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "monthlyStats": {
+ "properties": {
+ "count": {
+ "type": "long"
+ },
+ "percentileRank": {
+ "type": "long"
+ }
+ }
+ },
+ "date": {
+ "type": "date",
+ "format": "strict_date_optional_time||yyyy-MM-dd HH:mm:ss||epoch_millis"
+ }
+ }
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "tier": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "classificationTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "glossaryTags": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "tags": {
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "serviceType": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "entityType": {
+ "type": "keyword",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "ignore_above": 256
+ }
+ }
+ },
+ "entityStatus": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "totalVotes": {
+ "type": "long",
+ "null_value": 0
+ },
+ "descriptionStatus": {
+ "type": "keyword"
+ },
+ "columnDescriptionStatus": {
+ "type": "keyword"
+ },
+ "certification": {
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "type": "object",
+ "properties": {
+ "tagFQN": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer",
+ "fields": {
+ "text": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ }
+ }
+ },
+ "labelType": {
+ "type": "keyword"
+ },
+ "description": {
+ "type": "text"
+ },
+ "source": {
+ "type": "keyword"
+ },
+ "state": {
+ "type": "keyword"
+ }
+ }
+ },
+ "updatedBy": {
+ "type": "keyword"
+ },
+ "updatedAt": {
+ "type": "date"
+ }
+ }
+ },
+ "upstreamLineage": {
+ "properties": {
+ "fromEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "toEntity": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "pipeline": {
+ "properties": {
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "fullyQualifiedName": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "columns": {
+ "properties": {
+ "fromColumns": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "toColumn": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ }
+ }
+ },
+ "docId": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "sqlQueryKey": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fqnHash": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 512
+ }
+ }
+ },
+ "customPropertiesTyped": {
+ "type": "nested",
+ "properties": {
+ "name": {
+ "type": "keyword"
+ },
+ "propertyType": {
+ "type": "keyword"
+ },
+ "stringValue": {
+ "type": "keyword"
+ },
+ "textValue": {
+ "type": "text",
+ "analyzer": "om_analyzer"
+ },
+ "longValue": {
+ "type": "long"
+ },
+ "doubleValue": {
+ "type": "double"
+ },
+ "start": {
+ "type": "long"
+ },
+ "end": {
+ "type": "long"
+ },
+ "refId": {
+ "type": "keyword"
+ },
+ "refType": {
+ "type": "keyword"
+ },
+ "refName": {
+ "type": "keyword"
+ },
+ "refFqn": {
+ "type": "keyword"
+ }
+ }
+ },
+ "fingerprint": {
+ "type": "keyword"
+ },
+ "textToLLMContext": {
+ "type": "text"
+ },
+ "textToEmbed": {
+ "type": "text"
+ },
+ "chunkIndex": {
+ "type": "integer"
+ },
+ "chunkCount": {
+ "type": "integer"
+ },
+ "parentId": {
+ "type": "keyword"
+ },
+ "ownerDisplayName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "ownerName": {
+ "type": "keyword",
+ "normalizer": "lowercase_normalizer"
+ },
+ "lineageSqlQueries": {
+ "type": "object",
+ "enabled": false
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/analytics/basic.json b/openmetadata-spec/bin/src/main/resources/json/schema/analytics/basic.json
new file mode 100644
index 000000000000..2bebd283ed2e
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/analytics/basic.json
@@ -0,0 +1,33 @@
+{
+ "$id": "https://open-metadata.org/schema/analytics/basic.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Basic",
+ "description": "This schema defines basic types that are used by analytics classes",
+ "definitions": {
+ "webAnalyticEventType": {
+ "javaType": "org.openmetadata.schema.analytics.type.WebAnalyticEventType",
+ "description": "event type",
+ "type": "string",
+ "enum": [
+ "PageView",
+ "CustomEvent"
+ ]
+ },
+ "fullUrl": {
+ "description": "complete URL of the page",
+ "type": "string"
+ },
+ "url": {
+ "description": "url part after the domain specification",
+ "type": "string"
+ },
+ "hostname": {
+ "description": "domain name",
+ "type": "string"
+ },
+ "sessionId": {
+ "description": "Unique ID identifying a session",
+ "$ref": "../type/basic.json#/definitions/uuid"
+ }
+ }
+ }
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/analytics/reportData.json b/openmetadata-spec/bin/src/main/resources/json/schema/analytics/reportData.json
new file mode 100644
index 000000000000..5005873ba7d2
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/analytics/reportData.json
@@ -0,0 +1,43 @@
+{
+ "$id": "https://open-metadata.org/schema/analytics/reportData.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "reportData",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.analytics.ReportData",
+ "javaInterfaces": [
+ "org.openmetadata.schema.EntityTimeSeriesInterface"
+ ],
+ "description": "Report Data",
+ "properties": {
+ "id": {
+ "description": "Unique identifier for a result.",
+ "$ref": "../type/basic.json#/definitions/uuid"
+ },
+ "timestamp": {
+ "description": "timestamp for of a result ingestion.",
+ "$ref": "../type/basic.json#/definitions/timestamp"
+ },
+ "reportDataType": {
+ "description": "Type of data",
+ "type": "string",
+ "enum": [
+ "entityReportData",
+ "webAnalyticUserActivityReportData",
+ "webAnalyticEntityViewReportData",
+ "rawCostAnalysisReportData",
+ "aggregatedCostAnalysisReportData"
+ ]
+ },
+ "data": {
+ "description": "Data captured",
+ "oneOf": [
+ {"$ref": "reportDataType/entityReportData.json"},
+ {"$ref": "reportDataType/webAnalyticUserActivityReportData.json"},
+ {"$ref": "reportDataType/webAnalyticEntityViewReportData.json"},
+ {"$ref": "reportDataType/rawCostAnalysisReportData.json"},
+ {"$ref": "reportDataType/aggregatedCostAnalysisReportData.json"}
+ ]
+ }
+ },
+ "required": ["timestamp"]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/analytics/reportDataType/aggregatedCostAnalysisReportData.json b/openmetadata-spec/bin/src/main/resources/json/schema/analytics/reportDataType/aggregatedCostAnalysisReportData.json
new file mode 100644
index 000000000000..62aeb25b71a0
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/analytics/reportDataType/aggregatedCostAnalysisReportData.json
@@ -0,0 +1,110 @@
+
+{
+ "$id": "https://open-metadata.org/schema/analytics/aggregatedCostAnalysisReportData.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "aggregatedCostAnalysisReportData",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.analytics.AggregatedCostAnalysisReportData",
+ "description": "Aggregated data for Cost Analysis Report.",
+ "definitions": {
+ "dataAssetValues": {
+ "description": "Count or Size in bytes of Data Assets over a time period",
+ "type": "object",
+ "properties": {
+ "threeDays": {
+ "description": "Data Asset Count or Size for 3 days",
+ "anyOf": [
+ {"type": "number"},
+ {"type": "null"}
+ ]
+ },
+ "sevenDays": {
+ "description": "Data Asset Count or Size for 7 days",
+ "anyOf": [
+ {"type": "number"},
+ {"type": "null"}
+ ]
+ },
+ "fourteenDays": {
+ "description": "Data Asset Count or Size for 14 days",
+ "anyOf": [
+ {"type": "number"},
+ {"type": "null"}
+ ]
+ },
+ "thirtyDays": {
+ "description": "Data Asset Count or Size for 30 days",
+ "anyOf": [
+ {"type": "number"},
+ {"type": "null"}
+ ]
+ },
+ "sixtyDays": {
+ "description": "Data Asset Count or Size for 60 days",
+ "anyOf": [
+ {"type": "number"},
+ {"type": "null"}
+ ]
+ }
+ },
+ "additionalProperties": false
+ },
+ "dataAssetMetrics": {
+ "description": "Store the Count and Size in bytes of the Data Assets over a time period",
+ "type": "object",
+ "properties": {
+ "size": {
+ "description": "Size of the Data Assets over a period of time",
+ "$ref": "#/definitions/dataAssetValues"
+ },
+ "count": {
+ "description": "Count of the Data Assets over a period of time",
+ "$ref": "#/definitions/dataAssetValues"
+ },
+ "totalSize": {
+ "description": "Total Size based in Bytes",
+ "type": "number"
+ },
+ "totalCount": {
+ "description": "Total Count",
+ "type": "number"
+ }
+ }
+ }
+ },
+ "properties": {
+ "unusedDataAssets": {
+ "description": "Count and Size of the unused Data Assets over a period of time",
+ "$ref": "#/definitions/dataAssetMetrics"
+ },
+ "frequentlyUsedDataAssets": {
+ "description": "Count and Size of the frequently used Data Assets over a period of time",
+ "$ref": "#/definitions/dataAssetMetrics"
+ },
+ "totalSize": {
+ "description": "Total Size based in Bytes",
+ "type": "number"
+ },
+ "totalCount": {
+ "description": "Total Count",
+ "type": "number"
+ },
+ "serviceName": {
+ "type": "string",
+ "description": "Name of the service"
+ },
+ "serviceType": {
+ "description": "Type of the service",
+ "type": "string"
+ },
+ "entityType": {
+ "type": "string",
+ "description": "Type of the entity"
+ },
+ "serviceOwner": {
+ "description": "Name of the service owner",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/analytics/reportDataType/entityReportData.json b/openmetadata-spec/bin/src/main/resources/json/schema/analytics/reportDataType/entityReportData.json
new file mode 100644
index 000000000000..458daa0e5f44
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/analytics/reportDataType/entityReportData.json
@@ -0,0 +1,51 @@
+{
+ "$id": "https://open-metadata.org/schema/analytics/entityReportData.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "entityReportData",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.analytics.EntityReportData",
+ "description": "Refined data for Entity Report.",
+ "properties": {
+ "serviceName": {
+ "type": "string",
+ "description": "Name of the service"
+ },
+ "entityType": {
+ "type": "string",
+ "description": "type of the entity"
+ },
+ "entityTier": {
+ "type": "string",
+ "description": "Tier for the entity"
+ },
+ "team": {
+ "type": "string",
+ "description": "Team associated with the entity (i.e. owner)"
+ },
+ "organization": {
+ "type": "string",
+ "description": "Organization associated with the entity (i.e. owner)"
+ },
+ "completedDescriptions": {
+ "type": "integer",
+ "description": "Number of completed description for the entity"
+ },
+ "missingDescriptions": {
+ "type": "integer",
+ "description": "Number of missing description for the entity"
+ },
+ "hasOwner": {
+ "type": "integer",
+ "description": "number of entities with owner"
+ },
+ "missingOwner": {
+ "type": "integer",
+ "description": "number of entities missing owners"
+ },
+ "entityCount": {
+ "type": "integer",
+ "description": "number of entities"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/analytics/reportDataType/rawCostAnalysisReportData.json b/openmetadata-spec/bin/src/main/resources/json/schema/analytics/reportDataType/rawCostAnalysisReportData.json
new file mode 100644
index 000000000000..e4c752428e32
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/analytics/reportDataType/rawCostAnalysisReportData.json
@@ -0,0 +1,24 @@
+{
+ "$id": "https://open-metadata.org/schema/analytics/rawCostAnalysisReportData.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "rawCostAnalysisReportData",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.analytics.RawCostAnalysisReportData",
+ "description": "Raw data for Cost Analysis Report.",
+ "properties": {
+ "entity": {
+ "description": "Entity of the life cycle data",
+ "$ref": "../../type/entityReference.json"
+ },
+ "lifeCycle": {
+ "$ref": "../../type/lifeCycle.json",
+ "description": "Life Cycle data related to the entity"
+ },
+ "sizeInByte": {
+ "description": "Entity size in bytes",
+ "type": "number"
+ }
+ },
+ "required": ["entity"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/analytics/reportDataType/webAnalyticEntityViewReportData.json b/openmetadata-spec/bin/src/main/resources/json/schema/analytics/reportDataType/webAnalyticEntityViewReportData.json
new file mode 100644
index 000000000000..c288b01f3fd0
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/analytics/reportDataType/webAnalyticEntityViewReportData.json
@@ -0,0 +1,46 @@
+{
+ "$id": "https://open-metadata.org/schema/analytics/webAnalyticEntityViewReportData.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "webAnalyticEntityViewReportData",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.analytics.WebAnalyticEntityViewReportData",
+ "description": "Refined data for overview report",
+ "properties": {
+ "entityType": {
+ "type": "string",
+ "description": "entity type"
+ },
+ "entityTier": {
+ "type": "string",
+ "description": "entity tier"
+ },
+ "entityFqn": {
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName",
+ "description": "entity fully qualified name"
+ },
+ "entityHref": {
+ "description": "entity href",
+ "type": "string"
+ },
+ "tagsFQN": {
+ "description": "Tags FQN",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json#/definitions/tagFQN"
+ }
+ },
+ "owner": {
+ "description": "Name of the entity owner",
+ "type": "string"
+ },
+ "ownerId": {
+ "description": "Name of the entity owner",
+ "type": "string"
+ },
+ "views": {
+ "description": "Number of time the entity was viewed",
+ "type": "integer"
+ }
+ },
+ "additionalProperties": false
+ }
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/analytics/reportDataType/webAnalyticUserActivityReportData.json b/openmetadata-spec/bin/src/main/resources/json/schema/analytics/reportDataType/webAnalyticUserActivityReportData.json
new file mode 100644
index 000000000000..72361f18f822
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/analytics/reportDataType/webAnalyticUserActivityReportData.json
@@ -0,0 +1,39 @@
+{
+ "$id": "https://open-metadata.org/schema/analytics/webAnalyticUserActivityReportData.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "webAnalyticUserActivityReportData",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.analytics.WebAnalyticUserActivityReportData",
+ "description": "Refined data for overview report",
+ "properties": {
+ "userName": {
+ "type": "string",
+ "description": "user name"
+ },
+ "userId": {
+ "$ref": "../../type/basic.json#/definitions/uuid",
+ "description": "user ID in OM"
+ },
+ "team": {
+ "type": "string",
+ "description": "the team the user belongs to"
+ },
+ "totalSessions": {
+ "type": "integer",
+ "description": "total number of sessions"
+ },
+ "totalSessionDuration": {
+ "type": "integer",
+ "description": "total user count"
+ },
+ "totalPageView": {
+ "type": "integer",
+ "description": "total user count"
+ },
+ "lastSession": {
+ "$ref": "../../type/basic.json#/definitions/timestamp",
+ "description": "latest session"
+ }
+ },
+ "additionalProperties": false
+ }
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/analytics/webAnalyticEvent.json b/openmetadata-spec/bin/src/main/resources/json/schema/analytics/webAnalyticEvent.json
new file mode 100644
index 000000000000..b8e6902510e2
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/analytics/webAnalyticEvent.json
@@ -0,0 +1,80 @@
+{
+ "$id": "https://open-metadata.org/schema/analytics/webAnalyticEvent.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "WebAnalyticEvent",
+ "description": "Web Analytic Event",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.analytics.WebAnalyticEvent",
+ "javaInterfaces": ["org.openmetadata.schema.EntityInterface"],
+ "properties": {
+ "id": {
+ "description": "Unique identifier of the report.",
+ "$ref": "../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name that identifies this event.",
+ "$ref": "../type/basic.json#/definitions/entityName"
+ },
+ "fullyQualifiedName": {
+ "description": "FullyQualifiedName same as `name`.",
+ "$ref": "../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this web analytics event.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the event.",
+ "$ref": "../type/basic.json#/definitions/markdown"
+ },
+ "eventType": {
+ "description": "event type",
+ "$ref": "./basic.json#/definitions/webAnalyticEventType"
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "owners": {
+ "description": "Owners of this report.",
+ "$ref": "../type/entityReferenceList.json",
+ "default": null
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who performed the update.",
+ "type": "string"
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this entity.",
+ "$ref": "../type/basic.json#/definitions/href"
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "enabled": {
+ "description": "Weather the event is enable (i.e. data is being collected)",
+ "type": "boolean",
+ "default": true
+ },
+ "domains" : {
+ "description": "Domains the asset belongs to. When not set, the asset inherits the domain from the parent it belongs to.",
+ "$ref": "../type/entityReferenceList.json"
+ }
+ },
+ "required": ["eventType", "name"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/analytics/webAnalyticEventData.json b/openmetadata-spec/bin/src/main/resources/json/schema/analytics/webAnalyticEventData.json
new file mode 100644
index 000000000000..f6770f61f11a
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/analytics/webAnalyticEventData.json
@@ -0,0 +1,31 @@
+{
+ "$id": "https://open-metadata.org/schema/analytics/webAnalyticEventData.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "webAnalyticEventData",
+ "description": "web analytics event data",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.analytics.WebAnalyticEventData",
+ "properties": {
+ "eventId": {
+ "description": "Unique identifier of the report.",
+ "$ref": "../type/basic.json#/definitions/uuid"
+ },
+ "timestamp": {
+ "description": "event timestamp",
+ "$ref": "../type/basic.json#/definitions/timestamp"
+ },
+ "eventType": {
+ "description": "event type",
+ "$ref": "./basic.json#/definitions/webAnalyticEventType"
+ },
+ "eventData": {
+ "description": "Web analytic data captured",
+ "oneOf": [
+ {"$ref": "webAnalyticEventType/pageViewEvent.json"},
+ {"$ref": "webAnalyticEventType/customEvent.json"}
+ ]
+ }
+ },
+ "required": ["eventType", "timestamp"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/analytics/webAnalyticEventType/customEvent.json b/openmetadata-spec/bin/src/main/resources/json/schema/analytics/webAnalyticEventType/customEvent.json
new file mode 100644
index 000000000000..47e5c8923154
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/analytics/webAnalyticEventType/customEvent.json
@@ -0,0 +1,43 @@
+{
+ "$id": "https://open-metadata.org/schema/analytics/customEvent.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "customData",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.analytics.CustomEvent",
+ "description": "Event tracker (e.g. clicks, etc.)",
+ "definitions": {
+ "customEventTypes": {
+ "description": "Type of events that can be performed",
+ "type": "string",
+ "enum": [
+ "CLICK"
+ ]
+ }
+ },
+ "properties": {
+ "fullUrl": {
+ "description": "complete URL of the page",
+ "$ref": "../basic.json#/definitions/fullUrl"
+ },
+ "url": {
+ "description": "url part after the domain specification",
+ "$ref": "../basic.json#/definitions/url"
+ },
+ "hostname": {
+ "description": "domain name",
+ "$ref": "../basic.json#/definitions/hostname"
+ },
+ "sessionId": {
+ "description": "Unique ID identifying a session",
+ "$ref": "../basic.json#/definitions/sessionId"
+ },
+ "eventType": {
+ "description": "Type of event that was performed",
+ "$ref": "#/definitions/customEventTypes"
+ },
+ "eventValue": {
+ "description": "Value of the event",
+ "type": "string"
+ }
+ }
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/analytics/webAnalyticEventType/pageViewEvent.json b/openmetadata-spec/bin/src/main/resources/json/schema/analytics/webAnalyticEventType/pageViewEvent.json
new file mode 100644
index 000000000000..809f889fe105
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/analytics/webAnalyticEventType/pageViewEvent.json
@@ -0,0 +1,46 @@
+{
+ "$id": "https://open-metadata.org/schema/analytics/pageViewData.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "pageViewData",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.analytics.PageViewData",
+ "description": "Page view data event",
+ "properties": {
+ "fullUrl": {
+ "description": "complete URL of the page",
+ "$ref": "../basic.json#/definitions/fullUrl"
+ },
+ "url": {
+ "description": "url part after the domain specification",
+ "$ref": "../basic.json#/definitions/url"
+ },
+ "hostname": {
+ "description": "domain name",
+ "$ref": "../basic.json#/definitions/hostname"
+ },
+ "language": {
+ "description": "language set on the page",
+ "type": "string"
+ },
+ "screenSize": {
+ "description": "Size of the screen",
+ "type": "string"
+ },
+ "userId": {
+ "description": "OpenMetadata logged in user Id",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "sessionId": {
+ "description": "Unique ID identifying a session",
+ "$ref": "../basic.json#/definitions/sessionId"
+ },
+ "pageLoadTime": {
+ "description": "time for the page to load in seconds",
+ "type": "number"
+ },
+ "referrer": {
+ "description": "referrer URL",
+ "type": "string"
+ }
+ }
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/addGlossaryToAssetsRequest.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/addGlossaryToAssetsRequest.json
new file mode 100644
index 000000000000..f20e43ce7b82
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/addGlossaryToAssetsRequest.json
@@ -0,0 +1,20 @@
+{
+ "$id": "https://open-metadata.org/schema/api/createBot.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AddGlossaryToAssetsRequest",
+ "description": "Create Request for adding a glossary to assets",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.AddGlossaryToAssetsRequest",
+ "properties": {
+ "dryRun": {
+ "description": "If true, the request will be validated but no changes will be made",
+ "type": "boolean",
+ "default": true
+ },
+ "assets": {
+ "description": "List of assets to be created against which the glossary needs to be added.",
+ "$ref": "../type/entityReferenceList.json"
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/addTagToAssetsRequest.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/addTagToAssetsRequest.json
new file mode 100644
index 000000000000..936caa6f89cc
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/addTagToAssetsRequest.json
@@ -0,0 +1,21 @@
+{
+ "$id": "https://open-metadata.org/schema/api/createBot.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AddTagToAssetsRequest",
+ "description": "Create Request for adding a tag to assets",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.AddTagToAssetsRequest",
+ "javaInterfaces": ["org.openmetadata.schema.BulkAssetsRequestInterface"],
+ "properties": {
+ "dryRun": {
+ "description": "If true, the request will be validated but no changes will be made",
+ "type": "boolean",
+ "default": true
+ },
+ "assets": {
+ "description": "List of assets to be created against which the tag needs to be added.",
+ "$ref": "../type/entityReferenceList.json"
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/ai/createAIApplication.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/ai/createAIApplication.json
new file mode 100644
index 000000000000..cd913628ff50
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/ai/createAIApplication.json
@@ -0,0 +1,140 @@
+{
+ "$id": "https://open-metadata.org/schema/api/ai/createAIApplication.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateAIApplicationRequest",
+ "description": "Create AI Application entity request",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.ai.CreateAIApplication",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+
+ "properties": {
+ "name": {
+ "description": "Name that identifies this AI application.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this AI application.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the AI application. What it does and how it is used.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "applicationType": {
+ "description": "Type of AI application",
+ "$ref": "../../entity/ai/aiApplication.json#/definitions/applicationType"
+ },
+ "developmentStage": {
+ "description": "Development stage of the AI application",
+ "$ref": "../../entity/ai/aiApplication.json#/definitions/developmentStage"
+ },
+ "modelConfigurations": {
+ "description": "Multiple LLM models this application can use for different purposes",
+ "type": "array",
+ "items": {
+ "$ref": "../../entity/ai/aiApplication.json#/definitions/modelConfiguration"
+ }
+ },
+ "primaryModel": {
+ "description": "Primary/default LLM model used by this application",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "promptTemplates": {
+ "description": "Prompt templates used by this application",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "tools": {
+ "description": "MCP tools or other tools available to this application",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "dataSources": {
+ "description": "Data sources the application can access",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "knowledgeBases": {
+ "description": "Knowledge bases or vector stores the application uses",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "upstreamApplications": {
+ "description": "Other AI applications this application depends on",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "downstreamApplications": {
+ "description": "AI applications that depend on this application",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "framework": {
+ "description": "Framework used to build the application",
+ "$ref": "../../entity/ai/aiApplication.json#/definitions/frameworkInfo"
+ },
+ "governanceMetadata": {
+ "description": "Governance and compliance metadata",
+ "$ref": "../../entity/ai/aiApplication.json#/definitions/governanceMetadata"
+ },
+ "biasMetrics": {
+ "description": "Bias evaluation metrics",
+ "$ref": "../../entity/ai/aiApplication.json#/definitions/biasMetrics"
+ },
+ "performanceMetrics": {
+ "description": "Runtime performance metrics",
+ "$ref": "../../entity/ai/aiApplication.json#/definitions/performanceMetrics"
+ },
+ "qualityMetrics": {
+ "description": "Quality metrics for responses",
+ "$ref": "../../entity/ai/aiApplication.json#/definitions/qualityMetrics"
+ },
+ "safetyMetrics": {
+ "description": "Safety metrics",
+ "$ref": "../../entity/ai/aiApplication.json#/definitions/safetyMetrics"
+ },
+ "testSuites": {
+ "description": "Test suites for validating this AI application",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "sourceCode": {
+ "description": "Link to source code repository",
+ "type": "string"
+ },
+ "deploymentUrl": {
+ "description": "Production deployment endpoint",
+ "type": "string"
+ },
+ "documentation": {
+ "description": "Link to external documentation",
+ "type": "string"
+ },
+ "tags": {
+ "description": "Tags for this AI Application",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "owners": {
+ "description": "Owners of this AI Application",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ },
+ "domains" : {
+ "description": "Fully qualified names of the domains the AI Application belongs to.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "dataProducts" : {
+ "description": "List of fully qualified names of data products this entity is part of.",
+ "type": "array",
+ "items" : {
+ "$ref" : "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ }
+ }
+ },
+ "required": ["name", "applicationType"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/ai/createAIGovernancePolicy.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/ai/createAIGovernancePolicy.json
new file mode 100644
index 000000000000..f837699b1e71
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/ai/createAIGovernancePolicy.json
@@ -0,0 +1,99 @@
+{
+ "$id": "https://open-metadata.org/schema/api/ai/createAIGovernancePolicy.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateAIGovernancePolicyRequest",
+ "description": "Create AI Governance Policy entity request",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.ai.CreateAIGovernancePolicy",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+
+ "properties": {
+ "name": {
+ "description": "Name that identifies this AI governance policy.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this AI governance policy.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the AI governance policy. Its requirements and scope.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "policyType": {
+ "description": "Type of governance policy",
+ "$ref": "../../entity/ai/aiGovernancePolicy.json#/definitions/policyType"
+ },
+ "rules": {
+ "description": "Policy rules and conditions",
+ "type": "array",
+ "items": {
+ "$ref": "../../entity/ai/aiGovernancePolicy.json#/definitions/policyRule"
+ }
+ },
+ "biasThresholds": {
+ "description": "Bias detection thresholds",
+ "$ref": "../../entity/ai/aiGovernancePolicy.json#/definitions/biasThreshold"
+ },
+ "dataAccessControls": {
+ "description": "Data access control requirements",
+ "$ref": "../../entity/ai/aiGovernancePolicy.json#/definitions/dataAccessControl"
+ },
+ "costControls": {
+ "description": "Cost control thresholds and limits",
+ "$ref": "../../entity/ai/aiGovernancePolicy.json#/definitions/costControl"
+ },
+ "complianceRequirements": {
+ "description": "Compliance and regulatory requirements",
+ "type": "array",
+ "items": {
+ "$ref": "../../entity/ai/aiGovernancePolicy.json#/definitions/complianceRequirement"
+ }
+ },
+ "performanceStandards": {
+ "description": "Performance and quality standards",
+ "$ref": "../../entity/ai/aiGovernancePolicy.json#/definitions/performanceStandard"
+ },
+ "appliesTo": {
+ "description": "Entities this policy applies to",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "enforcementLevel": {
+ "description": "How strictly the policy is enforced",
+ "type": "string",
+ "enum": ["Advisory", "Warning", "Blocking"],
+ "default": "Warning"
+ },
+ "enabled": {
+ "description": "Whether this policy is currently active",
+ "type": "boolean",
+ "default": true
+ },
+ "tags": {
+ "description": "Tags for this AI Governance Policy",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "owners": {
+ "description": "Owners of this AI Governance Policy",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ },
+ "domains" : {
+ "description": "Fully qualified names of the domains the AI Governance Policy belongs to.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "required": ["name", "policyType"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/ai/createAgentExecution.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/ai/createAgentExecution.json
new file mode 100644
index 000000000000..9dc63dd14fdf
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/ai/createAgentExecution.json
@@ -0,0 +1,103 @@
+{
+ "$id": "https://open-metadata.org/schema/api/ai/createAgentExecution.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateAgentExecutionRequest",
+ "description": "Create Agent Execution entity request",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.ai.CreateAgentExecution",
+
+ "properties": {
+ "agent": {
+ "description": "Reference to the AI agent that executed",
+ "$ref": "../../type/entityReference.json"
+ },
+ "agentId": {
+ "description": "ID of the AI Agent",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "timestamp": {
+ "description": "Execution start timestamp",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "endTimestamp": {
+ "description": "Execution end timestamp",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "status": {
+ "description": "Execution status",
+ "$ref": "../../entity/ai/agentExecution.json#/definitions/executionStatus"
+ },
+ "input": {
+ "description": "Input provided to the agent",
+ "type": "string"
+ },
+ "output": {
+ "description": "Output generated by the agent",
+ "type": "string"
+ },
+ "modelCalls": {
+ "description": "LLM model calls made during execution",
+ "type": "array",
+ "items": {
+ "$ref": "../../entity/ai/agentExecution.json#/definitions/modelCall"
+ }
+ },
+ "dataAccessed": {
+ "description": "Data sources accessed during execution",
+ "type": "array",
+ "items": {
+ "$ref": "../../entity/ai/agentExecution.json#/definitions/dataAccess"
+ }
+ },
+ "toolCalls": {
+ "description": "Tool calls made during execution",
+ "type": "array",
+ "items": {
+ "$ref": "../../entity/ai/agentExecution.json#/definitions/toolCall"
+ }
+ },
+ "metrics": {
+ "description": "Performance and cost metrics",
+ "$ref": "../../entity/ai/agentExecution.json#/definitions/executionMetrics"
+ },
+ "errorMessage": {
+ "description": "Error message if execution failed",
+ "type": "string"
+ },
+ "errorStack": {
+ "description": "Error stack trace",
+ "type": "string"
+ },
+ "complianceChecks": {
+ "description": "Compliance checks performed",
+ "type": "array",
+ "items": {
+ "$ref": "../../entity/ai/agentExecution.json#/definitions/complianceCheck"
+ }
+ },
+ "executedBy": {
+ "description": "User or system that triggered the execution",
+ "type": "string"
+ },
+ "sessionId": {
+ "description": "Session ID for grouping related executions",
+ "type": "string"
+ },
+ "environment": {
+ "description": "Environment where execution occurred",
+ "type": "string",
+ "enum": ["Development", "Staging", "Production"]
+ },
+ "agentVersion": {
+ "description": "Version of the agent at execution time",
+ "type": "string"
+ },
+ "metadata": {
+ "description": "Additional execution metadata",
+ "type": "object",
+ "additionalProperties": {"type": "string"}
+ }
+ },
+ "required": ["agent", "agentId", "timestamp", "status"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/ai/createLLMModel.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/ai/createLLMModel.json
new file mode 100644
index 000000000000..245cd4d22112
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/ai/createLLMModel.json
@@ -0,0 +1,108 @@
+{
+ "$id": "https://open-metadata.org/schema/api/ai/createLLMModel.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateLLMModelRequest",
+ "description": "Create LLM Model entity request",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.ai.CreateLLMModel",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+
+ "properties": {
+ "name": {
+ "description": "Name that identifies this LLM model.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this LLM model.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the LLM model. Its capabilities, use cases, and limitations.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "baseModel": {
+ "description": "Base model name",
+ "type": "string"
+ },
+ "modelVersion": {
+ "description": "Version of the model",
+ "type": "string"
+ },
+ "modelProvider": {
+ "description": "Model provider (e.g., 'OpenAI', 'Anthropic', 'Meta')",
+ "type": "string"
+ },
+ "modelSpecifications": {
+ "description": "Detailed model specifications",
+ "$ref": "../../entity/ai/llmModel.json#/definitions/modelSpecifications"
+ },
+ "trainingMetadata": {
+ "description": "Training data and methodology information",
+ "$ref": "../../entity/ai/llmModel.json#/definitions/trainingMetadata"
+ },
+ "modelEvaluation": {
+ "description": "Model performance metrics and evaluation results",
+ "$ref": "../../entity/ai/llmModel.json#/definitions/modelEvaluation"
+ },
+ "costMetrics": {
+ "description": "Cost metrics for model usage",
+ "$ref": "../../entity/ai/llmModel.json#/definitions/costMetrics"
+ },
+ "deploymentInfo": {
+ "description": "Deployment and availability information",
+ "$ref": "../../entity/ai/llmModel.json#/definitions/deploymentInfo"
+ },
+ "governanceStatus": {
+ "description": "Governance status - tracks unauthorized/shadow AI models",
+ "type": "string",
+ "enum": ["Approved", "PendingReview", "Rejected", "Unauthorized"]
+ },
+ "certifications": {
+ "description": "Certifications this model has received",
+ "type": "array",
+ "items": {"type": "string"}
+ },
+ "regulatoryCompliance": {
+ "description": "Regulatory compliance standards met",
+ "type": "array",
+ "items": {"type": "string"}
+ },
+ "service": {
+ "description": "Link to the LLM service where this model is hosted",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "tags": {
+ "description": "Tags for this LLM Model",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "owners": {
+ "description": "Owners of this LLM Model",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ },
+ "domains" : {
+ "description": "Fully qualified names of the domains the LLM Model belongs to.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "dataProducts" : {
+ "description": "List of fully qualified names of data products this entity is part of.",
+ "type": "array",
+ "items" : {
+ "$ref" : "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ }
+ }
+ },
+ "required": ["name", "baseModel", "service"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/ai/createMcpServer.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/ai/createMcpServer.json
new file mode 100644
index 000000000000..e9750389d0bd
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/ai/createMcpServer.json
@@ -0,0 +1,137 @@
+{
+ "$id": "https://open-metadata.org/schema/api/ai/createMcpServer.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateMcpServerRequest",
+ "description": "Create MCP Server entity request",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.ai.CreateMcpServer",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+
+ "properties": {
+ "name": {
+ "description": "Name that identifies this MCP Server.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this MCP Server.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the MCP Server, its purpose, and capabilities.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "service": {
+ "description": "Link to the MCP service that contains this server",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "serverType": {
+ "description": "Type of MCP server based on its primary function",
+ "$ref": "../../entity/ai/mcpServer.json#/definitions/serverType"
+ },
+ "transportType": {
+ "description": "Transport protocol used by the MCP server",
+ "$ref": "../../entity/ai/mcpServer.json#/definitions/transportType"
+ },
+ "protocolVersion": {
+ "type": "string",
+ "description": "MCP protocol version supported by this server"
+ },
+ "developmentStage": {
+ "description": "Development stage of the MCP server",
+ "$ref": "../../entity/ai/mcpServer.json#/definitions/developmentStage"
+ },
+ "serverInfo": {
+ "description": "Information about the MCP server software",
+ "$ref": "../../entity/ai/mcpServer.json#/definitions/serverInfo"
+ },
+ "connectionConfig": {
+ "description": "Connection configuration for the MCP server",
+ "$ref": "../../entity/ai/mcpServer.json#/definitions/connectionConfig"
+ },
+ "capabilities": {
+ "description": "Capabilities supported by the MCP server",
+ "$ref": "../../entity/ai/mcpServer.json#/definitions/serverCapabilities"
+ },
+ "tools": {
+ "description": "Tools exposed by this MCP Server",
+ "type": "array",
+ "items": {
+ "$ref": "../../entity/ai/mcpServer.json#/definitions/mcpTool"
+ },
+ "default": null
+ },
+ "resources": {
+ "description": "Resources exposed by this MCP Server",
+ "type": "array",
+ "items": {
+ "$ref": "../../entity/ai/mcpServer.json#/definitions/mcpResource"
+ },
+ "default": null
+ },
+ "prompts": {
+ "description": "Prompt templates exposed by this MCP Server",
+ "type": "array",
+ "items": {
+ "$ref": "../../entity/ai/mcpServer.json#/definitions/mcpPrompt"
+ },
+ "default": null
+ },
+ "governanceMetadata": {
+ "description": "Governance and compliance metadata",
+ "$ref": "../../entity/ai/mcpServer.json#/definitions/governanceMetadata"
+ },
+ "dataAccessSummary": {
+ "description": "Summary of data access patterns",
+ "$ref": "../../entity/ai/mcpServer.json#/definitions/dataAccessSummary"
+ },
+ "securityMetrics": {
+ "description": "Security metrics and settings",
+ "$ref": "../../entity/ai/mcpServer.json#/definitions/securityMetrics"
+ },
+ "sourceCode": {
+ "description": "Link to source code repository",
+ "type": "string"
+ },
+ "deploymentUrl": {
+ "description": "Deployment endpoint URL",
+ "type": "string"
+ },
+ "documentation": {
+ "description": "Link to external documentation",
+ "type": "string"
+ },
+ "tags": {
+ "description": "Tags for this MCP Server",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "owners": {
+ "description": "Owners of this MCP Server",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ },
+ "domains": {
+ "description": "Fully qualified names of the domains the MCP Server belongs to.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "dataProducts": {
+ "description": "List of fully qualified names of data products this entity is part of.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ }
+ }
+ },
+ "required": ["name", "serverType", "service"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/ai/createPromptTemplate.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/ai/createPromptTemplate.json
new file mode 100644
index 000000000000..5ca43bd5de6d
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/ai/createPromptTemplate.json
@@ -0,0 +1,88 @@
+{
+ "$id": "https://open-metadata.org/schema/api/ai/createPromptTemplate.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreatePromptTemplateRequest",
+ "description": "Create Prompt Template entity request",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.ai.CreatePromptTemplate",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+
+ "properties": {
+ "name": {
+ "description": "Name that identifies this prompt template.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this prompt template.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the prompt template. Its purpose and usage.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "templateContent": {
+ "description": "The actual prompt template text with variable placeholders",
+ "type": "string"
+ },
+ "systemPrompt": {
+ "description": "Optional system prompt to accompany the template",
+ "type": "string"
+ },
+ "variables": {
+ "description": "Variables used in the template",
+ "type": "array",
+ "items": {
+ "$ref": "../../entity/ai/promptTemplate.json#/definitions/templateVariable"
+ }
+ },
+ "examples": {
+ "description": "Example usages of the template",
+ "type": "array",
+ "items": {
+ "$ref": "../../entity/ai/promptTemplate.json#/definitions/promptExample"
+ }
+ },
+ "templateType": {
+ "description": "Type of prompt template",
+ "type": "string",
+ "enum": ["ChatCompletion", "TextGeneration", "CodeGeneration", "Embedding", "Classification", "Extraction", "Custom"]
+ },
+ "templateVersion": {
+ "description": "Template version for tracking changes",
+ "type": "string"
+ },
+ "tags": {
+ "description": "Tags for this Prompt Template",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "owners": {
+ "description": "Owners of this Prompt Template",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ },
+ "domains" : {
+ "description": "Fully qualified names of the domains the Prompt Template belongs to.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "dataProducts" : {
+ "description": "List of fully qualified names of data products this entity is part of.",
+ "type": "array",
+ "items" : {
+ "$ref" : "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ }
+ }
+ },
+ "required": ["name", "templateContent"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/analytics/createWebAnalyticEvent.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/analytics/createWebAnalyticEvent.json
new file mode 100644
index 000000000000..4f01b39aac8f
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/analytics/createWebAnalyticEvent.json
@@ -0,0 +1,41 @@
+{
+ "$id": "https://open-metadata.org/schema/api/tests/createWebAnalyticEvent.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateWebAnalyticEvent",
+ "description": "Payload to create a web analytic event",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.tests.CreateWebAnalyticEvent",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+ "properties": {
+ "name": {
+ "description": "Name that identifies this report definition.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name the report definition.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the report definition.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "eventType": {
+ "description": "dimension(s) and metric(s) for a report",
+ "$ref": "../../analytics/basic.json#/definitions/webAnalyticEventType"
+ },
+ "owners": {
+ "description": "Owners of this report definition",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "domains" : {
+ "description": "Fully qualified names of the domains the Web Analytic Event belongs to.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "required": ["name", "eventType"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/automations/createWorkflow.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/automations/createWorkflow.json
new file mode 100644
index 000000000000..ba3338cb0888
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/automations/createWorkflow.json
@@ -0,0 +1,74 @@
+{
+ "$id": "https://open-metadata.org/schema/api/automations/createWorkflow.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateWorkflowRequest",
+ "description": "A unit of work that will be triggered as an API call to the OpenMetadata server.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.automations.CreateWorkflow",
+ "javaInterfaces": [
+ "org.openmetadata.schema.CreateEntity"
+ ],
+ "properties": {
+ "name": {
+ "description": "Name of the workflow.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this workflow definition.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the test connection def.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "workflowType": {
+ "description": "Type of the workflow.",
+ "$ref": "../../entity/automations/workflow.json#/definitions/workflowType"
+ },
+ "request": {
+ "description": "Request body for a specific workflow type",
+ "oneOf": [
+ {
+ "$ref": "../../entity/automations/testServiceConnection.json"
+ },
+ {
+ "$ref": "../../metadataIngestion/reverseIngestionPipeline.json"
+ }
+ ]
+ },
+ "status": {
+ "description": "Workflow computation status.",
+ "$ref": "../../entity/automations/workflow.json#/definitions/workflowStatus",
+ "default": "Pending"
+ },
+ "response": {
+ "description": "Response to the request.",
+ "oneOf": [
+ {
+ "$ref": "../../entity/services/connections/testConnectionResult.json"
+ },
+ {
+ "$ref": "../../entity/services/ingestionPipelines/reverseIngestionResponse.json"
+ }
+ ]
+ },
+ "owners": {
+ "description": "Owners of this workflow.",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "domains": {
+ "description": "Fully qualified names of the domains the Workflow belongs to.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "name",
+ "workflowType",
+ "request"
+ ]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/bulkAssets.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/bulkAssets.json
new file mode 100644
index 000000000000..2b4be58568db
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/bulkAssets.json
@@ -0,0 +1,15 @@
+{
+ "$id": "https://open-metadata.org/schema/api/bulkAssets.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "BulkAssets",
+ "description": "Represents schema for adding bulk relationships to an entity.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.api.BulkAssets",
+ "properties": {
+ "assets": {
+ "description": "List of assets to be created against which the glossary needs to be added.",
+ "$ref": "../type/entityReferenceList.json"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/bulkEntityPatch.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/bulkEntityPatch.json
new file mode 100644
index 000000000000..2764d05cefe2
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/bulkEntityPatch.json
@@ -0,0 +1,44 @@
+{
+ "$id": "https://open-metadata.org/schema/api/bulkEntityPatch.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "BulkEntityPatch",
+ "description": "Schema for bulk patching multiple entities with JsonPatch operations",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.BulkEntityPatch",
+ "definitions": {
+ "entityPatch": {
+ "javaType": "org.openmetadata.schema.api.EntityPatch",
+ "description": "JsonPatch operation for a single entity",
+ "type": "object",
+ "properties": {
+ "fqn": {
+ "description": "Fully qualified name of the entity to patch",
+ "$ref": "../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "patch": {
+ "description": "JsonPatch document with operations to apply",
+ "type": "array"
+ }
+ },
+ "required": ["fqn", "patch"],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "patches": {
+ "description": "List of entity patch operations",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/entityPatch"
+ },
+ "minItems": 1
+ },
+ "dryRun": {
+ "description": "If true, validate patches without persisting changes",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "required": ["patches"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/classification/createClassification.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/classification/createClassification.json
new file mode 100644
index 000000000000..b56737222efc
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/classification/createClassification.json
@@ -0,0 +1,79 @@
+{
+ "$id": "https://open-metadata.org/schema/api/classification/createClassification.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateClassificationRequest",
+ "description": "Create classification request",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.classification.CreateClassification",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+
+ "properties": {
+ "name": {
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this classification.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the classification.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "provider": {
+ "$ref": "../../type/basic.json#/definitions/providerType"
+ },
+ "mutuallyExclusive" : {
+ "description" : "Tags under this classification are mutually exclusive. When mutually exclusive is `true` the tags from this classification are used to **classify** an entity. An entity can only be in one class - example, it can only be either `tier1` or `tier2` and not both. When mutually exclusive is `false`, the tags from this classification are used to **categorize** an entity. An entity can be in multiple categories simultaneously - example a customer can be `newCustomer` and `atRisk` simultaneously.",
+ "type" : "boolean",
+ "default" : false
+ },
+ "domains" : {
+ "description": "Fully qualified names of the domains the Classification belongs to.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "owners": {
+ "description": "Owners of this classification term.",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "reviewers": {
+ "description": "User references of the reviewers for this tag.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "autoClassificationConfig": {
+ "description": "Configuration for automatic classification behavior",
+ "type": "object",
+ "properties": {
+ "enabled": {
+ "description": "Whether automatic classification is enabled for this classification",
+ "type": "boolean",
+ "default": false
+ },
+ "conflictResolution": {
+ "description": "Strategy for resolving conflicts when multiple tags match",
+ "type": "string",
+ "enum": ["highest_confidence", "highest_priority", "most_specific"],
+ "default": "highest_confidence"
+ },
+ "minimumConfidence": {
+ "description": "Minimum confidence score required to apply a tag",
+ "type": "number",
+ "minimum": 0.0,
+ "maximum": 1.0,
+ "default": 0.6
+ },
+ "requireExplicitMatch": {
+ "description": "Only apply tags when recognizers explicitly match (no default tagging)",
+ "type": "boolean",
+ "default": true
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "required": ["name", "description"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/classification/createTag.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/classification/createTag.json
new file mode 100644
index 000000000000..fbdbf522cc53
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/classification/createTag.json
@@ -0,0 +1,85 @@
+{
+ "$id": "https://open-metadata.org/schema/api/classification/createTag.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateTagRequest",
+ "description": "Create tag API request",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.classification.CreateTag",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+
+ "properties": {
+ "classification": {
+ "description": "Name of the classification that this tag is part of.",
+ "$ref" : "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "parent": {
+ "description": "Fully qualified name of the parent tag. When null, the term is at the root of the classification.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "name": {
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this tag.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Unique name of the classification",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "style": {
+ "$ref": "../../type/basic.json#/definitions/style"
+ },
+ "associatedTags": {
+ "description": "Fully qualified names of tags associated with this tag",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "provider": {
+ "$ref": "../../type/basic.json#/definitions/providerType"
+ },
+ "mutuallyExclusive" : {
+ "description" : "Children tags under this group are mutually exclusive. When mutually exclusive is `true` the tags from this group are used to **classify** an entity. An entity can only be in one class - example, it can only be either `tier1` or `tier2` and not both. When mutually exclusive is `false`, the tags from this group are used to **categorize** an entity. An entity can be in multiple categories simultaneously - example a customer can be `newCustomer` and `atRisk` simultaneously.",
+ "type" : "boolean",
+ "default" : false
+ },
+ "domains" : {
+ "description": "Fully qualified names of the domains the Tag belongs to.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "owners": {
+ "description": "Owners of this glossary term.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "reviewers": {
+ "description": "User references of the reviewers for this tag.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "recognizers": {
+ "description": "List of recognizers configured for automatic detection of this tag",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/recognizer.json"
+ }
+ },
+ "autoClassificationEnabled": {
+ "description": "Whether automatic classification is enabled for this tag",
+ "type": "boolean",
+ "default": false
+ },
+ "autoClassificationPriority": {
+ "description": "Priority for conflict resolution when multiple tags match (higher number = higher priority)",
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 100,
+ "default": 50
+ }
+ },
+ "required": ["name", "description"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/classification/createTagWithRecognizers.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/classification/createTagWithRecognizers.json
new file mode 100644
index 000000000000..0093a9f592a6
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/classification/createTagWithRecognizers.json
@@ -0,0 +1,62 @@
+{
+ "$id": "https://open-metadata.org/schema/api/classification/createTagWithRecognizers.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateTagWithRecognizersRequest",
+ "description": "Create or Update Tag Request with Recognizer Configuration",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.classification.CreateTagWithRecognizers",
+ "properties": {
+ "classification": {
+ "description": "Fully qualified name of the classification that this tag is part of",
+ "type": "string"
+ },
+ "parent": {
+ "description": "Fully qualified name of the parent tag. When null, the tag is at the root of the classification",
+ "type": "string"
+ },
+ "name": {
+ "description": "Name of the tag",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display name for the tag",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the tag",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "style": {
+ "$ref": "../../type/basic.json#/definitions/style"
+ },
+ "autoClassificationEnabled": {
+ "description": "Whether automatic classification is enabled for this tag",
+ "type": "boolean",
+ "default": false
+ },
+ "autoClassificationPriority": {
+ "description": "Priority for conflict resolution when multiple tags match",
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 100,
+ "default": 50
+ },
+ "recognizers": {
+ "description": "List of recognizers for automatic detection",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/recognizer.json"
+ }
+ },
+ "owners": {
+ "description": "Owners of this tag",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "reviewers": {
+ "description": "Reviewers of this tag",
+ "$ref": "../../type/entityReferenceList.json"
+ }
+ },
+ "required": ["classification", "name", "description"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/classification/loadTags.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/classification/loadTags.json
new file mode 100644
index 000000000000..2ced471f074e
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/classification/loadTags.json
@@ -0,0 +1,22 @@
+{
+ "$id": "https://open-metadata.org/schema/api/classification/loadTags.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "loadTags",
+ "description": "Load classifications and tags",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.classification.LoadTags",
+ "properties": {
+ "createClassification": {
+ "$ref": "createClassification.json"
+ },
+ "createTags": {
+ "type": "array",
+ "items": {
+ "$ref": "createTag.json"
+ },
+ "minItems": 1
+ }
+ },
+ "required": ["createClassification"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/configuration/rdfConfiguration.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/configuration/rdfConfiguration.json
new file mode 100644
index 000000000000..c868823c0465
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/configuration/rdfConfiguration.json
@@ -0,0 +1,70 @@
+{
+ "$id": "https://open-metadata.org/schema/api/configuration/rdfConfiguration.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "RdfConfiguration",
+ "description": "Configuration for RDF/Knowledge Graph support in OpenMetadata",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.configuration.rdf.RdfConfiguration",
+ "definitions": {
+ "reasoningLevel": {
+ "description": "Level of reasoning/inference to apply to SPARQL queries",
+ "type": "string",
+ "enum": ["NONE", "RDFS", "OWL_LITE", "OWL_DL", "CUSTOM"],
+ "default": "NONE"
+ }
+ },
+ "properties": {
+ "enabled": {
+ "description": "Enable or disable RDF support",
+ "type": "boolean",
+ "default": false
+ },
+ "storageType": {
+ "description": "Type of RDF storage backend",
+ "type": "string",
+ "enum": ["FUSEKI", "QLEVER"],
+ "default": "FUSEKI"
+ },
+ "remoteEndpoint": {
+ "description": "SPARQL endpoint URL for remote RDF storage",
+ "type": "string",
+ "format": "uri"
+ },
+ "username": {
+ "description": "Username for RDF storage authentication",
+ "type": "string"
+ },
+ "password": {
+ "description": "Password for RDF storage authentication",
+ "type": "string"
+ },
+ "dataset": {
+ "description": "Dataset name in RDF storage",
+ "type": "string",
+ "default": "openmetadata"
+ },
+ "baseUri": {
+ "description": "Base URI for RDF resources",
+ "type": "string",
+ "format": "uri",
+ "default": "https://open-metadata.org/"
+ },
+ "inferenceEnabled": {
+ "description": "Enable inference/reasoning on SPARQL queries. When enabled, SPARQL queries will use the inference engine to derive additional triples based on the reasoning level.",
+ "type": "boolean",
+ "default": true
+ },
+ "defaultInferenceLevel": {
+ "description": "Default reasoning level for SPARQL queries when inference is enabled. CUSTOM provides OpenMetadata-specific inference rules including transitive lineage traversal and inverse relationships.",
+ "$ref": "#/definitions/reasoningLevel",
+ "default": "CUSTOM"
+ },
+ "cacheInferredTriples": {
+ "description": "Cache inferred triples for better query performance (requires more storage)",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "required": ["enabled", "storageType"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/createBot.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/createBot.json
new file mode 100644
index 000000000000..6aa7c2961178
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/createBot.json
@@ -0,0 +1,40 @@
+{
+ "$id": "https://open-metadata.org/schema/api/createBot.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "createBot",
+ "description": "Create bot API request",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.CreateBot",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+
+ "properties": {
+ "name": {
+ "description": "Name of the bot.",
+ "$ref": "../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Name used for display purposes. Example 'FirstName LastName'.",
+ "type": "string"
+ },
+ "botUser" : {
+ "description": "Bot user name created for this bot on behalf of which the bot performs all the operations, such as updating description, responding on the conversation threads, etc.",
+ "type" : "string"
+ },
+ "description": {
+ "description": "Description of the bot.",
+ "type": "string"
+ },
+ "provider" : {
+ "$ref": "../type/basic.json#/definitions/providerType"
+ },
+ "domains" : {
+ "description": "Fully qualified names of the domains the Bot belongs to.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "required": ["name", "botUser"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/createEventPublisherJob.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/createEventPublisherJob.json
new file mode 100644
index 000000000000..10eadd2d2101
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/createEventPublisherJob.json
@@ -0,0 +1,50 @@
+{
+ "$id": "https://open-metadata.org/schema/api/createEventPublisherJob.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateEventPublisherJob",
+ "description": "This schema defines Event Publisher Run Result.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.CreateEventPublisherJob",
+ "properties": {
+ "name": {
+ "description": "Name of the result",
+ "type": "string"
+ },
+ "publisherType": {
+ "description": "Publisher Type",
+ "$ref": "../system/eventPublisherJob.json#/definitions/publisherType"
+ },
+ "runMode": {
+ "description": "This schema publisher run modes.",
+ "$ref": "../system/eventPublisherJob.json#/definitions/runMode"
+ },
+ "entities": {
+ "description": "List of Entities to Reindex",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "default": ["all"],
+ "uniqueItems": true
+ },
+ "recreateIndex": {
+ "description": "This schema publisher run modes.",
+ "type": "boolean",
+ "default": false
+ },
+ "batchSize": {
+ "description": "Maximum number of events sent in a batch (Default 100).",
+ "type": "integer",
+ "default": 100
+ },
+ "searchIndexMappingLanguage": {
+ "description": "Recreate Indexes with updated Language",
+ "$ref": "../configuration/elasticSearchConfiguration.json#/definitions/searchIndexMappingLanguage"
+ },
+ "afterCursor": {
+ "description": "Provide After in case of failure to start reindexing after the issue is solved",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/createType.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/createType.json
new file mode 100644
index 000000000000..797bb5676f89
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/createType.json
@@ -0,0 +1,50 @@
+{
+ "$id": "https://open-metadata.org/schema/api/createType.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "createType",
+ "description": "Create a Type to be used for extending entities.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.CreateType",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+
+ "properties": {
+ "name": {
+ "description": "Unique name that identifies a Type.",
+ "$ref": "../entity/type.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this Type.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Optional description of the type.",
+ "$ref" : "../type/basic.json#/definitions/markdown"
+ },
+ "nameSpace": {
+ "description": "Namespace or group to which this type belongs to.",
+ "type": "string",
+ "default" : "custom"
+ },
+ "category" : {
+ "$ref" : "../entity/type.json#/definitions/category"
+ },
+ "schema": {
+ "description": "JSON schema encoded as string. This will be used to validate the type values.",
+ "$ref": "../type/basic.json#/definitions/jsonSchema"
+ },
+ "domains" : {
+ "description": "Fully qualified names of the domains the Type belongs to.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "required": [
+ "name",
+ "nameSpace",
+ "description",
+ "schema"
+ ],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/data/bulkColumnUpdatePreview.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/bulkColumnUpdatePreview.json
new file mode 100644
index 000000000000..82973a971b5c
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/bulkColumnUpdatePreview.json
@@ -0,0 +1,98 @@
+{
+ "$id": "https://open-metadata.org/schema/api/data/bulkColumnUpdatePreview.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "BulkColumnUpdatePreview",
+ "description": "Preview response for bulk column update showing what will change for each column.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.data.BulkColumnUpdatePreview",
+ "properties": {
+ "totalColumns": {
+ "description": "Total number of columns that will be updated.",
+ "type": "integer",
+ "minimum": 0
+ },
+ "columnPreviews": {
+ "description": "List of column update previews showing current vs new values.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/columnUpdatePreview"
+ }
+ }
+ },
+ "required": ["totalColumns", "columnPreviews"],
+ "definitions": {
+ "columnUpdatePreview": {
+ "javaType": "org.openmetadata.schema.api.data.ColumnUpdatePreview",
+ "description": "Preview of changes for a single column showing diff between current and new values.",
+ "type": "object",
+ "properties": {
+ "columnFQN": {
+ "description": "Fully qualified name of the column.",
+ "type": "string"
+ },
+ "entityType": {
+ "description": "Type of entity containing the column (table, dashboardDataModel, etc.).",
+ "type": "string"
+ },
+ "entityFQN": {
+ "description": "Fully qualified name of the parent entity.",
+ "type": "string"
+ },
+ "entityDisplayName": {
+ "description": "Display name of the parent entity.",
+ "type": "string"
+ },
+ "serviceName": {
+ "description": "Name of the service.",
+ "type": "string"
+ },
+ "databaseName": {
+ "description": "Name of the database (if applicable).",
+ "type": "string"
+ },
+ "schemaName": {
+ "description": "Name of the schema (if applicable).",
+ "type": "string"
+ },
+ "currentValues": {
+ "description": "Current column metadata values.",
+ "$ref": "#/definitions/columnMetadata"
+ },
+ "newValues": {
+ "description": "New column metadata values that will be applied.",
+ "$ref": "#/definitions/columnMetadata"
+ },
+ "hasChanges": {
+ "description": "True if there are actual changes between current and new values.",
+ "type": "boolean"
+ }
+ },
+ "required": ["columnFQN", "entityType", "entityFQN", "currentValues", "newValues", "hasChanges"],
+ "additionalProperties": false
+ },
+ "columnMetadata": {
+ "javaType": "org.openmetadata.schema.api.data.ColumnMetadata",
+ "description": "Column metadata including display name, description, tags, and glossary terms.",
+ "type": "object",
+ "properties": {
+ "displayName": {
+ "description": "Display name of the column.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the column.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "tags": {
+ "description": "Tags and glossary terms associated with the column.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ }
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/data/bulkColumnUpdateRequest.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/bulkColumnUpdateRequest.json
new file mode 100644
index 000000000000..982675e58c31
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/bulkColumnUpdateRequest.json
@@ -0,0 +1,101 @@
+{
+ "$id": "https://open-metadata.org/schema/api/data/bulkColumnUpdateRequest.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "BulkColumnUpdateRequest",
+ "description": "Bulk update request for updating column metadata (description, display name, tags, glossary terms) across entities. Supports two modes: 1) Search-based: provide columnName and filters to find and update all matching columns, 2) Explicit: provide specific list of column FQNs to update.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.data.BulkColumnUpdateRequest",
+ "properties": {
+ "columnName": {
+ "description": "Column name to search for (exact match, case-sensitive). When provided, the system will search for all columns with this name and apply updates based on filters.",
+ "type": "string"
+ },
+ "entityTypes": {
+ "description": "Filter by entity types (e.g., table, dashboardDataModel). If not provided, searches across all supported types.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "serviceName": {
+ "description": "Filter by service name.",
+ "type": "string"
+ },
+ "databaseName": {
+ "description": "Filter by database name.",
+ "type": "string"
+ },
+ "schemaName": {
+ "description": "Filter by schema name.",
+ "type": "string"
+ },
+ "domainId": {
+ "description": "Filter by domain ID.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "displayName": {
+ "description": "Display Name to apply to all matching columns.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description to apply to all matching columns.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "tags": {
+ "description": "Tags and glossary terms to apply to all matching columns. Provide an empty array to remove all tags.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "columnUpdates": {
+ "description": "Explicit list of column updates (alternative to search-based mode). Use this when you want to update specific columns by FQN.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/columnUpdate"
+ }
+ },
+ "dryRun": {
+ "description": "If true, performs a dry-run to preview which columns will be updated without actually making changes. Returns a list of columns that would be affected.",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "definitions": {
+ "columnUpdate": {
+ "javaType": "org.openmetadata.schema.api.data.ColumnUpdate",
+ "description": "Individual column update with FQN and metadata changes.",
+ "type": "object",
+ "properties": {
+ "columnFQN": {
+ "description": "Fully qualified name of the column to update.",
+ "type": "string"
+ },
+ "entityType": {
+ "description": "Type of entity containing the column (table or dashboardDataModel).",
+ "type": "string"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this column name.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the column.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "tags": {
+ "description": "Tags and glossary terms associated with the column. Provide an empty array to remove all tags.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ }
+ },
+ "required": ["columnFQN", "entityType"],
+ "additionalProperties": false
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/data/bulkCreateTable.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/bulkCreateTable.json
new file mode 100644
index 000000000000..fa2efe30978d
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/bulkCreateTable.json
@@ -0,0 +1,25 @@
+{
+ "$id": "https://open-metadata.org/schema/api/data/bulkCreateTable.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "BulkCreateTable",
+ "description": "Schema for bulk creating or updating multiple tables",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.data.BulkCreateTable",
+ "properties": {
+ "tables": {
+ "description": "List of table create requests to be processed",
+ "type": "array",
+ "items": {
+ "$ref": "createTable.json"
+ },
+ "minItems": 1
+ },
+ "dryRun": {
+ "description": "If true, validate requests without persisting changes",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "required": ["tables"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/data/bulkUpdateContainer.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/bulkUpdateContainer.json
new file mode 100644
index 000000000000..990351ba4be9
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/bulkUpdateContainer.json
@@ -0,0 +1,86 @@
+{
+ "$id": "https://open-metadata.org/schema/api/data/bulkUpdateContainer.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "BulkUpdateContainer",
+ "description": "Schema for bulk updating multiple containers with differential updates",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.data.BulkUpdateContainer",
+ "definitions": {
+ "containerUpdate": {
+ "javaType": "org.openmetadata.schema.api.data.ContainerUpdate",
+ "description": "Partial container update - only include fields that have changed",
+ "type": "object",
+ "properties": {
+ "fqn": {
+ "description": "Fully qualified name of the container to update",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "dataModel": {
+ "description": "Updated data model",
+ "$ref": "../../entity/data/container.json#/definitions/containerDataModel"
+ },
+ "prefix": {
+ "description": "Updated prefix path",
+ "type": "string"
+ },
+ "numberOfObjects": {
+ "description": "Updated number of objects",
+ "type": "number"
+ },
+ "size": {
+ "description": "Updated size in bytes",
+ "type": "number"
+ },
+ "fileFormats": {
+ "description": "Updated file formats",
+ "type": "array",
+ "items": {
+ "$ref": "../../entity/data/container.json#/definitions/fileFormat"
+ }
+ },
+ "sourceUrl": {
+ "description": "Updated source URL",
+ "$ref": "../../type/basic.json#/definitions/sourceUrl"
+ },
+ "description": {
+ "description": "Updated description",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "tags": {
+ "description": "Updated tags",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ }
+ },
+ "owner": {
+ "description": "Updated owner",
+ "$ref": "../../type/entityReference.json"
+ },
+ "extension": {
+ "description": "Updated custom properties",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ }
+ },
+ "required": ["fqn"],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "updates": {
+ "description": "List of container update requests",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/containerUpdate"
+ },
+ "minItems": 1
+ },
+ "dryRun": {
+ "description": "If true, validate without persisting",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "required": ["updates"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/data/bulkUpdateDashboard.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/bulkUpdateDashboard.json
new file mode 100644
index 000000000000..914b5f515679
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/bulkUpdateDashboard.json
@@ -0,0 +1,85 @@
+{
+ "$id": "https://open-metadata.org/schema/api/data/bulkUpdateDashboard.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "BulkUpdateDashboard",
+ "description": "Schema for bulk updating multiple dashboards with differential updates",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.data.BulkUpdateDashboard",
+ "definitions": {
+ "dashboardUpdate": {
+ "javaType": "org.openmetadata.schema.api.data.DashboardUpdate",
+ "description": "Partial dashboard update - only include fields that have changed",
+ "type": "object",
+ "properties": {
+ "fqn": {
+ "description": "Fully qualified name of the dashboard to update",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "dashboardType": {
+ "description": "Updated dashboard type",
+ "$ref": "../../entity/data/dashboard.json#/definitions/dashboardType"
+ },
+ "sourceUrl": {
+ "description": "Updated source URL",
+ "$ref": "../../type/basic.json#/definitions/sourceUrl"
+ },
+ "charts": {
+ "description": "Updated charts in the dashboard",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/entityReference.json"
+ }
+ },
+ "dataModels": {
+ "description": "Updated data models",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/entityReference.json"
+ }
+ },
+ "project": {
+ "description": "Updated project/workspace",
+ "type": "string"
+ },
+ "description": {
+ "description": "Updated description",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "tags": {
+ "description": "Updated tags",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ }
+ },
+ "owner": {
+ "description": "Updated owner",
+ "$ref": "../../type/entityReference.json"
+ },
+ "extension": {
+ "description": "Updated custom properties",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ }
+ },
+ "required": ["fqn"],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "updates": {
+ "description": "List of dashboard update requests",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/dashboardUpdate"
+ },
+ "minItems": 1
+ },
+ "dryRun": {
+ "description": "If true, validate without persisting",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "required": ["updates"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/data/bulkUpdateTable.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/bulkUpdateTable.json
new file mode 100644
index 000000000000..f1d593ab3b2b
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/bulkUpdateTable.json
@@ -0,0 +1,89 @@
+{
+ "$id": "https://open-metadata.org/schema/api/data/bulkUpdateTable.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "BulkUpdateTable",
+ "description": "Schema for bulk updating multiple tables with differential updates",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.data.BulkUpdateTable",
+ "definitions": {
+ "tableUpdate": {
+ "javaType": "org.openmetadata.schema.api.data.TableUpdate",
+ "description": "Partial table update - only include fields that have changed",
+ "type": "object",
+ "properties": {
+ "fqn": {
+ "description": "Fully qualified name of the table to update",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "columns": {
+ "description": "Updated columns list (replaces existing columns). Only include if changed.",
+ "type": "array",
+ "items": {
+ "$ref": "../../entity/data/table.json#/definitions/column"
+ }
+ },
+ "tableConstraints": {
+ "description": "Updated table constraints. Only include if changed.",
+ "type": "array",
+ "items": {
+ "$ref": "../../entity/data/table.json#/definitions/tableConstraint"
+ }
+ },
+ "tablePartition": {
+ "description": "Updated table partition details. Only include if changed.",
+ "$ref": "../../entity/data/table.json#/definitions/tablePartition"
+ },
+ "description": {
+ "description": "Updated description. Only include if changed.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "tags": {
+ "description": "Updated tags. Only include if changed.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ }
+ },
+ "owner": {
+ "description": "Updated owner. Only include if changed.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "sourceUrl": {
+ "description": "Updated source URL. Only include if changed.",
+ "$ref": "../../type/basic.json#/definitions/sourceUrl"
+ },
+ "retentionPeriod": {
+ "description": "Updated retention period. Only include if changed.",
+ "$ref": "../../type/basic.json#/definitions/duration"
+ },
+ "extension": {
+ "description": "Updated custom properties extension. Only include if changed.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ },
+ "dataModel": {
+ "description": "Updated data model. Only include if changed.",
+ "$ref": "../../entity/data/table.json#/definitions/dataModel"
+ }
+ },
+ "required": ["fqn"],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "updates": {
+ "description": "List of table update requests with differential changes",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/tableUpdate"
+ },
+ "minItems": 1
+ },
+ "dryRun": {
+ "description": "If true, validate requests without persisting changes",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "required": ["updates"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/data/bulkUpdateTopic.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/bulkUpdateTopic.json
new file mode 100644
index 000000000000..38f57ba71b0b
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/bulkUpdateTopic.json
@@ -0,0 +1,103 @@
+{
+ "$id": "https://open-metadata.org/schema/api/data/bulkUpdateTopic.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "BulkUpdateTopic",
+ "description": "Schema for bulk updating multiple topics with differential updates",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.data.BulkUpdateTopic",
+ "definitions": {
+ "topicUpdate": {
+ "javaType": "org.openmetadata.schema.api.data.TopicUpdate",
+ "description": "Partial topic update - only include fields that have changed",
+ "type": "object",
+ "properties": {
+ "fqn": {
+ "description": "Fully qualified name of the topic to update",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "messageSchema": {
+ "description": "Updated message schema",
+ "$ref": "../../type/schema.json"
+ },
+ "partitions": {
+ "description": "Updated number of partitions",
+ "type": "integer",
+ "minimum": 1
+ },
+ "retentionTime": {
+ "description": "Updated retention time in milliseconds",
+ "type": "number"
+ },
+ "retentionSize": {
+ "description": "Updated maximum size of a partition in bytes",
+ "type": "number"
+ },
+ "maximumMessageSize": {
+ "description": "Updated maximum message size in bytes",
+ "type": "integer"
+ },
+ "minInsyncReplicas": {
+ "description": "Updated minimum number of in-sync replicas",
+ "type": "integer"
+ },
+ "replicationFactor": {
+ "description": "Updated replication factor",
+ "type": "integer"
+ },
+ "cleanupPolicies": {
+ "description": "Updated cleanup policies",
+ "type": "array",
+ "items": {
+ "$ref": "../../entity/data/topic.json#/definitions/cleanupPolicy"
+ }
+ },
+ "topicConfig": {
+ "description": "Updated topic configuration",
+ "$ref": "../../entity/data/topic.json#/definitions/topicConfig"
+ },
+ "description": {
+ "description": "Updated description",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "tags": {
+ "description": "Updated tags",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ }
+ },
+ "owner": {
+ "description": "Updated owner",
+ "$ref": "../../type/entityReference.json"
+ },
+ "sourceUrl": {
+ "description": "Updated source URL",
+ "$ref": "../../type/basic.json#/definitions/sourceUrl"
+ },
+ "extension": {
+ "description": "Updated custom properties",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ }
+ },
+ "required": ["fqn"],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "updates": {
+ "description": "List of topic update requests",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/topicUpdate"
+ },
+ "minItems": 1
+ },
+ "dryRun": {
+ "description": "If true, validate without persisting",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "required": ["updates"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/data/columnGridResponse.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/columnGridResponse.json
new file mode 100644
index 000000000000..0a970a8972b0
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/columnGridResponse.json
@@ -0,0 +1,215 @@
+{
+ "$id": "https://open-metadata.org/schema/api/data/columnGridResponse.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "ColumnGridResponse",
+ "description": "Response containing all unique columns grouped by metadata similarity for grid-based editing.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.data.ColumnGridResponse",
+ "properties": {
+ "columns": {
+ "description": "List of unique column names with their metadata groups.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/columnGridItem"
+ }
+ },
+ "totalUniqueColumns": {
+ "description": "Total number of unique column names.",
+ "type": "integer",
+ "minimum": 0
+ },
+ "totalOccurrences": {
+ "description": "Total number of column occurrences across all entities.",
+ "type": "integer",
+ "minimum": 0
+ },
+ "cursor": {
+ "description": "Cursor for pagination (Base64-encoded). Use this in the next request to get the next page of results.",
+ "type": "string"
+ }
+ },
+ "required": ["columns", "totalUniqueColumns", "totalOccurrences"],
+ "definitions": {
+ "columnGridItem": {
+ "javaType": "org.openmetadata.schema.api.data.ColumnGridItem",
+ "description": "A unique column name with its metadata groups.",
+ "type": "object",
+ "properties": {
+ "columnName": {
+ "description": "Name of the column.",
+ "type": "string"
+ },
+ "totalOccurrences": {
+ "description": "Total number of occurrences for this column name.",
+ "type": "integer",
+ "minimum": 0
+ },
+ "hasVariations": {
+ "description": "Whether this column has different metadata across occurrences.",
+ "type": "boolean"
+ },
+ "metadataStatus": {
+ "description": "Aggregate metadata status across all occurrences. Uses worst-case: MISSING if any occurrence is missing, INCOMPLETE if any is incomplete, otherwise COMPLETE.",
+ "$ref": "#/definitions/metadataStatus"
+ },
+ "groups": {
+ "description": "Metadata groups - columns with identical metadata are grouped together.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/columnMetadataGroup"
+ }
+ }
+ },
+ "required": ["columnName", "totalOccurrences", "hasVariations", "groups"],
+ "additionalProperties": false
+ },
+ "columnMetadataGroup": {
+ "javaType": "org.openmetadata.schema.api.data.ColumnMetadataGroup",
+ "description": "A group of columns with identical metadata.",
+ "type": "object",
+ "properties": {
+ "groupId": {
+ "description": "Unique identifier for this metadata group (hash of metadata values).",
+ "type": "string"
+ },
+ "displayName": {
+ "description": "Display name (common across all columns in this group).",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description (common across all columns in this group).",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "tags": {
+ "description": "Tags (common across all columns in this group).",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ }
+ },
+ "dataType": {
+ "description": "Data type (common across all columns in this group).",
+ "type": "string"
+ },
+ "metadataStatus": {
+ "description": "Metadata completeness status for this group.",
+ "$ref": "#/definitions/metadataStatus"
+ },
+ "occurrenceCount": {
+ "description": "Number of column occurrences in this group.",
+ "type": "integer",
+ "minimum": 1
+ },
+ "occurrences": {
+ "description": "List of column occurrences in this group.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/columnOccurrenceRef"
+ }
+ },
+ "children": {
+ "description": "Nested columns for STRUCT, MAP, or UNION data types.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/columnChild"
+ }
+ }
+ },
+ "required": ["groupId", "occurrenceCount", "occurrences"],
+ "additionalProperties": false
+ },
+ "columnChild": {
+ "javaType": "org.openmetadata.schema.api.data.ColumnChild",
+ "description": "A child column within a STRUCT, MAP, or UNION type.",
+ "type": "object",
+ "properties": {
+ "name": {
+ "description": "Name of the child column.",
+ "type": "string"
+ },
+ "fullyQualifiedName": {
+ "description": "Fully qualified name of the child column.",
+ "type": "string"
+ },
+ "displayName": {
+ "description": "Display name of the child column.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the child column.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "dataType": {
+ "description": "Data type of the child column.",
+ "type": "string"
+ },
+ "tags": {
+ "description": "Tags on the child column.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ }
+ },
+ "children": {
+ "description": "Nested children for deeply nested structures.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/columnChild"
+ }
+ }
+ },
+ "required": ["name"],
+ "additionalProperties": false
+ },
+ "columnOccurrenceRef": {
+ "javaType": "org.openmetadata.schema.api.data.ColumnOccurrenceRef",
+ "description": "Reference to a column occurrence.",
+ "type": "object",
+ "properties": {
+ "columnFQN": {
+ "description": "Fully qualified name of the column.",
+ "type": "string"
+ },
+ "entityType": {
+ "description": "Type of entity containing the column.",
+ "type": "string"
+ },
+ "entityFQN": {
+ "description": "Fully qualified name of the parent entity.",
+ "type": "string"
+ },
+ "entityDisplayName": {
+ "description": "Display name of the parent entity.",
+ "type": "string"
+ },
+ "serviceName": {
+ "description": "Name of the service.",
+ "type": "string"
+ },
+ "databaseName": {
+ "description": "Name of the database (if applicable).",
+ "type": "string"
+ },
+ "schemaName": {
+ "description": "Name of the schema (if applicable).",
+ "type": "string"
+ }
+ },
+ "required": ["columnFQN", "entityType", "entityFQN"],
+ "additionalProperties": false
+ },
+ "metadataStatus": {
+ "javaType": "org.openmetadata.schema.api.data.MetadataStatus",
+ "description": "Metadata completeness status for a column or group of columns.",
+ "type": "string",
+ "enum": ["MISSING", "INCOMPLETE", "INCONSISTENT", "COMPLETE"],
+ "javaEnums": [
+ {"name": "MISSING", "description": "No description and no tags."},
+ {"name": "INCOMPLETE", "description": "Has description or tags, but not both."},
+ {"name": "INCONSISTENT", "description": "Metadata varies across occurrences (different descriptions, tags, or glossary terms)."},
+ {"name": "COMPLETE", "description": "Has both description and tags, and is consistent across all occurrences."}
+ ]
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/data/columnGroupUpdateRequest.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/columnGroupUpdateRequest.json
new file mode 100644
index 000000000000..6a25ceac36fa
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/columnGroupUpdateRequest.json
@@ -0,0 +1,39 @@
+{
+ "$id": "https://open-metadata.org/schema/api/data/columnGroupUpdateRequest.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "ColumnGroupUpdateRequest",
+ "description": "Request to update metadata for a specific group of columns.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.data.ColumnGroupUpdateRequest",
+ "properties": {
+ "groupId": {
+ "description": "ID of the metadata group to update.",
+ "type": "string"
+ },
+ "columnFQNs": {
+ "description": "List of column FQNs to update (all must be from the same group).",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "minItems": 1
+ },
+ "displayName": {
+ "description": "New display name for the columns.",
+ "type": "string"
+ },
+ "description": {
+ "description": "New description for the columns.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "tags": {
+ "description": "New tags for the columns.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ }
+ }
+ },
+ "required": ["columnFQNs"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createAPICollection.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createAPICollection.json
new file mode 100644
index 000000000000..4aa90cb672ce
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createAPICollection.json
@@ -0,0 +1,84 @@
+{
+ "$id": "https://open-metadata.org/schema/api/data/createAPICollection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateAPICollectionRequest",
+ "description": "Create API Collection entity request",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.data.CreateAPICollection",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+ "properties": {
+ "name": {
+ "description": "Name that identifies this API Collection.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this API Collection. It could be title or label from the source services",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the API Collection instance. What it has and how to use it.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "endpointURL": {
+ "title": "Endpoint URL",
+ "description": "EndPoint URL for the API Collection. Capture the Root URL of the collection.",
+ "type": "string",
+ "format": "uri"
+ },
+ "apiEndpoints": {
+ "description": "All the API's fullyQualifiedNames included in this API Collection.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "default": null
+ },
+ "tags": {
+ "description": "Tags for this API Collection",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "owners": {
+ "description": "Owners of this API Collection",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "service": {
+ "description": "Link to the API service fully qualified name where this API collection is hosted in",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ },
+ "domains" : {
+ "description": "Fully qualified names of the domains the API Collection belongs to.",
+ "type": "array",
+ "items": {
+ "$ref" : "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ }
+ },
+ "dataProducts" : {
+ "description": "List of fully qualified names of data products this entity is part of.",
+ "type": "array",
+ "items" : {
+ "$ref" : "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ }
+ },
+ "lifeCycle": {
+ "description": "Life Cycle of the entity",
+ "$ref": "../../type/lifeCycle.json"
+ },
+ "sourceHash": {
+ "description": "Source hash of the entity",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32
+ }
+ },
+ "required": ["name", "service"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createAPIEndpoint.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createAPIEndpoint.json
new file mode 100644
index 000000000000..11cc53748424
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createAPIEndpoint.json
@@ -0,0 +1,92 @@
+{
+ "$id": "https://open-metadata.org/schema/api/data/createAPIEndpoint.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateAPIEndpointRequest",
+ "description": "Create a APIEndpoint entity request",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.data.CreateAPIEndpoint",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+ "properties": {
+ "name": {
+ "description": "Name that identifies this APIEndpoint instance uniquely. We use operationId from OpenAPI specification.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this APIEndpoint.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the APIEndpoint instance. What it has and how to use it.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "apiCollection": {
+ "description": "Reference to API Collection that contains this API Endpoint.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "endpointURL": {
+ "title": "Endpoint URL",
+ "description": "EndPoint URL for the API Collection. Capture the Root URL of the collection.",
+ "type": "string",
+ "format": "uri"
+ },
+ "requestMethod": {
+ "description": "Request Method for the API Endpoint.",
+ "$ref": "../../entity/data/apiEndpoint.json#/definitions/apiRequestMethod"
+ },
+ "requestSchema": {
+ "description": "Request Schema for the API Endpoint.",
+ "$ref": "../../type/apiSchema.json"
+ },
+ "responseSchema": {
+ "description": "Response Schema for the API Endpoint.",
+ "$ref": "../../type/apiSchema.json"
+ },
+ "owners": {
+ "description": "Owners of this topic",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "tags": {
+ "description": "Tags for this topic",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ },
+ "sourceUrl": {
+ "description": "Source URL of topic.",
+ "$ref": "../../type/basic.json#/definitions/sourceUrl"
+ },
+ "domains" : {
+ "description": "Fully qualified names of the domains the API belongs to.",
+ "type": "array",
+ "items": {
+ "$ref" : "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ }
+ },
+ "dataProducts" : {
+ "description": "List of fully qualified names of data products this entity is part of.",
+ "type": "array",
+ "items" : {
+ "$ref" : "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ }
+ },
+ "lifeCycle": {
+ "description": "Life Cycle of the entity",
+ "$ref": "../../type/lifeCycle.json"
+ },
+ "sourceHash": {
+ "description": "Source hash of the entity",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32
+ }
+ },
+ "required": ["name", "apiCollection"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createChart.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createChart.json
new file mode 100644
index 000000000000..f74c9411f6a6
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createChart.json
@@ -0,0 +1,85 @@
+{
+ "$id": "https://open-metadata.org/schema/api/data/createChart.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateChartRequest",
+ "description": "Create Chart entity request",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.data.CreateChart",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+ "properties": {
+ "name": {
+ "description": "Name that identifies this Chart.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this Chart. It could be title or label from the source services",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the chart instance. What it has and how to use it.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "chartType": {
+ "$ref": "../../entity/data/chart.json#/definitions/chartType"
+ },
+ "sourceUrl": {
+ "description": "Chart URL suffix from its service.",
+ "$ref": "../../type/basic.json#/definitions/sourceUrl"
+ },
+ "tags": {
+ "description": "Tags for this chart",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "owners": {
+ "description": "Owners of this chart",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "service": {
+ "description": "Link to the chart service where this chart is hosted in",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "domains" : {
+ "description": "Fully qualified names of the domains the Chart belongs to.",
+ "type": "array",
+ "items": {
+ "$ref" : "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ }
+ },
+ "dataProducts" : {
+ "description": "List of fully qualified names of data products this entity is part of.",
+ "type": "array",
+ "items" : {
+ "$ref" : "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ }
+ },
+ "lifeCycle": {
+ "description": "Life Cycle of the entity",
+ "$ref": "../../type/lifeCycle.json"
+ },
+ "sourceHash": {
+ "description": "Source hash of the entity",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ },
+ "dashboards": {
+ "description": "List of fully qualified name of dashboards containing this Chart.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "default": null
+ }
+ },
+ "required": ["name", "service"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createContainer.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createContainer.json
new file mode 100644
index 000000000000..0910ddfbef44
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createContainer.json
@@ -0,0 +1,111 @@
+{
+ "$id": "https://open-metadata.org/schema/api/data/createContainer.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateContainerRequest",
+ "description": "Create Container Model entity request",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.data.CreateContainer",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+
+ "properties": {
+ "name": {
+ "description": "Name that identifies this Container model.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this Container model.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the Container instance.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "service": {
+ "description": "Link to the storage service where this container is hosted in.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "parent": {
+ "description": "Link to the parent container under which this entity sits.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "dataModel": {
+ "description": "References to the container's data model, if data is structured, or null otherwise",
+ "$ref": "../../entity/data/container.json#/definitions/containerDataModel",
+ "default": null
+ },
+ "prefix": {
+ "description": "Optional prefix path defined for this container",
+ "type": "string",
+ "default": null
+ },
+ "numberOfObjects": {
+ "description": "The number of objects/files this container has.",
+ "type": "number",
+ "default": null
+ },
+ "size": {
+ "description": "The total size in KB this container has.",
+ "type": "number",
+ "default": null
+ },
+ "fileFormats": {
+ "description": "File & data formats identified for the container: e.g. dataFormats=[csv, json]. These can be present both when the container has a dataModel or not",
+ "type": "array",
+ "items": {
+ "$ref": "../../entity/data/container.json#/definitions/fileFormat"
+ },
+ "default": null
+ },
+ "owners": {
+ "description": "Owner of this database",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "tags": {
+ "description": "Tags for this Container Model",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ },
+ "sourceUrl": {
+ "description": "Source URL of container.",
+ "$ref": "../../type/basic.json#/definitions/sourceUrl"
+ },
+ "fullPath": {
+ "description": "Full path of the container/file.",
+ "type": "string"
+ },
+ "domains" : {
+ "description": "Fully qualified names of the domains the Container belongs to.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "dataProducts" : {
+ "description": "List of fully qualified names of data products this entity is part of.",
+ "type": "array",
+ "items" : {
+ "$ref" : "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ }
+ },
+ "lifeCycle": {
+ "description": "Life Cycle of the entity",
+ "$ref": "../../type/lifeCycle.json"
+ },
+ "sourceHash": {
+ "description": "Source hash of the entity",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32
+ }
+ },
+ "required": ["name", "service"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createCustomProperty.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createCustomProperty.json
new file mode 100644
index 000000000000..3b485c1d9648
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createCustomProperty.json
@@ -0,0 +1,31 @@
+{
+ "$id": "https://open-metadata.org/schema/api/data/createCustomProperty.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateCustomPropertyRequest",
+ "description": "Create Custom Property Model entity request",
+ "type": "object",
+ "properties": {
+ "name": {
+ "description": "Name that identifies this Custom Property model.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies the custom property.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the Container instance.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "propertyType": {
+ "description": "Property Type.",
+ "$ref": "../../type/customProperty.json#/definitions/propertyType"
+ },
+ "customPropertyConfig": {
+ "description": "Config to define constraints around CustomProperty.",
+ "$ref": "../../type/customProperty.json#/definitions/customPropertyConfig"
+ }
+ },
+ "required": ["name", "propertyType"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createDashboard.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createDashboard.json
new file mode 100644
index 000000000000..dfab88260558
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createDashboard.json
@@ -0,0 +1,97 @@
+{
+ "$id": "https://open-metadata.org/schema/api/data/createDashboard.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateDashboardRequest",
+ "description": "Create Dashboard entity request",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.data.CreateDashboard",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+ "properties": {
+ "name": {
+ "description": "Name that identifies this dashboard.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this Dashboard. It could be title or label from the source services",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the database instance. What it has and how to use it.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "dashboardType": {
+ "$ref": "../../entity/data/dashboard.json#/definitions/dashboardType"
+ },
+ "sourceUrl": {
+ "description": "Dashboard URL suffix from its service.",
+ "$ref": "../../type/basic.json#/definitions/sourceUrl"
+ },
+ "project": {
+ "description": "Name of the project / workspace / collection in which the dashboard is contained",
+ "type": "string"
+ },
+ "charts": {
+ "description": "List of fully qualified name of charts included in this Dashboard.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "default": null
+ },
+ "dataModels": {
+ "description": "List of fully qualified name of data models included in this Dashboard.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "default": null
+ },
+ "tags": {
+ "description": "Tags for this dashboard",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "owners": {
+ "description": "Owners of this dashboard",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "service": {
+ "description": "Link to the dashboard service fully qualified name where this dashboard is hosted in",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ },
+ "domains" : {
+ "description": "Fully qualified names of the domains the Dashboard belongs to.",
+ "type": "array",
+ "items": {
+ "$ref" : "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ }
+ },
+ "dataProducts" : {
+ "description": "List of fully qualified names of data products this entity is part of.",
+ "type": "array",
+ "items" : {
+ "$ref" : "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ }
+ },
+ "lifeCycle": {
+ "description": "Life Cycle of the entity",
+ "$ref": "../../type/lifeCycle.json"
+ },
+ "sourceHash": {
+ "description": "Source hash of the entity",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32
+ }
+ },
+ "required": ["name", "service"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createDashboardDataModel.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createDashboardDataModel.json
new file mode 100644
index 000000000000..e4d2f6836e0c
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createDashboardDataModel.json
@@ -0,0 +1,98 @@
+{
+ "$id": "https://open-metadata.org/schema/api/data/createDashboardDataModel.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateDashboardDataModelRequest",
+ "description": "Create Dashboard Data Model entity request.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.data.CreateDashboardDataModel",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+ "properties": {
+ "name": {
+ "description": "Name that identifies this data model.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this data model. It could be title or label from the source services.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the data model instance. What it has and how to use it.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "tags": {
+ "description": "Tags for this data model.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "dataProducts" : {
+ "description": "List of fully qualified names of data products this entity is part of.",
+ "type": "array",
+ "items" : {
+ "$ref" : "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ }
+ },
+ "owners": {
+ "description": "Owners of this data model.",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "service": {
+ "description": "Link to the data model service where this data model is hosted in.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "serviceType": {
+ "description": "Service type where this data model is hosted in.",
+ "$ref": "../../entity/services/dashboardService.json#/definitions/dashboardServiceType"
+ },
+ "dataModelType": {
+ "$ref": "../../entity/data/dashboardDataModel.json#/definitions/dataModelType"
+ },
+ "sourceUrl": {
+ "description": "Dashboard URL suffix from its service.",
+ "$ref": "../../type/basic.json#/definitions/sourceUrl"
+ },
+ "sql": {
+ "description": "In case the Data Model is based on a SQL query.",
+ "$ref": "../../type/basic.json#/definitions/sqlQuery",
+ "default": null
+ },
+ "columns": {
+ "description": "Columns from the data model.",
+ "type": "array",
+ "items": {
+ "$ref": "../../entity/data/table.json#/definitions/column"
+ },
+ "default": null
+ },
+ "project": {
+ "description": "Name of the project / workspace / collection in which the dataModel is contained",
+ "type": "string"
+ },
+ "domains" : {
+ "description": "Fully qualified names of the domains the Dashboard Data Model belongs to.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "lifeCycle": {
+ "description": "Life Cycle of the entity",
+ "$ref": "../../type/lifeCycle.json"
+ },
+ "sourceHash": {
+ "description": "Source hash of the entity",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ }
+ },
+ "required": ["name", "service", "dataModelType", "columns"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createDataContract.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createDataContract.json
new file mode 100644
index 000000000000..36c749799b9e
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createDataContract.json
@@ -0,0 +1,115 @@
+{
+ "$id": "https://open-metadata.org/schema/api/data/createDataContract.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateDataContractRequest",
+ "description": "Request to create a Data Contract entity.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.data.CreateDataContract",
+ "javaInterfaces": [
+ "org.openmetadata.schema.CreateEntity"
+ ],
+ "properties": {
+ "name": {
+ "description": "Name of the data contract.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display name of the data contract.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the data contract.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "entityStatus": {
+ "$ref": "../../type/status.json",
+ "default": "Draft"
+ },
+ "entity": {
+ "description": "Reference to the data entity (table, topic, etc.) this contract applies to.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "schema": {
+ "description": "Schema definition for the data contract.",
+ "type": "array",
+ "items": {
+ "$ref": "../../entity/data/table.json#/definitions/column"
+ },
+ "default": null
+ },
+ "semantics": {
+ "description": "Semantics rules defined in the data contract.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/basic.json#/definitions/semanticsRule"
+ },
+ "default": null
+ },
+ "qualityExpectations": {
+ "description": "Quality expectations defined in the data contract.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/entityReference.json"
+ },
+ "default": null
+ },
+ "odcsQualityRules": {
+ "description": "ODCS quality rules for round-trip compatibility with ODCS export.",
+ "type": "array",
+ "items": {
+ "$ref": "../../entity/datacontract/odcs/odcsDataContract.json#/definitions/odcsQualityRule"
+ },
+ "default": null
+ },
+ "owners": {
+ "description": "Owners of this data contract.",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "reviewers": {
+ "description": "User references of the reviewers for this data contract.",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "effectiveFrom": {
+ "description": "Date from which this data contract is effective.",
+ "$ref": "../../type/basic.json#/definitions/dateTime",
+ "default": null
+ },
+ "effectiveUntil": {
+ "description": "Date until which this data contract is effective.",
+ "$ref": "../../type/basic.json#/definitions/dateTime",
+ "default": null
+ },
+ "sourceUrl": {
+ "description": "Source URL of the data contract.",
+ "$ref": "../../type/basic.json#/definitions/sourceUrl"
+ },
+ "termsOfUse": {
+ "description": "Terms of use for the data contract for both human and AI agents consumption.",
+ "$ref": "../../type/basic.json#/definitions/markdown",
+ "default": null
+ },
+ "security": {
+ "title": "Contract Security",
+ "description": "Security and access policy expectations defined in the data contract.",
+ "$ref": "../../entity/data/dataContract.json#/definitions/contractSecurity",
+ "default": null
+ },
+ "sla": {
+ "title": "Contract SLA",
+ "description": "Service Level Agreement expectations defined in the data contract.",
+ "$ref": "../../entity/data/dataContract.json#/definitions/contractSLA",
+ "default": null
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ }
+ },
+ "required": [
+ "name",
+ "entity"
+ ],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createDatabase.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createDatabase.json
new file mode 100644
index 000000000000..7c0e003c70e5
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createDatabase.json
@@ -0,0 +1,84 @@
+{
+ "$id": "https://open-metadata.org/schema/api/data/createDatabase.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateDatabaseRequest",
+ "description": "Create Database entity request",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.data.CreateDatabase",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+
+ "properties": {
+ "name": {
+ "description": "Name that identifies this database instance uniquely.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this database.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the database instance. What it has and how to use it.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "tags": {
+ "description": "Tags for this Database Service.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "owners": {
+ "description": "Owners of this database",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "service": {
+ "description": "Link to the database service fully qualified name where this database is hosted in",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "dataProducts" : {
+ "description": "List of fully qualified names of data products this entity is part of.",
+ "type": "array",
+ "items" : {
+ "$ref" : "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ }
+ },
+ "default": {
+ "description": "Some databases don't support a database/catalog in the hierarchy and use default database. For example, `MySql`. For such databases, set this flag to true to indicate that this is a default database.",
+ "type": "boolean",
+ "default": false
+ },
+ "retentionPeriod" : {
+ "description": "Retention period of the data in the database. Period is expressed as duration in ISO 8601 format in UTC. Example - `P23DT23H`.",
+ "$ref": "../../type/basic.json#/definitions/duration"
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ },
+ "sourceUrl": {
+ "description": "Source URL of database.",
+ "$ref": "../../type/basic.json#/definitions/sourceUrl"
+ },
+ "domains" : {
+ "description": "Fully qualified names of the domains the Database belongs to.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "lifeCycle": {
+ "description": "Life Cycle of the entity",
+ "$ref": "../../type/lifeCycle.json"
+ },
+ "sourceHash": {
+ "description": "Source hash of the entity",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32
+ }
+ },
+ "required": ["name", "service"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createDatabaseSchema.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createDatabaseSchema.json
new file mode 100644
index 000000000000..715c5b1f1415
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createDatabaseSchema.json
@@ -0,0 +1,83 @@
+{
+ "$id": "https://open-metadata.org/schema/api/data/createDatabaseSchema.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateDatabaseSchemaRequest",
+ "description": "Create Database Schema entity request",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.data.CreateDatabaseSchema",
+ "javaInterfaces": [
+ "org.openmetadata.schema.CreateEntity"
+ ],
+ "properties": {
+ "name": {
+ "description": "Name that identifies this database schema instance uniquely.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this database schema.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the schema instance. What it has and how to use it.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "owners": {
+ "description": "Owners of this schema",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "database": {
+ "description": "Link to the database fully qualified name where this schema is hosted in",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "dataProducts" : {
+ "description": "List of fully qualified names of data products this entity is part of.",
+ "type": "array",
+ "items" : {
+ "$ref" : "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ }
+ },
+ "tags": {
+ "description": "Tags for this table",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "retentionPeriod" : {
+ "description": "Retention period of the data in the database. Period is expressed as duration in ISO 8601 format in UTC. Example - `P23DT23H`.",
+ "$ref": "../../type/basic.json#/definitions/duration"
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ },
+ "sourceUrl": {
+ "description": "Source URL of database schema.",
+ "$ref": "../../type/basic.json#/definitions/sourceUrl"
+ },
+ "domains" : {
+ "description": "Fully qualified names of the domains the Database Schema belongs to.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "lifeCycle": {
+ "description": "Life Cycle of the entity",
+ "$ref": "../../type/lifeCycle.json"
+ },
+ "sourceHash": {
+ "description": "Source hash of the entity",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32
+ }
+ },
+ "required": [
+ "name",
+ "database"
+ ],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createDirectory.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createDirectory.json
new file mode 100644
index 000000000000..0d2cdcbeed6f
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createDirectory.json
@@ -0,0 +1,104 @@
+{
+ "$id": "https://open-metadata.org/schema/api/data/createDirectory.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateDirectoryRequest",
+ "description": "Create Directory entity request",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.data.CreateDirectory",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+ "properties": {
+ "name": {
+ "description": "Name that identifies this directory.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this directory.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the directory.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "service": {
+ "description": "Link to the drive service fully qualified name where this directory is hosted in",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "parent": {
+ "description": "Link to the parent directory fully qualified name. If not provided, this is a root directory.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "directoryType": {
+ "description": "Type of directory",
+ "$ref": "../../entity/data/directory.json#/definitions/directoryType"
+ },
+ "path": {
+ "description": "Full path to the directory",
+ "type": "string"
+ },
+ "isShared": {
+ "description": "Whether this directory is shared",
+ "type": "boolean",
+ "default": false
+ },
+ "numberOfFiles": {
+ "description": "Number of files in this directory",
+ "type": "integer"
+ },
+ "numberOfSubDirectories": {
+ "description": "Number of subdirectories",
+ "type": "integer"
+ },
+ "totalSize": {
+ "description": "Total size of all files in bytes",
+ "type": "integer"
+ },
+ "sourceUrl": {
+ "description": "Source URL of directory.",
+ "$ref": "../../type/basic.json#/definitions/sourceUrl"
+ },
+ "tags": {
+ "description": "Tags for this Directory.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "owners": {
+ "description": "Owners of this directory",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "dataProducts": {
+ "description": "List of fully qualified names of data products this entity is part of.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ }
+ },
+ "domains": {
+ "description": "Fully qualified names of the domains the Directory belongs to.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "default": null
+ },
+ "lifeCycle": {
+ "description": "Life Cycle of the entity",
+ "$ref": "../../type/lifeCycle.json"
+ },
+ "sourceHash": {
+ "description": "Source hash of the entity",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ }
+ },
+ "required": ["name", "service"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createEntityProfile.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createEntityProfile.json
new file mode 100644
index 000000000000..a45a379b9aa7
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createEntityProfile.json
@@ -0,0 +1,32 @@
+{
+ "$id": "https://open-metadata.org/schema/api/data/createEntityProfile.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateEntityProfileRequest",
+ "description": "Request schema for creating an entity profile for a table.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.data.CreateEntityProfile",
+ "properties": {
+ "entityType": {
+ "description": "Type of entity for which the profile is created. For example, 'table'.",
+ "type": "string",
+ "default": "table"
+ },
+ "timestamp": {
+ "description": "Timestamp when the profile is created.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "profileData": {
+ "oneOf": [
+ { "$ref": "../../entity/data/table.json#/definitions/tableProfile" },
+ { "$ref": "../../entity/data/table.json#/definitions/columnProfile" },
+ { "$ref": "../../entity/data/table.json#/definitions/systemProfile" }
+ ]
+ },
+ "profileType": {
+ "description": "type of profile",
+ "$ref": "../../type/entityProfile.json#/definitions/profileTypeEnum"
+ }
+ },
+ "required": ["entityType", "profileData"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createFile.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createFile.json
new file mode 100644
index 000000000000..09ebdfdefed2
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createFile.json
@@ -0,0 +1,130 @@
+{
+ "$id": "https://open-metadata.org/schema/api/data/createFile.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateFileRequest",
+ "description": "Create File entity request",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.data.CreateFile",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+ "properties": {
+ "name": {
+ "description": "Name that identifies this file.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this file.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the file.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "service": {
+ "description": "Link to the drive service fully qualified name where this file is hosted in",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "directory": {
+ "description": "Link to the parent directory fully qualified name",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "fileType": {
+ "description": "Type of file based on content",
+ "$ref": "../../entity/data/file.json#/definitions/fileType"
+ },
+ "mimeType": {
+ "description": "MIME type of the file",
+ "type": "string"
+ },
+ "fileExtension": {
+ "description": "File extension",
+ "type": "string"
+ },
+ "path": {
+ "description": "Full path to the file",
+ "type": "string"
+ },
+ "size": {
+ "description": "File size in bytes",
+ "type": "integer"
+ },
+ "columns": {
+ "description": "Column definitions for structured data files (CSV, etc.)",
+ "type": "array",
+ "items": {
+ "$ref": "../../entity/data/table.json#/definitions/column"
+ },
+ "default": null
+ },
+ "checksum": {
+ "description": "File checksum/hash",
+ "type": "string"
+ },
+ "webViewLink": {
+ "description": "Web link to view the file",
+ "type": "string",
+ "format": "uri"
+ },
+ "downloadLink": {
+ "description": "Direct download link",
+ "type": "string",
+ "format": "uri"
+ },
+ "isShared": {
+ "description": "Whether this file is shared",
+ "type": "boolean",
+ "default": false
+ },
+ "fileVersion": {
+ "description": "File version information",
+ "type": "string"
+ },
+ "sourceUrl": {
+ "description": "Source URL of file.",
+ "$ref": "../../type/basic.json#/definitions/sourceUrl"
+ },
+ "tags": {
+ "description": "Tags for this File.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "owners": {
+ "description": "Owners of this file",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "dataProducts": {
+ "description": "List of fully qualified names of data products this entity is part of.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ }
+ },
+ "domains": {
+ "description": "Fully qualified names of the domains the File belongs to.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "default": null
+ },
+ "lifeCycle": {
+ "description": "Life Cycle of the entity",
+ "$ref": "../../type/lifeCycle.json"
+ },
+ "sourceHash": {
+ "description": "Source hash of the entity",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ }
+ },
+ "required": ["name", "service"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createGlossary.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createGlossary.json
new file mode 100644
index 000000000000..0d0bf7d66308
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createGlossary.json
@@ -0,0 +1,62 @@
+{
+ "$id": "https://open-metadata.org/schema/api/data/createGlossary.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateGlossaryRequest",
+ "description": "Create Glossary entity request",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.data.CreateGlossary",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+
+ "properties": {
+ "name": {
+ "description": "Name that identifies this glossary.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this glossary.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the glossary instance.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "reviewers": {
+ "description": "User references of the reviewers for this glossary.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "owners": {
+ "description": "Owners of this glossary",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "tags": {
+ "description": "Tags for this glossary",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "provider" : {
+ "$ref": "../../type/basic.json#/definitions/providerType"
+ },
+ "mutuallyExclusive" : {
+ "description" : "Glossary terms that are direct children in this glossary are mutually exclusive. When mutually exclusive is `true` only one term can be used to label an entity. When mutually exclusive is `false`, multiple terms from this group can be used to label an entity.",
+ "type" : "boolean",
+ "default" : "false"
+ },
+ "domains" : {
+ "description": "Fully qualified names of the domains the Glossary belongs to.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ }
+ },
+ "required": ["name", "description"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createGlossaryTerm.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createGlossaryTerm.json
new file mode 100644
index 000000000000..a22a88ff8c88
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createGlossaryTerm.json
@@ -0,0 +1,94 @@
+{
+ "$id": "https://open-metadata.org/schema/api/data/createGlossaryTerm.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateGlossaryTermRequest",
+ "description": "Create Glossary term entity request",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.data.CreateGlossaryTerm",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+
+ "properties": {
+ "glossary": {
+ "description": "FullyQualifiedName of the glossary that this term is part of.",
+ "$ref" : "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "parent": {
+ "description": "Fully qualified name of the parent glossary term.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "name": {
+ "description": "Preferred name for the glossary term.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this glossary term.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the glossary term.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "style": {
+ "$ref": "../../type/basic.json#/definitions/style"
+ },
+ "synonyms": {
+ "description": "Alternate names that are synonyms or near-synonyms for the glossary term.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ }
+ },
+ "relatedTerms": {
+ "description": "Other array of glossary term fully qualified names that are related to this glossary term.",
+ "type" : "array",
+ "items": {
+ "$ref" : "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ }
+ },
+ "references": {
+ "description": "Link to a reference from an external glossary.",
+ "type": "array",
+ "items": {
+ "$ref": "../../entity/data/glossaryTerm.json#/definitions/termReference"
+ }
+ },
+ "conceptMappings": {
+ "description": "Optional mappings to external concepts (e.g., SKOS alignments).",
+ "type": "array",
+ "items": {
+ "$ref": "../../entity/data/glossaryTerm.json#/definitions/conceptMapping"
+ }
+ },
+ "reviewers": {
+ "description": "User or Team references of the reviewers for this glossary.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "owners": {
+ "description": "Owners of this glossary term.",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "tags": {
+ "description": "Tags for this glossary term.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "provider" : {
+ "$ref": "../../type/basic.json#/definitions/providerType"
+ },
+ "mutuallyExclusive" : {
+ "description" : "Glossary terms that are children of this term are mutually exclusive. When mutually exclusive is `true` only one term can be used to label an entity from this group. When mutually exclusive is `false`, multiple terms from this group can be used to label an entity.",
+ "type" : "boolean",
+ "default" : "false"
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ }
+ },
+ "required": ["glossary", "name", "description"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createMetric.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createMetric.json
new file mode 100644
index 000000000000..597655ea1a51
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createMetric.json
@@ -0,0 +1,88 @@
+{
+ "$id": "https://open-metadata.org/schema/api/data/createMetric.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateMetricRequest",
+ "description": "Create Metric entity request",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.data.CreateMetric",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+ "properties": {
+ "name": {
+ "description": "Name that identifies this metric.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this metric.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the metric instance.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "metricExpression": {
+ "description": "Expression used to compute the metric.",
+ "$ref": "../../entity/data/metric.json#/definitions/metricExpression"
+ },
+ "metricType": {
+ "description": "Type of the metric.",
+ "$ref": "../../entity/data/metric.json#/definitions/metricType"
+ },
+ "unitOfMeasurement": {
+ "description": "Unit of measurement for the metric.",
+ "$ref": "../../entity/data/metric.json#/definitions/unitOfMeasurement"
+ },
+ "customUnitOfMeasurement": {
+ "description": "Custom unit of measurement when unitOfMeasurement is OTHER.",
+ "type": "string"
+ },
+ "granularity": {
+ "description": "Metric's granularity.",
+ "$ref": "../../entity/data/metric.json#/definitions/metricGranularity"
+ },
+ "relatedMetrics": {
+ "description": "Other array of related metric fully qualified names that are related to this Metric.",
+ "type" : "array",
+ "items": {
+ "$ref" : "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ }
+ },
+ "owners": {
+ "description": "Owners of this metric",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "reviewers": {
+ "description": "Reviewers of this metric",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "tags": {
+ "description": "Tags for this metric",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "domains" : {
+ "description": "Fully qualified names of the domains the Metric belongs to.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "dataProducts" : {
+ "description": "List of fully qualified names of data products this entity is part of.",
+ "type": "array",
+ "items" : {
+ "$ref" : "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ }
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ }
+ },
+ "required": ["name"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createMlModel.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createMlModel.json
new file mode 100644
index 000000000000..2f742d0d1d9f
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createMlModel.json
@@ -0,0 +1,112 @@
+{
+ "$id": "https://open-metadata.org/schema/api/data/createMlModel.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateMlModelRequest",
+ "description": "Create Ml Model entity request",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.data.CreateMlModel",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+
+ "properties": {
+ "name": {
+ "description": "Name that identifies this ML model.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this ML model. It could be title or label from the source services",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the ML model instance. How it was trained and for what it is used.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "algorithm": {
+ "description": "Algorithm used to train the ML Model",
+ "type": "string",
+ "default": "mlmodel"
+ },
+ "mlFeatures": {
+ "description": "Features used to train the ML Model.",
+ "type": "array",
+ "items": {
+ "$ref": "../../entity/data/mlmodel.json#/definitions/mlFeature"
+ },
+ "default": null
+ },
+ "target": {
+ "description": "For supervised ML Models, the value to estimate.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "mlHyperParameters": {
+ "description": "Hyper Parameters used to train the ML Model.",
+ "type": "array",
+ "items": {
+ "$ref": "../../entity/data/mlmodel.json#/definitions/mlHyperParameter"
+ },
+ "default": null
+ },
+ "dashboard": {
+ "description": "Performance Dashboard fqn to track metric evolution",
+ "$ref" : "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "mlStore": {
+ "description": "Location containing the ML Model. It can be a storage layer and/or a container repository.",
+ "$ref": "../../entity/data/mlmodel.json#/definitions/mlStore"
+ },
+ "server": {
+ "description": "Endpoint that makes the ML Model available, e.g,. a REST API serving the data or computing predictions.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "tags": {
+ "description": "Tags for this ML Model",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "owners": {
+ "description": "Owners of this database",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "service": {
+ "description": "Link to the MLModel service fqn where this pipeline is hosted in",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ },
+ "sourceUrl": {
+ "description": "Source URL of mlModel.",
+ "$ref": "../../type/basic.json#/definitions/sourceUrl"
+ },
+ "domains" : {
+ "description": "Fully qualified names of the domains the MLModel belongs to.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "dataProducts" : {
+ "description": "List of fully qualified names of data products this entity is part of.",
+ "type": "array",
+ "items" : {
+ "$ref" : "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ }
+ },
+ "lifeCycle": {
+ "description": "Life Cycle of the entity",
+ "$ref": "../../type/lifeCycle.json"
+ },
+ "sourceHash": {
+ "description": "Source hash of the entity",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32
+ }
+ },
+ "required": ["name", "service"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createPipeline.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createPipeline.json
new file mode 100644
index 000000000000..21f7682fa154
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createPipeline.json
@@ -0,0 +1,105 @@
+{
+ "$id": "https://open-metadata.org/schema/api/data/createPipeline.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreatePipelineRequest",
+ "description": "Create Pipeline entity request",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.data.CreatePipeline",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+
+ "properties": {
+ "name": {
+ "description": "Name that identifies this pipeline instance uniquely.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this Pipeline. It could be title or label from the source services.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the pipeline instance. What it has and how to use it.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "dataProducts" : {
+ "description": "List of fully qualified names of data products this entity is part of.",
+ "type": "array",
+ "items" : {
+ "$ref" : "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ }
+ },
+ "sourceUrl": {
+ "description": "Pipeline URL suffix to visit/manage. This URL points to respective pipeline service UI",
+ "$ref": "../../type/basic.json#/definitions/sourceUrl"
+ },
+ "concurrency": {
+ "description": "Concurrency of the Pipeline",
+ "type": "integer"
+ },
+ "pipelineLocation": {
+ "description": "Pipeline Code Location",
+ "type": "string"
+ },
+ "startDate": {
+ "description": "Start date of the workflow",
+ "$ref": "../../type/basic.json#/definitions/dateTime"
+ },
+ "tasks": {
+ "description": "All the tasks that are part of pipeline.",
+ "type": "array",
+ "items": {
+ "$ref": "../../entity/data/pipeline.json#/definitions/task"
+ },
+ "default": null
+ },
+ "state": {
+ "description": "State of the pipeline.",
+ "$ref": "../../entity/data/pipeline.json#/definitions/pipelineState",
+ "default": null
+ },
+ "tags": {
+ "description": "Tags for this Pipeline.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "owners": {
+ "description": "Owners of this pipeline",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "service": {
+ "description": "Link to the pipeline service fqn where this pipeline is hosted in",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ },
+ "scheduleInterval": {
+ "description": "Scheduler Interval for the pipeline in cron format.",
+ "type": "string",
+ "default": null
+ },
+ "domains" : {
+ "description": "Fully qualified names of the domains the Pipeline belongs to.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "lifeCycle": {
+ "description": "Life Cycle of the entity",
+ "$ref": "../../type/lifeCycle.json"
+ },
+ "sourceHash": {
+ "description": "Source hash of the entity",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32
+ }
+ },
+ "required": ["name", "service"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createQuery.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createQuery.json
new file mode 100644
index 000000000000..2b33a34098ef
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createQuery.json
@@ -0,0 +1,103 @@
+{
+ "$id": "https://open-metadata.org/schema/api/data/createQuery.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateQueryRequest",
+ "description": "Create Query Request",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.data.CreateQuery",
+ "javaInterfaces": [
+ "org.openmetadata.schema.CreateEntity"
+ ],
+ "properties": {
+ "name": {
+ "description": "Name of a Query in case of User Creation.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this query.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the query instance.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "owners": {
+ "description": "Owners of this entity",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "tags": {
+ "description": "Tags for this Query",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "query": {
+ "description": "SQL Query definition.",
+ "$ref": "../../type/basic.json#/definitions/sqlQuery"
+ },
+ "query_type": {
+ "description": "SQL query type",
+ "type": "string"
+ },
+ "exclude_usage": {
+ "description": "Flag to check if query is to be excluded while processing usage",
+ "type": "boolean"
+ },
+ "duration": {
+ "description": "How long did the query took to run in milliseconds.",
+ "type": "number"
+ },
+ "users": {
+ "description": "UserName of the user running the query.",
+ "type" : "array",
+ "items": {
+ "$ref" : "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ }
+ },
+ "usedBy" : {
+ "description": "List of users who ran the query but does not exist in OpenMetadata.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "uniqueItems": true
+ },
+ "dialect": {
+ "description": "SQL dialect.",
+ "type": "string"
+ },
+ "queryDate": {
+ "description": "Date on which the query ran.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "queryUsedIn": {
+ "description": "list of entities to which the query is joined.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "triggeredBy": {
+ "description": "Entity that triggered the query. E.g., a Stored Procedure or a Pipeline Task.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "processedLineage": {
+ "description": "Flag if this query has already been successfully processed for lineage",
+ "type": "boolean",
+ "default": false
+ },
+ "service": {
+ "description": "Link to the database service fully qualified name where this query has been run",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "domains" : {
+ "description": "Fully qualified names of the domains the Query belongs to.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "required": ["query", "service"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createQueryCostRecord.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createQueryCostRecord.json
new file mode 100644
index 000000000000..cb9422b1e4c6
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createQueryCostRecord.json
@@ -0,0 +1,42 @@
+{
+ "$id": "https://open-metadata.org/schema/api/data/createQueryCostRecord.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateQueryCostRecordRequest",
+ "description": "CreateQuery Cost Record",
+ "javaType": "org.openmetadata.schema.entity.data.CreateQueryCostRecord",
+ "type": "object",
+ "properties": {
+ "timestamp": {
+ "description": "Timestamp on which the failure was created.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "jsonSchema": {
+ "description": "Json schema of the query",
+ "type": "string"
+ },
+ "queryReference": {
+ "description": "Query entity reference",
+ "$ref": "../../type/entityReference.json"
+ },
+ "cost": {
+ "description": "Avg query cost per execution",
+ "type": "number"
+ },
+ "count": {
+ "description": "Number of times the query was executed",
+ "type": "number"
+ },
+ "totalDuration": {
+ "description": "Total duration of the query",
+ "type": "number",
+ "default": 0
+ }
+ },
+ "required": [
+ "timestamp",
+ "queryReference",
+ "cost",
+ "count"
+ ],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createSearchIndex.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createSearchIndex.json
new file mode 100644
index 000000000000..11bc87f4d9e0
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createSearchIndex.json
@@ -0,0 +1,88 @@
+{
+ "$id": "https://open-metadata.org/schema/api/data/createSearchIndex.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateSearchIndexRequest",
+ "description": "Create a SearchIndex entity request",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.data.CreateSearchIndex",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+
+ "properties": {
+ "name": {
+ "description": "Name that identifies this SearchIndex instance uniquely.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this SearchIndex.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the SearchIndex instance. What it has and how to use it.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "service": {
+ "description": "Fully qualified name of the search service where this searchIndex is hosted in",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "fields": {
+ "description": "Fields in this SearchIndex.",
+ "type": "array",
+ "items": {
+ "$ref": "../../entity/data/searchIndex.json#/definitions/searchIndexField"
+ },
+ "default": null
+ },
+ "searchIndexSettings": {
+ "description": "Contains key/value pair of searchIndex settings.",
+ "$ref": "../../entity/data/searchIndex.json#/definitions/searchIndexSettings"
+ },
+ "indexType": {
+ "description": "Whether the entity is index or index template.",
+ "$ref": "../../entity/data/searchIndex.json#/definitions/indexType",
+ "default": "Index"
+ },
+ "owners": {
+ "description": "Owners of this SearchIndex",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "tags": {
+ "description": "Tags for this SearchIndex",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ },
+ "domains" : {
+ "description": "Fully qualified names of the domains the SearchIndex belongs to.",
+ "type": "array",
+ "items": {
+ "$ref" : "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ }
+ },
+ "dataProducts" : {
+ "description": "List of fully qualified names of data products this entity is part of.",
+ "type": "array",
+ "items" : {
+ "$ref" : "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ }
+ },
+ "lifeCycle": {
+ "description": "Life Cycle of the entity",
+ "$ref": "../../type/lifeCycle.json"
+ },
+ "sourceHash": {
+ "description": "Source hash of the entity",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32
+ }
+ },
+ "required": ["name", "service", "fields"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createSpreadsheet.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createSpreadsheet.json
new file mode 100644
index 000000000000..ee43c416db68
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createSpreadsheet.json
@@ -0,0 +1,112 @@
+{
+ "$id": "https://open-metadata.org/schema/api/data/createSpreadsheet.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateSpreadsheetRequest",
+ "description": "Create Spreadsheet entity request",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.data.CreateSpreadsheet",
+ "javaInterfaces": [
+ "org.openmetadata.schema.CreateEntity"
+ ],
+ "properties": {
+ "name": {
+ "description": "Name that identifies this spreadsheet.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this spreadsheet.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the spreadsheet.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "service": {
+ "description": "Link to the drive service fully qualified name where this spreadsheet is hosted in",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "parent": {
+ "description": "Reference to the parent entity (directory). If not provided, the spreadsheet will be created directly under the service.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "mimeType": {
+ "description": "MIME type of the spreadsheet file",
+ "$ref": "../../entity/data/spreadsheet.json#/definitions/spreadsheetMimeType"
+ },
+ "path": {
+ "description": "Full path to the spreadsheet file",
+ "type": "string"
+ },
+ "driveFileId": {
+ "description": "Native file ID in the source system",
+ "type": "string"
+ },
+ "size": {
+ "description": "File size in bytes (may be null for cloud-native files like Google Sheets)",
+ "type": "integer"
+ },
+ "fileVersion": {
+ "description": "File version information",
+ "type": "string"
+ },
+ "sourceUrl": {
+ "description": "Link to view/edit this spreadsheet in the source system (e.g., Google Sheets URL, SharePoint URL).",
+ "$ref": "../../type/basic.json#/definitions/sourceUrl"
+ },
+ "tags": {
+ "description": "Tags for this Spreadsheet.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "owners": {
+ "description": "Owners of this spreadsheet",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "dataProducts": {
+ "description": "List of fully qualified names of data products this entity is part of.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ }
+ },
+ "domains": {
+ "description": "Fully qualified names of the domains the Spreadsheet belongs to.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "default": null
+ },
+ "lifeCycle": {
+ "description": "Life Cycle of the entity",
+ "$ref": "../../type/lifeCycle.json"
+ },
+ "sourceHash": {
+ "description": "Source hash of the entity",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ },
+ "createdTime": {
+ "description": "Spreadsheet creation timestamp",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "modifiedTime": {
+ "description": "Last modification timestamp",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ }
+ },
+ "required": [
+ "name",
+ "service"
+ ],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createStoredProcedure.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createStoredProcedure.json
new file mode 100644
index 000000000000..663cdbc77fdf
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createStoredProcedure.json
@@ -0,0 +1,84 @@
+{
+ "$id": "https://open-metadata.org/schema/api/data/createStoredProcedure.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateStoredProcedureRequest",
+ "description": "Create Stored Procedure Request",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.data.CreateStoredProcedure",
+ "javaInterfaces": [
+ "org.openmetadata.schema.CreateEntity"
+ ],
+ "properties": {
+ "name": {
+ "description": "Name of a Stored Procedure.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this Stored Procedure.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the Stored Procedure.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "owners": {
+ "description": "Owners of this entity",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "tags": {
+ "description": "Tags for this StoredProcedure.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "storedProcedureCode": {
+ "description": "SQL Query definition.",
+ "$ref": "../../entity/data/storedProcedure.json#/definitions/storedProcedureCode"
+ },
+ "storedProcedureType": {
+ "description": "Type of the Stored Procedure.",
+ "$ref": "../../entity/data/storedProcedure.json#/definitions/storedProcedureType"
+ },
+ "databaseSchema": {
+ "description": "Link to the database schema fully qualified name where this stored procedure is hosted in",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ },
+ "dataProducts" : {
+ "description": "List of fully qualified names of data products this entity is part of.",
+ "type": "array",
+ "items" : {
+ "$ref" : "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ }
+ },
+ "sourceUrl": {
+ "description": "Source URL of database schema.",
+ "$ref": "../../type/basic.json#/definitions/sourceUrl"
+ },
+ "domains" : {
+ "description": "Fully qualified names of the domains the Stored Procedure belongs to.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "lifeCycle": {
+ "description": "Life Cycle of the entity",
+ "$ref": "../../type/lifeCycle.json"
+ },
+ "sourceHash": {
+ "description": "Source hash of the entity",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32
+ }
+ },
+ "required": ["name", "storedProcedureCode"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createTable.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createTable.json
new file mode 100644
index 000000000000..ce0b34b634ae
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createTable.json
@@ -0,0 +1,119 @@
+{
+ "$id": "https://open-metadata.org/schema/api/data/createTable.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateTableRequest",
+ "description": "Schema corresponding to a table that belongs to a database",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.data.CreateTable",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+
+ "properties": {
+ "name": {
+ "description": "Name that identifies the this entity instance uniquely. Same as id if when name is not unique",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this table.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of entity instance.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "tableType": {
+ "$ref": "../../entity/data/table.json#/definitions/tableType"
+ },
+ "columns": {
+ "description": "Name of the tables in the database",
+ "type": "array",
+ "items": {
+ "$ref": "../../entity/data/table.json#/definitions/column"
+ }
+ },
+ "dataModel": {
+ "$ref": "../../entity/data/table.json#/definitions/dataModel"
+ },
+ "locationPath": {
+ "description": "Full storage path in case of external and managed tables.",
+ "type": "string",
+ "default": null
+ },
+ "tableConstraints": {
+ "type": "array",
+ "items": {
+ "$ref": "../../entity/data/table.json#/definitions/tableConstraint"
+ },
+ "default": null
+ },
+ "tablePartition": {
+ "$ref": "../../entity/data/table.json#/definitions/tablePartition"
+ },
+ "tableProfilerConfig": {
+ "$ref": "../../entity/data/table.json#/definitions/tableProfilerConfig"
+ },
+ "owners": {
+ "description": "Owners of this entity",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "databaseSchema": {
+ "description": "FullyQualified name of the Schema corresponding to this table",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "tags": {
+ "description": "Tags for this table",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "schemaDefinition": {
+ "description": "DDL for Tables and Views",
+ "$ref": "../../type/basic.json#/definitions/sqlQuery",
+ "default": null
+ },
+ "retentionPeriod" : {
+ "description": "Retention period of the data in the database. Period is expressed as duration in ISO 8601 format in UTC. Example - `P23DT23H`.",
+ "$ref": "../../type/basic.json#/definitions/duration"
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ },
+ "sourceUrl": {
+ "description": "Source URL of table.",
+ "$ref": "../../type/basic.json#/definitions/sourceUrl"
+ },
+ "domains" : {
+ "description": "Fully qualified names of the domains the Table belongs to.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "dataProducts" : {
+ "description": "List of fully qualified names of data products this entity is part of.",
+ "type": "array",
+ "items" : {
+ "$ref" : "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ }
+ },
+ "fileFormat": {
+ "description": "File format in case of file/datalake tables.",
+ "$ref": "../../entity/data/table.json#/definitions/fileFormat"
+ },
+ "lifeCycle": {
+ "description": "Life Cycle of the entity",
+ "$ref": "../../type/lifeCycle.json"
+ },
+ "sourceHash": {
+ "description": "Source hash of the entity",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32
+ }
+ },
+ "required": ["name", "columns", "databaseSchema"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createTableProfile.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createTableProfile.json
new file mode 100644
index 000000000000..5166c20851da
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createTableProfile.json
@@ -0,0 +1,30 @@
+{
+ "$id": "https://open-metadata.org/schema/api/data/createTableProfile.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateTableProfileRequest",
+ "description": "Schema corresponding to a table profile that belongs to a table",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.data.CreateTableProfile",
+ "properties": {
+ "tableProfile": {
+ "description": "Table Profile.",
+ "$ref": "../../entity/data/table.json#/definitions/tableProfile"
+ },
+ "columnProfile": {
+ "description": "List of local column profiles of the table.",
+ "type": "array",
+ "items": {
+ "$ref": "../../entity/data/table.json#/definitions/columnProfile"
+ }
+ },
+ "systemProfile": {
+ "description": "List of system profiles for the table.",
+ "type": "array",
+ "items": {
+ "$ref": "../../entity/data/table.json#/definitions/systemProfile"
+ }
+ }
+ },
+ "required": ["tableProfile"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createTopic.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createTopic.json
new file mode 100644
index 000000000000..f699ed4752b1
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createTopic.json
@@ -0,0 +1,115 @@
+{
+ "$id": "https://open-metadata.org/schema/api/data/createTopic.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateTopicRequest",
+ "description": "Create a topic entity request",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.data.CreateTopic",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+
+ "properties": {
+ "name": {
+ "description": "Name that identifies this topic instance uniquely.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this topic.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the topic instance. What it has and how to use it.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "service": {
+ "description": "Fully qualified name of the messaging service where this topic is hosted in",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "messageSchema": {
+ "$ref": "../../type/schema.json"
+ },
+ "partitions": {
+ "description": "Number of partitions into which the topic is divided.",
+ "type": "integer",
+ "minimum": 1
+ },
+ "cleanupPolicies": {
+ "description": "Topic clean up policy. For Kafka - `cleanup.policy` configuration.",
+ "type": "array",
+ "items": {
+ "$ref": "../../entity/data/topic.json#/definitions/cleanupPolicy"
+ }
+ },
+ "replicationFactor": {
+ "description": "Replication Factor in integer (more than 1).",
+ "type": "integer"
+ },
+ "retentionTime": {
+ "description": "Retention time in milliseconds. For Kafka - `retention.ms` configuration.",
+ "type": "number"
+ },
+ "maximumMessageSize": {
+ "description": "Maximum message size in bytes. For Kafka - `max.message.bytes` configuration.",
+ "type": "integer"
+ },
+ "minimumInSyncReplicas": {
+ "description": "Minimum number replicas in sync to control durability. For Kafka - `min.insync.replicas` configuration.",
+ "type": "integer"
+ },
+ "retentionSize": {
+ "description": "Maximum size of a partition in bytes before old data is discarded. For Kafka - `retention.bytes` configuration.",
+ "type": "number",
+ "default": "-1"
+ },
+ "topicConfig": {
+ "description": "Contains key/value pair of topic configuration.",
+ "$ref": "../../entity/data/topic.json#/definitions/topicConfig"
+ },
+ "owners": {
+ "description": "Owners of this topic",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "tags": {
+ "description": "Tags for this topic",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ },
+ "sourceUrl": {
+ "description": "Source URL of topic.",
+ "$ref": "../../type/basic.json#/definitions/sourceUrl"
+ },
+ "domains" : {
+ "description": "Fully qualified names of the domains the Topic belongs to.",
+ "type": "array",
+ "items": {
+ "$ref" : "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ }
+ },
+ "dataProducts" : {
+ "description": "List of fully qualified names of data products this entity is part of.",
+ "type": "array",
+ "items" : {
+ "$ref" : "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ }
+ },
+ "lifeCycle": {
+ "description": "Life Cycle of the entity",
+ "$ref": "../../type/lifeCycle.json"
+ },
+ "sourceHash": {
+ "description": "Source hash of the entity",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32
+ }
+ },
+ "required": ["name", "service", "partitions"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createWorksheet.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createWorksheet.json
new file mode 100644
index 000000000000..11f40fa13f65
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/createWorksheet.json
@@ -0,0 +1,108 @@
+{
+ "$id": "https://open-metadata.org/schema/api/data/createWorksheet.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateWorksheetRequest",
+ "description": "Create Worksheet entity request",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.data.CreateWorksheet",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+ "properties": {
+ "name": {
+ "description": "Name that identifies this worksheet.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this worksheet.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the worksheet.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "spreadsheet": {
+ "description": "Link to the parent spreadsheet fully qualified name",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "service": {
+ "description": "Link to the drive service fully qualified name where this worksheet is hosted in",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "worksheetId": {
+ "description": "Native worksheet/tab ID",
+ "type": "string"
+ },
+ "index": {
+ "description": "Position/index of the worksheet in the spreadsheet",
+ "type": "integer"
+ },
+ "rowCount": {
+ "description": "Number of rows in the worksheet",
+ "type": "integer"
+ },
+ "columnCount": {
+ "description": "Number of columns in the worksheet",
+ "type": "integer"
+ },
+ "columns": {
+ "description": "Column definitions if structured data",
+ "type": "array",
+ "items": {
+ "$ref": "../../entity/data/table.json#/definitions/column"
+ },
+ "default": []
+ },
+ "isHidden": {
+ "description": "Whether the worksheet is hidden",
+ "type": "boolean",
+ "default": false
+ },
+ "sourceUrl": {
+ "description": "Source URL of worksheet.",
+ "$ref": "../../type/basic.json#/definitions/sourceUrl"
+ },
+ "tags": {
+ "description": "Tags for this Worksheet.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "owners": {
+ "description": "Owners of this worksheet",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "dataProducts": {
+ "description": "List of fully qualified names of data products this entity is part of.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ }
+ },
+ "domains": {
+ "description": "Fully qualified names of the domains the Worksheet belongs to.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "default": null
+ },
+ "lifeCycle": {
+ "description": "Life Cycle of the entity",
+ "$ref": "../../type/lifeCycle.json"
+ },
+ "sourceHash": {
+ "description": "Source hash of the entity",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ }
+ },
+ "required": ["name", "spreadsheet"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/data/groupedColumnsResponse.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/groupedColumnsResponse.json
new file mode 100644
index 000000000000..7ba0c8d6d1fa
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/groupedColumnsResponse.json
@@ -0,0 +1,86 @@
+{
+ "$id": "https://open-metadata.org/schema/api/data/groupedColumnsResponse.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "GroupedColumnsResponse",
+ "description": "Response containing columns grouped by name with occurrence information.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.data.GroupedColumnsResponse",
+ "properties": {
+ "columnName": {
+ "description": "Name of the column being grouped.",
+ "type": "string"
+ },
+ "occurrences": {
+ "description": "List of column occurrences across different entities.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/columnOccurrence"
+ }
+ },
+ "totalCount": {
+ "description": "Total number of occurrences for this column name.",
+ "type": "integer",
+ "minimum": 0
+ }
+ },
+ "required": ["columnName", "occurrences", "totalCount"],
+ "definitions": {
+ "columnOccurrence": {
+ "javaType": "org.openmetadata.schema.api.data.ColumnOccurrence",
+ "description": "Individual column occurrence with entity details.",
+ "type": "object",
+ "properties": {
+ "columnFQN": {
+ "description": "Fully qualified name of the column.",
+ "type": "string"
+ },
+ "entityType": {
+ "description": "Type of entity containing the column (table or dashboardDataModel).",
+ "type": "string"
+ },
+ "entityFQN": {
+ "description": "Fully qualified name of the parent entity.",
+ "type": "string"
+ },
+ "entityDisplayName": {
+ "description": "Display name of the parent entity.",
+ "type": "string"
+ },
+ "serviceName": {
+ "description": "Name of the service.",
+ "type": "string"
+ },
+ "databaseName": {
+ "description": "Name of the database (if applicable).",
+ "type": "string"
+ },
+ "schemaName": {
+ "description": "Name of the schema (if applicable).",
+ "type": "string"
+ },
+ "displayName": {
+ "description": "Display name of the column.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the column.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "tags": {
+ "description": "Tags and glossary terms associated with the column.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ }
+ },
+ "dataType": {
+ "description": "Data type of the column.",
+ "type": "string"
+ }
+ },
+ "required": ["columnFQN", "entityType", "entityFQN"],
+ "additionalProperties": false
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/data/loadGlossary.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/loadGlossary.json
new file mode 100644
index 000000000000..54066daa8214
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/loadGlossary.json
@@ -0,0 +1,22 @@
+{
+ "$id": "https://open-metadata.org/schema/api/data/loadGlossary.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "loadGlossary",
+ "description": "Load a glossary",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.data.LoadGlossary",
+ "properties": {
+ "createGlossary": {
+ "$ref": "createGlossary.json"
+ },
+ "createTerms": {
+ "type": "array",
+ "items": {
+ "$ref": "createGlossaryTerm.json"
+ },
+ "minItems": 1
+ }
+ },
+ "required": ["createGlossary"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/data/restoreEntity.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/restoreEntity.json
new file mode 100644
index 000000000000..51fbe29ed648
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/restoreEntity.json
@@ -0,0 +1,16 @@
+{
+ "$id": "https://open-metadata.org/schema/api/restoreEntity.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "restoreEntity",
+ "description": "Restore Entity API request to restore soft deleted entity.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.data.RestoreEntity",
+ "properties": {
+ "id": {
+ "description": "Unique identifier that identifies an entity instance.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ }
+ },
+ "required": ["id"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/data/searchColumnsRequest.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/searchColumnsRequest.json
new file mode 100644
index 000000000000..8af5b75d64a3
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/searchColumnsRequest.json
@@ -0,0 +1,38 @@
+{
+ "$id": "https://open-metadata.org/schema/api/data/searchColumnsRequest.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SearchColumnsRequest",
+ "description": "Request to search and group columns by name across different entity types.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.data.SearchColumnsRequest",
+ "properties": {
+ "columnName": {
+ "description": "Column name to search for (exact match, case-sensitive).",
+ "type": "string"
+ },
+ "entityTypes": {
+ "description": "Filter by entity types. If not provided, searches across all supported types (table, dashboardDataModel, container, searchIndex).",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "serviceName": {
+ "description": "Filter by service name.",
+ "type": "string"
+ },
+ "databaseName": {
+ "description": "Filter by database name.",
+ "type": "string"
+ },
+ "schemaName": {
+ "description": "Filter by schema name.",
+ "type": "string"
+ },
+ "domainId": {
+ "description": "Filter by domain ID.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/data/updateColumn.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/updateColumn.json
new file mode 100644
index 000000000000..ed00ce46c6fe
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/data/updateColumn.json
@@ -0,0 +1,40 @@
+{
+ "$id": "https://open-metadata.org/schema/api/data/updateColumn.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "UpdateColumn",
+ "description": "Update Column API request to update individual column metadata such as display name, description, tags, and glossary terms. This API works for columns in both tables and dashboard data models using the column's fully qualified name. The constraint field is only applicable to table columns.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.data.UpdateColumn",
+ "properties": {
+ "displayName": {
+ "description": "Display Name that identifies this column name.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the column.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "tags": {
+ "description": "Tags and glossary terms associated with the column. Use source: 'Classification' for classification tags and source: 'Glossary' for glossary terms. Provide an empty array to remove all tags. Note: Invalid or non-existent tags/glossary terms will result in a 404 error.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "constraint": {
+ "description": "Column level constraint. Only applicable to table columns, ignored for dashboard data model columns.",
+ "$ref": "../../entity/data/table.json#/definitions/constraint"
+ },
+ "removeConstraint": {
+ "description": "Set to true to remove the existing column constraint. Only applicable to table columns, ignored for dashboard data model columns. If both 'constraint' and 'removeConstraint' are provided, 'removeConstraint' takes precedence.",
+ "type": "boolean",
+ "default": false
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the column.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/dataInsight/createDataInsightChart.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/dataInsight/createDataInsightChart.json
new file mode 100644
index 000000000000..6007f0f86dae
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/dataInsight/createDataInsightChart.json
@@ -0,0 +1,55 @@
+{
+ "$id": "https://open-metadata.org/schema/api/dataInsight/createDataInsightChart.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateDataInsightChart",
+ "description": "Payload to create a data insight chart",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.dataInsight.CreateDataInsightChart",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+ "properties": {
+ "name": {
+ "description": "Name that identifies this data insight chart.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name the data insight chart.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the data insight chart.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "dataIndexType": {
+ "description": "Elasticsearch index name",
+ "$ref": "../../dataInsight/dataInsightChart.json#/definitions/dataReportIndex"
+ },
+ "dimensions": {
+ "description": "Dimensions of the chart",
+ "type": "array",
+ "items": {
+ "$ref": "../../dataInsight/dataInsightChart.json#/definitions/chartParameterValues"
+ }
+ },
+ "metrics": {
+ "description": "Metrics of the chart",
+ "type": "array",
+ "items": {
+ "$ref": "../../dataInsight/dataInsightChart.json#/definitions/chartParameterValues"
+ }
+ },
+ "owners": {
+ "description": "Owners of this chart",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "domains" : {
+ "description": "Fully qualified names of the domains the Data Insight Chart belongs to.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "required": ["name"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/dataInsight/custom/createDataInsightCustomChart.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/dataInsight/custom/createDataInsightCustomChart.json
new file mode 100644
index 000000000000..f17386dee7d0
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/dataInsight/custom/createDataInsightCustomChart.json
@@ -0,0 +1,58 @@
+{
+ "$id": "https://open-metadata.org/schema/api/dataInsight/custom/CreateDataInsightCustomChart.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateDataInsightCustomChart",
+ "description": "Payload to create a data insight custom chart",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.dataInsight.custom.CreateDataInsightCustomChart",
+ "javaInterfaces": [
+ "org.openmetadata.schema.CreateEntity"
+ ],
+ "properties": {
+ "name": {
+ "description": "Name that identifies this data insight chart.",
+ "$ref": "../../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name the data insight chart.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the data insight chart.",
+ "$ref": "../../../type/basic.json#/definitions/markdown"
+ },
+ "chartType": {
+ "description": "Type of chart, used for UI to render the chart",
+ "type": "string",
+ "enum": [
+ "LineChart",
+ "AreaChart",
+ "BarChart",
+ "SummaryCard"
+ ]
+ },
+ "chartDetails": {
+ "oneOf": [
+ {
+ "$ref": "../../../dataInsight/custom/lineChart.json"
+ },
+ {
+ "$ref": "../../../dataInsight/custom/summaryCard.json"
+ }
+ ]
+ },
+ "owner": {
+ "description": "Owner of this chart",
+ "$ref": "../../../type/entityReference.json"
+ },
+ "dashboard": {
+ "description": "Dashboard where this chart is displayed",
+ "$ref": "../../../type/entityReference.json"
+ }
+ },
+ "required": [
+ "name",
+ "chartDetails"
+ ],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/dataInsight/kpi/createKpiRequest.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/dataInsight/kpi/createKpiRequest.json
new file mode 100644
index 000000000000..1b17525a17f9
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/dataInsight/kpi/createKpiRequest.json
@@ -0,0 +1,71 @@
+{
+ "$id": "https://open-metadata.org/schema/api/dataInsight/kpi/createKpiRequest.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateKpiRequest",
+ "description": "Schema corresponding to a Kpi.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.dataInsight.kpi.CreateKpiRequest",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+ "properties": {
+ "name": {
+ "description": "Name that identifies this Kpi.",
+ "$ref": "../../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this Kpi.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the Kpi.",
+ "$ref": "../../../type/basic.json#/definitions/markdown"
+ },
+ "owners": {
+ "description": "Owner of this Kpi",
+ "$ref": "../../../type/entityReferenceList.json",
+ "default": null
+ },
+ "dataInsightChart": {
+ "description": "Fully qualified name of the Chart this kpi refers to",
+ "type": "string",
+ "javaType": "org.openmetadata.schema.api.dataInsight.kpi.KpiDataInsightChart",
+ "enum": [
+ "percentage_of_data_asset_with_description_kpi",
+ "percentage_of_data_asset_with_owner_kpi",
+ "number_of_data_asset_with_description_kpi",
+ "number_of_data_asset_with_owner_kpi"
+ ]
+ },
+ "startDate": {
+ "description": "Start Date for the KPIs",
+ "$ref": "../../../type/basic.json#/definitions/timestamp"
+ },
+ "endDate": {
+ "description": "End Date for the KPIs",
+ "$ref": "../../../type/basic.json#/definitions/timestamp"
+ },
+ "targetValue": {
+ "description": "Metrics from the chart and the target to achieve the result.",
+ "type": "number"
+ },
+ "metricType": {
+ "$ref": "../../../dataInsight/kpi/basic.json#/definitions/kpiTargetType"
+ },
+ "domains": {
+ "description": "Fully qualified names of the domains the KPI belongs to.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "required": [
+ "name",
+ "description",
+ "dataInsightChart",
+ "startDate",
+ "endDate",
+ "targetValue",
+ "metricType"
+ ],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/docStore/createDocument.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/docStore/createDocument.json
new file mode 100644
index 000000000000..bd2487134fb0
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/docStore/createDocument.json
@@ -0,0 +1,42 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/docStore/document.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateDocumentRequest",
+ "description": "This schema defines Document. A Generic entity to capture any kind of Json Payload.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entities.docStore.CreateDocument",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity", "org.openmetadata.schema.DocStoreEntityInterface"],
+ "properties": {
+ "name": {
+ "description": "Name of the DocStore",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this column name.",
+ "type": "string"
+ },
+ "fullyQualifiedName": {
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "description": {
+ "description": "Description of the DocStore Entity.",
+ "type": "string"
+ },
+ "entityType": {
+ "description": "Type of the Entity stored in DocStore.",
+ "type": "string"
+ },
+ "data": {
+ "$ref": "../../entity/docStore/document.json#/definitions/data"
+ },
+ "domains" : {
+ "description": "Fully qualified names of the domains the Document belongs to.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "required": ["name", "fullyQualifiedName","entityType", "data"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/domains/createDataProduct.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/domains/createDataProduct.json
new file mode 100644
index 000000000000..e0a7bb240e04
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/domains/createDataProduct.json
@@ -0,0 +1,82 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/domains/createDataProduct.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateDataProductRequest",
+ "description": "Create DataProduct API request",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.domains.CreateDataProduct",
+ "javaInterfaces": [
+ "org.openmetadata.schema.CreateEntity"
+ ],
+ "properties": {
+ "name": {
+ "description": "A unique name of the DataProduct",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "fullyQualifiedName": {
+ "description": "FullyQualifiedName of the Domain.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "displayName": {
+ "description": "Name used for display purposes. Example 'Customer Churn', 'Sentiment Analysis', etc.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the DataProduct.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "style": {
+ "$ref": "../../type/basic.json#/definitions/style"
+ },
+ "owners": {
+ "description": "Owners of this DataProduct.",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "domains": {
+ "description": "Fully qualified names of the Domains the DataProduct belongs to.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "default": null
+ },
+ "experts": {
+ "description": "List of user/login names of users who are experts in this DataProduct.",
+ "type" : "array",
+ "items": {
+ "type": "string"
+ },
+ "default": null
+ },
+ "reviewers": {
+ "description": "User references of the reviewers for this DataProduct.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "assets": {
+ "description": "Data assets collection that is part of this data product.",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null,
+ "deprecated": true,
+ "$comment": "@deprecated Use PUT /v1/dataProducts/{name}/assets/add bulkAssets API endpoint to add assets to data product"
+ },
+ "tags": {
+ "description": "Tags for this Data Product.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ }
+ },
+ "required": [
+ "name",
+ "description",
+ "domains"
+ ],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/domains/createDomain.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/domains/createDomain.json
new file mode 100644
index 000000000000..d52c72dd5038
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/domains/createDomain.json
@@ -0,0 +1,71 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/domains/createDomain.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateDomainRequest",
+ "description": "Create Domain API request",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.domains.CreateDomain",
+ "javaInterfaces": [
+ "org.openmetadata.schema.CreateEntity"
+ ],
+ "properties": {
+ "domainType": {
+ "description": "Domain type",
+ "$ref": "../../entity/domains/domain.json#/definitions/domainType"
+ },
+ "name": {
+ "description": "A unique name of the Domain",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "fullyQualifiedName": {
+ "description": "FullyQualifiedName same as `name`.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "displayName": {
+ "description": "Name used for display purposes. Example 'Marketing', 'Payments', etc.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the Domain.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "style": {
+ "$ref": "../../type/basic.json#/definitions/style"
+ },
+ "parent": {
+ "description": "Fully qualified name of parent domain.",
+ "type": "string"
+ },
+ "owners": {
+ "description": "Owners of this Domain.",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "experts": {
+ "description": "List of user/login names of users who are experts in this Domain.",
+ "type" : "array",
+ "items": {
+ "type": "string"
+ },
+ "default": null
+ },
+ "tags": {
+ "description": "Tags for this Domain.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ }
+ },
+ "required": [
+ "name",
+ "description",
+ "domainType"
+ ],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/domains/dataProductPortsView.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/domains/dataProductPortsView.json
new file mode 100644
index 000000000000..0407fb396047
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/domains/dataProductPortsView.json
@@ -0,0 +1,47 @@
+{
+ "$id": "https://open-metadata.org/schema/api/domains/dataProductPortsView.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DataProductPortsView",
+ "description": "Combined view of input and output ports for a data product, optimized for lineage-like visualization with independent pagination for each port type. Returns full entity details for each port.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.domains.DataProductPortsView",
+ "definitions": {
+ "paginatedEntities": {
+ "type": "object",
+ "description": "A paginated list of full entity objects with total count",
+ "javaType": "org.openmetadata.schema.api.domains.PaginatedEntities",
+ "properties": {
+ "data": {
+ "description": "List of full entity objects in the current page",
+ "type": "array",
+ "items": {
+ "type": "object"
+ },
+ "default": []
+ },
+ "paging": {
+ "description": "Pagination information including offset and total count",
+ "$ref": "../../type/paging.json"
+ }
+ },
+ "required": ["data", "paging"],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "entity": {
+ "description": "Reference to the data product entity",
+ "$ref": "../../type/entityReference.json"
+ },
+ "inputPorts": {
+ "description": "Paginated list of input ports - full entity details of data assets consumed by this data product",
+ "$ref": "#/definitions/paginatedEntities"
+ },
+ "outputPorts": {
+ "description": "Paginated list of output ports - full entity details of data assets produced/exposed by this data product",
+ "$ref": "#/definitions/paginatedEntities"
+ }
+ },
+ "required": ["entity", "inputPorts", "outputPorts"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/entityRelationship/entityRelationshipDirection.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/entityRelationship/entityRelationshipDirection.json
new file mode 100644
index 000000000000..3ccf268cb175
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/entityRelationship/entityRelationshipDirection.json
@@ -0,0 +1,9 @@
+{
+ "$id": "https://open-metadata.org/schema/api/entityRelationship/entityRelationshipDirection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "EntityRelationshipDirection",
+ "description": "Entity Relationship Direction Schema.",
+ "javaType": "org.openmetadata.schema.api.entityRelationship.EntityRelationshipDirection",
+ "type": "string",
+ "enum": ["Upstream", "Downstream"]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/entityRelationship/esEntityRelationshipData.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/entityRelationship/esEntityRelationshipData.json
new file mode 100644
index 000000000000..1726fd56f473
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/entityRelationship/esEntityRelationshipData.json
@@ -0,0 +1,52 @@
+{
+ "$id": "https://open-metadata.org/schema/api/entityRelationship/esEntityRelationshipData.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "EsEntityRelationshipData",
+ "description": "Response object for the search entity relationship request from Elastic Search.",
+ "javaType": "org.openmetadata.schema.api.entityRelationship.EsEntityRelationshipData",
+ "type": "object",
+ "properties": {
+ "entity": {
+ "description": "Entity in the relationship (upstream/source entity).",
+ "$ref": "./relationshipRef.json"
+ },
+ "relatedEntity": {
+ "description": "Related Entity in the relationship (downstream/target entity).",
+ "$ref": "./relationshipRef.json"
+ },
+ "columns": {
+ "description": "Columns associated with the relationship.",
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "columnFQN": {
+ "description": "Column FQN in the entity.",
+ "type": "string"
+ },
+ "relatedColumnFQN": {
+ "description": "Related column FQN in the related entity.",
+ "type": "string"
+ },
+ "relationshipType": {
+ "description": "Type of relationship between columns.",
+ "type": "string"
+ }
+ }
+ }
+ },
+ "description": {
+ "description": "Description of the relationship.",
+ "type": "string"
+ },
+ "docId": {
+ "description": "Doc Id for the Entity Relationship.",
+ "type": "string"
+ },
+ "relationshipType": {
+ "description": "Type of relationship.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/entityRelationship/relationshipRef.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/entityRelationship/relationshipRef.json
new file mode 100644
index 000000000000..54adfa09fe0e
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/entityRelationship/relationshipRef.json
@@ -0,0 +1,27 @@
+{
+ "$id": "https://open-metadata.org/schema/api/entityRelationship/relationshipRef.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "RelationshipRef",
+ "description": "Relationship Reference to an Entity.",
+ "javaType": "org.openmetadata.schema.api.entityRelationship.RelationshipRef",
+ "type": "object",
+ "properties": {
+ "id": {
+ "description": "Unique identifier of this entity instance.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "fullyQualifiedName": {
+ "description": "FullyQualifiedName of the entity.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "fqnHash": {
+ "description": "FullyQualifiedName Hash of the entity.",
+ "type": "string"
+ },
+ "type": {
+ "description": "Type of the entity.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/entityRelationship/searchEntityRelationshipRequest.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/entityRelationship/searchEntityRelationshipRequest.json
new file mode 100644
index 000000000000..650314a47249
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/entityRelationship/searchEntityRelationshipRequest.json
@@ -0,0 +1,64 @@
+{
+ "$id": "https://open-metadata.org/schema/api/entityRelationship/searchEntityRelationshipRequest.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SearchEntityRelationshipRequest",
+ "description": "Search Entity Relationship Request Schema to find entity relationships from Elastic Search.",
+ "javaType": "org.openmetadata.schema.api.entityRelationship.SearchEntityRelationshipRequest",
+ "type": "object",
+ "properties": {
+ "fqn": {
+ "description": "Entity Fqn to search entity relationships",
+ "type": "string"
+ },
+ "direction": {
+ "$ref": "./entityRelationshipDirection.json"
+ },
+ "directionValue": {
+ "description": "Entity Relationship Direction Value.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "uniqueItems": true
+ },
+ "upstreamDepth": {
+ "description": "The upstream depth of the entity relationship",
+ "type": "integer",
+ "default": 3
+ },
+ "downstreamDepth": {
+ "description": "The downstream depth of the entity relationship",
+ "type": "integer",
+ "default": 3
+ },
+ "layerFrom": {
+ "description": "Layer to start the search from.",
+ "type": "integer",
+ "default": 0
+ },
+ "layerSize": {
+ "description": "Size of the search result.",
+ "type": "integer",
+ "default": 1000
+ },
+ "queryFilter": {
+ "description": "Query Filter",
+ "type": "string"
+ },
+ "includeDeleted": {
+ "description": "Include deleted entities",
+ "type": "boolean",
+ "default": null
+ },
+ "includeSourceFields": {
+ "description": "Include source fields",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "uniqueItems": true
+ }
+ },
+ "required": ["fqn", "direction"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/entityRelationship/searchEntityRelationshipResult.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/entityRelationship/searchEntityRelationshipResult.json
new file mode 100644
index 000000000000..c13739bdd522
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/entityRelationship/searchEntityRelationshipResult.json
@@ -0,0 +1,57 @@
+{
+ "$id": "https://open-metadata.org/schema/api/entityRelationship/searchEntityRelationshipResult.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SearchEntityRelationshipResult",
+ "description": "Search Entity Relationship Response for the Entity Relationship Request",
+ "javaType": "org.openmetadata.schema.api.entityRelationship.SearchEntityRelationshipResult",
+ "type": "object",
+ "definitions": {
+ "directionPaging": {
+ "properties": {
+ "upstream": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/layerPaging"
+ }
+ },
+ "downstream": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/layerPaging"
+ }
+ }
+ }
+ },
+ "layerPaging": {
+ "description": "Type used for cursor based pagination information in GET list responses.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.LayerPaging",
+ "properties": {
+ "entityDownstreamCount": {
+ "description": "Count of entities downstream current layer entity.",
+ "type": "integer"
+ },
+ "entityUpstreamCount": {
+ "description": "Count of entities upstream current layer entity.",
+ "type": "integer"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "nodes" : {
+ "description": "Nodes in the entity relationship response.",
+ "existingJavaType": "java.util.Map"
+ },
+ "upstreamEdges": {
+ "description": "Upstream Edges for the entity.",
+ "existingJavaType": "java.util.Map"
+ },
+ "downstreamEdges": {
+ "description": "Downstream Edges for the node.",
+ "existingJavaType": "java.util.Map"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/entityRelationship/searchSchemaEntityRelationshipResult.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/entityRelationship/searchSchemaEntityRelationshipResult.json
new file mode 100644
index 000000000000..f48492bac46a
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/entityRelationship/searchSchemaEntityRelationshipResult.json
@@ -0,0 +1,18 @@
+{
+ "$id": "https://open-metadata.org/schema/api/entityRelationship/searchSchemaEntityRelationshipResult.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SearchSchemaEntityRelationshipResult",
+ "description": "Paginated response for Search Schema Entity Relationship, including ER diagram data and paging metadata.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.entityRelationship.SearchSchemaEntityRelationshipResult",
+ "properties": {
+ "data": {
+ "$ref": "searchEntityRelationshipResult.json"
+ },
+ "paging": {
+ "$ref": "../../type/paging.json"
+ }
+ },
+ "required": ["data", "paging"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/events/createNotificationTemplate.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/events/createNotificationTemplate.json
new file mode 100644
index 000000000000..26a72409276a
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/events/createNotificationTemplate.json
@@ -0,0 +1,49 @@
+{
+ "$id": "https://open-metadata.org/schema/api/events/createNotificationTemplate.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateNotificationTemplate",
+ "description": "Create request for Notification Template",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.events.CreateNotificationTemplate",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+ "properties": {
+ "name": {
+ "description": "Name that uniquely identifies this notification template (e.g., 'entity_change', 'test_change')",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display name for this notification template",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of this notification template",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "templateSubject": {
+ "description": "Handlebars template for notification subject line",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "templateBody": {
+ "description": "Handlebars template content for rendering notifications",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 65536
+ },
+ "owners": {
+ "description": "Owners of this template",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "domains": {
+ "description": "Fully qualified names of the domains the template belongs to",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "required": ["name", "templateSubject", "templateBody"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/events/notificationTemplateRenderRequest.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/events/notificationTemplateRenderRequest.json
new file mode 100644
index 000000000000..084eec08da3c
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/events/notificationTemplateRenderRequest.json
@@ -0,0 +1,34 @@
+{
+ "$id": "https://open-metadata.org/schema/api/events/notificationTemplateRenderRequest.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "NotificationTemplateRenderRequest",
+ "description": "Request to render a notification template with mock data for preview.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.events.NotificationTemplateRenderRequest",
+ "properties": {
+ "templateSubject": {
+ "description": "Handlebars template for notification subject line",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "templateBody": {
+ "description": "Handlebars template content for rendering notifications",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 65536
+ },
+ "resource": {
+ "type": "string",
+ "description": "Entity type to mock (e.g., 'table', 'dashboard', 'task'). Falls back to generic fixture if not found.",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "eventType": {
+ "$ref": "../../type/changeEventType.json",
+ "description": "Optional. Specific event type to test (e.g., 'entityUpdated'). When omitted, generates a neutral ChangeEvent with no event-specific fields."
+ }
+ },
+ "required": ["templateSubject", "templateBody", "resource"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/events/notificationTemplateRenderResponse.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/events/notificationTemplateRenderResponse.json
new file mode 100644
index 000000000000..c9aef98a5e18
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/events/notificationTemplateRenderResponse.json
@@ -0,0 +1,39 @@
+{
+ "$id": "https://open-metadata.org/schema/api/events/notificationTemplateRenderResponse.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "NotificationTemplateRenderResponse",
+ "description": "Response from rendering a notification template with mock data, including validation and rendered output.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.events.NotificationTemplateRenderResponse",
+ "definitions": {
+ "templateRenderResult": {
+ "type": "object",
+ "description": "Rendered template output with subject and body strings.",
+ "javaType": "org.openmetadata.schema.api.events.TemplateRenderResult",
+ "properties": {
+ "subject": {
+ "type": "string",
+ "description": "Rendered template subject."
+ },
+ "body": {
+ "type": "string",
+ "description": "Rendered template body."
+ }
+ },
+ "required": ["subject", "body"],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "validation": {
+ "$ref": "./notificationTemplateValidationResponse.json",
+ "description": "Syntax validation results for the template."
+ },
+ "render": {
+ "$ref": "#/definitions/templateRenderResult",
+ "description": "Actual rendering results with mock data. Null if validation failed."
+ }
+ },
+ "required": ["validation"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/events/notificationTemplateSendRequest.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/events/notificationTemplateSendRequest.json
new file mode 100644
index 000000000000..c7357bb8aa80
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/events/notificationTemplateSendRequest.json
@@ -0,0 +1,24 @@
+{
+ "$id": "https://open-metadata.org/schema/api/events/notificationTemplateSendRequest.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "NotificationTemplateSendRequest",
+ "description": "Request to render and send a notification template with mock data to external destinations.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.events.NotificationTemplateSendRequest",
+ "properties": {
+ "renderRequest": {
+ "$ref": "./notificationTemplateRenderRequest.json",
+ "description": "Template rendering parameters (template content, resource, eventType)"
+ },
+ "destinations": {
+ "type": "array",
+ "description": "External-only destinations for sending test notifications (Slack, Teams, GChat, Email, Webhook).",
+ "items": {
+ "$ref": "../../events/eventSubscription.json#/definitions/destination"
+ },
+ "minItems": 1
+ }
+ },
+ "required": ["renderRequest", "destinations"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/events/notificationTemplateValidationRequest.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/events/notificationTemplateValidationRequest.json
new file mode 100644
index 000000000000..8b15b739a421
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/events/notificationTemplateValidationRequest.json
@@ -0,0 +1,24 @@
+{
+ "$id": "https://open-metadata.org/schema/api/events/notificationTemplateValidationRequest.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "NotificationTemplateValidationRequest",
+ "description": "Request to validate a notification template",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.events.NotificationTemplateValidationRequest",
+ "properties": {
+ "templateBody": {
+ "description": "The template body to validate",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 65536
+ },
+ "templateSubject": {
+ "description": "The template subject line to validate",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ },
+ "required": ["templateBody", "templateSubject"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/events/notificationTemplateValidationResponse.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/events/notificationTemplateValidationResponse.json
new file mode 100644
index 000000000000..c507a2fef5ff
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/events/notificationTemplateValidationResponse.json
@@ -0,0 +1,24 @@
+{
+ "$id": "https://open-metadata.org/schema/api/events/notificationTemplateValidationResponse.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "NotificationTemplateValidationResponse",
+ "description": "Response from notification template validation",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.events.NotificationTemplateValidationResponse",
+ "properties": {
+ "isValid": {
+ "description": "Whether both subject and body passed validation",
+ "type": "boolean"
+ },
+ "subjectError": {
+ "description": "Error message if subject validation failed, null otherwise",
+ "type": ["string", "null"]
+ },
+ "bodyError": {
+ "description": "Error message if body validation failed, null otherwise",
+ "type": ["string", "null"]
+ }
+ },
+ "required": ["isValid"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/feed/closeTask.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/feed/closeTask.json
new file mode 100644
index 000000000000..35ad5c2e3f38
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/feed/closeTask.json
@@ -0,0 +1,19 @@
+{
+ "$id": "https://open-metadata.org/schema/api/feed/closeTask.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CloseTaskRequest",
+ "description": "Close Task request",
+ "type": "object",
+ "properties": {
+ "comment": {
+ "description": "The closing comment explaining why the task is being closed.",
+ "type": "string"
+ },
+ "testCaseFQN": {
+ "description": "Fully qualified name of the test case.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ }
+ },
+ "required": ["comment"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/feed/createAnnouncement.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/feed/createAnnouncement.json
new file mode 100644
index 000000000000..c72aa4377ce3
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/feed/createAnnouncement.json
@@ -0,0 +1,43 @@
+{
+ "$id": "https://open-metadata.org/schema/api/feed/createAnnouncement.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateAnnouncementRequest",
+ "description": "Request to create a new Announcement.",
+ "javaType": "org.openmetadata.schema.api.feed.CreateAnnouncement",
+ "type": "object",
+ "properties": {
+ "name": {
+ "description": "Name for the announcement.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display name for the announcement.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Announcement content in Markdown format.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "entityLink": {
+ "description": "Link to the entity this announcement is about.",
+ "$ref": "../../type/basic.json#/definitions/entityLink"
+ },
+ "startTime": {
+ "description": "Start time from when the announcement should be shown.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "endTime": {
+ "description": "End time when the announcement expires.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "owners": {
+ "description": "Owners of this announcement.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "required": ["description", "startTime", "endTime"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/feed/createPost.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/feed/createPost.json
new file mode 100644
index 000000000000..b8fc91af933e
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/feed/createPost.json
@@ -0,0 +1,15 @@
+{
+ "$id": "https://open-metadata.org/schema/api/feed/createPost.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreatePostRequest",
+ "description": "Create post request",
+ "type": "object",
+ "properties": {
+ "message": {
+ "description": "Message in Markdown format. See markdown support for more details.",
+ "type": "string"
+ }
+ },
+ "required": ["message"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/feed/createSuggestion.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/feed/createSuggestion.json
new file mode 100644
index 000000000000..91b4b8c4a958
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/feed/createSuggestion.json
@@ -0,0 +1,31 @@
+{
+ "$id": "https://open-metadata.org/schema/api/feed/createSuggestion.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateSuggestionRequest",
+ "description": "Create Suggestion request",
+ "type": "object",
+ "properties": {
+ "description": {
+ "description": "Message in Markdown format. See markdown support for more details.",
+ "type": "string"
+ },
+ "tagLabels": {
+ "description": "Tags or Glossary Terms.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "type": {
+ "$ref": "../../entity/feed/suggestion.json#/definitions/suggestionType"
+ },
+ "entityLink": {
+ "description": "Data asset about which this thread is created for with format <#E::{entities}::{entityName}::{field}::{fieldValue}.",
+ "$ref": "../../type/basic.json#/definitions/entityLink"
+ }
+ },
+ "oneOf": [{"required": ["suggestionType", "entityLink", "description"]},
+ {"required": ["suggestionType", "entityLink","tagLabels"]}],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/feed/createThread.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/feed/createThread.json
new file mode 100644
index 000000000000..71051acc16ba
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/feed/createThread.json
@@ -0,0 +1,70 @@
+{
+ "$id": "https://open-metadata.org/schema/api/feed/createThread.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateThreadRequest",
+ "description": "Create thread request",
+ "type": "object",
+ "definitions": {
+ "createTaskDetails": {
+ "javaType": "org.openmetadata.schema.api.CreateTaskDetails",
+ "description": "Details about the task. This is only applicable if thread is of type task.",
+ "type": "object",
+ "properties": {
+ "type": {
+ "$ref": "../../entity/feed/thread.json#/definitions/taskType"
+ },
+ "assignees": {
+ "description": "List of users or teams the task is assigned to",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "oldValue": {
+ "description": "The value of old object for which the task is created.",
+ "type": "string"
+ },
+ "suggestion": {
+ "description": "The suggestion object for the task provided by the creator.",
+ "type": "string"
+ }
+ },
+ "required": ["assignees", "type"],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "message": {
+ "description": "Message",
+ "type": "string"
+ },
+ "addressedTo": {
+ "description": "User or team this thread is addressed to in format <#E::{entities}::{entityName}::{field}::{fieldValue}.",
+ "$ref": "../../type/basic.json#/definitions/entityLink"
+ },
+ "about": {
+ "description": "Data asset about which this thread is created for with format <#E::{entities}::{entityType}::{field}::{fieldValue}",
+ "$ref": "../../type/basic.json#/definitions/entityLink"
+ },
+ "type": {
+ "$ref": "../../entity/feed/thread.json#/definitions/threadType"
+ },
+ "taskDetails": {
+ "$ref": "#/definitions/createTaskDetails"
+ },
+ "announcementDetails": {
+ "$ref": "../../entity/feed/thread.json#/definitions/announcementDetails"
+ },
+ "chatbotDetails": {
+ "description": "Details about the Chatbot conversation. This is only applicable if thread is of type Chatbot.",
+ "$ref": "../../entity/feed/thread.json#/definitions/chatbotDetails"
+ },
+ "domains": {
+ "description": "Domain the entity belongs to.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "default": null
+ }
+ },
+ "required": ["message", "about"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/feed/resolveTask.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/feed/resolveTask.json
new file mode 100644
index 000000000000..3cfb9fc32301
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/feed/resolveTask.json
@@ -0,0 +1,23 @@
+{
+ "$id": "https://open-metadata.org/schema/api/feed/resolveTask.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "ResolveTaskRequest",
+ "description": "Resolve Task request",
+ "type": "object",
+ "properties": {
+ "newValue": {
+ "description": "The new value object that needs to be updated to resolve the task.",
+ "type": "string"
+ },
+ "testCaseFailureReason": {
+ "description": "Reason of Test Case resolution.",
+ "$ref": "../../tests/resolved.json#/definitions/testCaseFailureReasonType"
+ },
+ "testCaseFQN": {
+ "description": "Fully qualified name of the test case.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ }
+ },
+ "required": ["newValue"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/feed/threadCount.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/feed/threadCount.json
new file mode 100644
index 000000000000..667af4cdd453
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/feed/threadCount.json
@@ -0,0 +1,54 @@
+{
+ "$id": "https://open-metadata.org/schema/api/feed/threadCount.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Count of threads related to an entity",
+ "description": "This schema defines the type for reporting the count of threads related to an entity.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.feed.ThreadCount",
+ "properties": {
+ "conversationCount": {
+ "description": "Total count of all the threads of type Conversation.",
+ "type": "integer",
+ "minimum": 0
+ },
+ "openTaskCount": {
+ "description": "Total count of all the open tasks.",
+ "type": "integer",
+ "minimum": 0
+ },
+ "closedTaskCount": {
+ "description": "Total count of all the tasks.",
+ "type": "integer",
+ "minimum": 0
+ },
+ "totalTaskCount": {
+ "description": "Total count of all the tasks.",
+ "type": "integer",
+ "minimum": 0
+ },
+ "mentionCount": {
+ "description": "Total count of all the mentions of a user.",
+ "type": "integer",
+ "minimum": 0
+ },
+ "totalAnnouncementCount": {
+ "description": "Total count of all the announcements associated with the entity.",
+ "type": "integer",
+ "minimum": 0
+ },
+ "activeAnnouncementCount": {
+ "description": "Total count of all the active announcements associated with the entity.",
+ "type": "integer",
+ "minimum": 0
+ },
+ "inactiveAnnouncementCount": {
+ "description": "Total count of all the inactive announcements associated with the entity.",
+ "type": "integer",
+ "minimum": 0
+ },
+ "entityLink": {
+ "$ref": "../../type/basic.json#/definitions/entityLink"
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/governance/createWorkflowDefinition.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/governance/createWorkflowDefinition.json
new file mode 100644
index 000000000000..be446e50f6d9
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/governance/createWorkflowDefinition.json
@@ -0,0 +1,95 @@
+{
+ "$id": "https://open-metadata.org/schema/api/governance/createWorkflowDefinition.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateWorkflowDefinitionRequest",
+ "description": "Create Workflow Definition entity request",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.governance.CreateWorkflowDefinition",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+ "definitions": {
+ "workflowConfiguration": {
+ "type": "object",
+ "properties": {
+ "storeStageStatus": {
+ "title": "Storage Workflow Stage Status",
+ "description": "If True, all the stage status will be stored in the database.",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "additionalProperties": false,
+ "required": ["storeStageStatus"]
+ }
+ },
+ "properties": {
+ "name": {
+ "description": "Name that identifies this Workflow Definition.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this Workflow Definition.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the Workflow Definition. What it has and how to use it.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "owners": {
+ "description": "Owners of this API Collection",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "type": {
+ "$ref": "../../governance/workflows/workflowDefinition.json#/definitions/type"
+ },
+ "config": {
+ "description": "Configuration for the Workflow Definition",
+ "$ref": "#/definitions/workflowConfiguration"
+ },
+ "trigger": {
+ "existingJavaType": "org.openmetadata.schema.governance.workflows.elements.WorkflowTriggerInterface",
+ "oneOf": [
+ {
+ "$ref": "../../governance/workflows/elements/triggers/eventBasedEntityTrigger.json"
+ },
+ {
+ "$ref": "../../governance/workflows/elements/triggers/periodicBatchEntityTrigger.json"
+ }
+ ]
+ },
+ "nodes": {
+ "description": "List of processes used on the workflow.",
+ "type": "array",
+ "items": {
+ "existingJavaType": "org.openmetadata.schema.governance.workflows.elements.WorkflowNodeDefinitionInterface",
+ "oneOf": [
+ {
+ "$ref": "../../governance/workflows/elements/nodes/automatedTask/checkEntityAttributesTask.json"
+ },
+ {
+ "$ref": "../../governance/workflows/elements/nodes/automatedTask/setEntityAttributeTask.json"
+ },
+ {
+ "$ref": "../../governance/workflows/elements/nodes/endEvent/endEvent.json"
+ },
+ {
+ "$ref": "../../governance/workflows/elements/nodes/startEvent/startEvent.json"
+ },
+ {
+ "$ref": "../../governance/workflows/elements/nodes/userTask/userApprovalTask.json"
+ }
+ ]
+ }
+ },
+ "edges": {
+ "description": "List of edges that connect the workflow elements and guide its flow.",
+ "type": "array",
+ "items": {
+ "$ref": "../../governance/workflows/elements/edge.json"
+ }
+ }
+
+ },
+ "required": ["name", "description"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/governance/createWorkflowInstanceState.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/governance/createWorkflowInstanceState.json
new file mode 100644
index 000000000000..667886e74b67
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/governance/createWorkflowInstanceState.json
@@ -0,0 +1,16 @@
+{
+ "$id": "https://open-metadata.org/schema/api/governance/createWorkflowInstanceState.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateWorkflowInstanceStateRequest",
+ "description": "Create Workflow Instance State Request",
+ "javaType": "org.openmetadata.schema.api.governance.CreateWorkflowInstanceState",
+ "type": "object",
+ "properties": {
+ "workflowDefinitionReference": {
+ "description": "Workflow Definition reference FQN",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ }
+ },
+ "required": ["workflowDefinitionReference"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/handlebarsHelpers.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/handlebarsHelpers.json
new file mode 100644
index 000000000000..987bd15bce70
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/handlebarsHelpers.json
@@ -0,0 +1,57 @@
+{
+ "$id": "https://open-metadata.org/schema/api/handlebarsHelpers.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Handlebars Helpers List",
+ "description": "List of available Handlebars helpers with metadata",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/handlebarsHelperMetadata"
+ },
+ "definitions": {
+ "handlebarsHelperUsage": {
+ "type": "object",
+ "javaType": "org.openmetadata.service.notifications.template.handlebars.HandlebarsHelperUsage",
+ "description": "Usage example for a Handlebars helper",
+ "properties": {
+ "syntax": {
+ "description": "Syntax pattern showing how to use the helper",
+ "type": "string"
+ },
+ "example": {
+ "description": "Concrete example demonstrating the helper usage",
+ "type": "string"
+ }
+ },
+ "required": ["syntax", "example"],
+ "additionalProperties": false
+ },
+ "handlebarsHelperMetadata": {
+ "type": "object",
+ "javaType": "org.openmetadata.service.notifications.template.handlebars.HandlebarsHelperMetadata",
+ "description": "Metadata describing a Handlebars helper",
+ "properties": {
+ "name": {
+ "description": "Helper name as used in templates",
+ "type": "string"
+ },
+ "description": {
+ "description": "Brief description of what the helper does (max 15 words)",
+ "type": "string"
+ },
+ "cursorOffset": {
+ "description": "Character offset position in the template where the cursor should be placed after helper insertion",
+ "type": "integer"
+ },
+ "usages": {
+ "description": "List of usage examples showing different ways to use the helper",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/handlebarsHelperUsage"
+ }
+ }
+ },
+ "required": ["name", "description", "usages"],
+ "additionalProperties": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/learning/createLearningResource.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/learning/createLearningResource.json
new file mode 100644
index 000000000000..24932e1b836f
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/learning/createLearningResource.json
@@ -0,0 +1,90 @@
+{
+ "$id": "https://open-metadata.org/schema/api/learning/createLearningResource.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateLearningResourceRequest",
+ "description": "Create Learning Resource API request",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.learning.CreateLearningResource",
+ "javaInterfaces": [
+ "org.openmetadata.schema.CreateEntity"
+ ],
+ "properties": {
+ "name": {
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "type": "string",
+ "maxLength": 120
+ },
+ "description": {
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "resourceType": {
+ "$ref": "../../entity/learning/learningResource.json#/definitions/resourceType"
+ },
+ "categories": {
+ "type": "array",
+ "items": {
+ "$ref": "../../entity/learning/learningResource.json#/definitions/resourceCategory"
+ },
+ "minItems": 1
+ },
+ "difficulty": {
+ "$ref": "../../entity/learning/learningResource.json#/definitions/resourceDifficulty"
+ },
+ "source": {
+ "$ref": "../../entity/learning/learningResource.json#/definitions/resourceSource"
+ },
+ "estimatedDuration": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "completionThreshold": {
+ "type": "number",
+ "minimum": 0,
+ "maximum": 100
+ },
+ "contexts": {
+ "type": "array",
+ "items": {
+ "$ref": "../../entity/learning/learningResource.json#/definitions/resourceContext"
+ },
+ "minItems": 1
+ },
+ "status": {
+ "type": "string",
+ "enum": [
+ "Draft",
+ "Active",
+ "Deprecated"
+ ],
+ "default": "Active"
+ },
+ "owners": {
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "reviewers": {
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "tags": {
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "extension": {
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ }
+ },
+ "required": [
+ "name",
+ "resourceType",
+ "categories",
+ "source",
+ "contexts"
+ ],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/lineage/addLineage.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/lineage/addLineage.json
new file mode 100644
index 000000000000..e00ce198e601
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/lineage/addLineage.json
@@ -0,0 +1,15 @@
+{
+ "$id": "https://open-metadata.org/schema/api/lineage/addLineage.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AddLineageRequest",
+ "description": "Add lineage details between two entities",
+ "type": "object",
+ "properties": {
+ "edge": {
+ "description": "Lineage edge details.",
+ "$ref": "../../type/entityLineage.json#/definitions/entitiesEdge"
+ }
+ },
+ "required": ["edge"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/lineage/entityCountLineageRequest.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/lineage/entityCountLineageRequest.json
new file mode 100644
index 000000000000..208c5c54335c
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/lineage/entityCountLineageRequest.json
@@ -0,0 +1,93 @@
+{
+ "$id": "https://open-metadata.org/schema/api/lineage/entityCountLineageRequest.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "EntityCountLineageRequest",
+ "description": "Request schema for getting lineage with entity count based pagination",
+ "javaType": "org.openmetadata.schema.api.lineage.EntityCountLineageRequest",
+ "type": "object",
+ "properties": {
+ "fqn": {
+ "description": "Entity Fqn to search lineage",
+ "type": "string"
+ },
+ "from": {
+ "description": "Starting offset for pagination (0-based)",
+ "type": "integer",
+ "minimum": 0,
+ "default": 0
+ },
+ "size": {
+ "description": "Number of entities to return in this page",
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 1000,
+ "default": 50
+ },
+ "nodeDepth": {
+ "description": "Filter entities by specific node depth level. Negative values for upstream (e.g., -1, -2), positive for downstream (1, 2), 0 for root entity",
+ "type": "integer",
+ "minimum": -10,
+ "maximum": 10
+ },
+ "direction": {
+ "$ref": "./lineageDirection.json",
+ "description": "Direction of lineage traversal (upstream or downstream)"
+ },
+ "maxDepth": {
+ "description": "Maximum depth to traverse in the specified direction",
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 10,
+ "default": 3
+ },
+ "upstreamDepth": {
+ "description": "Maximum upstream depth to compute pagination info for when requested",
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 10
+ },
+ "downstreamDepth": {
+ "description": "Maximum downstream depth to compute pagination info for when requested",
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 10
+ },
+ "isConnectedVia": {
+ "description": "Connected Via",
+ "type": "boolean"
+ },
+ "queryFilter": {
+ "description": "Query Filter",
+ "type": "string"
+ },
+ "columnFilter": {
+ "description": "Filter lineage by specific column names. Use comma-separated list (e.g., 'col1,col2') to filter columns.",
+ "type": "string"
+ },
+ "preservePaths": {
+ "description": "Preserve all paths when applying node-level filters. When true, intermediate nodes that don't match filters are kept if they're part of a path to matching nodes.",
+ "type": "boolean",
+ "default": false
+ },
+ "includePaginationInfo": {
+ "description": "Include pagination totals and depth counts in the response",
+ "type": "boolean",
+ "default": false
+ },
+ "includeDeleted": {
+ "description": "Include deleted entities",
+ "type": "boolean",
+ "default": false
+ },
+ "includeSourceFields": {
+ "description": "Include source fields",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "uniqueItems": true
+ }
+ },
+ "required": ["fqn", "direction"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/lineage/esLineageData.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/lineage/esLineageData.json
new file mode 100644
index 000000000000..bda8d5cb995f
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/lineage/esLineageData.json
@@ -0,0 +1,110 @@
+{
+ "$id": "https://open-metadata.org/schema/api/lineage/esLineageData.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "EsLineageData",
+ "description": "Response object for the search lineage request from Elastic Search.",
+ "javaType": "org.openmetadata.schema.api.lineage.EsLineageData",
+ "type": "object",
+ "definitions": {
+ "relationshipRef": {
+ "description": "Relationship Reference to an Entity.",
+ "type": "object",
+ "properties": {
+ "id": {
+ "description": "Unique identifier of this entity instance.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "fullyQualifiedName": {
+ "description": "FullyQualifiedName of the entity.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "fqnHash": {
+ "description": "FullyQualifiedName Hash of the entity.",
+ "type": "string"
+ },
+ "type": {
+ "description": "Type of the entity.",
+ "type": "string"
+ }
+ }
+ }
+ },
+ "properties": {
+ "fromEntity": {
+ "description": "From Entity.",
+ "$ref": "#/definitions/relationshipRef"
+ },
+ "toEntity": {
+ "description": "To Entity.",
+ "$ref": "#/definitions/relationshipRef"
+ },
+ "pipeline": {
+ "description": "Pipeline in case pipeline is present between entities."
+ },
+ "sqlQuery": {
+ "description": "Sql Query associated.",
+ "type": "string"
+ },
+ "sqlQueryKey": {
+ "description": "Key referencing the full SQL text in the parent document's lineageSqlQueries map. Set when the same SQL appears in multiple edges to avoid storing it repeatedly. Look up the actual SQL in lineageSqlQueries[sqlQueryKey].",
+ "type": "string"
+ },
+ "columns": {
+ "description": "Columns associated.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/entityLineage.json#/definitions/columnLineage"
+ }
+ },
+ "description": {
+ "description": "Description.",
+ "type": "string"
+ },
+ "source": {
+ "description": "Source of the Lineage.",
+ "type": "string"
+ },
+ "docId": {
+ "description": "Doc Id for the Lineage.",
+ "type": "string"
+ },
+ "docUniqueId": {
+ "description": "Doc Unique Id for the Lineage.",
+ "type": "string"
+ },
+ "pipelineEntityType": {
+ "description": "Pipeline Entity or Stored procedure.",
+ "type": "string"
+ },
+ "createdAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "createdBy": {
+ "description": "User who created the node.",
+ "type": "string"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "assetEdges": {
+ "description": "Asset count in case of child assets lineage.",
+ "type": "integer",
+ "default": null
+ },
+ "tempLineageTables": {
+ "description": "Lineage path through temporary/intermediate tables. Each element represents a hop with fromEntity and toEntity fields.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/entityLineage.json#/definitions/tempLineageTable"
+ },
+ "default": null
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/lineage/lineageDirection.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/lineage/lineageDirection.json
new file mode 100644
index 000000000000..271ffdd21008
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/lineage/lineageDirection.json
@@ -0,0 +1,9 @@
+{
+ "$id": "https://open-metadata.org/schema/api/lineage/lineageDirection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "LineageDirection",
+ "description": "Lineage Direction Schema.",
+ "javaType": "org.openmetadata.schema.api.lineage.LineageDirection",
+ "type": "string",
+ "enum": ["Upstream", "Downstream"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/lineage/lineagePaginationInfo.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/lineage/lineagePaginationInfo.json
new file mode 100644
index 000000000000..955d29680434
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/lineage/lineagePaginationInfo.json
@@ -0,0 +1,67 @@
+{
+ "$id": "https://open-metadata.org/schema/api/lineage/lineagePaginationInfo.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "LineagePaginationInfo",
+ "description": "Pagination information for lineage entities across different layers and depths",
+ "javaType": "org.openmetadata.schema.api.lineage.LineagePaginationInfo",
+ "type": "object",
+ "definitions": {
+ "depthInfo": {
+ "javaType": "org.openmetadata.schema.api.lineage.DepthInfo",
+ "description": "Information about entities at a specific depth level",
+ "type": "object",
+ "properties": {
+ "depth": {
+ "description": "The depth level from root entity (0 for root, 1 for immediate upstream/downstream, etc.)",
+ "type": "integer",
+ "minimum": 0
+ },
+ "entityCount": {
+ "description": "Total number of entities at this depth level",
+ "type": "integer",
+ "minimum": 0
+ }
+ },
+ "additionalProperties": false,
+ "required": ["depth", "entityCount"]
+ }
+ },
+ "properties": {
+ "totalUpstreamEntities": {
+ "description": "Total number of upstream entities across all depths",
+ "type": "integer",
+ "minimum": 0
+ },
+ "totalDownstreamEntities": {
+ "description": "Total number of downstream entities across all depths",
+ "type": "integer",
+ "minimum": 0
+ },
+ "upstreamDepthInfo": {
+ "description": "Depth-wise breakdown of upstream entities",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/depthInfo"
+ }
+ },
+ "downstreamDepthInfo": {
+ "description": "Depth-wise breakdown of downstream entities",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/depthInfo"
+ }
+ },
+ "maxUpstreamDepth": {
+ "description": "Maximum depth reached in upstream direction",
+ "type": "integer",
+ "minimum": 0
+ },
+ "maxDownstreamDepth": {
+ "description": "Maximum depth reached in downstream direction",
+ "type": "integer",
+ "minimum": 0
+ }
+ },
+ "additionalProperties": false,
+ "required": ["totalUpstreamEntities", "totalDownstreamEntities", "upstreamDepthInfo", "downstreamDepthInfo", "maxUpstreamDepth", "maxDownstreamDepth"]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/lineage/nodeInformation.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/lineage/nodeInformation.json
new file mode 100644
index 000000000000..5fd7206d209a
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/lineage/nodeInformation.json
@@ -0,0 +1,22 @@
+{
+ "$id": "https://open-metadata.org/schema/api/lineage/nodeInformation.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "NodeInformation",
+ "javaType": "org.openmetadata.schema.type.lineage.NodeInformation",
+ "description": "A general object to hold any object.",
+ "type": "object",
+ "properties": {
+ "entity": {
+ "description": "Entity object.",
+ "existingJavaType": "java.util.Map"
+ },
+ "paging": {
+ "$ref": "./searchLineageResult.json#/definitions/layerPaging"
+ },
+ "nodeDepth": {
+ "description": "Depth of the node from the root entity in the lineage graph. Root entity has depth 0, its immediate upstream/downstream entities have depth 1, and so on.",
+ "type": "integer",
+ "minimum": 0
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/lineage/openlineage/openLineageBatchRequest.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/lineage/openlineage/openLineageBatchRequest.json
new file mode 100644
index 000000000000..e0916d1d20fd
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/lineage/openlineage/openLineageBatchRequest.json
@@ -0,0 +1,20 @@
+{
+ "$id": "https://open-metadata.org/schema/api/lineage/openlineage/openLineageBatchRequest.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "OpenLineageBatchRequest",
+ "description": "Request containing multiple OpenLineage events for batch processing.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.lineage.openlineage.OpenLineageBatchRequest",
+ "properties": {
+ "events": {
+ "description": "List of OpenLineage events to process.",
+ "type": "array",
+ "items": {
+ "$ref": "openLineageRunEvent.json"
+ },
+ "minItems": 1
+ }
+ },
+ "required": ["events"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/lineage/openlineage/openLineageDataset.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/lineage/openlineage/openLineageDataset.json
new file mode 100644
index 000000000000..8e9bfdd38ae4
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/lineage/openlineage/openLineageDataset.json
@@ -0,0 +1,64 @@
+{
+ "$id": "https://open-metadata.org/schema/api/lineage/openlineage/openLineageDataset.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "OpenLineageDataset",
+ "description": "OpenLineage dataset representing an input or output of a job.",
+ "definitions": {
+ "openLineageDataset": {
+ "description": "Base dataset definition.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.lineage.openlineage.OpenLineageDataset",
+ "properties": {
+ "namespace": {
+ "description": "The namespace of the dataset (e.g., 'postgres://host:5432/database').",
+ "type": "string"
+ },
+ "name": {
+ "description": "The name of the dataset (e.g., 'schema.table').",
+ "type": "string"
+ },
+ "facets": {
+ "description": "Dataset facets containing metadata like schema.",
+ "$ref": "openLineageFacets.json#/definitions/datasetFacets"
+ }
+ },
+ "required": ["namespace", "name"]
+ },
+ "openLineageInputDataset": {
+ "description": "Input dataset consumed by a job.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.lineage.openlineage.OpenLineageInputDataset",
+ "allOf": [
+ { "$ref": "#/definitions/openLineageDataset" }
+ ],
+ "properties": {
+ "namespace": { "type": "string" },
+ "name": { "type": "string" },
+ "facets": { "$ref": "openLineageFacets.json#/definitions/datasetFacets" },
+ "inputFacets": {
+ "description": "Input-specific facets.",
+ "$ref": "openLineageFacets.json#/definitions/inputDatasetFacets"
+ }
+ },
+ "required": ["namespace", "name"]
+ },
+ "openLineageOutputDataset": {
+ "description": "Output dataset produced by a job.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.lineage.openlineage.OpenLineageOutputDataset",
+ "allOf": [
+ { "$ref": "#/definitions/openLineageDataset" }
+ ],
+ "properties": {
+ "namespace": { "type": "string" },
+ "name": { "type": "string" },
+ "facets": { "$ref": "openLineageFacets.json#/definitions/datasetFacets" },
+ "outputFacets": {
+ "description": "Output-specific facets including column lineage.",
+ "$ref": "openLineageFacets.json#/definitions/outputDatasetFacets"
+ }
+ },
+ "required": ["namespace", "name"]
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/lineage/openlineage/openLineageFacets.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/lineage/openlineage/openLineageFacets.json
new file mode 100644
index 000000000000..2eea849afc28
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/lineage/openlineage/openLineageFacets.json
@@ -0,0 +1,394 @@
+{
+ "$id": "https://open-metadata.org/schema/api/lineage/openlineage/openLineageFacets.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "OpenLineageFacets",
+ "description": "OpenLineage facet definitions for datasets, jobs, and runs.",
+ "definitions": {
+ "baseFacet": {
+ "description": "Base facet that all facets extend from.",
+ "type": "object",
+ "properties": {
+ "_producer": {
+ "description": "URI identifying the producer of this metadata.",
+ "type": "string",
+ "format": "uri"
+ },
+ "_schemaURL": {
+ "description": "URI pointing to the schema definition for this facet.",
+ "type": "string",
+ "format": "uri"
+ }
+ }
+ },
+ "schemaField": {
+ "description": "A field in a dataset schema.",
+ "type": "object",
+ "properties": {
+ "name": {
+ "description": "The name of the field.",
+ "type": "string"
+ },
+ "type": {
+ "description": "The type of the field (e.g., STRING, INTEGER, STRUCT).",
+ "type": "string"
+ },
+ "description": {
+ "description": "Optional description of the field.",
+ "type": "string"
+ }
+ },
+ "required": ["name", "type"]
+ },
+ "schemaFacet": {
+ "description": "Schema facet describing the structure of a dataset.",
+ "type": "object",
+ "allOf": [
+ { "$ref": "#/definitions/baseFacet" }
+ ],
+ "properties": {
+ "_producer": { "type": "string" },
+ "_schemaURL": { "type": "string" },
+ "fields": {
+ "description": "List of fields in the schema.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/schemaField"
+ }
+ }
+ }
+ },
+ "symlinkIdentifier": {
+ "description": "An alternate identifier for a dataset.",
+ "type": "object",
+ "properties": {
+ "namespace": {
+ "description": "The namespace of the symlink.",
+ "type": "string"
+ },
+ "name": {
+ "description": "The name of the symlink.",
+ "type": "string"
+ },
+ "type": {
+ "description": "The type of symlink (e.g., TABLE).",
+ "type": "string"
+ }
+ },
+ "required": ["namespace", "name", "type"]
+ },
+ "symlinksFacet": {
+ "description": "Symlinks facet providing alternate identifiers for a dataset.",
+ "type": "object",
+ "allOf": [
+ { "$ref": "#/definitions/baseFacet" }
+ ],
+ "properties": {
+ "_producer": { "type": "string" },
+ "_schemaURL": { "type": "string" },
+ "identifiers": {
+ "description": "List of alternate identifiers.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/symlinkIdentifier"
+ }
+ }
+ }
+ },
+ "inputField": {
+ "description": "A reference to an input column in column lineage.",
+ "type": "object",
+ "properties": {
+ "namespace": {
+ "description": "The namespace of the input dataset.",
+ "type": "string"
+ },
+ "name": {
+ "description": "The name of the input dataset.",
+ "type": "string"
+ },
+ "field": {
+ "description": "The name of the input field/column.",
+ "type": "string"
+ }
+ },
+ "required": ["namespace", "name", "field"]
+ },
+ "columnLineageField": {
+ "description": "Column lineage information for a single output field.",
+ "type": "object",
+ "properties": {
+ "inputFields": {
+ "description": "List of input fields that contribute to this output field.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/inputField"
+ }
+ },
+ "transformationDescription": {
+ "description": "Human-readable description of the transformation.",
+ "type": "string"
+ },
+ "transformationType": {
+ "description": "Type of transformation (e.g., DIRECT, AGGREGATION).",
+ "type": "string"
+ }
+ },
+ "required": ["inputFields"]
+ },
+ "columnLineageFacet": {
+ "description": "Column lineage facet describing how output columns are derived from input columns.",
+ "type": "object",
+ "allOf": [
+ { "$ref": "#/definitions/baseFacet" }
+ ],
+ "properties": {
+ "_producer": { "type": "string" },
+ "_schemaURL": { "type": "string" },
+ "fields": {
+ "description": "Map of output field names to their lineage information.",
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/columnLineageField"
+ }
+ }
+ },
+ "required": ["fields"]
+ },
+ "parentJobFacet": {
+ "description": "Parent job information in run facets.",
+ "type": "object",
+ "properties": {
+ "namespace": {
+ "description": "The namespace of the parent job.",
+ "type": "string"
+ },
+ "name": {
+ "description": "The name of the parent job.",
+ "type": "string"
+ }
+ },
+ "required": ["namespace", "name"]
+ },
+ "parentRunFacet": {
+ "description": "Parent run facet linking a run to its parent job.",
+ "type": "object",
+ "allOf": [
+ { "$ref": "#/definitions/baseFacet" }
+ ],
+ "properties": {
+ "_producer": { "type": "string" },
+ "_schemaURL": { "type": "string" },
+ "run": {
+ "description": "The parent run information.",
+ "type": "object",
+ "properties": {
+ "runId": {
+ "description": "The UUID of the parent run.",
+ "type": "string",
+ "format": "uuid"
+ }
+ },
+ "required": ["runId"]
+ },
+ "job": {
+ "description": "The parent job information.",
+ "$ref": "#/definitions/parentJobFacet"
+ }
+ },
+ "required": ["job"]
+ },
+ "sqlJobFacet": {
+ "description": "SQL job facet containing the SQL query.",
+ "type": "object",
+ "allOf": [
+ { "$ref": "#/definitions/baseFacet" }
+ ],
+ "properties": {
+ "_producer": { "type": "string" },
+ "_schemaURL": { "type": "string" },
+ "query": {
+ "description": "The SQL query executed by the job.",
+ "type": "string"
+ }
+ },
+ "required": ["query"]
+ },
+ "datasourceFacet": {
+ "description": "Datasource facet providing connection details for the dataset.",
+ "type": "object",
+ "allOf": [
+ { "$ref": "#/definitions/baseFacet" }
+ ],
+ "properties": {
+ "_producer": { "type": "string" },
+ "_schemaURL": { "type": "string" },
+ "name": {
+ "description": "The name of the datasource.",
+ "type": "string"
+ },
+ "uri": {
+ "description": "The URI of the datasource (e.g., postgres://host:5432/db).",
+ "type": "string",
+ "format": "uri"
+ }
+ }
+ },
+ "documentationFacet": {
+ "description": "Documentation facet providing description for the dataset.",
+ "type": "object",
+ "allOf": [
+ { "$ref": "#/definitions/baseFacet" }
+ ],
+ "properties": {
+ "_producer": { "type": "string" },
+ "_schemaURL": { "type": "string" },
+ "description": {
+ "description": "The documentation/description of the dataset.",
+ "type": "string"
+ }
+ }
+ },
+ "ownershipFacet": {
+ "description": "Ownership facet providing owner information for the dataset.",
+ "type": "object",
+ "allOf": [
+ { "$ref": "#/definitions/baseFacet" }
+ ],
+ "properties": {
+ "_producer": { "type": "string" },
+ "_schemaURL": { "type": "string" },
+ "owners": {
+ "description": "List of owners.",
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "description": "The name of the owner.",
+ "type": "string"
+ },
+ "type": {
+ "description": "The type of owner (e.g., MAINTAINER, DATAOWNER).",
+ "type": "string"
+ }
+ },
+ "required": ["name"]
+ }
+ }
+ }
+ },
+ "datasetFacets": {
+ "description": "Common facets that can be attached to a dataset.",
+ "type": "object",
+ "properties": {
+ "schema": {
+ "$ref": "#/definitions/schemaFacet"
+ },
+ "symlinks": {
+ "$ref": "#/definitions/symlinksFacet"
+ },
+ "datasource": {
+ "$ref": "#/definitions/datasourceFacet"
+ },
+ "documentation": {
+ "$ref": "#/definitions/documentationFacet"
+ },
+ "ownership": {
+ "$ref": "#/definitions/ownershipFacet"
+ },
+ "columnLineage": {
+ "$ref": "#/definitions/columnLineageFacet"
+ }
+ },
+ "additionalProperties": true
+ },
+ "inputDatasetFacets": {
+ "description": "Facets specific to input datasets.",
+ "type": "object",
+ "additionalProperties": true
+ },
+ "outputDatasetFacets": {
+ "description": "Facets specific to output datasets.",
+ "type": "object",
+ "properties": {
+ "columnLineage": {
+ "$ref": "#/definitions/columnLineageFacet"
+ }
+ },
+ "additionalProperties": true
+ },
+ "errorMessageFacet": {
+ "description": "Error message facet for capturing run failures.",
+ "type": "object",
+ "allOf": [
+ { "$ref": "#/definitions/baseFacet" }
+ ],
+ "properties": {
+ "_producer": { "type": "string" },
+ "_schemaURL": { "type": "string" },
+ "message": {
+ "description": "The error message.",
+ "type": "string"
+ },
+ "programmingLanguage": {
+ "description": "The programming language of the stack trace.",
+ "type": "string"
+ },
+ "stackTrace": {
+ "description": "The stack trace of the error.",
+ "type": "string"
+ }
+ },
+ "required": ["message"]
+ },
+ "processingEngineFacet": {
+ "description": "Processing engine facet describing the execution environment.",
+ "type": "object",
+ "allOf": [
+ { "$ref": "#/definitions/baseFacet" }
+ ],
+ "properties": {
+ "_producer": { "type": "string" },
+ "_schemaURL": { "type": "string" },
+ "name": {
+ "description": "The name of the processing engine (e.g., Spark, Flink).",
+ "type": "string"
+ },
+ "version": {
+ "description": "The version of the processing engine.",
+ "type": "string"
+ },
+ "openlineageAdapterVersion": {
+ "description": "Version of the OpenLineage adapter.",
+ "type": "string"
+ }
+ }
+ },
+ "runFacets": {
+ "description": "Facets that can be attached to a run.",
+ "type": "object",
+ "properties": {
+ "parent": {
+ "$ref": "#/definitions/parentRunFacet"
+ },
+ "errorMessage": {
+ "$ref": "#/definitions/errorMessageFacet"
+ },
+ "processing_engine": {
+ "$ref": "#/definitions/processingEngineFacet"
+ }
+ },
+ "additionalProperties": true
+ },
+ "jobFacets": {
+ "description": "Facets that can be attached to a job.",
+ "type": "object",
+ "properties": {
+ "sql": {
+ "$ref": "#/definitions/sqlJobFacet"
+ }
+ },
+ "additionalProperties": true
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/lineage/openlineage/openLineageResponse.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/lineage/openlineage/openLineageResponse.json
new file mode 100644
index 000000000000..22b2a42aca8f
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/lineage/openlineage/openLineageResponse.json
@@ -0,0 +1,82 @@
+{
+ "$id": "https://open-metadata.org/schema/api/lineage/openlineage/openLineageResponse.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "OpenLineageResponse",
+ "description": "Response from OpenLineage event processing.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.lineage.openlineage.OpenLineageResponse",
+ "definitions": {
+ "failedEvent": {
+ "description": "Information about a failed event in batch processing.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.lineage.openlineage.FailedEvent",
+ "properties": {
+ "index": {
+ "description": "Index of the failed event in the batch.",
+ "type": "integer"
+ },
+ "reason": {
+ "description": "Reason for the failure.",
+ "type": "string"
+ },
+ "retriable": {
+ "description": "Whether the event can be retried.",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "required": ["index", "reason"]
+ },
+ "processingSummary": {
+ "description": "Summary of batch processing results.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.lineage.openlineage.ProcessingSummary",
+ "properties": {
+ "received": {
+ "description": "Total number of events received.",
+ "type": "integer"
+ },
+ "successful": {
+ "description": "Number of events processed successfully.",
+ "type": "integer"
+ },
+ "failed": {
+ "description": "Number of events that failed processing.",
+ "type": "integer"
+ },
+ "skipped": {
+ "description": "Number of events skipped (e.g., non-COMPLETE events).",
+ "type": "integer"
+ }
+ }
+ }
+ },
+ "properties": {
+ "status": {
+ "description": "Overall status of the request.",
+ "type": "string",
+ "enum": ["success", "partial_success", "failure"]
+ },
+ "message": {
+ "description": "Human-readable message about the processing result.",
+ "type": "string"
+ },
+ "summary": {
+ "description": "Summary of batch processing (for batch requests).",
+ "$ref": "#/definitions/processingSummary"
+ },
+ "failedEvents": {
+ "description": "Details about failed events (for batch requests).",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/failedEvent"
+ }
+ },
+ "lineageEdgesCreated": {
+ "description": "Number of lineage edges created.",
+ "type": "integer"
+ }
+ },
+ "required": ["status"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/lineage/openlineage/openLineageRunEvent.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/lineage/openlineage/openLineageRunEvent.json
new file mode 100644
index 000000000000..1b5dd8ff976e
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/lineage/openlineage/openLineageRunEvent.json
@@ -0,0 +1,100 @@
+{
+ "$id": "https://open-metadata.org/schema/api/lineage/openlineage/openLineageRunEvent.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "OpenLineageRunEvent",
+ "description": "OpenLineage RunEvent representing a job execution with its inputs and outputs.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.lineage.openlineage.OpenLineageRunEvent",
+ "definitions": {
+ "eventType": {
+ "description": "The type of lifecycle event.",
+ "type": "string",
+ "javaType": "org.openmetadata.schema.api.lineage.openlineage.EventType",
+ "enum": ["START", "RUNNING", "COMPLETE", "ABORT", "FAIL", "OTHER"]
+ },
+ "openLineageRun": {
+ "description": "Run information including run ID and facets.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.lineage.openlineage.OpenLineageRun",
+ "properties": {
+ "runId": {
+ "description": "Globally unique identifier for this run.",
+ "type": "string",
+ "format": "uuid"
+ },
+ "facets": {
+ "description": "Run facets containing metadata like parent run.",
+ "$ref": "openLineageFacets.json#/definitions/runFacets"
+ }
+ },
+ "required": ["runId"]
+ },
+ "openLineageJob": {
+ "description": "Job information including namespace and name.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.lineage.openlineage.OpenLineageJob",
+ "properties": {
+ "namespace": {
+ "description": "The namespace of the job (e.g., 'airflow', 'spark').",
+ "type": "string"
+ },
+ "name": {
+ "description": "The name of the job.",
+ "type": "string"
+ },
+ "facets": {
+ "description": "Job facets containing metadata like SQL.",
+ "$ref": "openLineageFacets.json#/definitions/jobFacets"
+ }
+ },
+ "required": ["namespace", "name"]
+ }
+ },
+ "properties": {
+ "eventTime": {
+ "description": "The time the event occurred, in ISO 8601 format (UTC).",
+ "type": "string",
+ "format": "date-time"
+ },
+ "producer": {
+ "description": "URI identifying the producer of this metadata.",
+ "type": "string",
+ "format": "uri"
+ },
+ "schemaURL": {
+ "description": "URI pointing to the OpenLineage schema version.",
+ "type": "string",
+ "format": "uri"
+ },
+ "eventType": {
+ "description": "The lifecycle state of the run.",
+ "$ref": "#/definitions/eventType"
+ },
+ "run": {
+ "description": "The run this event is about.",
+ "$ref": "#/definitions/openLineageRun"
+ },
+ "job": {
+ "description": "The job that executed this run.",
+ "$ref": "#/definitions/openLineageJob"
+ },
+ "inputs": {
+ "description": "Input datasets consumed by this run.",
+ "type": "array",
+ "items": {
+ "$ref": "openLineageDataset.json#/definitions/openLineageInputDataset"
+ },
+ "default": []
+ },
+ "outputs": {
+ "description": "Output datasets produced by this run.",
+ "type": "array",
+ "items": {
+ "$ref": "openLineageDataset.json#/definitions/openLineageOutputDataset"
+ },
+ "default": []
+ }
+ },
+ "required": ["eventTime", "producer", "schemaURL", "run", "job"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/lineage/searchLineageRequest.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/lineage/searchLineageRequest.json
new file mode 100644
index 000000000000..fbcdb28bbd05
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/lineage/searchLineageRequest.json
@@ -0,0 +1,77 @@
+{
+ "$id": "https://open-metadata.org/schema/api/lineage/searchLineageRequest.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SearchLineageRequest",
+ "description": "Search Lineage Request Schema to find linage from Elastic Search.",
+ "javaType": "org.openmetadata.schema.api.lineage.SearchLineageRequest",
+ "type": "object",
+ "properties": {
+ "fqn": {
+ "description": "Entity Fqn to search lineage",
+ "type": "string"
+ },
+ "isConnectedVia": {
+ "description": "Connected Via",
+ "type": "boolean"
+ },
+ "direction": {
+ "$ref": "./lineageDirection.json"
+ },
+ "directionValue": {
+ "description": "Lineage Direction Value.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "uniqueItems": true
+ },
+ "upstreamDepth": {
+ "description": "The upstream depth of the lineage",
+ "type": "integer",
+ "default": 3
+ },
+ "downstreamDepth": {
+ "description": "The downstream depth of the lineage",
+ "type": "integer",
+ "default": 3
+ },
+ "layerFrom": {
+ "description": "Layer to start the search from.",
+ "type": "integer",
+ "default": 0
+ },
+ "layerSize": {
+ "description": "Size of the search result.",
+ "type": "integer",
+ "default": 1000
+ },
+ "queryFilter": {
+ "description": "Query Filter",
+ "type": "string"
+ },
+ "columnFilter": {
+ "description": "Column-level lineage filter. Supports filtering by column names in fromColumns or toColumn fields.",
+ "type": "string"
+ },
+ "preservePaths": {
+ "description": "When true, preserves all nodes in the path to filtered results. When false, only returns nodes matching the filter.",
+ "type": "boolean",
+ "default": true
+ },
+ "includeDeleted": {
+ "description": "Include deleted entities",
+ "type": "boolean",
+ "default": null
+ },
+ "includeSourceFields": {
+ "description": "Include source fields",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "uniqueItems": true
+ }
+ },
+ "required": ["fqn", "direction"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/lineage/searchLineageResult.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/lineage/searchLineageResult.json
new file mode 100644
index 000000000000..27a23389b5c8
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/lineage/searchLineageResult.json
@@ -0,0 +1,62 @@
+{
+ "$id": "https://open-metadata.org/schema/api/lineage/searchLineageResult.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SearchLineageResult",
+ "description": "Search Lineage Response for the Lineage Request",
+ "javaType": "org.openmetadata.schema.api.lineage.SearchLineageResult",
+ "type": "object",
+ "definitions": {
+ "directionPaging": {
+ "properties": {
+ "upstream": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/layerPaging"
+ }
+ },
+ "downstream": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/layerPaging"
+ }
+ }
+ }
+ },
+ "layerPaging": {
+ "description": "Type used for cursor based pagination information in GET list responses.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.LayerPaging",
+ "properties": {
+ "entityDownstreamCount": {
+ "description": "Count of entities downstream current layer entity.",
+ "type": "integer"
+ },
+ "entityUpstreamCount": {
+ "description": "Count of entities upstream current layer entity.",
+ "type": "integer"
+ }
+ },
+ "additionalProperties": false
+ }
+
+ },
+ "properties": {
+ "nodes" : {
+ "description": "Nodes in the lineage response.",
+ "existingJavaType": "java.util.Map"
+ },
+ "upstreamEdges": {
+ "description": "Upstream Edges for the entity.",
+ "existingJavaType": "java.util.Map"
+ },
+ "downstreamEdges": {
+ "description": "Downstream Edges for the node.",
+ "existingJavaType": "java.util.Map"
+ },
+ "paginationInfo": {
+ "description": "Optional pagination information for table-mode impact analysis.",
+ "existingJavaType": "org.openmetadata.schema.api.lineage.LineagePaginationInfo"
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/mcp/mcpSearchResponse.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/mcp/mcpSearchResponse.json
new file mode 100644
index 000000000000..fc11d7740b5c
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/mcp/mcpSearchResponse.json
@@ -0,0 +1,145 @@
+{
+ "$id": "https://open-metadata.org/schema/api/mcp/mcpSearchResponse.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "MCP Search Response",
+ "description": "Response object for MCP search tool containing search results and metadata",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.mcp.MCPSearchResponse",
+ "properties": {
+ "results": {
+ "description": "Array of search result entities",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/searchResultEntity"
+ }
+ },
+ "totalFound": {
+ "description": "Total number of entities found matching the search criteria",
+ "type": "integer"
+ },
+ "returnedCount": {
+ "description": "Number of entities returned in this response",
+ "type": "integer"
+ },
+ "query": {
+ "description": "The original search query used",
+ "type": "string"
+ },
+ "message": {
+ "description": "Informational message about the search results",
+ "type": "string"
+ },
+ "hasMore": {
+ "description": "Whether there are more results available",
+ "type": "boolean"
+ }
+ },
+ "required": ["results", "totalFound", "returnedCount", "query"],
+ "definitions": {
+ "searchResultEntity": {
+ "description": "Individual search result entity with configurable fields",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.mcp.MCPSearchResultEntity",
+ "properties": {
+ "name": {
+ "description": "Name of the entity",
+ "type": "string"
+ },
+ "displayName": {
+ "description": "Display name of the entity",
+ "type": "string"
+ },
+ "fullyQualifiedName": {
+ "description": "Fully qualified name of the entity",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the entity",
+ "type": "string"
+ },
+ "entityType": {
+ "description": "Type of the entity (table, topic, dashboard, etc.)",
+ "type": "string"
+ },
+ "service": {
+ "description": "Service reference containing the entity",
+ "$ref": "../../type/entityReference.json"
+ },
+ "database": {
+ "description": "Database reference (for table entities)",
+ "$ref": "../../type/entityReference.json"
+ },
+ "databaseSchema": {
+ "description": "Database schema reference (for table entities)",
+ "$ref": "../../type/entityReference.json"
+ },
+ "serviceType": {
+ "description": "Type of the service",
+ "type": "string"
+ },
+ "href": {
+ "description": "Link to the entity in OpenMetadata UI",
+ "type": "string",
+ "format": "uri"
+ },
+ "tags": {
+ "description": "Tags associated with the entity",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ }
+ },
+ "owners": {
+ "description": "Owners of the entity",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/entityReference.json"
+ }
+ },
+ "tier": {
+ "description": "Tier information for the entity",
+ "$ref": "../../type/tagLabel.json"
+ },
+ "tableType": {
+ "description": "Type of table (for table entities)",
+ "type": "string"
+ },
+ "columnNames": {
+ "description": "List of column names (for table entities)",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "columns": {
+ "description": "Detailed column information (when requested)",
+ "type": "array",
+ "items": {
+ "$ref": "../../entity/data/table.json#/definitions/column"
+ }
+ },
+ "schemaDefinition": {
+ "description": "Schema definition (when requested)",
+ "type": "string"
+ },
+ "queries": {
+ "description": "Sample queries (when requested)",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "upstreamLineage": {
+ "description": "Upstream lineage information (when requested)",
+ "type": "object"
+ },
+ "entityRelationship": {
+ "description": "Entity relationships (when requested)",
+ "type": "object"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/mcp/mcpToolDefinition.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/mcp/mcpToolDefinition.json
new file mode 100644
index 000000000000..7062125aa02d
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/mcp/mcpToolDefinition.json
@@ -0,0 +1,77 @@
+{
+ "$id": "https://open-metadata.org/schema/api/mcp/mcpToolDefinition.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "MCP Tool Definition",
+ "description": "Definition of a tool available in the Model Context Protocol",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.mcp.MCPToolDefinition",
+ "properties": {
+ "name": {
+ "description": "Name of the tool",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of what the tool does",
+ "type": "string"
+ },
+ "parameters": {
+ "description": "Definition of tool parameters",
+ "$ref": "#/definitions/toolParameters"
+ }
+ },
+ "required": ["name", "description", "parameters"],
+ "definitions": {
+ "toolParameters": {
+ "description": "Tool parameter definitions",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.mcp.MCPToolParameters",
+ "properties": {
+ "type": {
+ "description": "Type of parameter schema",
+ "type": "string",
+ "default": "object"
+ },
+ "properties": {
+ "description": "Parameter properties",
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/toolParameter"
+ }
+ },
+ "required": {
+ "description": "List of required parameters",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "required": ["properties"]
+ },
+ "toolParameter": {
+ "description": "Individual tool parameter definition",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.mcp.MCPToolParameter",
+ "properties": {
+ "type": {
+ "description": "Type of parameter",
+ "type": "string",
+ "enum": ["string", "number", "integer", "boolean", "array", "object"]
+ },
+ "description": {
+ "description": "Description of the parameter",
+ "type": "string"
+ },
+ "enum": {
+ "description": "Possible enum values for this parameter",
+ "type": "array",
+ "items": {}
+ },
+ "default": {
+ "description": "Default value for this parameter"
+ }
+ },
+ "required": ["type", "description"]
+ }
+ }
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/openMetadataServerVersion.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/openMetadataServerVersion.json
new file mode 100644
index 000000000000..5a77baf35e7a
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/openMetadataServerVersion.json
@@ -0,0 +1,23 @@
+{
+ "$id": "https://open-metadata.org/schema/api/openMetadataServerVersion.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "OpenMetadataServerVersion",
+ "description": "OpenMetadata Server application software version",
+ "type": "object",
+
+ "properties": {
+ "version": {
+ "description": "Software version of the OpenMetadata Server",
+ "type": "string"
+ },
+ "revision": {
+ "description": "Software revision of the OpenMetadata Server",
+ "type": "string"
+ },
+ "timestamp": {
+ "description": "Build timestamp",
+ "$ref": "../type/basic.json#/definitions/timestamp"
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/policies/createPolicy.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/policies/createPolicy.json
new file mode 100644
index 000000000000..6864d26aae2f
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/policies/createPolicy.json
@@ -0,0 +1,51 @@
+{
+ "$id": "https://open-metadata.org/schema/api/policies/createPolicy.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreatePolicyRequest",
+ "description": "Create Policy Entity Request",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.policies.CreatePolicy",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+
+ "properties": {
+ "name": {
+ "description": "Name that identifies this Policy.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Title for this Policy.",
+ "type": "string"
+ },
+ "description": {
+ "description": "A short description of the Policy, comprehensible to regular users.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "owners": {
+ "description": "Owners of this Policy.",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "rules": {
+ "$ref": "../../entity/policies/policy.json#/definitions/rules"
+ },
+ "enabled": {
+ "description": "Is the policy enabled.",
+ "type": "boolean",
+ "default": true
+ },
+ "location": {
+ "description": "UUID of Location where this policy is applied",
+ "$ref": "../../type/basic.json#/definitions/uuid",
+ "default": null
+ },
+ "domains" : {
+ "description": "Fully qualified names of the domains the Policy belongs to.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "required": ["name", "rules"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/rdf/sparqlQuery.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/rdf/sparqlQuery.json
new file mode 100644
index 000000000000..abae503f4336
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/rdf/sparqlQuery.json
@@ -0,0 +1,47 @@
+{
+ "$id": "https://open-metadata.org/schema/api/rdf/sparqlQuery.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SparqlQuery",
+ "description": "SPARQL query request",
+ "type": "object",
+ "properties": {
+ "query": {
+ "description": "The SPARQL query string",
+ "type": "string"
+ },
+ "format": {
+ "description": "Response format for the query results",
+ "type": "string",
+ "enum": ["json", "xml", "csv", "tsv", "turtle", "rdfxml", "ntriples", "jsonld"],
+ "default": "json"
+ },
+ "timeout": {
+ "description": "Query timeout in milliseconds",
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 300000,
+ "default": 30000
+ },
+ "defaultGraphUri": {
+ "description": "Default graph URI for the query",
+ "type": "string",
+ "format": "uri"
+ },
+ "namedGraphUri": {
+ "description": "Named graph URIs for the query",
+ "type": "array",
+ "items": {
+ "type": "string",
+ "format": "uri"
+ }
+ },
+ "inference": {
+ "description": "Inference/reasoning level to apply",
+ "type": "string",
+ "enum": ["none", "rdfs", "owl", "custom"],
+ "default": "none"
+ }
+ },
+ "required": ["query"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/rdf/sparqlResponse.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/rdf/sparqlResponse.json
new file mode 100644
index 000000000000..989632b9dc87
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/rdf/sparqlResponse.json
@@ -0,0 +1,67 @@
+{
+ "$id": "https://open-metadata.org/schema/api/rdf/sparqlResponse.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SparqlResponse",
+ "description": "SPARQL query response",
+ "type": "object",
+ "properties": {
+ "head": {
+ "description": "Header information about the query results",
+ "type": "object",
+ "properties": {
+ "vars": {
+ "description": "List of variable names in the results",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "link": {
+ "description": "Links to additional resources",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "results": {
+ "description": "Query results",
+ "type": "object",
+ "properties": {
+ "bindings": {
+ "description": "Result bindings",
+ "type": "array",
+ "items": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": ["uri", "literal", "bnode"]
+ },
+ "value": {
+ "type": "string"
+ },
+ "datatype": {
+ "type": "string",
+ "format": "uri"
+ },
+ "xml:lang": {
+ "type": "string"
+ }
+ },
+ "required": ["type", "value"]
+ }
+ }
+ }
+ }
+ },
+ "boolean": {
+ "description": "Boolean result for ASK queries",
+ "type": "boolean"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/scim/scimGroup.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/scim/scimGroup.json
new file mode 100644
index 000000000000..25cec6a67d6e
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/scim/scimGroup.json
@@ -0,0 +1,78 @@
+{
+ "$id": "https://open-metadata.org/schema/api/scimGroup.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "ScimGroup",
+ "description": "SCIM-compliant Group object",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.scim.ScimGroup",
+ "properties": {
+ "schemas": {
+ "type": "array",
+ "description": "SCIM schemas used for this resource",
+ "items": {
+ "type": "string"
+ },
+ "default": ["urn:ietf:params:scim:schemas:core:2.0:Group"]
+ },
+ "id": {
+ "type": "string",
+ "description": "Unique identifier for the group"
+ },
+ "displayName": {
+ "type": "string",
+ "description": "Human-readable name of the group"
+ },
+ "externalId": {
+ "type": "string",
+ "description": "External system identifier"
+ },
+ "active": {
+ "type": "boolean",
+ "description": "Whether the group is active"
+ },
+ "members": {
+ "type": "array",
+ "description": "Members of the group",
+ "items": {
+ "type": "object",
+ "properties": {
+ "value": {
+ "type": "string",
+ "description": "ID of the member (user)"
+ },
+ "display": {
+ "type": "string",
+ "description": "Display name of the member"
+ },
+ "type": {
+ "type": "string",
+ "description": "Type of member - typically 'User'"
+ }
+ },
+ "required": ["value"]
+ }
+ },
+ "meta": {
+ "type": "object",
+ "description": "Metadata about the group",
+ "properties": {
+ "resourceType": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "lastModified": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "location": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "required": ["schemas", "displayName"],
+ "additionalProperties": true
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/scim/scimPatchOp.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/scim/scimPatchOp.json
new file mode 100644
index 000000000000..7257f16d1aad
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/scim/scimPatchOp.json
@@ -0,0 +1,39 @@
+{
+ "$id": "https://open-metadata.org/schema/api/scimPatchOp.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "ScimPatchOp",
+ "description": "SCIM PatchOp request as per RFC 7644",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.scim.ScimPatchOp",
+ "properties": {
+ "schemas": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "default": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"]
+ },
+ "Operations": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "op": {
+ "type": "string",
+ "enum": ["add", "replace", "remove"],
+ "javaType": "java.lang.String"
+ },
+ "path": {
+ "type": "string"
+ },
+ "value": {
+ "type": ["object", "array", "string", "boolean", "number"]
+ }
+ },
+ "required": ["op"]
+ }
+ }
+ },
+ "required": ["schemas", "Operations"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/scim/scimUser.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/scim/scimUser.json
new file mode 100644
index 000000000000..54bc691d6e70
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/scim/scimUser.json
@@ -0,0 +1,92 @@
+{
+ "$id": "https://open-metadata.org/schema/api/scimUser.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "ScimUser",
+ "description": "SCIM-compliant User object",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.scim.ScimUser",
+ "properties": {
+ "schemas": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "id": { "type": "string" },
+ "externalId": { "type": "string" },
+ "userName": { "type": "string" },
+ "displayName": { "type": "string" },
+ "active": { "type": "boolean", "default": true },
+ "title": { "type": "string" },
+ "preferredLanguage": { "type": "string" },
+ "emails": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "value": { "type": "string", "format": "email" },
+ "type": { "type": "string" },
+ "primary": { "type": "boolean" }
+ }
+ }
+ },
+ "phoneNumbers": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "value": { "type": "string" },
+ "type": { "type": "string" }
+ }
+ }
+ },
+ "addresses": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "type": { "type": "string" },
+ "formatted": { "type": "string" },
+ "streetAddress": { "type": "string" },
+ "locality": { "type": "string" },
+ "region": { "type": "string" },
+ "postalCode": { "type": "string" },
+ "country": { "type": "string" }
+ }
+ }
+ },
+ "name": {
+ "type": "object",
+ "properties": {
+ "givenName": { "type": "string" },
+ "familyName": { "type": "string" },
+ "formatted": { "type": "string" }
+ }
+ },
+ "meta": {
+ "type": "object",
+ "properties": {
+ "resourceType": { "type": "string" },
+ "created": { "type": "string", "format": "date-time" },
+ "lastModified": { "type": "string", "format": "date-time" },
+ "location": { "type": "string" }
+ },
+ "additionalProperties": true
+ },
+ "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User": {
+ "type": "object",
+ "properties": {
+ "employeeId": { "type": "string" },
+ "department": { "type": "string" },
+ "manager": {
+ "type": "object",
+ "properties": {
+ "value": { "type": "string" },
+ "displayName": { "type": "string" }
+ }
+ }
+ }
+ }
+ },
+ "additionalProperties": true
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/search/orphanCleanupResponse.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/search/orphanCleanupResponse.json
new file mode 100644
index 000000000000..24698d65a9bd
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/search/orphanCleanupResponse.json
@@ -0,0 +1,13 @@
+{
+ "$id": "https://open-metadata.org/schema/api/search/orphanCleanupResponse.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "OrphanCleanupResponse",
+ "description": "Response after cleaning up orphan indexes.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.search.OrphanCleanupResponse",
+ "properties": {
+ "deletedIndexes": { "description": "List of deleted index names.", "type": "array", "items": { "type": "string" } },
+ "deletedCount": { "description": "Number of indexes deleted.", "type": "integer" }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/search/previewSearchRequest.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/search/previewSearchRequest.json
new file mode 100644
index 000000000000..a7e1c75c11ad
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/search/previewSearchRequest.json
@@ -0,0 +1,63 @@
+{
+ "$id": "https://open-metadata.org/schema/api/search/previewSearchRequest.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "PreviewSearchRequest",
+ "description": "Preview Search Results",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.search.PreviewSearchRequest",
+ "required": ["query", "index", "searchSettings"],
+ "properties": {
+ "query": {
+ "type": "string",
+ "description": "The query text to execute against the search index."
+ },
+ "index": {
+ "type": "string",
+ "description": "The index to run the query against (e.g., table_search_index)."
+ },
+ "searchSettings": {
+ "$ref": "../../configuration/searchSettings.json"
+ },
+ "from": {
+ "type": "integer",
+ "default": 0,
+ "description": "Pagination start index."
+ },
+ "size": {
+ "type": "integer",
+ "default": 10,
+ "description": "Number of results to return."
+ },
+ "sortField": {
+ "type": "string",
+ "default": "_score"
+ },
+ "sortOrder": {
+ "type": "string",
+ "default": "desc",
+ "enum": ["asc", "desc"]
+ },
+ "trackTotalHits": {
+ "type": "boolean",
+ "default": false
+ },
+ "queryFilter": {
+ "type": "string"
+ },
+ "postFilter": {
+ "type": "string"
+ },
+ "fetchSource": {
+ "type": "boolean",
+ "default": true
+ },
+ "includeSourceFields": {
+ "type": "array",
+ "items": { "type": "string" }
+ },
+ "explain": {
+ "type": "boolean",
+ "default": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/search/searchStats.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/search/searchStats.json
new file mode 100644
index 000000000000..0fc71fa30551
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/search/searchStats.json
@@ -0,0 +1,96 @@
+{
+ "$id": "https://open-metadata.org/schema/api/search/searchStats.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SearchStatsResponse",
+ "description": "Response containing search cluster statistics and index details.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.search.SearchStatsResponse",
+ "properties": {
+ "clusterHealth": {
+ "description": "Health status of the search cluster (GREEN, YELLOW, RED).",
+ "type": "string"
+ },
+ "totalIndexes": {
+ "description": "Total number of indexes in the cluster.",
+ "type": "integer"
+ },
+ "totalDocuments": {
+ "description": "Total number of documents across all indexes.",
+ "type": "integer",
+ "format": "int64"
+ },
+ "totalSizeInBytes": {
+ "description": "Total storage size in bytes.",
+ "type": "integer",
+ "format": "int64"
+ },
+ "totalSizeFormatted": {
+ "description": "Human-readable total storage size.",
+ "type": "string"
+ },
+ "totalPrimaryShards": {
+ "description": "Total number of primary shards.",
+ "type": "integer"
+ },
+ "totalReplicaShards": {
+ "description": "Total number of replica shards.",
+ "type": "integer"
+ },
+ "indexes": {
+ "description": "List of index details.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/indexStats"
+ }
+ },
+ "orphanIndexes": {
+ "description": "List of orphan indexes (indexes with zero aliases).",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/orphanIndex"
+ }
+ },
+ "isSearchIndexingRunning": {
+ "description": "Indicates if search indexing job is currently running. Orphan cleanup is not allowed while indexing is in progress.",
+ "type": "boolean",
+ "default": false
+ },
+ "expectedIndexCount": {
+ "description": "Total number of expected indices from entity index mappings.",
+ "type": "integer"
+ },
+ "missingIndexes": {
+ "description": "List of expected index names that are missing from the search cluster.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "definitions": {
+ "indexStats": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.search.SearchStatsResponse$IndexStats",
+ "properties": {
+ "name": { "description": "Index name.", "type": "string" },
+ "documents": { "description": "Number of documents in the index.", "type": "integer", "format": "int64" },
+ "primaryShards": { "description": "Number of primary shards.", "type": "integer" },
+ "replicaShards": { "description": "Number of replica shards.", "type": "integer" },
+ "sizeInBytes": { "description": "Index size in bytes.", "type": "integer", "format": "int64" },
+ "sizeFormatted": { "description": "Human-readable index size.", "type": "string" },
+ "health": { "description": "Index health status.", "type": "string" },
+ "aliases": { "description": "List of aliases pointing to this index.", "type": "array", "items": { "type": "string" } }
+ }
+ },
+ "orphanIndex": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.search.SearchStatsResponse$OrphanIndex",
+ "properties": {
+ "name": { "description": "Orphan index name.", "type": "string" },
+ "sizeInBytes": { "description": "Index size in bytes.", "type": "integer", "format": "int64" },
+ "sizeFormatted": { "description": "Human-readable index size.", "type": "string" }
+ }
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/services/createApiService.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/services/createApiService.json
new file mode 100644
index 000000000000..3fe712c50a70
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/services/createApiService.json
@@ -0,0 +1,63 @@
+{
+ "$id": "https://open-metadata.org/schema/api/services/createApiService.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateApiServiceRequest",
+ "description": "Create API Service entity request",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.services.CreateApiService",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+
+ "properties": {
+ "name": {
+ "description": "Name that identifies the this entity instance uniquely",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this API service. It could be title or label from the source services.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of API service entity.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "serviceType": {
+ "$ref": "../../entity/services/apiService.json#/definitions/apiServiceType"
+ },
+ "connection": {
+ "$ref": "../../entity/services/apiService.json#/definitions/apiConnection"
+ },
+ "tags": {
+ "description": "Tags for this API Service.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "owners": {
+ "description": "Owners of this API service.",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "dataProducts" : {
+ "description": "List of fully qualified names of data products this entity is part of.",
+ "type": "array",
+ "items" : {
+ "$ref" : "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ }
+ },
+ "domains" : {
+ "description": "Fully qualified names of the domains the API Service belongs to.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "ingestionRunner" : {
+ "description": "The ingestion agent responsible for executing the ingestion pipeline.",
+ "$ref": "../../type/entityReference.json"
+ }
+ },
+ "required": ["name", "serviceType"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/services/createDashboardService.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/services/createDashboardService.json
new file mode 100644
index 000000000000..154c65759b4e
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/services/createDashboardService.json
@@ -0,0 +1,62 @@
+{
+ "$id": "https://open-metadata.org/schema/api/services/createDashboardService.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateDashboardServiceRequest",
+ "description": "Create Dashboard service entity request",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.services.CreateDashboardService",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+ "properties": {
+ "name": {
+ "description": "Name that identifies the this entity instance uniquely",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this dashboard service.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of dashboard service entity.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "serviceType": {
+ "$ref": "../../entity/services/dashboardService.json#/definitions/dashboardServiceType"
+ },
+ "connection": {
+ "$ref": "../../entity/services/dashboardService.json#/definitions/dashboardConnection"
+ },
+ "tags": {
+ "description": "Tags for this Dashboard Service.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "owners": {
+ "description": "Owners of this dashboard service.",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "dataProducts" : {
+ "description": "List of fully qualified names of data products this entity is part of.",
+ "type": "array",
+ "items" : {
+ "$ref" : "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ }
+ },
+ "domains" : {
+ "description": "Fully qualified names of the domains the Dashboard Service belongs to.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "ingestionRunner" : {
+ "description": "The ingestion agent responsible for executing the ingestion pipeline.",
+ "$ref": "../../type/entityReference.json"
+ }
+ },
+ "required": ["name", "serviceType"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/services/createDatabaseService.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/services/createDatabaseService.json
new file mode 100644
index 000000000000..10ca1afe3a06
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/services/createDatabaseService.json
@@ -0,0 +1,63 @@
+{
+ "$id": "https://open-metadata.org/schema/api/services/createDatabaseService.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateDatabaseServiceRequest",
+ "description": "Create Database service entity request",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.services.CreateDatabaseService",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+
+ "properties": {
+ "name": {
+ "description": "Name that identifies the this entity instance uniquely",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this database service.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of Database entity.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "tags": {
+ "description": "Tags for this Database Service.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "serviceType": {
+ "$ref": "../../entity/services/databaseService.json#/definitions/databaseServiceType"
+ },
+ "connection": {
+ "$ref": "../../entity/services/databaseService.json#/definitions/databaseConnection"
+ },
+ "owners": {
+ "description": "Owners of this database service.",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "dataProducts" : {
+ "description": "List of fully qualified names of data products this entity is part of.",
+ "type": "array",
+ "items" : {
+ "$ref" : "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ }
+ },
+ "domains" : {
+ "description": "Fully qualified names of the domains the Database Service belongs to.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "ingestionRunner" : {
+ "description": "The ingestion agent responsible for executing the ingestion pipeline. It will be defined at runtime based on the Ingestion Agent of the service.",
+ "$ref": "../../type/entityReference.json"
+ }
+ },
+ "required": ["name", "serviceType"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/services/createDriveService.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/services/createDriveService.json
new file mode 100644
index 000000000000..7534d2c2bee1
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/services/createDriveService.json
@@ -0,0 +1,69 @@
+{
+ "$id": "https://open-metadata.org/schema/api/services/createDriveService.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateDriveServiceRequest",
+ "description": "Create Drive Service entity request",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.services.CreateDriveService",
+ "javaInterfaces": [
+ "org.openmetadata.schema.CreateEntity"
+ ],
+ "properties": {
+ "name": {
+ "description": "Name that identifies this drive service.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this drive service.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of drive service entity.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "serviceType": {
+ "description": "Type of drive service",
+ "$ref": "../../entity/services/driveService.json#/definitions/driveServiceType"
+ },
+ "connection": {
+ "$ref": "../../entity/services/driveService.json#/definitions/driveConnection"
+ },
+ "tags": {
+ "description": "Tags for this Drive Service.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "owners": {
+ "description": "Owners of this Drive service.",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "dataProducts": {
+ "description": "List of fully qualified names of data products this entity is part of.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ }
+ },
+ "domains": {
+ "description": "Fully qualified names of the domains the Drive Service belongs to.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "default": null
+ },
+ "ingestionRunner": {
+ "description": "The ingestion agent responsible for executing the ingestion pipeline.",
+ "$ref": "../../type/entityReference.json"
+ }
+ },
+ "required": [
+ "name",
+ "serviceType"
+ ],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/services/createLLMService.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/services/createLLMService.json
new file mode 100644
index 000000000000..736bc1ab7954
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/services/createLLMService.json
@@ -0,0 +1,63 @@
+{
+ "$id": "https://open-metadata.org/schema/api/services/createLLMService.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateLLMServiceRequest",
+ "description": "Create LLM service entity request",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.services.CreateLLMService",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+
+ "properties": {
+ "name": {
+ "description": "Name that identifies the this entity instance uniquely",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this LLM service.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of LLM entity.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "tags": {
+ "description": "Tags for this LLM Service.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "serviceType": {
+ "$ref": "../../entity/services/llmService.json#/definitions/llmServiceType"
+ },
+ "connection": {
+ "$ref": "../../entity/services/llmService.json#/definitions/llmConnection"
+ },
+ "owners": {
+ "description": "Owners of this LLM service.",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "dataProducts" : {
+ "description": "List of fully qualified names of data products this entity is part of.",
+ "type": "array",
+ "items" : {
+ "$ref" : "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ }
+ },
+ "domains" : {
+ "description": "Fully qualified names of the domains the LLM Service belongs to.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "ingestionRunner" : {
+ "description": "The ingestion agent responsible for executing the ingestion pipeline. It will be defined at runtime based on the Ingestion Agent of the service.",
+ "$ref": "../../type/entityReference.json"
+ }
+ },
+ "required": ["name", "serviceType"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/services/createMcpService.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/services/createMcpService.json
new file mode 100644
index 000000000000..8185aa52e851
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/services/createMcpService.json
@@ -0,0 +1,63 @@
+{
+ "$id": "https://open-metadata.org/schema/api/services/createMcpService.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateMcpServiceRequest",
+ "description": "Create MCP service entity request",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.services.CreateMcpService",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+
+ "properties": {
+ "name": {
+ "description": "Name that identifies this entity instance uniquely",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this MCP service.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of MCP service entity.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "tags": {
+ "description": "Tags for this MCP Service.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "serviceType": {
+ "$ref": "../../entity/services/mcpService.json#/definitions/mcpServiceType"
+ },
+ "connection": {
+ "$ref": "../../entity/services/mcpService.json#/definitions/mcpConnection"
+ },
+ "owners": {
+ "description": "Owners of this MCP service.",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "dataProducts": {
+ "description": "List of fully qualified names of data products this entity is part of.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ }
+ },
+ "domains": {
+ "description": "Fully qualified names of the domains the MCP Service belongs to.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "ingestionRunner": {
+ "description": "The ingestion agent responsible for executing the ingestion pipeline.",
+ "$ref": "../../type/entityReference.json"
+ }
+ },
+ "required": ["name", "serviceType"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/services/createMessagingService.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/services/createMessagingService.json
new file mode 100644
index 000000000000..da4f61a4dd3e
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/services/createMessagingService.json
@@ -0,0 +1,63 @@
+{
+ "$id": "https://open-metadata.org/schema/api/services/createMessagingService.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateMessagingServiceRequest",
+ "description": "Create Messaging service entity request",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.services.CreateMessagingService",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+
+ "properties": {
+ "name": {
+ "description": "Name that identifies the this entity instance uniquely",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this messaging service. It could be title or label from the source services.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of messaging service entity.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "serviceType": {
+ "$ref": "../../entity/services/messagingService.json#/definitions/messagingServiceType"
+ },
+ "connection": {
+ "$ref": "../../entity/services/messagingService.json#/definitions/messagingConnection"
+ },
+ "tags": {
+ "description": "Tags for this Messaging Service.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "owners": {
+ "description": "Owners of this messaging service.",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "dataProducts" : {
+ "description": "List of fully qualified names of data products this entity is part of.",
+ "type": "array",
+ "items" : {
+ "$ref" : "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ }
+ },
+ "domains" : {
+ "description": "Fully qualified names of the domains the Messaging Service belongs to.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "ingestionRunner" : {
+ "description": "The ingestion agent responsible for executing the ingestion pipeline.",
+ "$ref": "../../type/entityReference.json"
+ }
+ },
+ "required": ["name", "serviceType"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/services/createMetadataService.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/services/createMetadataService.json
new file mode 100644
index 000000000000..1c63038b56d0
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/services/createMetadataService.json
@@ -0,0 +1,55 @@
+{
+ "$id": "https://open-metadata.org/schema/api/services/createMetadataService.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateMetadataServiceRequest",
+ "description": "Create Metadata Service entity request",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.services.CreateMetadataService",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+ "properties": {
+ "name": {
+ "description": "Name that identifies the this entity instance uniquely",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this Metadata service.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of Metadata entity.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "serviceType": {
+ "$ref": "../../entity/services/metadataService.json#/definitions/metadataServiceType"
+ },
+ "connection": {
+ "$ref": "../../entity/services/metadataService.json#/definitions/metadataConnection"
+ },
+ "owners": {
+ "description": "Owners of this Metadata service.",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "tags": {
+ "description": "Tags for this Metadata Service.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "domains" : {
+ "description": "Fully qualified names of the domains the Metadata Service belongs to.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "ingestionRunner" : {
+ "description": "The ingestion agent responsible for executing the ingestion pipeline.",
+ "$ref": "../../type/entityReference.json"
+ }
+ },
+ "required": ["name", "serviceType"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/services/createMlModelService.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/services/createMlModelService.json
new file mode 100644
index 000000000000..35a1bebf6fad
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/services/createMlModelService.json
@@ -0,0 +1,63 @@
+{
+ "$id": "https://open-metadata.org/schema/api/services/createMlmodelService.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateMlModelServiceRequest",
+ "description": "Create MlModel service entity request",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.services.CreateMlModelService",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+
+ "properties": {
+ "name": {
+ "description": "Name that identifies the this entity instance uniquely",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this mlModel service.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of mlModel service entity.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "serviceType": {
+ "$ref": "../../entity/services/mlmodelService.json#/definitions/mlModelServiceType"
+ },
+ "connection": {
+ "$ref": "../../entity/services/mlmodelService.json#/definitions/mlModelConnection"
+ },
+ "tags": {
+ "description": "Tags for this MlModel Service.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "owners": {
+ "description": "Owners of this mlModel service.",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "dataProducts" : {
+ "description": "List of fully qualified names of data products this entity is part of.",
+ "type": "array",
+ "items" : {
+ "$ref" : "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ }
+ },
+ "domains" : {
+ "description": "Fully qualified names of the domains the MLModel Service belongs to.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "ingestionRunner" : {
+ "description": "The ingestion agent responsible for executing the ingestion pipeline.",
+ "$ref": "../../type/entityReference.json"
+ }
+ },
+ "required": ["name", "serviceType"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/services/createPipelineService.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/services/createPipelineService.json
new file mode 100644
index 000000000000..0c056cbda1ed
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/services/createPipelineService.json
@@ -0,0 +1,72 @@
+{
+ "$id": "https://open-metadata.org/schema/api/services/createPipelineService.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreatePipelineServiceRequest",
+ "description": "Create Pipeline service entity request",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.services.CreatePipelineService",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+
+ "properties": {
+ "name": {
+ "description": "Name that identifies the this entity instance uniquely",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this pipeline service.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of pipeline service entity.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "serviceType": {
+ "$ref": "../../entity/services/pipelineService.json#/definitions/pipelineServiceType"
+ },
+ "connection": {
+ "$ref": "../../entity/services/pipelineService.json#/definitions/pipelineConnection"
+ },
+ "tags": {
+ "description": "Tags for this Pipeline Service.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "owners": {
+ "description": "Owners of this pipeline service.",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "scheduleInterval": {
+ "description": "Scheduler Interval for the pipeline in cron format.",
+ "type": "string",
+ "default": null
+ },
+ "dataProducts" : {
+ "description": "List of fully qualified names of data products this entity is part of.",
+ "type": "array",
+ "items" : {
+ "$ref" : "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ }
+ },
+ "domains" : {
+ "description": "Fully qualified names of the domains the Pipeline Service belongs to.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "lifeCycle": {
+ "description": "Life Cycle of the entity",
+ "$ref": "../../type/lifeCycle.json"
+ },
+ "ingestionRunner" : {
+ "description": "The ingestion agent responsible for executing the ingestion pipeline.",
+ "$ref": "../../type/entityReference.json"
+ }
+ },
+ "required": ["name", "serviceType"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/services/createSearchService.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/services/createSearchService.json
new file mode 100644
index 000000000000..bcefce358fdb
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/services/createSearchService.json
@@ -0,0 +1,63 @@
+{
+ "$id": "https://open-metadata.org/schema/api/services/createSearchService.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateSearchServiceRequest",
+ "description": "Create Search Service entity request",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.services.CreateSearchService",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+
+ "properties": {
+ "name": {
+ "description": "Name that identifies the this entity instance uniquely",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this search service. It could be title or label from the source services.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of search service entity.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "serviceType": {
+ "$ref": "../../entity/services/searchService.json#/definitions/searchServiceType"
+ },
+ "connection": {
+ "$ref": "../../entity/services/searchService.json#/definitions/searchConnection"
+ },
+ "tags": {
+ "description": "Tags for this Search Service.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "owners": {
+ "description": "Owners of this search service.",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "dataProducts" : {
+ "description": "List of fully qualified names of data products this entity is part of.",
+ "type": "array",
+ "items" : {
+ "$ref" : "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ }
+ },
+ "domains" : {
+ "description": "Fully qualified names of the domains the Search Service belongs to.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "ingestionRunner" : {
+ "description": "The ingestion agent responsible for executing the ingestion pipeline.",
+ "$ref": "../../type/entityReference.json"
+ }
+ },
+ "required": ["name", "serviceType"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/services/createSecurityService.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/services/createSecurityService.json
new file mode 100644
index 000000000000..623051068e91
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/services/createSecurityService.json
@@ -0,0 +1,67 @@
+{
+ "$id": "https://open-metadata.org/schema/api/services/createSecurityService.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateSecurityServiceRequest",
+ "description": "Create Security Service entity request",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.services.CreateSecurityService",
+ "javaInterfaces": [
+ "org.openmetadata.schema.CreateEntity"
+ ],
+ "properties": {
+ "name": {
+ "description": "Name that identifies the this entity instance uniquely",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this security service. It could be title or label from the source services.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of security service entity.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "serviceType": {
+ "$ref": "../../entity/services/securityService.json#/definitions/securityServiceType"
+ },
+ "connection": {
+ "$ref": "../../entity/services/securityService.json#/definitions/securityConnection"
+ },
+ "tags": {
+ "description": "Tags for this Security Service.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "owners": {
+ "description": "Owners of this security service.",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "dataProducts": {
+ "description": "List of fully qualified names of data products this entity is part of.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ }
+ },
+ "domains": {
+ "description": "Fully qualified names of the domains the Search Service belongs to.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "ingestionRunner": {
+ "description": "The ingestion agent responsible for executing the ingestion pipeline.",
+ "$ref": "../../type/entityReference.json"
+ }
+ },
+ "required": [
+ "name",
+ "serviceType"
+ ],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/services/createStorageService.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/services/createStorageService.json
new file mode 100644
index 000000000000..fc7a6281f8ff
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/services/createStorageService.json
@@ -0,0 +1,63 @@
+{
+ "$id": "https://open-metadata.org/schema/api/services/createStorageService.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateStorageServiceRequest",
+ "description": "Create Storage Service entity request",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.services.CreateStorageService",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+
+ "properties": {
+ "name": {
+ "description": "Name that identifies the this entity instance uniquely",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this storage service. It could be title or label from the source services.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of storage service entity.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "serviceType": {
+ "$ref": "../../entity/services/storageService.json#/definitions/storageServiceType"
+ },
+ "connection": {
+ "$ref": "../../entity/services/storageService.json#/definitions/storageConnection"
+ },
+ "tags": {
+ "description": "Tags for this Object Store Service.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "owners": {
+ "description": "Owners of this object store service.",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "dataProducts" : {
+ "description": "List of fully qualified names of data products this entity is part of.",
+ "type": "array",
+ "items" : {
+ "$ref" : "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ }
+ },
+ "domains" : {
+ "description": "Fully qualified names of the domains the Storage Service belongs to.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "ingestionRunner" : {
+ "description": "The ingestion agent responsible for executing the ingestion pipeline.",
+ "$ref": "../../type/entityReference.json"
+ }
+ },
+ "required": ["name", "serviceType"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/services/ingestionPipelines/createIngestionPipeline.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/services/ingestionPipelines/createIngestionPipeline.json
new file mode 100644
index 000000000000..86617664d9f0
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/services/ingestionPipelines/createIngestionPipeline.json
@@ -0,0 +1,77 @@
+{
+ "$id": "https://open-metadata.org/schema/api/services/ingestionPipelines/createIngestionPipeline.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateIngestionPipelineRequest",
+ "description": "Ingestion Pipeline Config is used to set up an Airflow DAG.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.services.ingestionPipelines.CreateIngestionPipeline",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+ "properties": {
+ "name": {
+ "description": "Name that identifies this pipeline instance uniquely.",
+ "$ref": "../../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this ingestion pipeline.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the pipeline.",
+ "$ref": "../../../type/basic.json#/definitions/markdown"
+ },
+ "pipelineType": {
+ "$ref": "../../../entity/services/ingestionPipelines/ingestionPipeline.json#/definitions/pipelineType"
+ },
+ "sourceConfig": {
+ "$ref": "../../../metadataIngestion/workflow.json#/definitions/sourceConfig"
+ },
+ "airflowConfig": {
+ "$ref": "../../../entity/services/ingestionPipelines/ingestionPipeline.json#/definitions/airflowConfig"
+ },
+ "loggerLevel": {
+ "description": "Set the logging level for the workflow.",
+ "$ref": "../../../metadataIngestion/workflow.json#/definitions/logLevels"
+ },
+ "raiseOnError": {
+ "description": "Control if we want to flag the workflow as failed if we encounter any processing errors.",
+ "type": "boolean",
+ "default": true
+ },
+ "service": {
+ "description": "Link to the service for which ingestion pipeline is ingesting the metadata.",
+ "$ref": "../../../type/entityReference.json"
+ },
+ "owners": {
+ "description": "Owner of this Ingestion Pipeline.",
+ "$ref": "../../../type/entityReferenceList.json",
+ "default": null
+ },
+ "provider" : {
+ "$ref": "../../../type/basic.json#/definitions/providerType"
+ },
+ "domains" : {
+ "description": "Fully qualified names of the domains the Ingestion Pipeline belongs to.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "processingEngine": {
+ "description": "The processing engine responsible for executing the ingestion pipeline logic.",
+ "$ref": "../../../type/entityReference.json"
+ },
+ "enableStreamableLogs": {
+ "description": "Enable real-time log streaming to the OpenMetadata server. When enabled, ingestion logs will be automatically shipped to the server's configured log storage backend (S3 or compatible).",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "required": [
+ "name",
+ "service",
+ "pipelineType",
+ "sourceConfig",
+ "airflowConfig"
+ ],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/setOwner.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/setOwner.json
new file mode 100644
index 000000000000..79fdf6b481a7
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/setOwner.json
@@ -0,0 +1,19 @@
+{
+ "$id": "https://open-metadata.org/schema/api/setOwner.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SetOwnershipRequest",
+ "description": "Set ownership for a given entity",
+ "type": "object",
+
+ "properties": {
+ "id": {
+ "description": "Id of the owner of the entity",
+ "$ref": "../type/basic.json#/definitions/uuid"
+ },
+ "type": {
+ "description": "Entity type of the owner typically either 'user' or 'team'",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/tasks/bulkTaskOperation.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/tasks/bulkTaskOperation.json
new file mode 100644
index 000000000000..9fc650850401
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/tasks/bulkTaskOperation.json
@@ -0,0 +1,71 @@
+{
+ "$id": "https://open-metadata.org/schema/api/tasks/bulkTaskOperation.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "BulkTaskOperationRequest",
+ "description": "Request for bulk operations on multiple tasks.",
+ "javaType": "org.openmetadata.schema.api.tasks.BulkTaskOperation",
+ "type": "object",
+ "definitions": {
+ "bulkOperation": {
+ "javaType": "org.openmetadata.schema.type.BulkTaskOperationType",
+ "description": "Type of bulk operation.",
+ "type": "string",
+ "enum": [
+ "Approve",
+ "Reject",
+ "Assign",
+ "UpdatePriority",
+ "Cancel"
+ ],
+ "javaEnums": [
+ {"name": "Approve"},
+ {"name": "Reject"},
+ {"name": "Assign"},
+ {"name": "UpdatePriority"},
+ {"name": "Cancel"}
+ ]
+ },
+ "bulkOperationParams": {
+ "javaType": "org.openmetadata.schema.type.BulkTaskOperationParams",
+ "description": "Parameters for bulk operations.",
+ "type": "object",
+ "properties": {
+ "comment": {
+ "description": "Comment for approval/rejection.",
+ "type": "string"
+ },
+ "assignees": {
+ "description": "FQNs of assignees (for Assign operation).",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "priority": {
+ "description": "New priority (for UpdatePriority operation).",
+ "$ref": "../../entity/tasks/task.json#/definitions/taskPriority"
+ }
+ }
+ }
+ },
+ "properties": {
+ "taskIds": {
+ "description": "List of task IDs (UUID or taskId) to operate on.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "minItems": 1
+ },
+ "operation": {
+ "description": "Operation to perform on the tasks.",
+ "$ref": "#/definitions/bulkOperation"
+ },
+ "params": {
+ "description": "Parameters for the operation.",
+ "$ref": "#/definitions/bulkOperationParams"
+ }
+ },
+ "required": ["taskIds", "operation"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/tasks/createTask.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/tasks/createTask.json
new file mode 100644
index 000000000000..123d7207b0d4
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/tasks/createTask.json
@@ -0,0 +1,83 @@
+{
+ "$id": "https://open-metadata.org/schema/api/tasks/createTask.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateTaskRequest",
+ "description": "Request to create a new Task.",
+ "javaType": "org.openmetadata.schema.api.tasks.CreateTask",
+ "type": "object",
+ "properties": {
+ "name": {
+ "description": "Name of the task (auto-generated if not provided).",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display name for the task.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of what this task is about.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "category": {
+ "description": "Category of the task.",
+ "$ref": "../../entity/tasks/task.json#/definitions/taskCategory"
+ },
+ "type": {
+ "description": "Type of the task.",
+ "$ref": "../../entity/tasks/task.json#/definitions/taskType"
+ },
+ "priority": {
+ "description": "Priority of the task.",
+ "$ref": "../../entity/tasks/task.json#/definitions/taskPriority"
+ },
+ "about": {
+ "description": "FQN of the entity this task is about.",
+ "type": "string"
+ },
+ "aboutType": {
+ "description": "Type of the entity this task is about.",
+ "type": "string"
+ },
+ "domain": {
+ "description": "FQN of the domain this task belongs to.",
+ "type": "string"
+ },
+ "assignees": {
+ "description": "FQNs of users or teams to assign this task to.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "reviewers": {
+ "description": "FQNs of users or teams who should review this task.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "payload": {
+ "description": "Task-specific payload validated at runtime by the resolved TaskFormSchema for the task type and category.",
+ "existingJavaType": "java.lang.Object",
+ "type": "object",
+ "additionalProperties": true
+ },
+ "dueDate": {
+ "description": "Due date for task completion.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "externalReference": {
+ "description": "Reference to external system (JIRA, ServiceNow, etc.).",
+ "$ref": "../../entity/tasks/task.json#/definitions/externalReference"
+ },
+ "tags": {
+ "description": "Tags for this task.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ }
+ }
+ },
+ "required": ["category", "type"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/tasks/createTaskComment.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/tasks/createTaskComment.json
new file mode 100644
index 000000000000..493711fb9086
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/tasks/createTaskComment.json
@@ -0,0 +1,17 @@
+{
+ "$id": "https://open-metadata.org/schema/api/tasks/createTaskComment.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateTaskCommentRequest",
+ "description": "Schema for adding or updating a comment on a task.",
+ "javaType": "org.openmetadata.schema.api.tasks.CreateTaskComment",
+ "type": "object",
+ "properties": {
+ "message": {
+ "description": "Comment content in Markdown format. Supports @mentions for notifying users.",
+ "type": "string",
+ "minLength": 1
+ }
+ },
+ "required": ["message"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/tasks/resolveTask.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/tasks/resolveTask.json
new file mode 100644
index 000000000000..d8e23aee342c
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/tasks/resolveTask.json
@@ -0,0 +1,40 @@
+{
+ "$id": "https://open-metadata.org/schema/api/tasks/resolveTask.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "ResolveTaskRequest",
+ "description": "Request to resolve a Task.",
+ "javaType": "org.openmetadata.schema.api.tasks.ResolveTask",
+ "type": "object",
+ "properties": {
+ "transitionId": {
+ "description": "Workflow transition identifier to apply when resolving the task.",
+ "type": "string"
+ },
+ "resolutionType": {
+ "description": "How the task should be resolved.",
+ "$ref": "../../entity/tasks/task.json#/definitions/resolutionType"
+ },
+ "comment": {
+ "description": "Comment explaining the resolution.",
+ "type": "string"
+ },
+ "newValue": {
+ "description": "New value to apply (for update tasks).",
+ "type": "string"
+ },
+ "payload": {
+ "description": "Schema-driven resolution payload used for configurable task forms.",
+ "type": "object",
+ "additionalProperties": true
+ }
+ },
+ "anyOf": [
+ {
+ "required": ["transitionId"]
+ },
+ {
+ "required": ["resolutionType"]
+ }
+ ],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/tasks/taskCount.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/tasks/taskCount.json
new file mode 100644
index 000000000000..1a9a6f992bb9
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/tasks/taskCount.json
@@ -0,0 +1,31 @@
+{
+ "$id": "https://open-metadata.org/schema/api/tasks/taskCount.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Count of tasks",
+ "description": "This schema defines the type for reporting the count of tasks by status.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.tasks.TaskCount",
+ "properties": {
+ "open": {
+ "description": "Total count of all open tasks.",
+ "type": "integer",
+ "minimum": 0
+ },
+ "inProgress": {
+ "description": "Total count of all in-progress tasks.",
+ "type": "integer",
+ "minimum": 0
+ },
+ "completed": {
+ "description": "Total count of all completed/closed tasks.",
+ "type": "integer",
+ "minimum": 0
+ },
+ "total": {
+ "description": "Total count of all tasks.",
+ "type": "integer",
+ "minimum": 0
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/teams/createPersona.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/teams/createPersona.json
new file mode 100644
index 000000000000..675022111ba2
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/teams/createPersona.json
@@ -0,0 +1,45 @@
+{
+ "$id": "https://open-metadata.org/schema/api/teams/createPersona.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreatePersonaRequest",
+ "description": "Persona entity",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.teams.CreatePersona",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+
+ "properties": {
+ "name": {
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Optional name used for display purposes. Example 'Data Steward'.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Optional description of the team.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "users": {
+ "description": "Optional IDs of users that are going to assign a Persona.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "default": null
+ },
+ "domains" : {
+ "description": "Fully qualified names of the domains the Persona belongs to.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "default": {
+ "description": "When true, this persona is the system-wide default persona that will be applied to users who don't have any persona assigned or no default persona set.",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "required": ["name"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/teams/createRole.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/teams/createRole.json
new file mode 100644
index 000000000000..1b08a089d278
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/teams/createRole.json
@@ -0,0 +1,39 @@
+{
+ "$id": "https://open-metadata.org/schema/api/teams/createRole.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateRoleRequest",
+ "description": "Request for creating a Role entity",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.teams.CreateRole",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+
+ "properties": {
+ "name": {
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Optional name used for display purposes. Example 'Data Consumer'",
+ "type": "string"
+ },
+ "description": {
+ "description": "Optional description of the role",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "policies": {
+ "description": "Policies that is attached to this role. At least one policy is required.",
+ "type": "array",
+ "items": {
+ "$ref" : "../../type/basic.json#/definitions/entityName"
+ }
+ },
+ "domains" : {
+ "description": "Fully qualified names of the domains the Role belongs to.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "required": ["name", "policies"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/teams/createTeam.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/teams/createTeam.json
new file mode 100644
index 000000000000..06d0436bf6a8
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/teams/createTeam.json
@@ -0,0 +1,103 @@
+{
+ "$id": "https://open-metadata.org/schema/api/teams/createTeam.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateTeamRequest",
+ "description": "Team entity",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.teams.CreateTeam",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+
+ "properties": {
+ "teamType": {
+ "description": "Team type",
+ "$ref": "../../entity/teams/team.json#/definitions/teamType"
+ },
+ "name": {
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "email": {
+ "description": "Email address of the team.",
+ "$ref": "../../type/basic.json#/definitions/email"
+ },
+ "displayName": {
+ "description": "Optional name used for display purposes. Example 'Marketing Team'.",
+ "type": "string"
+ },
+ "externalId": {
+ "description": "External identifier for the team from an external identity provider (e.g., Azure AD group ID).",
+ "type": "string"
+ },
+ "description": {
+ "description": "Optional description of the team.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "profile": {
+ "description": "Optional team profile information.",
+ "$ref": "../../type/profile.json"
+ },
+ "parents": {
+ "description": "Parent teams. For an `Organization` the `parent` is always null. A `BusinessUnit` always has only one parent of type `BusinessUnit` or an `Organization`. A `Division` can have multiple parents of type `BusinessUnit` or `Division`. A `Department` can have multiple parents of type `Division` or `Department`.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "default": null
+ },
+ "children": {
+ "description": "Children teams. An `Organization` can have `BusinessUnit`, `Division` or `Department` as children. A `BusinessUnit` can have `BusinessUnit`, `Division`, or `Department` as children. A `Division` can have `Division` or `Department` as children. A `Department` can have `Department` as children.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "default": null
+ },
+ "users": {
+ "description": "Optional IDs of users that are part of the team.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "default": null
+ },
+ "defaultRoles": {
+ "description": "Roles to be assigned to all users that are part of this team.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "default": null
+ },
+ "defaultPersona": {
+ "description": "Default persona for all users in this team. Only applicable to Group type teams.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "owners": {
+ "description": "Owners sof this team. ",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "isJoinable": {
+ "description": "Can any user join this team during sign up? Value of true indicates yes, and false no.",
+ "type": "boolean",
+ "default": true
+ },
+ "policies": {
+ "description": "Policies that is attached to this team.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "default": null
+ },
+ "domains" : {
+ "description": "Domains the team belongs to.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "default": null
+ }
+ },
+ "required": ["name", "teamType"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/teams/createUser.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/teams/createUser.json
new file mode 100644
index 000000000000..0f20199cd214
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/teams/createUser.json
@@ -0,0 +1,110 @@
+{
+ "$id": "https://open-metadata.org/schema/api/teams/createUser.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateUserRequest",
+ "description": "Request to create User entity",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.teams.CreateUser",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+ "properties": {
+ "name": {
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "description": {
+ "description": "Used for user biography.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "displayName": {
+ "description": "Name used for display purposes. Example 'FirstName LastName'",
+ "type": "string"
+ },
+ "externalId": {
+ "description": "External identifier from identity provider (used for SCIM).",
+ "type": "string"
+ },
+ "scimUserName": {
+ "description": "Raw user name from SCIM.",
+ "type": "string"
+ },
+ "email": {
+ "$ref": "../../type/basic.json#/definitions/email"
+ },
+ "timezone": {
+ "description": "Timezone of the user",
+ "type": "string",
+ "format": "timezone"
+ },
+ "isBot": {
+ "description": "When true indicates user is a bot with appropriate privileges",
+ "type": "boolean",
+ "default": false
+ },
+ "botName": {
+ "description": "User bot name if we want to associate this bot with an specific bot",
+ "type": "string"
+ },
+ "isAdmin": {
+ "description": "When true indicates user is an administrator for the system with superuser privileges",
+ "type": "boolean",
+ "default": false
+ },
+ "profile": {
+ "description": "Profile of the user.",
+ "$ref": "../../type/profile.json",
+ "default": null
+ },
+ "teams": {
+ "description": "Teams that the user belongs to",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "default": null
+ },
+ "roles": {
+ "description": "Roles that the user has been assigned",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "default": null
+ },
+ "personas": {
+ "description": "Persona that the user belongs to.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "defaultPersona": {
+ "description": "Default Persona from User's Personas.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "authenticationMechanism": {
+ "description": "Authentication mechanism specified ",
+ "$ref": "../../entity/teams/user.json#/definitions/authenticationMechanism",
+ "default": null
+ },
+ "createPasswordType": {
+ "description": "User Password Method",
+ "type": "string",
+ "enum": ["ADMIN_CREATE", "USER_CREATE"],
+ "default": "USER_CREATE"
+ },
+ "password": {
+ "description": "Password for User",
+ "type": "string"
+ },
+ "confirmPassword": {
+ "description": "Confirm Password for User",
+ "type": "string"
+ },
+ "domains" : {
+ "description": "Domains the User belongs to.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "default": null
+ }
+ },
+ "required": ["name", "email"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/tests/bundleSuiteBulkAddRequest.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/tests/bundleSuiteBulkAddRequest.json
new file mode 100644
index 000000000000..3fa9355852f3
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/tests/bundleSuiteBulkAddRequest.json
@@ -0,0 +1,35 @@
+{
+ "$id": "https://open-metadata.org/schema/api/tests/bundleSuiteBulkAddRequest.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "BundleSuiteBulkAddRequest",
+ "description": "Request object for bulk-adding test case to a bundle. Use mode 'ids' to specify exact suites, or mode 'all' to select all suites with optional exclusions.",
+ "javaType": "org.openmetadata.schema.api.tests.BundleSuiteBulkAddRequest",
+ "properties": {
+ "selection": {
+ "description": "Configuration for selecting test case to add to the bundle. Choose either 'ids' mode to specify exact suites, or 'all' mode to select all suites with optional exclusions.",
+ "oneOf": [
+ {
+ "$ref": "bundleSuiteBulkAddRequestBulkByIds.json"
+ },
+ {
+ "$ref": "bundleSuiteBulkAddRequestBulkAll.json"
+ }
+ ]
+ },
+ "testSuiteId": {
+ "description": "TestSuite ID where we will be adding the test cases.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "mode": {
+ "description": "Mode of bulk addition. 'ids' to specify exact test suite IDs, 'all' to select all suites with optional exclusions.",
+ "type": "string",
+ "enum": ["ids", "all"]
+ }
+ },
+ "required": [
+ "selection",
+ "testSuiteId",
+ "mode"
+ ],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/tests/bundleSuiteBulkAddRequestBulkAll.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/tests/bundleSuiteBulkAddRequestBulkAll.json
new file mode 100644
index 000000000000..aa4e5d939245
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/tests/bundleSuiteBulkAddRequestBulkAll.json
@@ -0,0 +1,25 @@
+{
+ "$id": "https://open-metadata.org/schema/api/tests/bundleSuiteBulkAddRequestBulkAll.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "BundleSuiteBulkAddRequestBulkAll",
+ "description": "Add all test suites, with an optional list of IDs to exclude.",
+ "javaType": "org.openmetadata.schema.api.tests.BundleSuiteBulkAddRequestBulkAll",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "filter": {
+ "description": "Optional filter to exclude specific test suites from the bulk selection.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "excludeIds": {
+ "description": "List of test suite IDs to exclude from the bulk add.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/tests/bundleSuiteBulkAddRequestBulkByIds.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/tests/bundleSuiteBulkAddRequestBulkByIds.json
new file mode 100644
index 000000000000..1e83e595c823
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/tests/bundleSuiteBulkAddRequestBulkByIds.json
@@ -0,0 +1,20 @@
+{
+ "$id": "https://open-metadata.org/schema/api/tests/bundleSuiteBulkAddRequestBulkByIds.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "BundleSuiteBulkAddRequestBulkByIds",
+ "description": "Add a specific set of test suites by their IDs.",
+ "javaType": "org.openmetadata.schema.api.tests.BundleSuiteBulkAddRequestBulkByIds",
+ "type": "object",
+ "required": ["ids"],
+ "additionalProperties": false,
+ "properties": {
+ "ids": {
+ "description": "List of test suite IDs to add.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "minItems": 1
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/tests/createCustomMetric.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/tests/createCustomMetric.json
new file mode 100644
index 000000000000..c9bcc2721a5b
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/tests/createCustomMetric.json
@@ -0,0 +1,40 @@
+{
+ "$id": "https://open-metadata.org/schema/api/tests/customMetric.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateCustomMetricRequest",
+ "description": "Custom Metric definition that we will associate with a column.",
+ "type": "object",
+ "properties": {
+ "description": {
+ "description": "Description of the custom metric.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "name": {
+ "description": "Name that identifies this Custom Metric.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "columnName": {
+ "description": "Name of the column in a table.",
+ "type": "string"
+ },
+ "expression": {
+ "description": "SQL expression to compute the Metric. It should return a single numerical value.",
+ "type": "string"
+ },
+ "owners": {
+ "description": "Owners of this Pipeline.",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ }
+ },
+ "required": ["name", "expression"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/tests/createLogicalTestCases.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/tests/createLogicalTestCases.json
new file mode 100644
index 000000000000..a5c4838860c1
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/tests/createLogicalTestCases.json
@@ -0,0 +1,23 @@
+{
+ "$id": "https://open-metadata.org/schema/api/tests/createLogicalTestCases.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateLogicalTestCases",
+ "description": "Object used to create logical test cases.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.tests.CreateLogicalTestCases",
+ "properties": {
+ "testSuiteId": {
+ "description": "TestSuite ID where we will be adding the test cases.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "testCaseIds": {
+ "description": "Ids of the test cases to create.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ }
+ }
+ },
+ "required": ["testSuiteId","testCaseIds"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/tests/createTestCase.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/tests/createTestCase.json
new file mode 100644
index 000000000000..e58fc63c471f
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/tests/createTestCase.json
@@ -0,0 +1,79 @@
+{
+ "$id": "https://open-metadata.org/schema/api/tests/createTestCase.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateTestCaseRequest",
+ "description": "Test is a test definition to capture data quality tests.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.tests.CreateTestCase",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+ "properties": {
+ "name": {
+ "description": "Name that identifies this test case.",
+ "$ref": "../../type/basic.json#/definitions/testCaseEntityName"
+ },
+ "description": {
+ "description": "Description of the testcase.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this test.",
+ "type": "string"
+ },
+ "testDefinition": {
+ "description": "Fully qualified name of the test definition.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "entityLink": {
+ "$ref": "../../type/basic.json#/definitions/entityLink"
+ },
+ "parameterValues": {
+ "type": "array",
+ "items": {
+ "$ref": "../../tests/testCase.json#/definitions/testCaseParameterValue"
+ }
+ },
+ "owners": {
+ "description": "Owners of this test",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "reviewers": {
+ "description": "Reviewers of this test",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "computePassedFailedRowCount": {
+ "description": "Compute the passed and failed row count for the test case.",
+ "type": "boolean",
+ "default": false
+ },
+ "useDynamicAssertion": {
+ "description": "If the test definition supports it, use dynamic assertion to evaluate the test case.",
+ "type": "boolean",
+ "default": false
+ },
+ "tags": {
+ "description": "Tags for this test case. This is an inherited field from the parent entity and is not set directly on the test case.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": []
+ },
+ "dimensionColumns": {
+ "description": "List of columns to group test results by dimensions. When specified, the test will be executed both overall and grouped by these columns to provide fine-grained data quality insights.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "default": []
+ },
+ "topDimensions": {
+ "description": "Number of top dimension values to show before grouping the rest as Others. Controls the cardinality of dimensional test results. Defaults to 5 when not specified.",
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 50,
+ "default": 5
+ }
+ },
+ "required": ["name", "testDefinition", "entityLink"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/tests/createTestCaseResolutionStatus.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/tests/createTestCaseResolutionStatus.json
new file mode 100644
index 000000000000..f8444fb4668c
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/tests/createTestCaseResolutionStatus.json
@@ -0,0 +1,32 @@
+{
+ "$id": "https://open-metadata.org/schema/tests/createTestCaseResolutionStatus.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateTestCaseResolutionStatus",
+ "description": "Schema to create a new test case result resolution status.",
+ "javaType": "org.openmetadata.schema.api.tests.CreateTestCaseResolutionStatus",
+ "type": "object",
+ "properties": {
+ "testCaseResolutionStatusType": {
+ "description": "Status of Test Case.",
+ "$ref": "../../tests/testCaseResolutionStatus.json#/definitions/testCaseResolutionStatusTypes"
+ },
+ "testCaseResolutionStatusDetails": {
+ "description": "Details of the test case failure status.",
+ "oneOf": [
+ {"$ref": "../../tests/resolved.json"},
+ {"$ref": "../../tests/assigned.json"}
+ ],
+ "default": null
+ },
+ "testCaseReference": {
+ "description": "Test case reference FQN",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "severity": {
+ "description": "Severity failure for the test associated with the resolution.",
+ "$ref": "../../tests/testCaseResolutionStatus.json#/definitions/severities"
+ }
+ },
+ "required": ["testCaseResolutionStatusType", "testCaseReference"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/tests/createTestCaseResult.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/tests/createTestCaseResult.json
new file mode 100644
index 000000000000..e4643ca9f1fe
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/tests/createTestCaseResult.json
@@ -0,0 +1,75 @@
+{
+ "$id": "https://open-metadata.org/schema/tests/createTestCaseResult.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateTestCaseResult",
+ "description": "Schema to create a new test case result .",
+ "javaType": "org.openmetadata.schema.api.tests.CreateTestCaseResult",
+ "type": "object",
+ "properties": {
+ "fqn": {
+ "description": "Fqn of the test case against which this test case result is added.",
+ "type": "string"
+ },
+ "timestamp": {
+ "description": "Data one which test case result is taken.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "testCaseStatus": {
+ "description": "Status of Test Case run.",
+ "$ref": "../../tests/basic.json#/definitions/testCaseStatus"
+ },
+ "result": {
+ "description": "Details of test case results.",
+ "type": "string"
+ },
+ "sampleData": {
+ "description": "sample data to capture rows/columns that didn't match the expressed testcase.",
+ "type": "string"
+ },
+ "testResultValue": {
+ "type": "array",
+ "items": {
+ "$ref": "../../tests/basic.json#/definitions/testResultValue"
+ }
+ },
+ "passedRows": {
+ "description": "Number of rows that passed.",
+ "type": "integer",
+ "existingJavaType": "java.lang.Long"
+ },
+ "failedRows": {
+ "description": "Number of rows that failed.",
+ "type": "integer",
+ "existingJavaType": "java.lang.Long"
+ },
+ "passedRowsPercentage": {
+ "description": "Percentage of rows that passed.",
+ "type": "number"
+ },
+ "failedRowsPercentage": {
+ "description": "Percentage of rows that failed.",
+ "type": "number"
+ },
+ "incidentId": {
+ "description": "Incident State ID associated with this result. This association happens when the result is created, and will stay there even when the incident is resolved.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "maxBound": {
+ "description": "Upper bound limit for the test case result as defined in the test definition.",
+ "type": "number"
+ },
+ "minBound": {
+ "description": "Lower bound limit for the test case result as defined in the test definition.",
+ "type": "number"
+ },
+ "dimensionResults": {
+ "description": "List of dimensional test results. Only populated when the test case has dimensionColumns specified.",
+ "type": "array",
+ "items": {
+ "$ref": "../../tests/basic.json#/definitions/testCaseDimensionResult"
+ }
+ }
+ },
+ "required": ["timestamp", "testCaseStatus", "testResultValue"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/tests/createTestDefinition.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/tests/createTestDefinition.json
new file mode 100644
index 000000000000..13891c45e0e3
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/tests/createTestDefinition.json
@@ -0,0 +1,79 @@
+{
+ "$id": "https://open-metadata.org/schema/api/data/createTestDefinition.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateTestDefinitionRequest",
+ "description": "Schema corresponding to a Test Definition",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.tests.CreateTestDefinition",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+ "properties": {
+ "name": {
+ "description": "Name that identifies this test case.",
+ "$ref": "../../type/basic.json#/definitions/testCaseEntityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this test case.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the testcase.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "owners": {
+ "description": "Owners of this TestCase definition.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "entityType": {
+ "$ref": "../../tests/testDefinition.json#/definitions/entityType"
+ },
+ "testPlatforms": {
+ "type": "array",
+ "items": {
+ "$ref": "../../tests/testDefinition.json#/definitions/testPlatform"
+ }
+ },
+ "supportedDataTypes": {
+ "type": "array",
+ "items": {
+ "$ref": "../../entity/data/table.json#/definitions/dataType"
+ }
+ },
+ "provider" : {
+ "$ref": "../../type/basic.json#/definitions/providerType"
+ },
+ "parameterDefinition": {
+ "type": "array",
+ "items": {
+ "$ref": "../../tests/testDefinition.json#/definitions/testCaseParameterDefinition"
+ }
+ },
+ "dataQualityDimension": {
+ "$ref": "../../tests/testDefinition.json#/definitions/dataQualityDimensions"
+ },
+ "supportedServices": {
+ "description": "List of services that this test definition supports. When empty, it implies all services are supported.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "default": []
+ },
+ "domains" : {
+ "description": "Fully qualified names of the domains the Test Definition belongs to.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "sqlExpression": {
+ "description": "SQL expression template for custom SQL-based test definitions. Supports substitution variables: {table} and {column} for runtime entity references, and {{paramName}} for user-defined parameters.",
+ "$ref": "../../type/basic.json#/definitions/sqlQuery"
+ },
+ "validatorClass": {
+ "description": "Class name of the validator to use for this test definition. If not provided for custom SQL-based tests, defaults to 'ruleLibrarySqlExpressionValidator'.",
+ "type": "string"
+ }
+ },
+ "required": ["name", "entityType", "testPlatforms"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/tests/createTestSuite.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/tests/createTestSuite.json
new file mode 100644
index 000000000000..31986c67883b
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/tests/createTestSuite.json
@@ -0,0 +1,74 @@
+{
+ "$id": "https://open-metadata.org/schema/api/data/createTestSuite.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateTestSuiteRequest",
+ "description": "Schema corresponding to a Test Suite",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.tests.CreateTestSuite",
+ "javaInterfaces": [
+ "org.openmetadata.schema.CreateEntity"
+ ],
+ "definitions": {
+ "testSuiteEntityName": {
+ "description": "Name of a test suite entity. For executable testSuite, this should match the entity FQN in the platform.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ },
+ "properties": {
+ "name": {
+ "description": "Name that identifies this test suite.",
+ "$ref": "#/definitions/testSuiteEntityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this test suite.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the test suite.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "owners": {
+ "description": "Owners of this test suite",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "basicEntityReference": {
+ "description": "Entity reference the test suite needs to execute the test against. Only applicable if the test suite is basic.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "executableEntityReference": {
+ "description": "DEPRECATED in 1.6.2: use 'basicEntityReference'",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName",
+ "deprecated": true
+ },
+ "dataContract": {
+ "description": "Reference to the data contract that this test suite is associated with.",
+ "$ref": "../../type/entityReference.json",
+ "default": null
+ },
+ "domains": {
+ "description": "Fully qualified names of the domains the Test Suite belongs to.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "tags": {
+ "description": "Tags for this TestSuite",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "reviewers": {
+ "description": "Reviewers of this test suite",
+ "$ref": "../../type/entityReferenceList.json"
+ }
+ },
+ "required": [
+ "name"
+ ],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/tests/moveGlossaryTermRequest.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/tests/moveGlossaryTermRequest.json
new file mode 100644
index 000000000000..68656b339e19
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/tests/moveGlossaryTermRequest.json
@@ -0,0 +1,15 @@
+{
+ "$id": "https://open-metadata.org/schema/api/data/moveGlossaryTermRequest.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "MoveGlossaryTermRequest",
+ "description": "Request schema for moving a glossary term to a new parent or glossary.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.data.MoveGlossaryTermRequest",
+ "properties": {
+ "parent": {
+ "$ref": "../../type/entityReference.json",
+ "description": "The new parent for the glossary term. Can be a glossary to move to the glossary root or a glossary term to move under the term."
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/validateGlossaryTagsRequest.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/validateGlossaryTagsRequest.json
new file mode 100644
index 000000000000..f59a0add2248
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/validateGlossaryTagsRequest.json
@@ -0,0 +1,23 @@
+{
+ "$id": "https://open-metadata.org/schema/api/validateGlossaryTagsRequest.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "ValidateGlossaryTagsRequest",
+ "description": "Request schema for validating glossary tags addition",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.ValidateGlossaryTagsRequest",
+ "properties": {
+ "dryRun": {
+ "description": "If true, the request will be validated but no changes will be made",
+ "type": "boolean",
+ "default": true
+ },
+ "glossaryTags": {
+ "description": "Glossary Tags to be validated",
+ "type": "array",
+ "items": {
+ "$ref": "../type/tagLabel.json"
+ }
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/api/voteRequest.json b/openmetadata-spec/bin/src/main/resources/json/schema/api/voteRequest.json
new file mode 100644
index 000000000000..e5c6b4ae6fd4
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/api/voteRequest.json
@@ -0,0 +1,16 @@
+{
+ "$id": "https://open-metadata.org/schema/api/voteRequest.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Query Vote",
+ "description": "This schema defines Services Count. This contains aggregated services count.",
+ "type": "string",
+ "javaType": "org.openmetadata.schema.api.VoteRequest",
+ "properties": {
+ "updatedVoteType": {
+ "description": "The updated vote type",
+ "$ref": "../type/votes.json#/definitions/voteType"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["upVoteFactor", "downVoteFactor"]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/auth/basicAuth.json b/openmetadata-spec/bin/src/main/resources/json/schema/auth/basicAuth.json
new file mode 100644
index 000000000000..3b95a1c04902
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/auth/basicAuth.json
@@ -0,0 +1,16 @@
+{
+ "$id": "https://open-metadata.org/schema/api/auth/basicAuth.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "BasicAuthMechanism",
+ "description": "User basic Auth Mechanism.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.auth.BasicAuthMechanism",
+ "properties": {
+ "password": {
+ "description": "User Password",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["password"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/auth/basicLoginRequest.json b/openmetadata-spec/bin/src/main/resources/json/schema/auth/basicLoginRequest.json
new file mode 100644
index 000000000000..cc511e7a6c53
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/auth/basicLoginRequest.json
@@ -0,0 +1,20 @@
+{
+ "$id": "https://open-metadata.org/schema/api/auth/basicLoginRequest.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "LoginRequest",
+ "description": "Login Request",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.auth.BasicLoginRequest",
+ "properties": {
+ "email": {
+ "description": "Email address of the user.",
+ "$ref": "../type/basic.json#/definitions/email"
+ },
+ "password": {
+ "description": "Name of the column in a table.",
+ "type": "string"
+ }
+ },
+ "required": ["email", "password"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/auth/changePasswordRequest.json b/openmetadata-spec/bin/src/main/resources/json/schema/auth/changePasswordRequest.json
new file mode 100644
index 000000000000..577ec2005682
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/auth/changePasswordRequest.json
@@ -0,0 +1,34 @@
+{
+ "$id": "https://open-metadata.org/schema/api/auth/changePasswordRequest.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "ChangePasswordRequest",
+ "description": "Change Password Request",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.auth.ChangePasswordRequest",
+ "properties": {
+ "username" : {
+ "description": "Name of the user",
+ "type": "string"
+ },
+ "oldPassword": {
+ "description": "Name that identifies this Custom Metric.",
+ "type": "string"
+ },
+ "newPassword": {
+ "description": "Name of the column in a table.",
+ "type": "string"
+ },
+ "confirmPassword": {
+ "description": "Name of the column in a table.",
+ "type": "string"
+ },
+ "requestType": {
+ "description": "Name of the column in a table.",
+ "type": "string",
+ "enum": ["SELF", "USER"],
+ "default": "SELF"
+ }
+ },
+ "required": ["newPassword", "confirmPassword"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/auth/createPersonalToken.json b/openmetadata-spec/bin/src/main/resources/json/schema/auth/createPersonalToken.json
new file mode 100644
index 000000000000..80eadcb9b2b7
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/auth/createPersonalToken.json
@@ -0,0 +1,19 @@
+{
+ "$id": "https://open-metadata.org/schema/api/auth/createPersonalToken.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreatePersonalToken",
+ "description": "Create Personal Access Token Request",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.auth.CreatePersonalToken",
+ "properties": {
+ "tokenName": {
+ "description": "Name of the Personal Access Token",
+ "type": "string"
+ },
+ "JWTTokenExpiry": {
+ "$ref": "jwtAuth.json#/definitions/JWTTokenExpiry"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["tokenName", "JWTTokenExpiry"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/auth/emailRequest.json b/openmetadata-spec/bin/src/main/resources/json/schema/auth/emailRequest.json
new file mode 100644
index 000000000000..cbd511576273
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/auth/emailRequest.json
@@ -0,0 +1,18 @@
+{
+ "$id": "https://open-metadata.org/schema/auth/emailRequest.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "EmailRequest",
+ "description": "This schema defines Email Request containing only Email",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.auth.EmailRequest",
+ "properties": {
+ "email": {
+ "description": "Login Email",
+ "$ref": "../type/basic.json#/definitions/email"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "email"
+ ]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/auth/emailVerificationToken.json b/openmetadata-spec/bin/src/main/resources/json/schema/auth/emailVerificationToken.json
new file mode 100644
index 000000000000..9f85d3fd6c5f
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/auth/emailVerificationToken.json
@@ -0,0 +1,49 @@
+{
+ "$id": "https://open-metadata.org/schema/auth/emailVerificationToken.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "EmailVerificationToken",
+ "description": "This schema defines Email Verification Token Schema.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.auth.EmailVerificationToken",
+ "javaInterfaces": ["org.openmetadata.schema.TokenInterface"],
+ "definitions": {
+ "tokenType": {
+ "javaType": "org.openmetadata.schema.auth.TokenType",
+ "description": "Different Type of User token",
+ "type": "string",
+ "enum": [
+ "REFRESH_TOKEN",
+ "EMAIL_VERIFICATION",
+ "PASSWORD_RESET",
+ "PERSONAL_ACCESS_TOKEN",
+ "SUPPORT_TOKEN"
+ ]
+ }
+ },
+ "properties": {
+ "token": {
+ "description": "Unique Refresh Token for user",
+ "$ref": "../type/basic.json#/definitions/uuid"
+ },
+ "userId": {
+ "description": " User this email Verification token is given to",
+ "$ref": "../type/basic.json#/definitions/uuid"
+ },
+ "tokenType": {
+ "description": "Token Type",
+ "$ref": "#/definitions/tokenType",
+ "default": "EMAIL_VERIFICATION"
+ },
+ "tokenStatus": {
+ "description": "Refresh Count",
+ "type": "string",
+ "enum": ["STATUS_PENDING", "STATUS_CONFIRMED"]
+ },
+ "expiryDate": {
+ "description": "Expiry Date-Time of the token",
+ "$ref": "../type/basic.json#/definitions/timestamp"
+ }
+ },
+ "required": ["token", "userId", "tokenType", "tokenStatus", "expiryDate"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/auth/generateToken.json b/openmetadata-spec/bin/src/main/resources/json/schema/auth/generateToken.json
new file mode 100644
index 000000000000..8fdbbc41fb4e
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/auth/generateToken.json
@@ -0,0 +1,19 @@
+{
+ "$id": "https://open-metadata.org/schema/api/auth/generateToken.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Generate JWT Token Request",
+ "description": "Generate JWT Token Request.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.auth.GenerateTokenRequest",
+ "properties": {
+ "id": {
+ "description": "User ID for which to generate the token.",
+ "$ref": "../type/basic.json#/definitions/uuid"
+ },
+ "JWTTokenExpiry": {
+ "$ref": "jwtAuth.json#/definitions/JWTTokenExpiry"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["JWTTokenExpiry"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/auth/impersonationRequest.json b/openmetadata-spec/bin/src/main/resources/json/schema/auth/impersonationRequest.json
new file mode 100644
index 000000000000..35c2ad0e412c
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/auth/impersonationRequest.json
@@ -0,0 +1,23 @@
+{
+ "$id": "https://open-metadata.org/schema/auth/impersonationRequest.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "ImpersonationRequest",
+ "description": "Request to generate an impersonation token for a bot to act on behalf of a user",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.auth.ImpersonationRequest",
+ "properties": {
+ "targetUser": {
+ "description": "Username of the user to impersonate",
+ "type": "string"
+ },
+ "expirySeconds": {
+ "description": "Token expiry in seconds (default 3600, max 86400)",
+ "type": "integer",
+ "minimum": 60,
+ "maximum": 86400,
+ "default": 3600
+ }
+ },
+ "required": ["targetUser"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/auth/jwtAuth.json b/openmetadata-spec/bin/src/main/resources/json/schema/auth/jwtAuth.json
new file mode 100644
index 000000000000..b0f6a4b9347f
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/auth/jwtAuth.json
@@ -0,0 +1,57 @@
+{
+ "$id": "https://open-metadata.org/schema/api/auth/jwtAuth.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "JWTAuthMechanism",
+ "description": "User/Bot JWTAuthMechanism.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.auth.JWTAuthMechanism",
+ "definitions": {
+ "JWTTokenExpiry": {
+ "javaType": "org.openmetadata.schema.auth.JWTTokenExpiry",
+ "description": "JWT Auth Token expiration in days",
+ "type": "string",
+ "enum": ["OneHour", "1", "7", "30", "60", "90", "Unlimited"],
+ "javaEnums": [
+ {
+ "name": "OneHour"
+ },
+ {
+ "name": "One"
+ },
+ {
+ "name": "Seven"
+ },
+ {
+ "name": "Thirty"
+ },
+ {
+ "name": "Sixty"
+ },
+ {
+ "name": "Ninety"
+ },
+ {
+ "name": "Unlimited"
+ }
+ ]
+ }
+ },
+ "properties": {
+ "JWTToken": {
+ "title": "JWT Token",
+ "description": "JWT Auth Token.",
+ "type": "string",
+ "format": "password",
+ "expose": true
+ },
+ "JWTTokenExpiry": {
+ "$ref": "#/definitions/JWTTokenExpiry"
+ },
+ "JWTTokenExpiresAt": {
+ "description": "JWT Auth Token expiration time.",
+ "$ref": "../type/basic.json#/definitions/timestamp"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["JWTTokenExpiry"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/auth/loginRequest.json b/openmetadata-spec/bin/src/main/resources/json/schema/auth/loginRequest.json
new file mode 100644
index 000000000000..e42dd586279c
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/auth/loginRequest.json
@@ -0,0 +1,23 @@
+{
+ "$id": "https://open-metadata.org/schema/auth/loginRequest.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "LoginRequest",
+ "description": "This schema defines Email Verification Token Schema.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.auth.LoginRequest",
+ "properties": {
+ "email": {
+ "description": "Login Email",
+ "type": "string"
+ },
+ "password": {
+ "description": "Login Password in base64 format",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "email",
+ "password"
+ ]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/auth/logoutRequest.json b/openmetadata-spec/bin/src/main/resources/json/schema/auth/logoutRequest.json
new file mode 100644
index 000000000000..490940a4236f
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/auth/logoutRequest.json
@@ -0,0 +1,30 @@
+{
+ "$id": "https://open-metadata.org/schema/api/auth/logoutRequest.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "LogoutRequest",
+ "description": "This schema defines Logout Request.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.auth.LogoutRequest",
+ "properties": {
+ "username": {
+ "description": "Logout Username",
+ "type": "string"
+ },
+ "token": {
+ "description": "Token To be Expired",
+ "type": "string"
+ },
+ "logoutTime": {
+ "description": "Logout Time",
+ "$ref": "../type/basic.json#/definitions/dateTime"
+ },
+ "refreshToken": {
+ "description": "Refresh Token",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "token"
+ ]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/auth/passwordResetRequest.json b/openmetadata-spec/bin/src/main/resources/json/schema/auth/passwordResetRequest.json
new file mode 100644
index 000000000000..1e8a7a0f0314
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/auth/passwordResetRequest.json
@@ -0,0 +1,34 @@
+{
+ "$id": "https://open-metadata.org/schema/auth/passwordResetRequest.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "PasswordResetRequest",
+ "description": "This schema defines Email Verification Token Schema.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.auth.PasswordResetRequest",
+ "properties": {
+ "username": {
+ "description": "UserName",
+ "type": "string"
+ },
+ "password": {
+ "description": "Password",
+ "type": "string",
+ "minLength": 8,
+ "maxLength": 56
+ },
+ "confirmPassword": {
+ "description": "Confirm Password",
+ "type": "string",
+ "minLength": 8,
+ "maxLength": 56
+ },
+ "token": {
+ "description": "Token",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "username"
+ ]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/auth/passwordResetToken.json b/openmetadata-spec/bin/src/main/resources/json/schema/auth/passwordResetToken.json
new file mode 100644
index 000000000000..6cbe7932dfd2
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/auth/passwordResetToken.json
@@ -0,0 +1,44 @@
+{
+ "$id": "https://open-metadata.org/schema/auth/passwordResetToken.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "PasswordResetToken",
+ "description": "This schema defines Password Verification Token Schema.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.auth.PasswordResetToken",
+ "javaInterfaces": ["org.openmetadata.schema.TokenInterface"],
+ "properties": {
+ "token": {
+ "description": "Unique Refresh Token for user",
+ "$ref": "../type/basic.json#/definitions/uuid"
+ },
+ "userId": {
+ "description": "User Id of the User this refresh token is given to",
+ "$ref": "../type/basic.json#/definitions/uuid"
+ },
+ "tokenType": {
+ "description": "Token Type",
+ "$ref": "./emailVerificationToken.json#/definitions/tokenType",
+ "default": "PASSWORD_RESET"
+ },
+ "expiryDate": {
+ "description": "Expiry Date-Time of the token",
+ "$ref": "../type/basic.json#/definitions/timestamp"
+ },
+ "isActive": {
+ "description": "Expiry Date-Time of the token",
+ "type": "boolean",
+ "default": true
+ },
+ "isClaimed": {
+ "description": "Expiry Date-Time of the token",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "required": [
+ "token",
+ "userId",
+ "expiryDate"
+ ],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/auth/personalAccessToken.json b/openmetadata-spec/bin/src/main/resources/json/schema/auth/personalAccessToken.json
new file mode 100644
index 000000000000..1303115dc05f
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/auth/personalAccessToken.json
@@ -0,0 +1,42 @@
+{
+ "$id": "https://open-metadata.org/schema/auth/personalAccessToken.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "PersonalAccessToken",
+ "description": "This schema defines Personal Access Token Schema.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.auth.PersonalAccessToken",
+ "javaInterfaces": ["org.openmetadata.schema.TokenInterface"],
+ "properties": {
+ "token": {
+ "description": "Unique Refresh Token for user",
+ "$ref": "../type/basic.json#/definitions/uuid"
+ },
+ "tokenName": {
+ "description": "Name of the token",
+ "type": "string"
+ },
+ "userId": {
+ "description": "User Id of the User this refresh token is given to",
+ "$ref": "../type/basic.json#/definitions/uuid"
+ },
+ "tokenType": {
+ "description": "Token Type",
+ "$ref": "./emailVerificationToken.json#/definitions/tokenType",
+ "default": "PERSONAL_ACCESS"
+ },
+ "expiryDate": {
+ "description": "Expiry Date-Time of the token",
+ "$ref": "../type/basic.json#/definitions/timestamp"
+ },
+ "jwtToken": {
+ "description": "JWT Auth Token.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "token",
+ "userId",
+ "expiryDate"
+ ],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/auth/refreshToken.json b/openmetadata-spec/bin/src/main/resources/json/schema/auth/refreshToken.json
new file mode 100644
index 000000000000..470cb370476e
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/auth/refreshToken.json
@@ -0,0 +1,42 @@
+{
+ "$id": "https://open-metadata.org/schema/auth/refreshToken.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "RefreshToken",
+ "description": "This schema defines Refresh Token Schema.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.auth.RefreshToken",
+ "javaInterfaces": ["org.openmetadata.schema.TokenInterface"],
+ "properties": {
+ "token": {
+ "description": "Unique Refresh Token for user",
+ "$ref": "../type/basic.json#/definitions/uuid"
+ },
+ "userId": {
+ "description": "User Id of the User this refresh token is given to",
+ "$ref": "../type/basic.json#/definitions/uuid"
+ },
+ "tokenType": {
+ "description": "Token Type",
+ "$ref": "./emailVerificationToken.json#/definitions/tokenType",
+ "default": "REFRESH_TOKEN"
+ },
+ "refreshCount": {
+ "description": "Refresh Count",
+ "type": "integer"
+ },
+ "maxRefreshCount": {
+ "description": "Refresh Count",
+ "type": "integer"
+ },
+ "expiryDate": {
+ "description": "Expiry Date-Time of the token",
+ "$ref": "../type/basic.json#/definitions/timestamp"
+ }
+ },
+ "required": [
+ "token",
+ "userId",
+ "expiryDate"
+ ],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/auth/registrationRequest.json b/openmetadata-spec/bin/src/main/resources/json/schema/auth/registrationRequest.json
new file mode 100644
index 000000000000..a64d33e44518
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/auth/registrationRequest.json
@@ -0,0 +1,35 @@
+{
+ "$id": "https://open-metadata.org/schema/auth/registrationRequest.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "RegistrationRequest",
+ "description": "This schema defines the SMTP Settings for sending Email",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.auth.RegistrationRequest",
+ "properties": {
+ "firstName": {
+ "description": "First Name",
+ "type": "string"
+ },
+ "lastName": {
+ "description": "Last Name",
+ "type": "string"
+ },
+ "email": {
+ "description": "Email address of the user.",
+ "$ref": "../type/basic.json#/definitions/email"
+ },
+ "password": {
+ "description": "Login Password",
+ "type": "string",
+ "minLength": 8,
+ "maxLength": 56
+ }
+ },
+ "required": [
+ "firstName",
+ "lastName",
+ "password",
+ "email"
+ ],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/auth/revokePersonalToken.json b/openmetadata-spec/bin/src/main/resources/json/schema/auth/revokePersonalToken.json
new file mode 100644
index 000000000000..55aded39af3d
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/auth/revokePersonalToken.json
@@ -0,0 +1,18 @@
+{
+ "$id": "https://open-metadata.org/schema/api/auth/revokePersonalToken.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "RevokePersonalToken",
+ "description": "Generate JWT Token Request.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.auth.RevokePersonalTokenRequest",
+ "properties": {
+ "tokenIds": {
+ "description": "Ids of Personal Access Tokens to remove.",
+ "type": "array",
+ "items":{
+ "$ref": "../type/basic.json#/definitions/uuid"
+ }
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/auth/revokeToken.json b/openmetadata-spec/bin/src/main/resources/json/schema/auth/revokeToken.json
new file mode 100644
index 000000000000..2e85348e6480
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/auth/revokeToken.json
@@ -0,0 +1,15 @@
+{
+ "$id": "https://open-metadata.org/schema/api/auth/revokeToken.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Generate JWT Token Request",
+ "description": "Generate JWT Token Request.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.auth.RevokeTokenRequest",
+ "properties": {
+ "id": {
+ "$ref": "../type/basic.json#/definitions/uuid"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["id"]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/auth/serviceTokenEnum.json b/openmetadata-spec/bin/src/main/resources/json/schema/auth/serviceTokenEnum.json
new file mode 100644
index 000000000000..4ac1bbe831dc
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/auth/serviceTokenEnum.json
@@ -0,0 +1,13 @@
+{
+ "$id": "https://open-metadata.org/schema/auth/serviceTokenEnum.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "ServiceTokenType",
+ "description": "Different Type of OpenMetadata Service tokens",
+ "type": "string",
+ "javaType": "org.openmetadata.schema.auth.ServiceTokenType",
+ "enum": [
+ "BOT",
+ "OM_USER",
+ "PERSONAL_ACCESS"
+ ]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/auth/ssoAuth.json b/openmetadata-spec/bin/src/main/resources/json/schema/auth/ssoAuth.json
new file mode 100644
index 000000000000..812f64c212a3
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/auth/ssoAuth.json
@@ -0,0 +1,45 @@
+{
+ "$id": "https://open-metadata.org/schema/api/auth/ssoAuth.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SSOAuthMechanism",
+ "description": "User/Bot SSOAuthN.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.auth.SSOAuthMechanism",
+ "properties": {
+ "ssoServiceType": {
+ "description": "Type of database service such as Amundsen, Atlas...",
+ "type": "string",
+ "enum": ["google", "okta", "auth0", "custom-oidc", "azure"]
+ },
+ "authConfig": {
+ "description": "The authentication configuration used by the SSO",
+ "oneOf": [
+ {
+ "description": "Google SSO Configuration",
+ "$ref": "../security/client/googleSSOClientConfig.json"
+ },
+ {
+ "description": "Okta SSO Configuration",
+ "$ref": "../security/client/oktaSSOClientConfig.json"
+ },
+ {
+ "description": "Auth0 SSO Configuration",
+ "$ref": "../security/client/auth0SSOClientConfig.json"
+ },
+ {
+ "description": "Azure SSO Configuration",
+ "$ref": "../security/client/azureSSOClientConfig.json"
+ },
+ {
+ "description": "Custom OIDC SSO Configuration",
+ "$ref": "../security/client/customOidcSSOClientConfig.json"
+ },
+ {
+ "description": "SAML SSO Configuration",
+ "$ref": "../security/client/samlSSOClientConfig.json"
+ }
+ ]
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/auth/supportToken.json b/openmetadata-spec/bin/src/main/resources/json/schema/auth/supportToken.json
new file mode 100644
index 000000000000..bd7b6f569e33
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/auth/supportToken.json
@@ -0,0 +1,42 @@
+{
+ "$id": "https://open-metadata.org/schema/auth/supportToken.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SupportToken",
+ "description": "This schema defines an access token used for support purposes. It is used only in Collate.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.auth.collate.SupportToken",
+ "javaInterfaces": ["org.openmetadata.schema.TokenInterface"],
+ "properties": {
+ "token": {
+ "description": "Unique Refresh Token for user",
+ "$ref": "../type/basic.json#/definitions/uuid"
+ },
+ "tokenName": {
+ "description": "Name of the token",
+ "type": "string"
+ },
+ "userId": {
+ "description": "User Id of the User this refresh token is given to",
+ "$ref": "../type/basic.json#/definitions/uuid"
+ },
+ "tokenType": {
+ "description": "Token Type",
+ "$ref": "./emailVerificationToken.json#/definitions/tokenType",
+ "default": "SUPPORT_TOKEN"
+ },
+ "expiryDate": {
+ "description": "Expiry Date-Time of the token",
+ "$ref": "../type/basic.json#/definitions/timestamp"
+ },
+ "jwtToken": {
+ "description": "JWT Auth Token.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "token",
+ "userId",
+ "expiryDate"
+ ],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/auth/tokenRefreshRequest.json b/openmetadata-spec/bin/src/main/resources/json/schema/auth/tokenRefreshRequest.json
new file mode 100644
index 000000000000..04a6b4547825
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/auth/tokenRefreshRequest.json
@@ -0,0 +1,18 @@
+{
+ "$id": "https://open-metadata.org/schema/auth/tokenRefreshRequest.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "TokenRefreshRequest",
+ "description": "This schema defines the Token Refresh Request",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.auth.TokenRefreshRequest",
+ "properties": {
+ "refreshToken": {
+ "description": "Refresh Token that was shared earlier",
+ "type": "string"
+ }
+ },
+ "required": [
+ "refreshToken"
+ ],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/configuration/adminOpsConfiguration.json b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/adminOpsConfiguration.json
new file mode 100644
index 000000000000..1f64e8711790
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/adminOpsConfiguration.json
@@ -0,0 +1,56 @@
+{
+ "$id": "https://open-metadata.org/schema/configuration/adminOpsConfiguration.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AdminOpsConfiguration",
+ "description": "Configuration for the Admin Operations API that allows SaaS Hypervisor to trigger administrative operations.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.configuration.AdminOpsConfiguration",
+ "definitions": {
+ "adminOpsMtlsConfiguration": {
+ "title": "Admin Ops mTLS Configuration",
+ "description": "Mutual TLS authentication configuration for the Admin Ops API.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.configuration.AdminOpsMtlsConfiguration",
+ "properties": {
+ "enabled": {
+ "description": "Enable mTLS client certificate authentication.",
+ "type": "boolean",
+ "default": false
+ },
+ "requireClientCert": {
+ "description": "Require client certificate when mTLS is enabled.",
+ "type": "boolean",
+ "default": true
+ },
+ "allowedCNs": {
+ "description": "List of allowed certificate Common Names.",
+ "type": "array",
+ "items": { "type": "string" }
+ },
+ "allowedSANs": {
+ "description": "List of allowed Subject Alternative Names.",
+ "type": "array",
+ "items": { "type": "string" }
+ },
+ "allowedIssuers": {
+ "description": "List of allowed certificate issuer DNs.",
+ "type": "array",
+ "items": { "type": "string" }
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "enabled": {
+ "title": "Enabled",
+ "description": "Whether the Admin Ops API is enabled.",
+ "type": "boolean",
+ "default": false
+ },
+ "mtls": {
+ "$ref": "#/definitions/adminOpsMtlsConfiguration"
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/configuration/aiPlatformConfiguration.json b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/aiPlatformConfiguration.json
new file mode 100644
index 000000000000..0f9b95df4fa6
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/aiPlatformConfiguration.json
@@ -0,0 +1,90 @@
+{
+ "$id": "https://open-metadata.org/schema/configuration/aiPlatformConfiguration.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AiPlatformConfiguration",
+ "description": "This schema defines the JWT Configuration.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.configuration.AiPlatformConfiguration",
+ "definitions": {
+ "grpcConfiguration": {
+ "javaType": "org.openmetadata.schema.configuration.GrpcConfiguration",
+ "type": "object",
+ "properties": {
+ "port": {
+ "description": "Host for the gRPC server",
+ "type": "integer"
+ },
+ "maxInboundMessageSize": {
+ "description": "Port for the gRPC server",
+ "type": "integer"
+ },
+ "keepAliveTime": {
+ "description": "Keep alive time for the gRPC server",
+ "type": "integer"
+ },
+ "keepAliveTimeout": {
+ "description": "Keep alive timeout for the gRPC server",
+ "type": "integer"
+ }
+ },
+ "required": ["port"]
+ },
+ "contextMemoryConfiguration": {
+ "description": "Tuning for the Context Memory T0 (user preferences) block shipped to the AI Platform via the gRPC user_memory_context field.",
+ "javaType": "org.openmetadata.schema.configuration.ContextMemoryConfiguration",
+ "type": "object",
+ "properties": {
+ "tokenBudget": {
+ "description": "Maximum number of tokens worth of T0 user-preference memories to include. Memories are ranked by freshness + usage and filled in order until the budget or item cap is reached.",
+ "type": "integer",
+ "default": 500,
+ "minimum": 0
+ },
+ "maxItems": {
+ "description": "Maximum number of T0 user-preference memories to include regardless of token budget.",
+ "type": "integer",
+ "default": 5,
+ "minimum": 0
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "enabled": {
+ "description": "Indicates whether the AI Platform is enabled",
+ "type": "boolean",
+ "default": false
+ },
+ "host": {
+ "description": "Host for the AI Platform server",
+ "type": "string"
+ },
+ "port": {
+ "description": "Port for the AI Platform server",
+ "type": "integer"
+ },
+ "tlsCertPath": {
+ "description": "Path to the TLS certificate for the AI Platform server",
+ "type": "string"
+ },
+ "tlsKeyPath": {
+ "description": "Path to the TLS key for the AI Platform server",
+ "type": "string"
+ },
+ "trustedCertsPath": {
+ "description": "Path to the trusted CA certificate for the AI Platform server",
+ "type": "string"
+ },
+ "grpc": {
+ "description": "gRPC configuration for the AI Platform server",
+ "$ref": "#/definitions/grpcConfiguration"
+ },
+ "contextMemory": {
+ "description": "Context Memory tuning for the T0 user-preference block assembled by Collate and shipped to the AI Platform.",
+ "$ref": "#/definitions/contextMemoryConfiguration"
+ }
+ },
+ "required": ["host", "port", "grpc"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/configuration/appsPrivateConfiguration.json b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/appsPrivateConfiguration.json
new file mode 100644
index 000000000000..210033d1a5a7
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/appsPrivateConfiguration.json
@@ -0,0 +1,51 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/configuration/appsPrivateConfiguration.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AppsPrivateConfiguration",
+ "description": "This schema defines a list of configurations for the Application Framework",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.configuration.apps.AppsPrivateConfiguration",
+ "definitions": {
+ "appPrivateConfig": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.configuration.apps.AppPrivateConfig",
+ "title": "AppPrivateConfig",
+ "description": "Single Application Configuration Definition",
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "Application Name"
+ },
+ "enabled": {
+ "type": "boolean",
+ "description": "Flag to enable/disable the application. If the app is not enabled, it can't be installed.",
+ "default": true
+ },
+ "schedule": {
+ "$ref": "../entity/applications/app.json#/definitions/appSchedule"
+ },
+ "parameters": {
+ "javaType": "org.openmetadata.schema.api.configuration.apps.Parameters",
+ "description": "Parameters to initialize the Applications.",
+ "type": "object",
+ "additionalProperties": {
+ ".{1,}": { "type": "string" }
+ }
+ }
+ },
+ "required": ["name", "parameters"],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "appsPrivateConfiguration": {
+ "description": "List of configuration for apps",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/appPrivateConfig"
+ }
+ }
+ },
+ "required": ["appsPrivateConfiguration"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/configuration/assetCertificationSettings.json b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/assetCertificationSettings.json
new file mode 100644
index 000000000000..17e2cfba42b4
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/assetCertificationSettings.json
@@ -0,0 +1,20 @@
+{
+ "$id": "https://open-metadata.org/schema/configuration/assetCertificationSettings.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AssetCertificationSettings",
+ "description": "This schema defines the Asset Certification Settings.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.configuration.AssetCertificationSettings",
+ "properties": {
+ "allowedClassification": {
+ "type": "string",
+ "description": "Classification that can be used for certifications."
+ },
+ "validityPeriod": {
+ "type": "string",
+ "description": "ISO 8601 duration for the validity period."
+ }
+ },
+ "required": ["allowedClassification", "validityPeriod"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/configuration/authConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/authConfig.json
new file mode 100644
index 000000000000..a6fe418592f4
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/authConfig.json
@@ -0,0 +1,35 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/configuration/authConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AuthConfiguration",
+ "description": "This schema defines the Auth Config.",
+ "type": "object",
+ "javaType": "org.openmetadata.api.configuration.airflow.AuthConfiguration",
+ "properties": {
+ "google": {
+ "description": "Google SSO Configuration",
+ "$ref": "../security/client/googleSSOClientConfig.json"
+ },
+ "okta": {
+ "description": "Okta SSO Configuration",
+ "$ref": "../security/client/oktaSSOClientConfig.json"
+ },
+ "auth0": {
+ "description": "Auth0 SSO Configuration",
+ "$ref": "../security/client/auth0SSOClientConfig.json"
+ },
+ "azure": {
+ "description": "Azure SSO Configuration",
+ "$ref": "../security/client/azureSSOClientConfig.json"
+ },
+ "customOidc": {
+ "description": "Custom OIDC SSO Configuration",
+ "$ref": "../security/client/customOidcSSOClientConfig.json"
+ },
+ "openmetadata": {
+ "description": "OpenMetadata SSO Configuration",
+ "$ref": "../security/client/openMetadataJWTClientConfig.json"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/configuration/authenticationConfiguration.json b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/authenticationConfiguration.json
new file mode 100644
index 000000000000..b8f30d7dcbff
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/authenticationConfiguration.json
@@ -0,0 +1,195 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/configuration/authenticationConfiguration.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AuthenticationConfiguration",
+ "description": "This schema defines the Authentication Configuration.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.security.AuthenticationConfiguration",
+ "definitions": {
+ "responseType": {
+ "javaType": "org.openmetadata.schema.api.security.ResponseType",
+ "description": "Response Type",
+ "type": "string",
+ "enum": [
+ "id_token",
+ "code"
+ ],
+ "default": "id_token"
+ }
+ },
+ "properties": {
+ "clientType": {
+ "title": "Client Type",
+ "javaType": "org.openmetadata.schema.api.security.ClientType",
+ "description": "Client Type",
+ "type": "string",
+ "enum": ["public", "confidential"],
+ "enumNames": ["Public", "Confidential"],
+ "default": "public"
+ },
+ "provider": {
+ "title": "Provider",
+ "$ref": "../entity/services/connections/metadata/openMetadataConnection.json#/definitions/authProvider"
+ },
+ "responseType": {
+ "title": "Response Type",
+ "description": "This is used by auth provider provide response as either id_token or code.",
+ "$ref": "#/definitions/responseType"
+ },
+ "providerName": {
+ "title": "Provider Name",
+ "description": "Custom OIDC Authentication Provider Name",
+ "type": "string"
+ },
+ "publicKeyUrls": {
+ "title": "Public Key URLs",
+ "description": "List of Public Key URLs",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "tokenValidationAlgorithm": {
+ "title": "Token Validation Algorithm",
+ "description": "Token Validation Algorithm to use.",
+ "type": "string",
+ "enum": ["RS256", "RS384", "RS512", "ES256", "ES384", "ES512"],
+ "default": "RS256"
+ },
+ "authority": {
+ "title": "Authority",
+ "description": "Authentication Authority",
+ "type": "string"
+ },
+ "clientId": {
+ "title": "Client ID",
+ "description": "Client ID",
+ "type": "string"
+ },
+ "callbackUrl": {
+ "title": "Callback URL",
+ "description": "Callback URL",
+ "type": "string"
+ },
+ "jwtPrincipalClaims": {
+ "title": "Jwt Principal Claims",
+ "description": "Jwt Principal Claim",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "jwtPrincipalClaimsMapping": {
+ "title": "Jwt Principal Claims Mapping",
+ "description": "Jwt Principal Claim Mapping. Format: 'key:claim_name' where key must be 'username' or 'email'. Both username and email mappings are required.",
+ "type": "array",
+ "items": {
+ "type": "string",
+ "pattern": "^(username|email):[a-zA-Z0-9_-]+$"
+ }
+ },
+ "jwtTeamClaimMapping": {
+ "title": "Jwt Team Claim Mapping",
+ "description": "JWT claim name that contains team/department information. For SAML SSO, this is the attribute name (e.g., 'department') from the SAML assertion. For JWT, this is the claim name in the JWT token. The value from this claim will be used to automatically assign users to matching teams in OpenMetadata during login.",
+ "type": "string"
+ },
+ "enableSelfSignup": {
+ "title": "Enable Self Sign Up",
+ "description": "Enable Self Sign Up",
+ "type": "boolean",
+ "default": false
+ },
+ "ldapConfiguration": {
+ "title": "LDAP Configuration",
+ "description": "LDAP Configuration in case the Provider is LDAP",
+ "$ref": "./ldapConfiguration.json"
+ },
+ "samlConfiguration": {
+ "title": "Saml Configuration",
+ "description": "Saml Configuration that is applicable only when the provider is Saml",
+ "$ref": "../security/client/samlSSOClientConfig.json"
+ },
+ "oidcConfiguration": {
+ "title": "Oidc Configuration",
+ "description": "Oidc Configuration for Confidential Client Type",
+ "$ref": "../security/client/oidcClientConfig.json"
+ },
+ "forceSecureSessionCookie": {
+ "description": "Force secure flag on session cookies even when not using HTTPS directly. Enable this when running behind a proxy/load balancer that handles SSL termination.",
+ "type": "boolean",
+ "default": false
+ },
+ "enableAutoRedirect": {
+ "title": "Enable Auto Redirect",
+ "description": "Enable automatic redirect from the sign-in page to the configured SSO provider.",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "required": ["provider", "providerName", "jwtPrincipalClaims"],
+ "allOf": [
+ {
+ "if": {
+ "properties": {
+ "provider": { "const": "ldap" }
+ }
+ },
+ "then": {
+ "required": ["ldapConfiguration"]
+ }
+ },
+ {
+ "if": {
+ "properties": {
+ "provider": { "const": "saml" }
+ }
+ },
+ "then": {
+ "required": ["samlConfiguration"]
+ }
+ },
+ {
+ "if": {
+ "allOf": [
+ {
+ "properties": {
+ "provider": {
+ "enum": ["google", "azure", "okta", "auth0", "aws-cognito", "custom-oidc"]
+ }
+ }
+ },
+ {
+ "properties": {
+ "clientType": { "const": "public" }
+ }
+ }
+ ]
+ },
+ "then": {
+ "required": ["publicKeyUrls", "authority", "callbackUrl", "clientId"]
+ }
+ },
+ {
+ "if": {
+ "allOf": [
+ {
+ "properties": {
+ "provider": {
+ "enum": ["google", "azure", "okta", "auth0", "aws-cognito", "custom-oidc"]
+ }
+ }
+ },
+ {
+ "properties": {
+ "clientType": { "const": "confidential" }
+ }
+ }
+ ]
+ },
+ "then": {
+ "required": ["authority", "callbackUrl", "clientId", "oidcConfiguration"]
+ }
+ }
+ ],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/configuration/authorizerConfiguration.json b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/authorizerConfiguration.json
new file mode 100644
index 000000000000..60502f417a39
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/authorizerConfiguration.json
@@ -0,0 +1,94 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/configuration/authorizerConfiguration.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AuthorizerConfiguration",
+ "description": "This schema defines the Authorization Configuration.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.security.AuthorizerConfiguration",
+ "properties": {
+ "className": {
+ "title": "Class Name",
+ "description": "Class Name for authorizer.",
+ "type": "string"
+ },
+ "containerRequestFilter": {
+ "title": "Container Request Filter",
+ "description": "Filter for the request authorization.",
+ "type": "string"
+ },
+ "adminPrincipals": {
+ "title": "Admin Principals",
+ "description": "List of unique admin principals.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "uniqueItems": true
+ },
+ "botPrincipals": {
+ "title": "Bot Principals",
+ "description": "**@Deprecated** List of unique bot principals",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "uniqueItems": true,
+ "default": null
+ },
+ "testPrincipals": {
+ "title": "Test Principals",
+ "description": "List of unique principals used as test users. **NOTE THIS IS ONLY FOR TEST SETUP AND NOT TO BE USED IN PRODUCTION SETUP**",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "uniqueItems": true
+ },
+ "allowedEmailRegistrationDomains": {
+ "title": "Allowed Email Registration Domains",
+ "description": "List of unique email domains that are allowed to signup on the platforms",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "uniqueItems": true
+ },
+ "principalDomain": {
+ "title": "Principal Domain",
+ "description": "Principal Domain",
+ "type": "string"
+ },
+ "allowedDomains": {
+ "title": "Allowed Domains",
+ "description": "Allowed Domains to access",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "uniqueItems": true
+ },
+ "enforcePrincipalDomain": {
+ "title": "Enable Enforce Principal Domain",
+ "description": "Enable Enforce Principal Domain",
+ "type": "boolean"
+ },
+ "enableSecureSocketConnection": {
+ "title": "Enable Secure Socket Connection.",
+ "description": "Enable Secure Socket Connection.",
+ "type": "boolean"
+ },
+ "useRolesFromProvider": {
+ "title": "Use Roles from Provider",
+ "description": "Use Roles from Provider",
+ "type": "boolean",
+ "default": false
+ },
+ "defaultOAuthRole": {
+ "title": "Default OAuth Role",
+ "description": "Default role assigned to new OAuth users during self-signup. If not specified, users will be created without roles.",
+ "type": "string"
+ }
+ },
+ "required": ["className", "containerRequestFilter", "adminPrincipals", "principalDomain", "enforcePrincipalDomain", "enableSecureSocketConnection"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/configuration/changeEventConfiguration.json b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/changeEventConfiguration.json
new file mode 100644
index 000000000000..250937f2759c
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/changeEventConfiguration.json
@@ -0,0 +1,14 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/configuration/changeEventConfiguration.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "ChangeEventConfiguration",
+ "description": "This schema defines the ChangeEvent Configuration.",
+ "type": "object",
+ "javaType": "org.openmetadata.api.configuration.ChangeEventConfiguration",
+ "properties": {
+ "omUri" : {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/configuration/dataQualityConfiguration.json b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/dataQualityConfiguration.json
new file mode 100644
index 000000000000..90387739a943
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/dataQualityConfiguration.json
@@ -0,0 +1,18 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/configuration/dataQualityConfiguration.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DataQualityConfiguration",
+ "description": "This schema defines the Data Quality Configuration",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.configuration.dataQuality.DataQualityConfiguration",
+ "properties": {
+ "severityIncidentClassifier": {
+ "description": "Class Name for the severity incident classifier.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "severityIncidentClassifier"
+ ],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/configuration/elasticSearchConfiguration.json b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/elasticSearchConfiguration.json
new file mode 100644
index 000000000000..38ca4c3f5779
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/elasticSearchConfiguration.json
@@ -0,0 +1,245 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/configuration/elasticSearchConfiguration.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "ElasticSearchConfiguration",
+ "description": "This schema defines the Elastic Search Configuration.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.service.configuration.elasticsearch.ElasticSearchConfiguration",
+ "definitions": {
+ "searchIndexMappingLanguage": {
+ "javaType": "org.openmetadata.schema.type.IndexMappingLanguage",
+ "description": "This schema defines the language options available for search index mappings.",
+ "type": "string",
+ "enum": [
+ "EN",
+ "JP",
+ "ZH",
+ "RU"
+ ],
+ "default": "EN"
+ }
+ },
+ "properties": {
+ "host": {
+ "description": "Elastic Search Host. Supports single host or comma-separated list for multiple hosts (e.g., 'localhost' or 'es-node1:9200,es-node2:9200,es-node3:9200').",
+ "type": "string"
+ },
+ "port": {
+ "description": "Elastic Search port. Used when host does not include port. Ignored when using comma-separated hosts with ports.",
+ "type": "integer"
+ },
+ "scheme": {
+ "description": "Http/Https connection scheme",
+ "type": "string"
+ },
+ "username": {
+ "description": "Elastic Search Username for Login",
+ "type": "string"
+ },
+ "password": {
+ "description": "Elastic Search Password for Login",
+ "type": "string"
+ },
+ "truststorePath": {
+ "description": "Truststore Path",
+ "type": "string"
+ },
+ "truststorePassword": {
+ "description": "Truststore Password",
+ "type": "string"
+ },
+ "connectionTimeoutSecs": {
+ "description": "Connection Timeout in Seconds",
+ "type": "integer",
+ "default": 5
+ },
+ "socketTimeoutSecs": {
+ "description": "Socket Timeout in Seconds",
+ "type": "integer",
+ "default": 60
+ },
+ "keepAliveTimeoutSecs": {
+ "description": "Keep Alive Timeout in Seconds",
+ "type": "integer"
+ },
+ "maxConnTotal": {
+ "description": "Maximum total connections in the connection pool across all hosts",
+ "type": "integer",
+ "default": 30
+ },
+ "maxConnPerRoute": {
+ "description": "Maximum connections per host/route in the connection pool",
+ "type": "integer",
+ "default": 10
+ },
+ "batchSize": {
+ "description": "Batch Size for Requests",
+ "type": "integer",
+ "default": 10
+ },
+ "payLoadSize": {
+ "description": "Payload size in bytes depending on elasticsearch config",
+ "type": "integer",
+ "default": 10485760
+ },
+ "clusterAlias": {
+ "description": "Alias for search indexes to provide segregation of indexes.",
+ "type": "string",
+ "default": null
+ },
+ "searchIndexMappingLanguage": {
+ "$ref": "#/definitions/searchIndexMappingLanguage"
+ },
+ "searchType": {
+ "description": "This enum defines the search Type elastic/open search.",
+ "type": "string",
+ "enum": [
+ "elasticsearch",
+ "opensearch"
+ ],
+ "default": "elasticsearch"
+ },
+ "searchIndexFactoryClassName": {
+ "description": "Index factory name",
+ "type": "string"
+ },
+ "aws": {
+ "description": "AWS IAM authentication configuration for OpenSearch. IAM auth must be explicitly enabled. When enabled, uses standard AWS environment variables or configured credentials.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.service.configuration.elasticsearch.AwsConfiguration",
+ "extends": {
+ "$ref": "../security/credentials/awsBaseConfig.json"
+ },
+ "properties": {
+ "enabled": {
+ "description": "Enable AWS IAM authentication for OpenSearch. When enabled, requires region to be configured. Defaults to false for backward compatibility.",
+ "type": "boolean",
+ "default": false
+ },
+ "serviceName": {
+ "description": "AWS service name for signing (es for Elasticsearch/OpenSearch, aoss for OpenSearch Serverless)",
+ "type": "string",
+ "default": "es"
+ }
+ }
+ },
+ "naturalLanguageSearch": {
+ "description": "Configuration for natural language search capabilities",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.service.configuration.elasticsearch.NaturalLanguageSearchConfiguration",
+ "properties": {
+ "enabled": {
+ "description": "Enable or disable natural language search",
+ "type": "boolean",
+ "default": false
+ },
+ "semanticSearchEnabled": {
+ "description": "Enable or disable semantic search using vector embeddings",
+ "type": "boolean",
+ "default": false
+ },
+ "keywordWeight": {
+ "description": "Weight for BM25 keyword search results in hybrid RRF pipeline (0.0-1.0)",
+ "type": "number",
+ "default": 0.4
+ },
+ "semanticWeight": {
+ "description": "Weight for semantic vector search results in hybrid RRF pipeline (0.0-1.0)",
+ "type": "number",
+ "default": 0.6
+ },
+ "embeddingProvider": {
+ "description": "The provider to use for generating vector embeddings (e.g., bedrock, openai).",
+ "type": "string",
+ "default": "bedrock"
+ },
+ "maxConcurrentEmbeddingRequests": {
+ "description": "Maximum number of concurrent embedding API requests. Controls the semaphore used to throttle calls to the embedding provider and prevent overwhelming HTTP/2 connection limits.",
+ "type": "integer",
+ "default": 10,
+ "minimum": 1
+ },
+ "providerClass": {
+ "description": "Fully qualified class name of the NLQService implementation to use",
+ "type": "string",
+ "default": "org.openmetadata.service.search.nlq.NoOpNLQService"
+ },
+ "bedrock": {
+ "description": "AWS Bedrock configuration for natural language processing",
+ "type": "object",
+ "properties": {
+ "awsConfig": {
+ "description": "AWS credentials configuration for Bedrock service",
+ "$ref": "../security/credentials/awsBaseConfig.json"
+ },
+ "modelId": {
+ "description": "Bedrock model identifier to use for query transformation",
+ "type": "string",
+ "default": "anthropic.claude-v2"
+ },
+ "embeddingModelId": {
+ "description": "Bedrock embedding model identifier to use for vector search",
+ "type": "string",
+ "default": "amazon.titan-embed-text-v2:0"
+ },
+ "embeddingDimension": {
+ "description": "Dimension of the embedding vector",
+ "type": "integer",
+ "default": 512
+ }
+ },
+ "additionalProperties": false
+ },
+ "djl": {
+ "description": "Embedding generation using Deep Java Library (DJL)",
+ "type": "object",
+ "properties": {
+ "embeddingModel": {
+ "description": "DJL model name for embedding generation",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "openai": {
+ "description": "OpenAI configuration for embedding generation. Supports both OpenAI and Azure OpenAI endpoints.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.service.configuration.elasticsearch.Openai",
+ "properties": {
+ "apiKey": {
+ "description": "API key for authenticating with OpenAI or Azure OpenAI.",
+ "type": "string"
+ },
+ "embeddingModelId": {
+ "description": "OpenAI embedding model identifier (e.g., text-embedding-3-small, text-embedding-ada-002).",
+ "type": "string",
+ "default": "text-embedding-3-small"
+ },
+ "embeddingDimension": {
+ "description": "Dimension of the embedding vector. Default is 1536 for text-embedding-3-small.",
+ "type": "integer",
+ "default": 1536
+ },
+ "endpoint": {
+ "description": "Custom endpoint URL. For Azure OpenAI, use the Azure resource endpoint (e.g., https://your-resource.openai.azure.com). Leave empty for standard OpenAI API.",
+ "type": "string"
+ },
+ "deploymentName": {
+ "description": "Azure OpenAI deployment name. Required when using Azure OpenAI.",
+ "type": "string"
+ },
+ "apiVersion": {
+ "description": "Azure OpenAI API version. Only used with Azure OpenAI.",
+ "type": "string",
+ "default": "2024-02-01"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "required": ["scheme", "connectionTimeoutSecs", "socketTimeoutSecs", "batchSize", "searchIndexMappingLanguage"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/configuration/entityRulesSettings.json b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/entityRulesSettings.json
new file mode 100644
index 000000000000..d91887f6207d
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/entityRulesSettings.json
@@ -0,0 +1,18 @@
+{
+ "$id": "https://open-metadata.org/schema/settings/entityRuleSettings.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "EntityRuleSettings",
+ "type": "object",
+ "properties": {
+ "entitySemantics": {
+ "description": "Semantics rules defined in the data contract.",
+ "type": "array",
+ "items": {
+ "$ref": "../type/basic.json#/definitions/semanticsRule"
+ },
+ "default": null
+ }
+ },
+ "additionalProperties": false,
+ "required": ["entitySemantics"]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/configuration/eventHandlerConfiguration.json b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/eventHandlerConfiguration.json
new file mode 100644
index 000000000000..f967ffd0e725
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/eventHandlerConfiguration.json
@@ -0,0 +1,19 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/configuration/eventHandlerConfiguration.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "EventHandlerConfiguration",
+ "description": "This schema defines the Event Handler Configuration.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.configuration.events.EventHandlerConfiguration",
+ "properties": {
+ "eventHandlerClassNames": {
+ "description": "Event Handler Class Names",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "required": ["eventHandlerClassNames"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/configuration/fernetConfiguration.json b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/fernetConfiguration.json
new file mode 100644
index 000000000000..5643ccaeb658
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/fernetConfiguration.json
@@ -0,0 +1,16 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/configuration/fernetConfiguration.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "FernetConfiguration",
+ "description": "This schema defines the Fernet Configuration.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.fernet.FernetConfiguration",
+ "properties": {
+ "fernetKey": {
+ "description": "Fernet Key",
+ "type": "string"
+ }
+ },
+ "required": ["fernetKey"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/configuration/glossaryTermRelationSettings.json b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/glossaryTermRelationSettings.json
new file mode 100644
index 000000000000..f30e571024c2
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/glossaryTermRelationSettings.json
@@ -0,0 +1,107 @@
+{
+ "$id": "https://open-metadata.org/schema/configuration/glossaryTermRelationSettings.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "GlossaryTermRelationSettings",
+ "description": "This schema defines the Glossary Term Relation Settings for configuring typed semantic relations between glossary terms.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.configuration.GlossaryTermRelationSettings",
+ "definitions": {
+ "relationCategory": {
+ "javaType": "org.openmetadata.schema.configuration.RelationCategory",
+ "description": "Category of the relation type.",
+ "type": "string",
+ "enum": ["hierarchical", "associative", "equivalence"]
+ },
+ "relationCardinality": {
+ "javaType": "org.openmetadata.schema.configuration.RelationCardinality",
+ "description": "Preset cardinality for term-to-term relations.",
+ "type": "string",
+ "enum": ["ONE_TO_ONE", "ONE_TO_MANY", "MANY_TO_ONE", "MANY_TO_MANY", "CUSTOM"]
+ },
+ "glossaryTermRelationType": {
+ "javaType": "org.openmetadata.schema.configuration.GlossaryTermRelationType",
+ "description": "Definition of a glossary term relation type.",
+ "type": "object",
+ "properties": {
+ "name": {
+ "description": "Unique name of the relation type (e.g., 'broader', 'synonym').",
+ "type": "string",
+ "pattern": "^[a-zA-Z][a-zA-Z0-9]*$"
+ },
+ "displayName": {
+ "description": "Display name for the relation type.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of what this relation type represents.",
+ "type": "string"
+ },
+ "inverseRelation": {
+ "description": "Name of the inverse relation type (e.g., 'narrower' for 'broader'). Null for symmetric relations.",
+ "type": "string"
+ },
+ "rdfPredicate": {
+ "description": "RDF predicate URI for this relation (e.g., 'skos:broader').",
+ "type": "string",
+ "format": "uri"
+ },
+ "cardinality": {
+ "description": "Preset cardinality for this relation type. CUSTOM lets you set explicit source/target maxima.",
+ "$ref": "#/definitions/relationCardinality"
+ },
+ "sourceMax": {
+ "description": "Maximum number of relations of this type that can originate from a term. Null means unbounded.",
+ "type": ["integer", "null"],
+ "minimum": 1
+ },
+ "targetMax": {
+ "description": "Maximum number of relations of this type that can target a term. Null means unbounded.",
+ "type": ["integer", "null"],
+ "minimum": 1
+ },
+ "isSymmetric": {
+ "description": "Whether the relation is symmetric (A relates B implies B relates A).",
+ "type": "boolean",
+ "default": false
+ },
+ "isTransitive": {
+ "description": "Whether the relation is transitive (A relates B, B relates C implies A relates C).",
+ "type": "boolean",
+ "default": false
+ },
+ "isCrossGlossaryAllowed": {
+ "description": "Whether relations can be created between terms in different glossaries.",
+ "type": "boolean",
+ "default": true
+ },
+ "category": {
+ "description": "Category of the relation.",
+ "$ref": "#/definitions/relationCategory"
+ },
+ "isSystemDefined": {
+ "description": "Whether this is a system-defined relation type (cannot be deleted).",
+ "type": "boolean",
+ "default": false
+ },
+ "color": {
+ "description": "Hex color code for visualizing this relation type in graphs (e.g., '#1890ff').",
+ "type": "string",
+ "pattern": "^#[0-9a-fA-F]{6}$"
+ }
+ },
+ "required": ["name", "displayName", "category"],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "relationTypes": {
+ "description": "List of configured glossary term relation types.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/glossaryTermRelationType"
+ },
+ "default": []
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/configuration/jwtTokenConfiguration.json b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/jwtTokenConfiguration.json
new file mode 100644
index 000000000000..74f5bff64b52
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/jwtTokenConfiguration.json
@@ -0,0 +1,28 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/configuration/jwtTokenConfiguration.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "JWTTokenConfiguration",
+ "description": "This schema defines the JWT Configuration.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.security.jwt.JWTTokenConfiguration",
+ "properties": {
+ "rsapublicKeyFilePath": {
+ "description": "RSA Public Key File Path",
+ "type": "string"
+ },
+ "rsaprivateKeyFilePath": {
+ "description": "RSA Private Key File Path",
+ "type": "string"
+ },
+ "jwtissuer": {
+ "description": "JWT Issuer",
+ "type": "string"
+ },
+ "keyId": {
+ "description": "Key ID",
+ "type": "string"
+ }
+ },
+ "required": ["jwtissuer", "keyId"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/configuration/kafkaEventConfiguration.json b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/kafkaEventConfiguration.json
new file mode 100644
index 000000000000..b6a9239dfd90
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/kafkaEventConfiguration.json
@@ -0,0 +1,88 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/configuration/kafkaEventConfiguration.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "KafkaEventConfiguration",
+ "description": "This schema defines the Kafka Event Publisher Configuration.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.kafka.KafkaEventConfiguration",
+ "properties": {
+ "topics": {
+ "description": "Topics of Kafka Producer",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "acks": {
+ "description": "Acknowledgment",
+ "default": "all",
+ "type": "string"
+ },
+ "retries": {
+ "description": "No. of retries",
+ "default": 3,
+ "type": "integer"
+ },
+ "lingerMS": {
+ "description": "Artificial Delay in milliseconds",
+ "default": 1,
+ "type": "integer"
+ },
+ "bufferMemory": {
+ "description": "Buffer Memory",
+ "default": 33554432,
+ "type": "integer"
+ },
+ "keySerializer": {
+ "description": "Serializer class for key",
+ "default": "org.apache.kafka.common.serialization.StringSerializer",
+ "type": "string"
+ },
+ "valueSerializer": {
+ "description": "Serializer class for value",
+ "default": "org.apache.kafka.common.serialization.StringSerializer",
+ "type": "string"
+ },
+ "securityProtocol": {
+ "description": "Kafka security protocol config",
+ "default": "PLAINTEXT",
+ "type": "string",
+ "enum": ["PLAINTEXT", "SSL"],
+ "javaEnums": [
+ {
+ "name": "PLAINTEXT"
+ },
+ {
+ "name": "SSL"
+ }
+ ]
+ },
+ "SSLProtocol": {
+ "description": "Kafka SSL protocol config",
+ "default": "TLSv1.2",
+ "type": "string"
+ },
+ "SSLTrustStoreLocation": {
+ "description": "Kafka SSL truststore location",
+ "type": "string"
+ },
+ "SSLTrustStorePassword": {
+ "description": "Kafka SSL truststore password",
+ "type": "string"
+ },
+ "SSLKeystoreLocation": {
+ "description": "Kafka SSL keystore location",
+ "type": "string"
+ },
+ "SSLKeystorePassword": {
+ "description": "Kafka SSL keystore password",
+ "type": "string"
+ },
+ "SSLKeyPassword": {
+ "description": "Kafka SSL key password",
+ "type": "string"
+ }
+ },
+ "required": ["topics"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/configuration/ldapConfiguration.json b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/ldapConfiguration.json
new file mode 100644
index 000000000000..ef75ef52cdb5
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/ldapConfiguration.json
@@ -0,0 +1,104 @@
+{
+ "$id": "https://open-metadata.org/schema/configuration/ldapConfiguration.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "LdapConfiguration",
+ "description": "LDAP Configuration",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.auth.LdapConfiguration",
+ "properties": {
+ "host": {
+ "description": "LDAP server address without scheme(Example :- localhost)",
+ "type": "string"
+ },
+ "port": {
+ "description": "Port of the server",
+ "type": "integer"
+ },
+ "maxPoolSize": {
+ "description": "No of connection to create the pool with",
+ "type": "integer",
+ "default": 3
+ },
+ "isFullDn": {
+ "description": "If enable need to give full dn to login",
+ "type": "boolean",
+ "default": false
+ },
+ "dnAdminPrincipal": {
+ "description": "Distinguished Admin name with search capabilities",
+ "type": "string"
+ },
+ "dnAdminPassword": {
+ "description": "Password for LDAP Admin",
+ "type": "string"
+ },
+ "sslEnabled": {
+ "description": "LDAPS (secure LDAP) or LDAP",
+ "type": "boolean",
+ "default": false
+ },
+ "userBaseDN": {
+ "description": "User base distinguished name",
+ "type": "string"
+ },
+ "groupBaseDN": {
+ "description": "Group base distinguished name",
+ "type": "string"
+ },
+ "roleAdminName": {
+ "description": "Admin role name",
+ "type": "string"
+ },
+ "allAttributeName": {
+ "description": "All attribute name",
+ "type": "string"
+ },
+ "mailAttributeName": {
+ "description": "Email attribute name",
+ "type": "string"
+ },
+ "usernameAttributeName": {
+ "description": "User Name attribute name",
+ "type": "string"
+ },
+ "groupAttributeName": {
+ "description": "Group Name attribute name",
+ "type": "string"
+ },
+ "groupAttributeValue": {
+ "description": "Group attribute value",
+ "type": "string"
+ },
+ "groupMemberAttributeName": {
+ "description": "Group Member Name attribute name",
+ "type": "string"
+ },
+ "authRolesMapping": {
+ "description": "Json string of roles mapping between LDAP roles and Ranger roles",
+ "type": "string"
+ },
+ "authReassignRoles": {
+ "description": "Roles should be reassign every time user login",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "uniqueItems": true
+ },
+ "truststoreFormat": {
+ "description": "Truststore format e.g. PKCS12, JKS.",
+ "type": "string"
+ },
+ "truststoreConfigType": {
+ "description": "Truststore Type e.g. TrustAll, HostName, JVMDefault, CustomTrustStore.",
+ "type": "string",
+ "enum": ["TrustAll", "JVMDefault", "HostName", "CustomTrustStore"]
+ },
+ "trustStoreConfig": {
+ "description": "Truststore Configuration",
+ "$ref": "ldapTrustStoreConfig/truststoreConfig.json"
+ }
+ },
+ "required": ["host", "port", "dnAdminPrincipal","dnAdminPassword", "userBaseDN", "mailAttributeName"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/configuration/ldapTrustStoreConfig/customTrustManagerConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/ldapTrustStoreConfig/customTrustManagerConfig.json
new file mode 100644
index 000000000000..ccb53db8857d
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/ldapTrustStoreConfig/customTrustManagerConfig.json
@@ -0,0 +1,33 @@
+{
+ "$id": "https://open-metadata.org/schema/configuration/ldapTrustStoreConfig/customTrustManagerConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CustomTrustManagerConfig",
+ "description": "CustomTrust Configuration",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.auth.ldapTrustStoreConfig.CustomTrustManagerConfig",
+ "properties": {
+ "verifyHostname": {
+ "description": "list of host names to verify",
+ "type": "boolean",
+ "default": false
+ },
+ "examineValidityDates": {
+ "description": "Examine validity dates of certificate",
+ "type": "boolean",
+ "default": false
+ },
+ "trustStoreFilePath": {
+ "description": "Truststore file path",
+ "type": "string"
+ },
+ "trustStoreFilePassword": {
+ "description": "Truststore file password",
+ "type": "string"
+ },
+ "trustStoreFileFormat": {
+ "description": "Truststore file format",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/configuration/ldapTrustStoreConfig/hostNameConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/ldapTrustStoreConfig/hostNameConfig.json
new file mode 100644
index 000000000000..906997ff2c79
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/ldapTrustStoreConfig/hostNameConfig.json
@@ -0,0 +1,23 @@
+{
+ "$id": "https://open-metadata.org/schema/configuration/ldapTrustStoreConfig/hostNameConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "HostNameConfig",
+ "description": "HostName Configuration",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.auth.ldapTrustStoreConfig.HostNameConfig",
+ "properties": {
+ "allowWildCards": {
+ "description": "Allow wildcards",
+ "type": "boolean",
+ "default": false
+ },
+ "acceptableHostNames": {
+ "description": "list of acceptable host names",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/configuration/ldapTrustStoreConfig/jvmDefaultConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/ldapTrustStoreConfig/jvmDefaultConfig.json
new file mode 100644
index 000000000000..e764ae9aba14
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/ldapTrustStoreConfig/jvmDefaultConfig.json
@@ -0,0 +1,16 @@
+{
+ "$id": "https://open-metadata.org/schema/configuration/ldapTrustStoreConfig/jvmDefaultConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "JVMDefaultConfig",
+ "description": "JVMDefault Configuration",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.auth.ldapTrustStoreConfig.JVMDefaultConfig",
+ "properties": {
+ "verifyHostname": {
+ "description": "list of host names to verify",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/configuration/ldapTrustStoreConfig/trustAllConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/ldapTrustStoreConfig/trustAllConfig.json
new file mode 100644
index 000000000000..c1ff002a8bed
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/ldapTrustStoreConfig/trustAllConfig.json
@@ -0,0 +1,16 @@
+{
+ "$id": "https://open-metadata.org/schema/configuration/ldapTrustStoreConfig/trustAllConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "TrustAllConfig",
+ "description": "TrustAll Configuration",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.auth.ldapTrustStoreConfig.TrustAllConfig",
+ "properties": {
+ "examineValidityDates": {
+ "description": "Examine validity dates of certificate",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/configuration/ldapTrustStoreConfig/truststoreConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/ldapTrustStoreConfig/truststoreConfig.json
new file mode 100644
index 000000000000..8653da29c5b6
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/ldapTrustStoreConfig/truststoreConfig.json
@@ -0,0 +1,27 @@
+{
+ "$id": "https://open-metadata.org/schema/configuration/ldapTrustStoreConfig/truststoreConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "TruststoreConfig",
+ "description": "Truststore Configuration",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.auth.ldapTrustStoreConfig.TruststoreConfig",
+ "properties": {
+ "customTrustManagerConfig": {
+ "description": "CustomTrust Configuration",
+ "$ref": "./customTrustManagerConfig.json"
+ },
+ "hostNameConfig": {
+ "description": "HostName Configuration",
+ "$ref": "./hostNameConfig.json"
+ },
+ "jvmDefaultConfig": {
+ "description": "JVMDefault Configuration",
+ "$ref": "./jvmDefaultConfig.json"
+ },
+ "trustAllConfig": {
+ "description": "TrustAll Configuration",
+ "$ref": "./trustAllConfig.json"
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/configuration/limitsConfiguration.json b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/limitsConfiguration.json
new file mode 100644
index 000000000000..d5b30cbbe68f
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/limitsConfiguration.json
@@ -0,0 +1,37 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/configuration/limitsConfiguration.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "LimitsConfiguration",
+ "description": "This schema defines the Limits Configuration.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.configuration.LimitsConfiguration",
+ "properties": {
+ "className": {
+ "description": "Class Name for authorizer.",
+ "type": "string",
+ "default": "org.openmetadata.service.limits.DefaultLimits"
+ },
+ "enable": {
+ "description": "Limits Enabled or Disabled.",
+ "type": "boolean",
+ "default": false
+ },
+ "limitsConfigFile": {
+ "description": "Limits Configuration File.",
+ "type": "string",
+ "default": "limits-config.yaml"
+ },
+ "credits": {
+ "description": "Collate platform credits",
+ "existingJavaType": "java.math.BigDecimal",
+ "default": 1000
+ },
+ "billingCycleStart": {
+ "title": "Cycle Start",
+ "description": "The start of this limit cycle.",
+ "$ref": "../type/basic.json#/definitions/date"
+ }
+ },
+ "required": ["enable"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/configuration/lineageSettings.json b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/lineageSettings.json
new file mode 100644
index 000000000000..3026ea4d01fe
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/lineageSettings.json
@@ -0,0 +1,155 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/configuration/lineageSettings.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "LineageSettings",
+ "description": "This schema defines the Lineage Settings.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.lineage.LineageSettings",
+ "definitions": {
+ "lineageLayer": {
+ "javaType": "org.openmetadata.schema.api.lineage.LineageLayer",
+ "description": "Lineage Layers",
+ "type": "string",
+ "enum": ["EntityLineage", "ColumnLevelLineage", "DataObservability"],
+ "default": "EntityLineage"
+ },
+ "pipelineViewMode": {
+ "javaType": "org.openmetadata.schema.api.lineage.PipelineViewMode",
+ "description": "Determines the view mode for pipelines in lineage.",
+ "type": "string",
+ "enum": ["Edge", "Node"],
+ "default": "Node"
+ },
+ "graphPerformanceConfig": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.lineage.GraphPerformanceConfig",
+ "description": "Configuration for lineage graph performance and scalability",
+ "properties": {
+ "smallGraphThreshold": {
+ "description": "Node count threshold for small graphs (eligible for caching)",
+ "type": "integer",
+ "default": 5000,
+ "minimum": 100
+ },
+ "mediumGraphThreshold": {
+ "description": "Node count threshold for medium graphs (optimized batching)",
+ "type": "integer",
+ "default": 50000,
+ "minimum": 1000
+ },
+ "maxInMemoryNodes": {
+ "description": "Maximum nodes to keep in memory before switching to streaming",
+ "type": "integer",
+ "default": 100000,
+ "minimum": 10000
+ },
+ "smallGraphBatchSize": {
+ "description": "Batch size for fetching small graph nodes from search backend",
+ "type": "integer",
+ "default": 10000,
+ "minimum": 1000,
+ "maximum": 10000
+ },
+ "mediumGraphBatchSize": {
+ "description": "Batch size for fetching medium graph nodes",
+ "type": "integer",
+ "default": 5000,
+ "minimum": 500,
+ "maximum": 10000
+ },
+ "largeGraphBatchSize": {
+ "description": "Batch size for fetching large graph nodes",
+ "type": "integer",
+ "default": 1000,
+ "minimum": 100,
+ "maximum": 5000
+ },
+ "streamingBatchSize": {
+ "description": "Batch size for streaming very large graphs",
+ "type": "integer",
+ "default": 500,
+ "minimum": 50,
+ "maximum": 1000
+ },
+ "enableCaching": {
+ "description": "Enable caching for small/medium graphs",
+ "type": "boolean",
+ "default": true
+ },
+ "cacheTTLSeconds": {
+ "description": "Cache time-to-live in seconds",
+ "type": "integer",
+ "default": 300,
+ "minimum": 60,
+ "maximum": 3600
+ },
+ "maxCachedGraphs": {
+ "description": "Maximum number of graphs to cache",
+ "type": "integer",
+ "default": 100,
+ "minimum": 10,
+ "maximum": 1000
+ },
+ "enableProgressTracking": {
+ "description": "Enable progress tracking for long-running queries",
+ "type": "boolean",
+ "default": false
+ },
+ "progressReportInterval": {
+ "description": "Report progress every N nodes processed",
+ "type": "integer",
+ "default": 1000,
+ "minimum": 100
+ },
+ "useScrollForLargeGraphs": {
+ "description": "Use Elasticsearch/OpenSearch scroll API for large result sets",
+ "type": "boolean",
+ "default": true
+ },
+ "scrollTimeoutMinutes": {
+ "description": "Scroll context timeout in minutes",
+ "type": "integer",
+ "default": 5,
+ "minimum": 1,
+ "maximum": 30
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "upstreamDepth": {
+ "description": "Upstream Depth for Lineage.",
+ "type": "integer",
+ "default": 2,
+ "minimum": 1,
+ "maximum": 5
+ },
+ "downstreamDepth": {
+ "description": "DownStream Depth for Lineage.",
+ "type": "integer",
+ "default": 2,
+ "minimum": 1,
+ "maximum": 5
+ },
+ "lineageLayer": {
+ "description": "Lineage Layer.",
+ "$ref": "#/definitions/lineageLayer"
+ },
+ "pipelineViewMode": {
+ "description": "Pipeline View Mode for Lineage.",
+ "$ref": "#/definitions/pipelineViewMode"
+ },
+ "graphPerformanceConfig": {
+ "description": "Performance configuration for lineage graph builder.",
+ "$ref": "#/definitions/graphPerformanceConfig"
+ }
+ },
+ "required": [
+ "upstreamDepth",
+ "downstreamDepth",
+ "lineageLayer",
+ "pipelineViewMode"
+ ],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/configuration/logStorageConfiguration.json b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/logStorageConfiguration.json
new file mode 100644
index 000000000000..5e9373127786
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/logStorageConfiguration.json
@@ -0,0 +1,80 @@
+{
+ "$id": "https://open-metadata.org/schema/configuration/logStorageConfiguration.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "LogStorageConfiguration",
+ "description": "Configuration for pipeline log storage",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.configuration.LogStorageConfiguration",
+ "properties": {
+ "type": {
+ "description": "Type of log storage implementation",
+ "type": "string",
+ "enum": ["default", "s3"],
+ "default": "default"
+ },
+ "enabled": {
+ "description": "Enable it for pipelines deployed in the server",
+ "type": "boolean",
+ "default": false
+ },
+ "bucketName": {
+ "description": "S3 bucket name for storing logs (required for S3 type)",
+ "type": "string"
+ },
+ "prefix": {
+ "description": "S3 key prefix for organizing logs",
+ "type": "string",
+ "default": "pipeline-logs"
+ },
+ "awsConfig": {
+ "description": "AWS credentials configuration",
+ "$ref": "../security/credentials/awsCredentials.json"
+ },
+ "enableServerSideEncryption": {
+ "description": "Enable server-side encryption for S3 objects",
+ "type": "boolean",
+ "default": true
+ },
+ "sseAlgorithm": {
+ "description": "Server-side encryption algorithm (if applicable)",
+ "type": "string",
+ "enum": ["AES256", "aws:kms"]
+ },
+ "kmsKeyId": {
+ "description": "KMS Key ID for server-side encryption (if applicable)",
+ "type": "string"
+ },
+ "storageClass": {
+ "description": "S3 storage class for log objects",
+ "type": "string",
+ "enum": ["STANDARD", "STANDARD_IA", "ONEZONE_IA", "INTELLIGENT_TIERING", "GLACIER", "DEEP_ARCHIVE"],
+ "default": "STANDARD_IA"
+ },
+ "expirationDays": {
+ "description": "Number of days after which logs are automatically deleted (0 means no expiration)",
+ "type": "integer",
+ "minimum": 0,
+ "default": 30
+ },
+ "maxConcurrentStreams": {
+ "description": "Maximum number of concurrent log streams allowed",
+ "type": "integer",
+ "minimum": 1,
+ "default": 100
+ },
+ "streamTimeoutMinutes": {
+ "description": "Timeout in minutes for idle log streams before automatic cleanup",
+ "type": "integer",
+ "minimum": 1,
+ "default": 5
+ },
+ "asyncBufferSizeMB": {
+ "description": "Size of async buffer in MB for batching log writes",
+ "type": "integer",
+ "minimum": 1,
+ "default": 5
+ }
+ },
+ "required": ["type"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/configuration/loginConfiguration.json b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/loginConfiguration.json
new file mode 100644
index 000000000000..6a7fd6994900
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/loginConfiguration.json
@@ -0,0 +1,26 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/configuration/loginConfiguration.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "LogoConfiguration",
+ "description": "This schema defines the Login Configuration",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.configuration.LoginConfiguration",
+ "properties": {
+ "maxLoginFailAttempts": {
+ "description": "Failed Login Attempts allowed for user.",
+ "type": "integer",
+ "default": 3
+ },
+ "accessBlockTime": {
+ "description": "Access Block time for user on exceeding failed attempts(in seconds)",
+ "type": "integer",
+ "default": 600
+ },
+ "jwtTokenExpiryTime": {
+ "description": "Jwt Token Expiry time for login in seconds",
+ "type": "integer",
+ "default": 3600
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/configuration/logoConfiguration.json b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/logoConfiguration.json
new file mode 100644
index 000000000000..97c3cdc296a8
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/logoConfiguration.json
@@ -0,0 +1,23 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/configuration/logoConfiguration.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "LogoConfiguration",
+ "description": "This schema defines the Logo Configuration.",
+ "type": "object",
+ "javaType": "org.openmetadata.api.configuration.LogoConfiguration",
+ "properties": {
+ "customLogoUrlPath": {
+ "description": "Login Page Logo Image Url",
+ "type": "string"
+ },
+ "customFaviconUrlPath": {
+ "description": "Favicon Page Logo Image Url",
+ "type": "string"
+ },
+ "customMonogramUrlPath": {
+ "description": "Navigation Bar Logo Image Url",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/configuration/mcpConfiguration.json b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/mcpConfiguration.json
new file mode 100644
index 000000000000..3f97ced403e7
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/mcpConfiguration.json
@@ -0,0 +1,63 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/configuration/mcpConfiguration.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "MCPConfiguration",
+ "description": "This schema defines the Model Context Protocol (MCP) Server configuration",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.configuration.MCPConfiguration",
+ "properties": {
+ "mcpServerName": {
+ "description": "Name of the MCP server",
+ "type": "string",
+ "default": "openmetadata-mcp-server"
+ },
+ "mcpServerVersion": {
+ "description": "Version of the MCP server",
+ "type": "string",
+ "default": "1.0.0"
+ },
+ "enabled": {
+ "description": "Enable or disable the MCP server",
+ "type": "boolean",
+ "default": true
+ },
+ "path": {
+ "description": "Base path for MCP endpoints",
+ "type": "string",
+ "default": "/api/v1/mcp"
+ },
+ "originValidationEnabled": {
+ "description": "Enable or disable origin validation for requests",
+ "type": "boolean",
+ "default": false
+ },
+ "originHeaderUri": {
+ "description": "Expected origin header URI for validation",
+ "type": "string",
+ "default": "http://localhost"
+ },
+ "baseUrl": {
+ "description": "Base URL for MCP OAuth endpoints. Used for OAuth metadata (issuer, endpoints). If not set, falls back to system settings. For clustered deployments, set this to the external-facing URL.",
+ "type": "string"
+ },
+ "allowedOrigins": {
+ "description": "List of allowed origins for CORS on OAuth endpoints. Use specific origins for production security. Wildcard (*) is NOT recommended.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "default": ["http://localhost:3000", "http://localhost:8585", "http://localhost:9090"]
+ },
+ "connectTimeout": {
+ "description": "HTTP connection timeout in milliseconds for SSO provider metadata fetching. Default: 30000ms (30 seconds)",
+ "type": "integer",
+ "default": 30000
+ },
+ "readTimeout": {
+ "description": "HTTP read timeout in milliseconds for SSO provider metadata fetching. Default: 30000ms (30 seconds)",
+ "type": "integer",
+ "default": 30000
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/configuration/openLineageConfiguration.json b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/openLineageConfiguration.json
new file mode 100644
index 000000000000..8a01dc485618
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/openLineageConfiguration.json
@@ -0,0 +1,42 @@
+{
+ "$id": "https://open-metadata.org/schema/configuration/openLineageConfiguration.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "OpenLineageConfiguration",
+ "description": "Configuration for OpenLineage HTTP API integration.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.configuration.OpenLineageConfiguration",
+ "properties": {
+ "enabled": {
+ "description": "Enable or disable the OpenLineage HTTP API endpoint.",
+ "type": "boolean",
+ "default": true
+ },
+ "autoCreateEntities": {
+ "description": "Automatically create Table and Pipeline entities when they are referenced in OpenLineage events but don't exist in OpenMetadata.",
+ "type": "boolean",
+ "default": true
+ },
+ "eventTypeFilter": {
+ "description": "List of OpenLineage event types to process. Only events matching these types will create lineage. Default is to only process COMPLETE events.",
+ "type": "array",
+ "items": {
+ "type": "string",
+ "enum": ["START", "RUNNING", "COMPLETE", "ABORT", "FAIL", "OTHER"]
+ },
+ "default": ["COMPLETE"]
+ },
+ "defaultPipelineService": {
+ "description": "Name of the Pipeline Service to use when auto-creating Pipeline entities from OpenLineage jobs. This service must exist in OpenMetadata.",
+ "type": "string",
+ "default": "openlineage"
+ },
+ "namespaceToServiceMapping": {
+ "description": "Mapping of OpenLineage dataset namespaces to OpenMetadata Database Service names. Used to resolve dataset references to existing tables.",
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/configuration/openLineageSettings.json b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/openLineageSettings.json
new file mode 100644
index 000000000000..44882a9d863c
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/openLineageSettings.json
@@ -0,0 +1,42 @@
+{
+ "$id": "https://open-metadata.org/schema/configuration/openLineageSettings.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "OpenLineageSettings",
+ "description": "Settings for OpenLineage HTTP API integration. Configure how OpenMetadata receives and processes lineage events from external systems like Spark, Airflow, and Flink.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.configuration.OpenLineageSettings",
+ "properties": {
+ "enabled": {
+ "description": "Enable or disable the OpenLineage HTTP API endpoint.",
+ "type": "boolean",
+ "default": true
+ },
+ "autoCreateEntities": {
+ "description": "Automatically create Table and Pipeline entities when they are referenced in OpenLineage events but don't exist in OpenMetadata.",
+ "type": "boolean",
+ "default": true
+ },
+ "eventTypeFilter": {
+ "description": "List of OpenLineage event types to process. Only events matching these types will create lineage. Default is to only process COMPLETE events.",
+ "type": "array",
+ "items": {
+ "type": "string",
+ "javaType": "org.openmetadata.schema.configuration.OpenLineageEventType",
+ "enum": ["START", "RUNNING", "COMPLETE", "ABORT", "FAIL", "OTHER"]
+ }
+ },
+ "defaultPipelineService": {
+ "description": "Name of the Pipeline Service to use when auto-creating Pipeline entities from OpenLineage jobs. This service must exist in OpenMetadata.",
+ "type": "string",
+ "default": "openlineage"
+ },
+ "namespaceToServiceMapping": {
+ "description": "Mapping of OpenLineage dataset namespaces to OpenMetadata Database Service names. Used to resolve dataset references to existing tables. Example: 'postgresql://prod-db:5432' -> 'prod-postgres'",
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/configuration/openMetadataBaseUrlConfiguration.json b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/openMetadataBaseUrlConfiguration.json
new file mode 100644
index 000000000000..3e3cfc53c8e7
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/openMetadataBaseUrlConfiguration.json
@@ -0,0 +1,16 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/configuration/openMetadataBaseUrlConfiguration.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "OpenMetadataBaseUrlConfiguration",
+ "description": "This schema defines the OpenMetadata base URL configuration",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.configuration.OpenMetadataBaseUrlConfiguration",
+ "properties": {
+ "openMetadataUrl": {
+ "description": "OpenMetadata Server Endpoint",
+ "type": "string",
+ "default": "http://localhost:8585"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/configuration/opertionalConfiguration.json b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/opertionalConfiguration.json
new file mode 100644
index 000000000000..46ca9bbea5a4
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/opertionalConfiguration.json
@@ -0,0 +1,17 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/configuration/operationalConfiguration.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "OperationalConfiguration",
+ "description": "This schema defines the Operations Configuration.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.operations.OperationalConfiguration",
+ "properties": {
+ "email": {
+ "$ref": "../email/smtpSettings.json"
+ },
+ "serverUrl": {
+ "$ref": "./openMetadataBaseUrlConfiguration.json"
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/configuration/opsConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/opsConfig.json
new file mode 100644
index 000000000000..e5a32e3e517c
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/opsConfig.json
@@ -0,0 +1,22 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/configuration/ppsConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "OpsConfig",
+ "description": "This schema defines the Operations Configuration.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.security.OpsConfig",
+ "properties": {
+ "enable": {
+ "description": "Whether operations configuration is enabled or not.",
+ "type": "boolean",
+ "default": false
+ },
+ "operationsConfigFile": {
+ "description": "Operations Configuration File.",
+ "type": "string",
+ "default": "operations.yaml"
+ }
+ },
+ "required": ["enable"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/configuration/pipelineServiceClientConfiguration.json b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/pipelineServiceClientConfiguration.json
new file mode 100644
index 000000000000..e70b868f010c
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/pipelineServiceClientConfiguration.json
@@ -0,0 +1,79 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/configuration/pipelineServiceClientConfiguration.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "PipelineServiceClientConfiguration",
+ "description": "This schema defines the Pipeline Service Client Configuration",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.configuration.pipelineServiceClient.PipelineServiceClientConfiguration",
+ "properties": {
+ "enabled": {
+ "description": "Flags if the ingestion from the OpenMetadata UI is enabled. If ingesting externally, we can set this value to false to not check the Pipeline Service Client component health.",
+ "type": "boolean",
+ "default": true
+ },
+ "className": {
+ "description": "Class Name for the Pipeline Service Client.",
+ "type": "string"
+ },
+ "apiEndpoint": {
+ "description": "External API root to interact with the Pipeline Service Client",
+ "type": "string"
+ },
+ "hostIp": {
+ "description": "Pipeline Service Client host IP that will be used to connect to the sources.",
+ "type": "string"
+ },
+ "healthCheckInterval": {
+ "description": "Interval in seconds that the server will use to check the /status of the pipelineServiceClient and flag any errors in a Prometheus metric `pipelineServiceClientStatus.counter`.",
+ "type": "integer",
+ "default": 300
+ },
+ "ingestionIpInfoEnabled": {
+ "description": "Enable or disable the API that fetches the public IP running the ingestion process.",
+ "type": "boolean",
+ "default": false
+ },
+ "metadataApiEndpoint": {
+ "description": "Metadata api endpoint, e.g., `http://localhost:8585/api`",
+ "type": "string"
+ },
+ "verifySSL": {
+ "description": "Client SSL verification policy when connecting to the OpenMetadata server: no-ssl, ignore, validate.",
+ "$ref": "../security/ssl/verifySSLConfig.json#/definitions/verifySSL"
+ },
+ "sslConfig": {
+ "description": "OpenMetadata Client SSL configuration. This SSL information is about the OpenMetadata server. It will be picked up from the pipelineServiceClient to use/ignore SSL when connecting to the OpenMetadata server.",
+ "$ref": "../security/ssl/verifySSLConfig.json#/definitions/sslConfig"
+ },
+ "secretsManagerLoader": {
+ "$ref": "./../security/secrets/secretsManagerClientLoader.json",
+ "default": "noop"
+ },
+ "authProvider": {
+ "description": "Auth Provider with which OpenMetadata service configured with.",
+ "$ref": "../entity/services/connections/metadata/openMetadataConnection.json#/definitions/authProvider"
+ },
+ "authConfig": {
+ "description": "Auth Provider Configuration.",
+ "$ref": "authConfig.json"
+ },
+ "parameters": {
+ "javaType": "org.openmetadata.schema.api.configuration.pipelineServiceClient.Parameters",
+ "description": "Additional parameters to initialize the PipelineServiceClient.",
+ "type": "object",
+ "additionalProperties": {
+ ".{1,}": { "type": "string" }
+ }
+ },
+ "logStorageConfiguration": {
+ "description": "Configuration for pipeline log storage. If not specified, uses default log storage through the pipeline service client.",
+ "$ref": "logStorageConfiguration.json"
+ }
+ },
+ "required": [
+ "className",
+ "apiEndpoint",
+ "metadataApiEndpoint"
+ ],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/configuration/profilerConfiguration.json b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/profilerConfiguration.json
new file mode 100644
index 000000000000..9793b0027915
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/profilerConfiguration.json
@@ -0,0 +1,109 @@
+{
+ "$id": "https://open-metadata.org/schema/settings/profilerConfiguration.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "ProfilerConfiguration",
+ "description": "This schema defines the profiler configuration. It is used to configure globally the metrics to compute for specific data types.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.configuration.profiler.ProfilerConfiguration",
+ "definitions": {
+ "metricType": {
+ "javaType": "org.openmetadata.schema.profiler.MetricType",
+ "description": "This schema defines all possible metric types in OpenMetadata.",
+ "type": "string",
+ "enum": [
+ "mean",
+ "valuesCount",
+ "countInSet",
+ "columnCount",
+ "distinctCount",
+ "distinctProportion",
+ "iLikeCount",
+ "likeCount",
+ "notLikeCount",
+ "regexCount",
+ "notRegexCount",
+ "max",
+ "maxLength",
+ "min",
+ "minLength",
+ "nullCount",
+ "rowCount",
+ "stddev",
+ "sum",
+ "uniqueCount",
+ "uniqueProportion",
+ "columnNames",
+ "duplicateCount",
+ "iLikeRatio",
+ "likeRatio",
+ "nullProportion",
+ "interQuartileRange",
+ "nonParametricSkew",
+ "median",
+ "firstQuartile",
+ "thirdQuartile",
+ "system",
+ "histogram",
+ "cardinalityDistribution",
+ "valueRank",
+ "nullMissingCount"
+ ]
+ },
+ "metricConfigurationDefinition": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.configuration.profiler.MetricConfigurationDefinition",
+ "description": "This schema defines the parameters that can be passed for a Test Case.",
+ "properties": {
+ "dataType": {
+ "$ref": "../entity/data/table.json#/definitions/dataType"
+ },
+ "metrics": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/metricType"
+ }
+ },
+ "disabled": {
+ "type": "boolean",
+ "description": "If true, the metric will not be computed for the data type.",
+ "default": false
+ }
+ },
+ "additionalProperties": false
+ },
+ "sampleDataIngestionConfig": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.configuration.profiler.SampleDataIngestionConfig",
+ "description": "Define the configuration for sample data ingestion at the platform level. This configuration will override the source-level configuration for sample data collection.",
+ "properties": {
+ "storeSampleData": {
+ "title": "Enable Storing of Sample Data",
+ "type": "boolean",
+ "description": "Allows OpenMetadata to store the sample data. This setting will override the source configuration.",
+ "default": true
+ },
+ "readSampleData": {
+ "title": "Enable Reading of Sample Data",
+ "type": "boolean",
+ "description": "Allows OpenMetadata to read the sample data. This setting won't save the sample data but sample data will temporarily be brought in OpenMetadata infrastructure for processing. If reading is disabled but storing is enabled, reading will be enabled by default.",
+ "default": true
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "metricConfiguration": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/metricConfigurationDefinition"
+ }
+ },
+ "sampleDataConfig": {
+ "title": "Sample Data Configuration",
+ "description": "Whether to enable sample data collection at the platform level. This setting will override the source configuration.",
+ "$ref": "#/definitions/sampleDataIngestionConfig"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/configuration/searchSettings.json b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/searchSettings.json
new file mode 100644
index 000000000000..bc9cd6393270
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/searchSettings.json
@@ -0,0 +1,566 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/configuration/searchSettings.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SearchSettings",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.search.SearchSettings",
+ "properties": {
+ "globalSettings": {
+ "type": "object",
+ "properties": {
+ "enableAccessControl": {
+ "type": "boolean",
+ "description": "Flag to enable or disable RBAC Search Configuration globally.",
+ "default": false
+ },
+ "maxAggregateSize": {
+ "type": "integer",
+ "default": 10000
+ },
+ "maxResultHits": {
+ "type": "integer",
+ "default": 10000
+ },
+ "maxAnalyzedOffset": {
+ "type": "integer",
+ "default": 1000
+ },
+ "aggregations": {
+ "type": "array",
+ "description": "List of global aggregations to include in the search query.",
+ "items": {
+ "$ref": "#/definitions/aggregation"
+ }
+ },
+ "highlightFields": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "description": "Which fields to highlight by default."
+ },
+ "termBoosts": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/termBoost"
+ },
+ "description": "List of field=value term-boost rules that apply only to this asset."
+ },
+ "fieldValueBoosts": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/fieldValueBoost"
+ },
+ "description": "Optional list of numeric field-based boosts applied globally."
+ },
+ "keywordWeight": {
+ "description": "Weight for BM25 keyword search in hybrid RRF pipeline (0.0-1.0)",
+ "type": "number",
+ "default": 0.4
+ },
+ "semanticWeight": {
+ "description": "Weight for semantic vector search in hybrid RRF pipeline (0.0-1.0)",
+ "type": "number",
+ "default": 0.6
+ }
+ },
+ "additionalProperties": false
+ },
+ "assetTypeConfigurations": {
+ "type": "array",
+ "description": "List of per-asset search configurations that override the global settings.",
+ "items": {
+ "$ref": "#/definitions/assetTypeConfiguration"
+ }
+ },
+ "defaultConfiguration": {
+ "$ref": "#/definitions/assetTypeConfiguration",
+ "description": "Fallback configuration for any entity/asset not matched in assetTypeConfigurations."
+ },
+ "allowedFields": {
+ "type": "array",
+ "description": "Configurations of allowed searchable fields for each entity type",
+ "items": {
+ "$ref": "#/definitions/allowedSearchFields"
+ }
+ },
+ "allowedFieldValueBoosts": {
+ "type": "array",
+ "description": "Configurations of allowed field value boost fields for each entity type",
+ "items": {
+ "$ref": "#/definitions/allowedFieldValueBoostFields"
+ }
+ },
+ "nlqConfiguration": {
+ "description": "Configuration for Natural Language Query capabilities",
+ "javaType": "org.openmetadata.schema.api.search.NLQConfiguration",
+ "type": "object",
+ "properties": {
+ "promptTemplate": {
+ "type": "string",
+ "description": "Base prompt template for the NLQ system. Use {{INSTRUCTIONS}} where entity-specific instructions should appear."
+ },
+ "globalInstructions": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/promptSection"
+ }
+ },
+ "entitySpecificInstructions": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "entityType": {
+ "type": "string",
+ "description": "Entity type this instruction applies to (e.g., 'table', 'dashboard')"
+ },
+ "sections": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/promptSection"
+ }
+ }
+ },
+ "required": [
+ "entityType",
+ "sections"
+ ]
+ }
+ },
+ "examples": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/queryExample"
+ }
+ },
+ "mappingConfiguration": {
+ "description": "Configuration for including Elasticsearch mapping information in prompts",
+ "javaType": "org.openmetadata.schema.api.search.MappingConfiguration",
+ "type": "object",
+ "properties": {
+ "includeMappings": {
+ "type": "boolean",
+ "description": "Whether to include mapping information in the prompts",
+ "default": true
+ },
+ "mappingSection": {
+ "$ref": "#/definitions/titleSection"
+ },
+ "fieldInterpretations": {
+ "type": "array",
+ "description": "Specific guidance for interpreting field patterns in the mapping",
+ "items": {
+ "$ref": "#/definitions/fieldInterpretation"
+ }
+ }
+ }
+ },
+ "extensionFieldGuidelines": {
+ "description": "Guidelines for querying custom properties in extension fields",
+ "javaType": "org.openmetadata.schema.api.search.ExtensionFieldGuidelines",
+ "type": "object",
+ "properties": {
+ "header": {
+ "type": "string",
+ "description": "Title for the extension field guidelines section"
+ },
+ "sections": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/guidelineSection"
+ }
+ },
+ "examples": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/queryExample"
+ }
+ }
+ },
+ "required": ["header", "sections"]
+ }
+ }
+ }
+ },
+ "definitions": {
+ "assetTypeConfiguration": {
+ "type": "object",
+ "properties": {
+ "assetType": {
+ "type": "string",
+ "description": "Name or type of the asset to which this configuration applies."
+ },
+ "searchFields": {
+ "type": "array",
+ "description": "Which fields to search for this asset, with their boost values.",
+ "items": {
+ "$ref": "#/definitions/fieldBoost"
+ }
+ },
+ "highlightFields": {
+ "type": "array",
+ "items": { "type": "string" },
+ "description": "Which fields to highlight for this asset."
+ },
+ "aggregations": {
+ "type": "array",
+ "items": { "$ref": "#/definitions/aggregation" },
+ "description": "List of additional aggregations for this asset type."
+ },
+ "termBoosts": {
+ "type": "array",
+ "items": { "$ref": "#/definitions/termBoost" },
+ "description": "List of field=value term-boost rules that apply only to this asset."
+ },
+ "fieldValueBoosts": {
+ "type": "array",
+ "items": { "$ref": "#/definitions/fieldValueBoost" },
+ "description": "List of numeric field-based boosts that apply only to this asset."
+ },
+ "scoreMode": {
+ "type": "string",
+ "enum": ["multiply", "sum", "avg", "first", "max", "min"],
+ "description": "How to combine function scores if multiple boosts are applied."
+ },
+ "boostMode": {
+ "type": "string",
+ "enum": ["multiply", "replace", "sum", "avg", "max", "min"],
+ "description": "How the function score is combined with the main query score."
+ },
+ "additionalSettings": {
+ "type": "object",
+ "additionalProperties": true,
+ "description": "Catch-all for any advanced or asset-specific search settings."
+ },
+ "matchTypeBoostMultipliers": {
+ "type": "object",
+ "description": "Multipliers applied to different match types to control their relative importance.",
+ "properties": {
+ "exactMatchMultiplier": {
+ "type": "number",
+ "description": "Multiplier for exact match queries (term queries on .keyword fields)",
+ "default": 2.0
+ },
+ "phraseMatchMultiplier": {
+ "type": "number",
+ "description": "Multiplier for phrase match queries",
+ "default": 1.5
+ },
+ "fuzzyMatchMultiplier": {
+ "type": "number",
+ "description": "Multiplier for fuzzy match queries",
+ "default": 1.0
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "required": ["assetType"],
+ "additionalProperties": false
+ },
+ "fieldBoost": {
+ "type": "object",
+ "properties": {
+ "field": {
+ "type": "string",
+ "description": "Field name to search/boost."
+ },
+ "boost": {
+ "type": "number",
+ "description": "Relative boost factor for the above field.",
+ "default": 1.0
+ },
+ "matchType": {
+ "type": "string",
+ "enum": ["exact", "phrase", "fuzzy", "standard"],
+ "description": "Type of matching to use for this field. 'exact' uses term query for .keyword fields, 'phrase' uses match_phrase, 'fuzzy' allows fuzzy matching, 'standard' uses the default behavior.",
+ "default": "standard"
+ }
+ },
+ "required": ["field"],
+ "additionalProperties": false
+ },
+ "termBoost": {
+ "type": "object",
+ "properties": {
+ "field": {
+ "type": "string",
+ "description": "The keyword field to match, e.g. tier.tagFQN, tags.tagFQN, certification.tagLabel.tagFQN, etc."
+ },
+ "value": {
+ "type": "string",
+ "description": "The exact keyword value to match in the above field."
+ },
+ "boost": {
+ "type": "number",
+ "description": "Numeric boost factor to apply if a document has field==value."
+ }
+ },
+ "required": ["field", "value", "boost"],
+ "additionalProperties": false
+ },
+ "fieldValueBoost": {
+ "type": "object",
+ "properties": {
+ "field": {
+ "type": "string",
+ "description": "Numeric field name whose value will affect the score."
+ },
+ "factor": {
+ "type": "number",
+ "description": "Multiplier factor for the field value."
+ },
+ "modifier": {
+ "type": "string",
+ "enum": [
+ "none",
+ "log",
+ "log1p",
+ "log2p",
+ "ln",
+ "ln1p",
+ "ln2p",
+ "square",
+ "sqrt",
+ "reciprocal"
+ ],
+ "description": "Optional mathematical transformation to apply to the field value."
+ },
+ "missing": {
+ "type": "number",
+ "description": "Value to use if the field is missing on a document."
+ },
+ "condition": {
+ "type": "object",
+ "description": "Conditional logic (e.g., range constraints) to apply the boost only for certain values.",
+ "properties": {
+ "range": {
+ "type": "object",
+ "properties": {
+ "gt": {
+ "type": "number"
+ },
+ "gte": {
+ "type": "number"
+ },
+ "lt": {
+ "type": "number"
+ },
+ "lte": {
+ "type": "number"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "required": ["field", "factor"],
+ "additionalProperties": false
+ },
+ "aggregation": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "A descriptive name for the aggregation."
+ },
+ "type": {
+ "type": "string",
+ "enum": [
+ "terms",
+ "range",
+ "histogram",
+ "date_histogram",
+ "filters",
+ "missing",
+ "nested",
+ "reverse_nested",
+ "top_hits",
+ "max",
+ "min",
+ "avg",
+ "sum",
+ "stats"
+ ],
+ "description": "The type of aggregation to perform."
+ },
+ "field": {
+ "type": "string",
+ "description": "The field on which this aggregation is performed."
+ },
+ "script": {
+ "type": "string",
+ "description": "Optional script to apply on the terms aggregation.",
+ "default": ""
+ }
+ },
+ "required": ["name", "type"],
+ "additionalProperties": false
+ },
+ "allowedSearchFields": {
+ "type": "object",
+ "properties": {
+ "entityType": {
+ "type": "string",
+ "description": "Entity type this field configuration applies to"
+ },
+ "fields": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "Field name that can be used in searchFields"
+ },
+ "description": {
+ "type": "string",
+ "description": "Detailed explanation of what this field represents and how it affects search behavior"
+ }
+ },
+ "required": ["name", "description"],
+ "additionalProperties": false
+ }
+ }
+ },
+ "required": ["entityType", "fields"],
+ "additionalProperties": false
+ },
+ "allowedFieldValueBoostFields": {
+ "type": "object",
+ "properties": {
+ "entityType": {
+ "type": "string",
+ "description": "Entity type this field value boost configuration applies to"
+ },
+ "fields": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "Field name that can be used in fieldValueBoosts"
+ },
+ "description": {
+ "type": "string",
+ "description": "Detailed explanation of what this numeric field represents and how it can be used for boosting relevance"
+ }
+ },
+ "required": ["name", "description"],
+ "additionalProperties": false
+ }
+ }
+ },
+ "required": ["entityType", "fields"],
+ "additionalProperties": false
+ },
+ "promptSection": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.search.PromptSection",
+ "properties": {
+ "section": {
+ "type": "string",
+ "description": "Section name (e.g., 'CRITICAL FIELD CORRECTIONS', 'QUERY PATTERNS')"
+ },
+ "content": {
+ "type": "string",
+ "description": "The content for this section of the prompt"
+ },
+ "order": {
+ "type": "integer",
+ "description": "Display order for this section (lower numbers appear first)",
+ "default": 100
+ }
+ },
+ "required": ["section", "content"]
+ },
+ "titleSection": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.search.TitleSection",
+ "properties": {
+ "title": {
+ "type": "string",
+ "description": "Title for the section",
+ "default": "INDEX MAPPINGS"
+ },
+ "description": {
+ "type": "string",
+ "description": "Description text for the section",
+ "default": "Below are the Elasticsearch mappings for the relevant indices. Use these to understand the document structure:"
+ },
+ "order": {
+ "type": "integer",
+ "description": "Position of this section in the prompt (lower numbers appear first)",
+ "default": 5
+ }
+ }
+ },
+
+ "fieldInterpretation": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.search.FieldInterpretation",
+ "properties": {
+ "pattern": {
+ "type": "string",
+ "description": "Field pattern to match (e.g., 'tags.tagFQN')"
+ },
+ "explanation": {
+ "type": "string",
+ "description": "How to interpret and query this field pattern"
+ }
+ },
+ "required": ["pattern", "explanation"]
+ },
+
+ "guidelineSection": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.search.GuidelineSection",
+ "properties": {
+ "title": {
+ "type": "string",
+ "description": "Section title (e.g., 'For EntityReference type custom properties')"
+ },
+ "guidelines": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "description": "Individual guideline or rule for this section"
+ }
+ }
+ },
+ "required": ["title", "guidelines"]
+ },
+
+ "queryExample": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.search.QueryExample",
+ "properties": {
+ "description": {
+ "type": "string",
+ "description": "Human-readable description of the example query"
+ },
+ "query": {
+ "type": "string",
+ "description": "Natural language query example"
+ },
+ "esQuery": {
+ "type": "string",
+ "description": "The corresponding Elasticsearch query"
+ },
+ "entityTypes": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "description": "Entity types this example applies to (empty array = all types)"
+ }
+ },
+ "required": ["query", "esQuery"]
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/configuration/securityConfiguration.json b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/securityConfiguration.json
new file mode 100644
index 000000000000..13960dd4c91d
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/securityConfiguration.json
@@ -0,0 +1,20 @@
+{
+ "$id": "https://open-metadata.org/schema/configuration/securityConfiguration.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SecurityConfiguration",
+ "description": "Complete security configuration including authentication and authorization",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.configuration.SecurityConfiguration",
+ "properties": {
+ "authenticationConfiguration": {
+ "description": "Authentication configuration",
+ "$ref": "authenticationConfiguration.json"
+ },
+ "authorizerConfiguration": {
+ "description": "Authorization configuration",
+ "$ref": "authorizerConfiguration.json"
+ }
+ },
+ "required": ["authenticationConfiguration", "authorizerConfiguration"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/configuration/slackAppConfiguration.json b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/slackAppConfiguration.json
new file mode 100644
index 000000000000..dc5cb6ddab6d
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/slackAppConfiguration.json
@@ -0,0 +1,36 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/configuration/slackAppConfiguration.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SlackAppConfiguration",
+ "description": "This schema defines the Slack App Information",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.service.configuration.slackApp.SlackAppConfiguration",
+ "properties": {
+ "clientId": {
+ "description": "Client Id of the Application",
+ "type": "string"
+ },
+ "clientSecret": {
+ "description": "Client Secret of the Application.",
+ "type": "string"
+ },
+ "signingSecret": {
+ "description": "Signing Secret of the Application. Confirm that each request comes from Slack by verifying its unique signature.",
+ "type": "string"
+ },
+ "userToken": {
+ "title": "User Token",
+ "description": "User Token",
+ "type": "string",
+ "format": "password"
+ },
+ "botToken": {
+ "title": "Bot Token",
+ "description": "Bot Token",
+ "type": "string",
+ "format": "password"
+ }
+ },
+ "required": ["clientId", "clientSecret","signingSecret"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/configuration/taskNotificationConfiguration.json b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/taskNotificationConfiguration.json
new file mode 100644
index 000000000000..3a549df29ab2
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/taskNotificationConfiguration.json
@@ -0,0 +1,16 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/configuration/taskNotificationConfiguration.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "TaskNotificationConfiguration",
+ "description": "This schema defines the SSL Config.",
+ "type": "object",
+ "javaType": "org.openmetadata.api.configuration.airflow.TaskNotificationConfiguration",
+ "properties": {
+ "enabled": {
+ "description": "Is Task Notification Enabled?",
+ "type" : "boolean",
+ "default": false
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/configuration/teamsAppConfiguration.json b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/teamsAppConfiguration.json
new file mode 100644
index 000000000000..c635f6b11326
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/teamsAppConfiguration.json
@@ -0,0 +1,28 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/configuration/teamsAppConfiguration.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "TeamsAppConfiguration",
+ "description": "This schema defines the Microsoft Teams App configuration",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.service.configuration.teamsApp.TeamsAppConfiguration",
+ "properties": {
+ "microsoftAppId": {
+ "title": "Microsoft App ID",
+ "description": "Azure AD Application (Client) ID for the Teams bot",
+ "type": "string"
+ },
+ "microsoftAppPassword": {
+ "title": "Microsoft App Password",
+ "description": "Azure AD Client Secret for the Teams bot",
+ "type": "string",
+ "format": "password"
+ },
+ "microsoftAppTenantId": {
+ "title": "Microsoft App Tenant ID",
+ "description": "Azure AD Tenant ID (optional, for single-tenant bots). Use 'common' for multi-tenant.",
+ "type": "string"
+ }
+ },
+ "required": ["microsoftAppId", "microsoftAppPassword"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/configuration/testResultNotificationConfiguration.json b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/testResultNotificationConfiguration.json
new file mode 100644
index 000000000000..5f4a2de426f0
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/testResultNotificationConfiguration.json
@@ -0,0 +1,35 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/configuration/testResultNotificationConfiguration.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "TestResultNotificationConfiguration",
+ "description": "This schema defines the SSL Config.",
+ "type": "object",
+ "javaType": "org.openmetadata.api.configuration.airflow.TestResultNotificationConfiguration",
+ "properties": {
+ "enabled": {
+ "description": "Is Test Notification Enabled?",
+ "type" : "boolean",
+ "default": false
+ },
+ "onResult": {
+ "description": "Send notification on Success, Failed or Aborted?",
+ "type" : "array",
+ "items": {
+ "$ref": "../tests/basic.json#/definitions/testCaseStatus"
+ }
+ },
+ "receivers": {
+ "description": "Send notification on the mail",
+ "type": "array",
+ "items": {
+ "$ref": "../type/basic.json#/definitions/email"
+ }
+ },
+ "sendToOwners": {
+ "description": "Send notification on the mail",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/configuration/themeConfiguration.json b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/themeConfiguration.json
new file mode 100644
index 000000000000..3513a215d27a
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/themeConfiguration.json
@@ -0,0 +1,47 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/configuration/themeConfiguration.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "ThemeConfiguration",
+ "description": "This schema defines the Theme Configuration for UI elements.",
+ "type": "object",
+ "javaType": "org.openmetadata.api.configuration.ThemeConfiguration",
+ "properties": {
+ "primaryColor": {
+ "description": "Primary color used in the UI, in hex code format or empty.",
+ "type": "string",
+ "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$|^$"
+ },
+ "hoverColor": {
+ "description": "Hover color used in the UI, in hex code format or empty.",
+ "type": "string",
+ "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$|^$"
+ },
+ "selectedColor": {
+ "description": "Selected color used in the UI, in hex code format or empty.",
+ "type": "string",
+ "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$|^$"
+ },
+ "errorColor": {
+ "description": "Color used to indicate errors in the UI, in hex code format or empty",
+ "type": "string",
+ "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$|^$"
+ },
+ "successColor": {
+ "description": "Color used to indicate success in the UI, in hex code format or empty",
+ "type": "string",
+ "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$|^$"
+ },
+ "warningColor": {
+ "description": "Color used to indicate warnings in the UI, in hex code format or empty",
+ "type": "string",
+ "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$|^$"
+ },
+ "infoColor": {
+ "description": "Color used for informational messages in the UI, in hex code format or empty",
+ "type": "string",
+ "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$|^$"
+ }
+ },
+ "required": ["primaryColor", "errorColor", "successColor","warningColor","infoColor"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/configuration/uiThemePreference.json b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/uiThemePreference.json
new file mode 100644
index 000000000000..0e5ffd8cb075
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/uiThemePreference.json
@@ -0,0 +1,20 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/configuration/uiThemePreference.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "UiThemePreference",
+ "description": "This schema defines UI related configuration and settings.",
+ "type": "object",
+ "javaType": "org.openmetadata.api.configuration.UiThemePreference",
+ "properties": {
+ "customLogoConfig": {
+ "$ref": "../configuration/logoConfiguration.json",
+ "description": "References the LogoConfiguration schema which includes settings related to the custom logos used in the application's user interface."
+ },
+ "customTheme": {
+ "$ref": "../configuration/themeConfiguration.json",
+ "description": "References the ThemeConfiguration schema that defines the custom theme color used in the application's user interface."
+ }
+ },
+ "additionalProperties": false,
+ "required": ["customLogoConfig", "customTheme"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/configuration/workflowSettings.json b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/workflowSettings.json
new file mode 100644
index 000000000000..9678ce98ddc7
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/configuration/workflowSettings.json
@@ -0,0 +1,99 @@
+{
+ "$id": "https://open-metadata.org/schema/configuration/workflowSettings.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "WorkflowSettings",
+ "description": "This schema defines the Workflow Settings.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.configuration.WorkflowSettings",
+ "definitions": {
+ "executorConfiguration": {
+ "type": "object",
+ "properties": {
+ "corePoolSize": {
+ "type": "integer",
+ "default": 10,
+ "description": "Default worker Pool Size. The Workflow Executor by default has this amount of workers."
+ },
+ "maxPoolSize": {
+ "type": "integer",
+ "default": 20,
+ "description": "Maximum worker Pool Size. The Workflow Executor could grow up to this number of workers."
+ },
+ "queueSize": {
+ "type": "integer",
+ "default": 1000,
+ "description": "Amount of Tasks that can be queued to be picked up by the Workflow Executor."
+ },
+ "tasksDuePerAcquisition": {
+ "type": "integer",
+ "default": 20,
+ "description": "The amount of Tasks that the Workflow Executor is able to pick up each time it looks for more."
+ },
+ "jobLockTimeInMillis": {
+ "type": "integer",
+ "default": 1296000000,
+ "description": "The amount of time a Job gets locked before being retried. Default: 15 Days. This avoids jobs that takes too long to run being retried while running."
+ },
+ "asyncJobAcquisitionInterval": {
+ "type": "integer",
+ "default": 1000,
+ "description": "The interval in milliseconds to acquire async jobs. Default: 1 second. Keep this low so user-facing workflow tasks (e.g. Glossary Term approval) appear within seconds of the triggering entity change instead of waiting a full polling cycle."
+ },
+ "timerJobAcquisitionInterval": {
+ "type": "integer",
+ "default": 5000,
+ "description": "The interval in milliseconds to acquire timer jobs. Default: 5 seconds. Timer jobs (due-date escalations, etc.) are less latency-sensitive than async jobs but still benefit from quick pickup."
+ }
+ },
+ "additionalProperties": false
+ },
+ "historyCleanUpConfiguration": {
+ "type": "object",
+ "properties": {
+ "cleanAfterNumberOfDays": {
+ "type": "integer",
+ "default": 7,
+ "description": "Cleans the Workflow Task that were finished, after given number of days."
+ },
+ "batchSize": {
+ "type": "integer",
+ "default": 1000,
+ "description": "Batch size used when cleaning up Flowable History data"
+ },
+ "timeCycleConfig": {
+ "type": "string",
+ "default": "0 0 0 ? * 1",
+ "description": "Cron expression used by Flowable's history cleaning job (setHistoryCleaningTimeCycleConfig). For example: '0 0 1 * * ?' runs daily at 01:00, '0 * * ? * *' runs every minute (testing only)."
+ }
+ },
+ "additionalProperties": false
+ },
+ "runTimeCleanUpConfiguration": {
+ "type": "object",
+ "properties": {
+ "batchSize": {
+ "type": "integer",
+ "default": 500,
+ "description": "Batch size used when cleaning up Flowable Run Time data"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "executorConfiguration": {
+ "$ref": "#/definitions/executorConfiguration",
+ "description": "Used to set up the Workflow Executor Settings."
+ },
+ "historyCleanUpConfiguration": {
+ "$ref": "#/definitions/historyCleanUpConfiguration",
+ "description": "Used to set up the History CleanUp Settings."
+ },
+ "runTimeCleanUpConfiguration": {
+ "$ref": "#/definitions/runTimeCleanUpConfiguration",
+ "description": "Used to set up the History CleanUp Settings."
+ }
+ },
+ "required": [],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/custom/dataInsightCustomChart.json b/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/custom/dataInsightCustomChart.json
new file mode 100644
index 000000000000..9af4a0c21a5b
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/custom/dataInsightCustomChart.json
@@ -0,0 +1,134 @@
+{
+ "$id": "https://open-metadata.org/schema/dataInsight/custom/dataInsightCustomChart.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Chart",
+ "description": "DI Chart Entity",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.dataInsight.custom.DataInsightCustomChart",
+ "javaInterfaces": [
+ "org.openmetadata.schema.EntityInterface"
+ ],
+ "definitions": {
+ "function": {
+ "javaType": "org.openmetadata.schema.dataInsight.custom.Function",
+ "description": "aggregation function for chart",
+ "type": "string",
+ "enum": [
+ "count",
+ "sum",
+ "avg",
+ "min",
+ "max",
+ "unique"
+ ]
+ },
+ "kpiDetails": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.dataInsight.custom.KPIDetails",
+ "description": "KPI details for the data insight chart.",
+ "properties": {
+ "startDate": {
+ "description": "Start Date of KPI",
+ "type": "string"
+ },
+ "endDate": {
+ "description": "End Date of KPI",
+ "type": "string"
+ },
+ "target": {
+ "description": "Target value of KPI",
+ "type": "number"
+ }
+ }
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier of this table instance.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name that identifies this data insight chart.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name the data insight chart.",
+ "type": "string"
+ },
+ "fullyQualifiedName": {
+ "description": "FullyQualifiedName same as `name`.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "description": {
+ "description": "Description of the data insight chart.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "chartType": {
+ "description": "Type of chart, used for UI to render the chart",
+ "type": "string",
+ "enum": [
+ "LineChart",
+ "AreaChart",
+ "BarChart",
+ "SummaryCard"
+ ]
+ },
+ "chartDetails": {
+ "oneOf": [
+ {
+ "$ref": "lineChart.json"
+ },
+ {
+ "$ref": "summaryCard.json"
+ }
+ ]
+ },
+ "isSystemChart": {
+ "description": "Flag to indicate if the chart is system generated or user created.",
+ "type": "boolean",
+ "default": false
+ },
+ "owner": {
+ "description": "Owner of this chart",
+ "$ref": "../../type/entityReference.json"
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this entity.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "dashboard": {
+ "description": "Dashboard where this chart is displayed",
+ "$ref": "../../type/entityReference.json"
+ }
+ },
+ "required": [
+ "name",
+ "chartDetails"
+ ],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/custom/dataInsightCustomChartResult.json b/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/custom/dataInsightCustomChartResult.json
new file mode 100644
index 000000000000..1db1225ea6b0
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/custom/dataInsightCustomChartResult.json
@@ -0,0 +1,31 @@
+{
+ "$id": "https://open-metadata.org/schema/dataInsight/custom/dataInsightCustomChartResult.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DataInsightCustomChartResult",
+ "description": "Data Insight Custom Chart Result",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.dataInsight.custom.DataInsightCustomChartResult",
+ "properties": {
+ "count": {
+ "description": "Count of Result",
+ "type": "number"
+ },
+ "day": {
+ "description": "Date of Result",
+ "type": "number"
+ },
+ "group": {
+ "description": "Group of Result",
+ "type": "string"
+ },
+ "metric":{
+ "description": "Metric Name",
+ "type": "string"
+ },
+ "term": {
+ "description": "Term of Result, used in case of horizontal axis not timestamp",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/custom/dataInsightCustomChartResultList.json b/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/custom/dataInsightCustomChartResultList.json
new file mode 100644
index 000000000000..1e71481c5f67
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/custom/dataInsightCustomChartResultList.json
@@ -0,0 +1,21 @@
+{
+ "$id": "https://open-metadata.org/schema/dataInsight/custom/dataInsightCustomChartResultList.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DataInsightCustomChartResultList",
+ "description": "Data Insight Custom Chart Result List",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.dataInsight.custom.DataInsightCustomChartResultList",
+ "properties": {
+ "results": {
+ "description": "List of Results",
+ "type": "array",
+ "items": {
+ "$ref": "dataInsightCustomChartResult.json"
+ }
+ },
+ "kpiDetails": {
+ "$ref": "dataInsightCustomChart.json#/definitions/kpiDetails"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/custom/formulaHolder.json b/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/custom/formulaHolder.json
new file mode 100644
index 000000000000..30d68325d3e6
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/custom/formulaHolder.json
@@ -0,0 +1,27 @@
+{
+ "$id": "https://open-metadata.org/schema/dataInsight/custom/formulaHolder.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "formulaHolder",
+ "description": "formulaHolder",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.dataInsight.custom.FormulaHolder",
+ "properties": {
+ "formula": {
+ "description": "Formula",
+ "type": "string"
+ },
+ "function": {
+ "$ref": "dataInsightCustomChart.json#/definitions/function"
+ },
+ "field": {
+ "description": "Group of Result",
+ "type": "string"
+ },
+ "query": {
+ "description": "Group of Result",
+ "type": "string"
+ }
+
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/custom/lineChart.json b/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/custom/lineChart.json
new file mode 100644
index 000000000000..844203c24121
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/custom/lineChart.json
@@ -0,0 +1,104 @@
+{
+ "$id": "https://open-metadata.org/schema/dataInsight/custom/lineChart.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "LineChart",
+ "description": "Line Chart",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.dataInsight.custom.LineChart",
+ "definitions": {
+ "metrics": {
+ "name": "Metrics",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.dataInsight.custom.LineChartMetric",
+ "properties": {
+ "name": {
+ "description": "Name of the metric for the data insight chart.",
+ "type": "string"
+ },
+ "function": {
+ "$ref": "dataInsightCustomChart.json#/definitions/function"
+ },
+ "field": {
+ "description": "Filter field for the data insight chart.",
+ "type": "string"
+ },
+ "filter": {
+ "description": "Filter value for the data insight chart.",
+ "type": "string"
+ },
+ "treeFilter": {
+ "description": "Tree filter value for the data insight chart. Needed for UI to recreate advance filter tree.",
+ "type": "string"
+ },
+ "formula": {
+ "description": "Formula for the data insight chart calculation.",
+ "type": "string"
+ }
+ }
+ }
+ },
+ "properties": {
+ "type": {
+ "description": "Type of the data insight chart.",
+ "type": "string",
+ "enum": [
+ "LineChart"
+ ],
+ "default": "LineChart"
+ },
+ "metrics": {
+ "description": "Metrics for the data insight chart.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/metrics"
+ }
+ },
+ "groupBy": {
+ "description": "Breakdown field for the data insight chart.",
+ "type": "string"
+ },
+ "includeGroups": {
+ "description": "List of groups to be included in the data insight chart when groupBy is specified.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "excludeGroups": {
+ "description": "List of groups to be excluded in the data insight chart when groupBy is specified.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "xAxisLabel": {
+ "description": "X-axis label for the data insight chart.",
+ "type": "string"
+ },
+ "yAxisLabel": {
+ "description": "Y-axis label for the data insight chart.",
+ "type": "string"
+ },
+ "kpiDetails": {
+ "$ref": "dataInsightCustomChart.json#/definitions/kpiDetails"
+ },
+ "xAxisField": {
+ "description": "X-axis field for the data insight chart.",
+ "type": "string",
+ "default": "@timestamp"
+ },
+ "includeXAxisFiled": {
+ "description": "Regex to include fields in the data insight chart when xAxisField is specified.",
+ "type": "string"
+ },
+ "excludeXAxisField": {
+ "description": "Regex to exclude fields from the data insight chart when xAxisField is specified.",
+ "type": "string"
+ },
+ "searchIndex": {
+ "description": "Search index for the data insight chart.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/custom/summaryCard.json b/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/custom/summaryCard.json
new file mode 100644
index 000000000000..8491e3b843b4
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/custom/summaryCard.json
@@ -0,0 +1,58 @@
+{
+ "$id": "https://open-metadata.org/schema/dataInsight/custom/summaryCard.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SummaryCard",
+ "description": "Summary Card",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.dataInsight.custom.SummaryCard",
+ "definitions": {
+ "metrics": {
+ "name": "Metrics",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.dataInsight.custom.SummaryChartMetric",
+ "properties": {
+ "name": {
+ "description": "Name of the metric for the data insight chart.",
+ "type": "string"
+ },
+ "function": {
+ "$ref": "dataInsightCustomChart.json#/definitions/function"
+ },
+ "field": {
+ "description": "Filter field for the data insight chart.",
+ "type": "string"
+ },
+ "filter": {
+ "description": "Filter value for the data insight chart.",
+ "type": "string"
+ },
+ "treeFilter": {
+ "description": "Tree filter value for the data insight chart. Needed for UI to recreate advance filter tree.",
+ "type": "string"
+ },
+ "formula": {
+ "description": "Formula for the data insight chart calculation.",
+ "type": "string"
+ }
+ }
+ }
+ },
+ "properties": {
+ "type": {
+ "description": "Type of the data insight chart.",
+ "type": "string",
+ "enum": [
+ "SummaryCard"
+ ],
+ "default": "SummaryCard"
+ },
+ "metrics": {
+ "description": "Metrics for the data insight chart.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/metrics"
+ }
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/dataInsightChart.json b/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/dataInsightChart.json
new file mode 100644
index 000000000000..15e3472a8a47
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/dataInsightChart.json
@@ -0,0 +1,137 @@
+{
+ "$id": "https://open-metadata.org/schema/dataInsight/dataInsightChart.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DataInsightChart",
+ "description": "DataInsightChart represents the definition of a chart with its parameters",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.dataInsight.DataInsightChart",
+ "javaInterfaces": ["org.openmetadata.schema.EntityInterface"],
+ "definitions": {
+ "chartParameterValues": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.dataInsight.ChartParameterValues",
+ "description": "This schema defines the parameter values for a chart.",
+ "properties": {
+ "name": {
+ "description": "name of the parameter.",
+ "type": "string"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this parameter name.",
+ "type": "string"
+ },
+ "chartDataType": {
+ "javaType": "org.openmetadata.schema.type.DataInsightChartDataType",
+ "description": "Data type of the parameter (int, date etc.).",
+ "type": "string",
+ "enum": [
+ "NUMBER",
+ "INT",
+ "FLOAT",
+ "DOUBLE",
+ "DECIMAL",
+ "TIMESTAMP",
+ "TIME",
+ "DATE",
+ "DATETIME",
+ "ARRAY",
+ "MAP",
+ "SET",
+ "STRING",
+ "BOOLEAN",
+ "PERCENTAGE"
+ ]
+ }
+ }
+ },
+ "dataReportIndex": {
+ "javaType": "org.openmetadata.schema.type.DataReportIndex",
+ "description": "Index where data are stored",
+ "type": "string",
+ "enum": [
+ "entity_report_data_index",
+ "web_analytic_entity_view_report_data_index",
+ "web_analytic_user_activity_report_data_index",
+ "raw_cost_analysis_report_data_index",
+ "aggregated_cost_analysis_report_data_index"
+ ]
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier of this table instance.",
+ "$ref": "../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name that identifies this data insight chart.",
+ "$ref": "../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this data insight chart.",
+ "type": "string"
+ },
+ "fullyQualifiedName": {
+ "description": "FullyQualifiedName same as `name`.",
+ "$ref": "../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "description": {
+ "description": "Description of the data insight chart.",
+ "$ref": "../type/basic.json#/definitions/markdown"
+ },
+ "dataIndexType": {
+ "$ref": "#/definitions/dataReportIndex"
+ },
+ "dimensions": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/chartParameterValues"
+ }
+ },
+ "metrics": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/chartParameterValues"
+ }
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "owners": {
+ "description": "Owners of this Pipeline.",
+ "$ref": "../type/entityReferenceList.json",
+ "default": null
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this entity.",
+ "$ref": "../type/basic.json#/definitions/href"
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "domains" : {
+ "description": "Domains the asset belongs to. When not set, the asset inherits the domain from the parent it belongs to.",
+ "$ref": "../type/entityReferenceList.json"
+ }
+ },
+ "required": ["name"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/dataInsightChartResult.json b/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/dataInsightChartResult.json
new file mode 100644
index 000000000000..460359dd4578
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/dataInsightChartResult.json
@@ -0,0 +1,54 @@
+{
+ "$id": "https://open-metadata.org/schema/dataInsight/dataInsightChartResult.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DataInsightChartResult",
+ "description": "DataInsightChartResult represents data that will be consumed by a specific chart",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.dataInsight.DataInsightChartResult",
+ "definitions": {
+ "dataInsightChartType": {
+ "description": "chart type. Must match `name` of a `dataInsightChartDefinition`.",
+ "type": "string",
+ "enum": [
+ "DailyActiveUsers",
+ "MostActiveUsers",
+ "MostViewedEntities",
+ "PageViewsByEntities",
+ "UnusedAssets",
+ "AggregatedUnusedAssetsSize",
+ "AggregatedUnusedAssetsCount",
+ "AggregatedUsedVsUnusedAssetsSize",
+ "AggregatedUsedVsUnusedAssetsCount"
+ ]
+ }
+ },
+ "properties": {
+ "chartType": {
+ "description": "Chart Type that will consume the data. Must match name of dataInsightChart.",
+ "$ref": "#/definitions/dataInsightChartType"
+ },
+ "total": {
+ "description": "Total number of hits returned by the aggregation.",
+ "type": "integer"
+ },
+ "data": {
+ "description": "Array of consumable data.",
+ "type": "array",
+ "items": {
+ "anyOf": [
+ {"$ref": "./type/dailyActiveUsers.json"},
+ {"$ref": "./type/pageViewsByEntities.json"},
+ {"$ref": "type/mostActiveUsers.json"},
+ {"$ref": "type/mostViewedEntities.json"},
+ {"$ref": "type/unusedAssets.json"},
+ {"$ref": "type/aggregatedUnusedAssetsSize.json"},
+ {"$ref": "type/aggregatedUnusedAssetsCount.json"},
+ {"$ref": "type/aggregatedUsedVsUnusedAssetsSize.json"},
+ {"$ref": "type/aggregatedUsedVsUnusedAssetsCount.json"}
+ ]
+ }
+ }
+ },
+ "required": ["chartType"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/kpi/basic.json b/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/kpi/basic.json
new file mode 100644
index 000000000000..7614729b9024
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/kpi/basic.json
@@ -0,0 +1,62 @@
+{
+ "$id": "https://open-metadata.org/schema/dataInsight/kpi/basic.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Basic",
+ "description": "This schema defines basic types that are used by other Kpi Definitions",
+ "definitions": {
+ "kpiTargetType": {
+ "javaType": "org.openmetadata.schema.dataInsight.type.KpiTargetType",
+ "description": "This enum defines the type of key Result",
+ "type": "string",
+ "enum": [
+ "NUMBER",
+ "PERCENTAGE"
+ ]
+ },
+ "kpiTarget": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.dataInsight.type.KpiTarget",
+ "description": "This schema defines the parameter values that can be passed for a Kpi Parameter.",
+ "properties": {
+ "name": {
+ "description": "name of the parameter. Must match the parameter names in metrics of the chart this objective refers",
+ "type": "string"
+ },
+ "value": {
+ "description": "value to be passed for the Parameters. These are input from Users. We capture this in string and convert during the runtime.",
+ "type": "string"
+ },
+ "targetMet": {
+ "description": "whether the target value was met or not.",
+ "type": "boolean"
+ }
+ },
+ "required": ["name", "value"],
+ "additionalProperties": false
+ },
+ "kpiResult": {
+ "description": "Schema to capture kpi result.",
+ "javaType": "org.openmetadata.schema.dataInsight.type.KpiResult",
+ "type": "object",
+ "properties": {
+ "timestamp": {
+ "description": "Data one which result is updated",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "kpiFqn": {
+ "description": "KPI FQN",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "targetResult": {
+ "description": "Metric and their corresponding current results",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/kpiTarget"
+ }
+ }
+ },
+ "required": ["timestamp", "targetResult"],
+ "additionalProperties": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/kpi/kpi.json b/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/kpi/kpi.json
new file mode 100644
index 000000000000..4b8e032bbe98
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/kpi/kpi.json
@@ -0,0 +1,102 @@
+{
+ "$id": "https://open-metadata.org/schema/dataInsight/kpi/kpi.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Kpi",
+ "description": "A `KIP` entity defines a metric and a target.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.dataInsight.kpi.Kpi",
+ "javaInterfaces": ["org.openmetadata.schema.EntityInterface"],
+ "properties": {
+ "id": {
+ "description": "Unique identifier of this KPI Definition instance.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name that identifies this KPI Definition.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this KPI Definition.",
+ "type": "string"
+ },
+ "fullyQualifiedName": {
+ "description": "FullyQualifiedName same as `name`.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "description": {
+ "description": "Description of the KpiObjective.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "metricType": {
+ "$ref": "./basic.json#/definitions/kpiTargetType"
+ },
+ "dataInsightChart": {
+ "description": "Data Insight Chart Referred by this Kpi Objective.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "targetValue": {
+ "description": "Metrics from the chart and the target to achieve the result.",
+ "type": "number"
+ },
+ "kpiResult": {
+ "description": "Result of the Kpi",
+ "$ref": "./basic.json#/definitions/kpiResult"
+ },
+ "startDate": {
+ "description": "Start Date for the KPIs",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "endDate": {
+ "description": "End Date for the KPIs",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "owners": {
+ "description": "Owners of this KPI definition.",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this entity.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "domains" : {
+ "description": "Domains the asset belongs to. When not set, the asset inherits the domain from the parent it belongs to.",
+ "$ref": "../../type/entityReferenceList.json"
+ }
+ },
+ "required": [
+ "name",
+ "description",
+ "dataInsightChart",
+ "startDate",
+ "endDate",
+ "targetValue",
+ "metricType"
+ ],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/type/aggregatedUnusedAssetsCount.json b/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/type/aggregatedUnusedAssetsCount.json
new file mode 100644
index 000000000000..5f4eadaff3ab
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/type/aggregatedUnusedAssetsCount.json
@@ -0,0 +1,24 @@
+{
+ "$id": "https://open-metadata.org/schema/dataInsight/type/aggregatedUnusedAssetsCount.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AggregatedUnusedAssetsCount",
+ "description": "AggregatedUnusedAssetsCount data blob",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.dataInsight.type.AggregatedUnusedAssetsCount",
+
+ "properties": {
+ "timestamp": {
+ "description": "timestamp",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "frequentlyUsedDataAssets": {
+ "description": "Frequently used Data Assets",
+ "$ref": "../../analytics/reportDataType/aggregatedCostAnalysisReportData.json#/definitions/dataAssetValues"
+ },
+ "unusedDataAssets": {
+ "description": "Unused Data Assets",
+ "$ref": "../../analytics/reportDataType/aggregatedCostAnalysisReportData.json#/definitions/dataAssetValues"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/type/aggregatedUnusedAssetsSize.json b/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/type/aggregatedUnusedAssetsSize.json
new file mode 100644
index 000000000000..435902a28285
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/type/aggregatedUnusedAssetsSize.json
@@ -0,0 +1,23 @@
+{
+ "$id": "https://open-metadata.org/schema/dataInsight/type/aggregatedUnusedAssetsSize.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AggregatedUnusedAssetsSize",
+ "description": "AggregatedUnusedAssetsSize data blob",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.dataInsight.type.AggregatedUnusedAssetsSize",
+ "properties": {
+ "timestamp": {
+ "description": "timestamp",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "frequentlyUsedDataAssets": {
+ "description": "Frequently used Data Assets",
+ "$ref": "../../analytics/reportDataType/aggregatedCostAnalysisReportData.json#/definitions/dataAssetValues"
+ },
+ "unusedDataAssets": {
+ "description": "Unused Data Assets",
+ "$ref": "../../analytics/reportDataType/aggregatedCostAnalysisReportData.json#/definitions/dataAssetValues"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/type/aggregatedUsedVsUnusedAssetsCount.json b/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/type/aggregatedUsedVsUnusedAssetsCount.json
new file mode 100644
index 000000000000..c8158b24bc24
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/type/aggregatedUsedVsUnusedAssetsCount.json
@@ -0,0 +1,31 @@
+{
+ "$id": "https://open-metadata.org/schema/dataInsight/type/aggregatedUsedVsUnusedAssetsCount.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AggregatedUsedVsUnusedAssetsCount",
+ "description": "AggregatedUsedVsUnusedAssetsCount data blob",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.dataInsight.type.AggregatedUsedVsUnusedAssetsCount",
+ "properties": {
+ "timestamp": {
+ "description": "timestamp",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "UnusedPercentage": {
+ "description": "Percentage of the count of unused assets (last access >= 3 days)",
+ "type": "number"
+ },
+ "UsedPercentage": {
+ "description": "Percentage of the count of used assets (last access < 3 days)",
+ "type": "number"
+ },
+ "Unused": {
+ "description": "Count of unused assets (last access >= 3 days)",
+ "type": "number"
+ },
+ "Used": {
+ "description": "Count of used assets (last access < 3 days)",
+ "type": "number"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/type/aggregatedUsedVsUnusedAssetsSize.json b/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/type/aggregatedUsedVsUnusedAssetsSize.json
new file mode 100644
index 000000000000..9e92fa553ce0
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/type/aggregatedUsedVsUnusedAssetsSize.json
@@ -0,0 +1,31 @@
+{
+ "$id": "https://open-metadata.org/schema/dataInsight/type/aggregatedUsedVsUnusedAssetsSize.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AggregatedUsedVsUnusedAssetsSize",
+ "description": "AggregatedUsedVsUnusedAssetsSize data blob",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.dataInsight.type.AggregatedUsedVsUnusedAssetsSize",
+ "properties": {
+ "timestamp": {
+ "description": "timestamp",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "UnusedPercentage": {
+ "description": "Percentage of the size of unused assets (last access >= 3 days)",
+ "type": "number"
+ },
+ "UsedPercentage": {
+ "description": "Percentage of the size of used assets (last access < 3 days)",
+ "type": "number"
+ },
+ "Unused": {
+ "description": "Size of unused assets (last access >= 3 days)",
+ "type": "number"
+ },
+ "Used": {
+ "description": "Size of used assets (last access < 3 days)",
+ "type": "number"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/type/dailyActiveUsers.json b/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/type/dailyActiveUsers.json
new file mode 100644
index 000000000000..32bbf72c8156
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/type/dailyActiveUsers.json
@@ -0,0 +1,19 @@
+{
+ "$id": "https://open-metadata.org/schema/dataInsight/type/dailyActiveUsers.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DailyActiveUsers",
+ "description": "dailyActiveUsers data blob",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.dataInsight.type.DailyActiveUsers",
+ "properties": {
+ "timestamp": {
+ "description": "timestamp",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "activeUsers": {
+ "description": "Number of active users (user with at least 1 session).",
+ "type": "integer"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/type/mostActiveUsers.json b/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/type/mostActiveUsers.json
new file mode 100644
index 000000000000..1e5e012fd942
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/type/mostActiveUsers.json
@@ -0,0 +1,39 @@
+{
+ "$id": "https://open-metadata.org/schema/dataInsight/type/mostActiveUsers.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "MostActiveUsers",
+ "description": "pageViewsByEntities data blob",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.dataInsight.type.MostActiveUsers",
+ "properties": {
+ "userName": {
+ "description": "Name of a user",
+ "type": "string"
+ },
+ "team": {
+ "description": "Team a user belongs to",
+ "type": "string"
+ },
+ "lastSession": {
+ "description": "date time of the most recent session for the user",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "sessions": {
+ "description": "Total number of sessions",
+ "type": "number"
+ },
+ "sessionDuration": {
+ "description": "Total duration of all sessions in seconds",
+ "type": "number"
+ },
+ "avgSessionDuration": {
+ "description": "avg. duration of a sessions in seconds",
+ "type": "number"
+ },
+ "pageViews": {
+ "description": "Total number of pages viewed by the user",
+ "type": "number"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/type/mostViewedEntities.json b/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/type/mostViewedEntities.json
new file mode 100644
index 000000000000..8b11276fc954
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/type/mostViewedEntities.json
@@ -0,0 +1,31 @@
+{
+ "$id": "https://open-metadata.org/schema/dataInsight/type/mostViewedEntities.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "MostViewedEntities",
+ "description": "pageViewsByEntities data blob",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.dataInsight.type.MostViewedEntities",
+ "properties": {
+ "entityFqn": {
+ "description": "Number of page views",
+ "type": "string"
+ },
+ "entityHref": {
+ "description": "Entity href link",
+ "type": "string"
+ },
+ "owner": {
+ "description": "Owner of the entity",
+ "type": "string"
+ },
+ "entityType": {
+ "description": "Type of entity. Derived from the page URL.",
+ "type": "string"
+ },
+ "pageViews": {
+ "description": "Type of entity. Derived from the page URL.",
+ "type": "number"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/type/pageViewsByEntities.json b/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/type/pageViewsByEntities.json
new file mode 100644
index 000000000000..95968fe46b2f
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/type/pageViewsByEntities.json
@@ -0,0 +1,23 @@
+{
+ "$id": "https://open-metadata.org/schema/dataInsight/type/pageViewsByEntities.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "PageViewsByEntities",
+ "description": "pageViewsByEntities data blob",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.dataInsight.type.PageViewsByEntities",
+ "properties": {
+ "timestamp": {
+ "description": "timestamp",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "pageViews": {
+ "description": "Number of page views",
+ "type": "number"
+ },
+ "entityType": {
+ "description": "Type of entity. Derived from the page URL.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/type/unusedAssets.json b/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/type/unusedAssets.json
new file mode 100644
index 000000000000..a81099384aa8
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/dataInsight/type/unusedAssets.json
@@ -0,0 +1,23 @@
+{
+ "$id": "https://open-metadata.org/schema/dataInsight/type/unusedAssets.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "UnusedAssets",
+ "description": "UnusedAssets data blob",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.dataInsight.type.UnusedAssets",
+ "properties": {
+ "entity": {
+ "description": "Entity of the life cycle data",
+ "$ref": "../../type/entityReference.json"
+ },
+ "sizeInBytes": {
+ "description": "Size of the asset in bytes",
+ "type": "number"
+ },
+ "lastAccessedAt": {
+ "description": "timestamp",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/email/emailRequest.json b/openmetadata-spec/bin/src/main/resources/json/schema/email/emailRequest.json
new file mode 100644
index 000000000000..0e7b91806ac7
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/email/emailRequest.json
@@ -0,0 +1,73 @@
+{
+ "$id": "https://open-metadata.org/schema/email/emailRequest.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "EmailRequest",
+ "description": "This schema defines the Email Request for creating Email",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.email.EmailRequest",
+ "definitions": {
+ "nameEmailPair": {
+ "javaType": "org.openmetadata.schema.email.NameEmailPair",
+ "description": "Name Email Pair",
+ "type": "object",
+ "properties": {
+ "name": {
+ "description": "Name",
+ "type": "string"
+ },
+ "email": {
+ "description": "Email address of the user.",
+ "$ref": "../type/basic.json#/definitions/email"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["email"]
+ }
+ },
+ "properties": {
+ "senderName": {
+ "description": "Sender Name",
+ "type": "string"
+ },
+ "senderMail": {
+ "description": "From Email Address",
+ "type": "string"
+ },
+ "recipientMails": {
+ "description": "List of Receiver Name with Email",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/nameEmailPair"
+ }
+ },
+ "ccMails": {
+ "description": "List of CC",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/nameEmailPair"
+ }
+ },
+ "bccMails": {
+ "description": "List of BCC",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/nameEmailPair"
+ }
+ },
+ "subject": {
+ "description": "Subject for Mail",
+ "type": "string"
+ },
+ "contentType": {
+ "type": "string",
+ "enum": ["plain", "html"],
+ "default": "plain"
+ },
+ "content": {
+ "description": "Content for mail",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["subject", "contentType"]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/email/emailTemplate.json b/openmetadata-spec/bin/src/main/resources/json/schema/email/emailTemplate.json
new file mode 100644
index 000000000000..70074be5b20d
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/email/emailTemplate.json
@@ -0,0 +1,24 @@
+{
+ "$id": "https://open-metadata.org/schema/email/emailTemplate.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Email Template",
+ "description": "Schema defining email templates.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.email.EmailTemplate",
+ "properties": {
+ "template": {
+ "description": "Template data.",
+ "type": "string"
+ },
+ "placeHolders": {
+ "description": "List of placeholders.",
+ "type": "array",
+ "items": {
+ "$ref": "./emailTemplatePlaceholder.json"
+ },
+ "uniqueItems": true
+ }
+ },
+ "required": ["template", "placeHolders"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/email/emailTemplatePlaceholder.json b/openmetadata-spec/bin/src/main/resources/json/schema/email/emailTemplatePlaceholder.json
new file mode 100644
index 000000000000..d83e761ed4f6
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/email/emailTemplatePlaceholder.json
@@ -0,0 +1,20 @@
+{
+ "$id": "https://open-metadata.org/schema/email/emailTemplatePlaceholder.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Email Template Placeholder",
+ "description": "Schema defining placeholders used in email templates.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.email.EmailTemplatePlaceholder",
+ "properties": {
+ "name": {
+ "description": "Name of the placeholder.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of what this placeholder represents.",
+ "type": "string"
+ }
+ },
+ "required": ["name", "description"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/email/smtpSettings.json b/openmetadata-spec/bin/src/main/resources/json/schema/email/smtpSettings.json
new file mode 100644
index 000000000000..a11ac5c7c7d3
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/email/smtpSettings.json
@@ -0,0 +1,59 @@
+{
+ "$id": "https://open-metadata.org/schema/email/smtpSettings.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SmtpSettings",
+ "description": "This schema defines the SMTP Settings for sending Email",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.email.SmtpSettings",
+ "properties": {
+ "emailingEntity": {
+ "description": "Emailing Entity",
+ "type": "string",
+ "default": "OpenMetadata"
+ },
+ "supportUrl": {
+ "description": "Support Url",
+ "type": "string",
+ "default": "https://slack.open-metadata.org"
+ },
+ "enableSmtpServer": {
+ "description": "If this is enable password will details will be shared on mail",
+ "type": "boolean",
+ "default": false
+ },
+ "senderMail": {
+ "description": "Mail of the sender",
+ "type": "string"
+ },
+ "serverEndpoint": {
+ "description": "Smtp Server Endpoint",
+ "type": "string"
+ },
+ "serverPort": {
+ "description": "Smtp Server Port",
+ "type": "integer"
+ },
+ "username": {
+ "description": "Smtp Server Username",
+ "type": "string"
+ },
+ "password": {
+ "description": "Smtp Server Password",
+ "type": "string"
+ },
+ "transportationStrategy": {
+ "type": "string",
+ "enum": ["SMTP", "SMTPS", "SMTP_TLS"],
+ "default": "SMTP"
+ },
+ "templatePath": {
+ "type": "string"
+ },
+ "templates": {
+ "type": "string",
+ "enum": ["openmetadata", "collate"],
+ "default": "openmetadata"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/email/templateValidationReponse.json b/openmetadata-spec/bin/src/main/resources/json/schema/email/templateValidationReponse.json
new file mode 100644
index 000000000000..404098db2efb
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/email/templateValidationReponse.json
@@ -0,0 +1,35 @@
+{
+ "$id": "https://open-metadata.org/schema/email/templateValidationResponse.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Email Template Validation Reponse",
+ "description": "Schema defining email templates.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.email.TemplateValidationResponse",
+ "properties": {
+ "isValid": {
+ "description": "Flag indicating if the template is valid.",
+ "type": "boolean"
+ },
+ "missingPlaceholder": {
+ "description": "List of missing placeholders.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "uniqueItems": true
+ },
+ "additionalPlaceholder": {
+ "description": "List of additional placeholders.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "uniqueItems": true
+ },
+ "message": {
+ "description": "Validation message.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/activity/activityEvent.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/activity/activityEvent.json
new file mode 100644
index 000000000000..ccdf8e5399ec
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/activity/activityEvent.json
@@ -0,0 +1,93 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/activity/activityEvent.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "ActivityEvent",
+ "description": "A lightweight activity notification for user dashboards and feeds. NOT for compliance, audit trails, or workflows - use entity version history and Task entity for those purposes.",
+ "javaType": "org.openmetadata.schema.entity.activity.ActivityEvent",
+ "type": "object",
+ "definitions": {
+ "activityEventType": {
+ "javaType": "org.openmetadata.schema.type.ActivityEventType",
+ "description": "Type of activity event.",
+ "type": "string",
+ "enum": [
+ "EntityCreated",
+ "EntityUpdated",
+ "EntityDeleted",
+ "EntitySoftDeleted",
+ "EntityRestored",
+ "DescriptionUpdated",
+ "TagsUpdated",
+ "OwnerUpdated",
+ "DomainUpdated",
+ "TierUpdated",
+ "CustomPropertyUpdated",
+ "ColumnDescriptionUpdated",
+ "ColumnTagsUpdated",
+ "TestCaseStatusChanged",
+ "PipelineStatusChanged"
+ ]
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier for this activity event.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "eventType": {
+ "description": "Type of activity that occurred.",
+ "$ref": "#/definitions/activityEventType"
+ },
+ "entity": {
+ "description": "Reference to the entity that changed.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "about": {
+ "description": "EntityLink string identifying the specific entity/field/column the activity is about. Format: <#E::entityType::fqn::fieldName::arrayFieldName::arrayFieldValue>",
+ "type": "string",
+ "maxLength": 2048
+ },
+ "domains": {
+ "description": "Domains this activity belongs to, inherited from the source entity for domain-scoped visibility.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "actor": {
+ "description": "User or bot who performed the action.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "timestamp": {
+ "description": "Timestamp when the activity occurred in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "summary": {
+ "description": "Human-readable summary of the activity for display.",
+ "type": "string",
+ "maxLength": 500
+ },
+ "fieldName": {
+ "description": "Name of the field that was changed, if applicable.",
+ "type": "string",
+ "maxLength": 256
+ },
+ "oldValue": {
+ "description": "Previous value (truncated for display, not for audit).",
+ "type": "string",
+ "maxLength": 1000
+ },
+ "newValue": {
+ "description": "New value (truncated for display, not for audit).",
+ "type": "string",
+ "maxLength": 1000
+ },
+ "changeDescription": {
+ "description": "Optional structured change description with field-level details.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "reactions": {
+ "description": "Reactions for this activity event.",
+ "$ref": "../../type/reaction.json#/definitions/reactionList"
+ }
+ },
+ "required": ["id", "eventType", "entity", "actor", "timestamp"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/activity/activityStreamConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/activity/activityStreamConfig.json
new file mode 100644
index 000000000000..2f2e2167617c
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/activity/activityStreamConfig.json
@@ -0,0 +1,72 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/activity/activityStreamConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "ActivityStreamConfig",
+ "description": "Configuration for activity stream behavior at global or domain level.",
+ "javaType": "org.openmetadata.schema.entity.activity.ActivityStreamConfig",
+ "type": "object",
+ "definitions": {
+ "activityStreamScope": {
+ "javaType": "org.openmetadata.schema.type.ActivityStreamScope",
+ "description": "Scope of the activity stream configuration.",
+ "type": "string",
+ "enum": ["global", "domain"],
+ "default": "domain"
+ },
+ "activityStreamVisibility": {
+ "javaType": "org.openmetadata.schema.type.ActivityStreamVisibility",
+ "description": "Who can see activity events.",
+ "type": "string",
+ "enum": ["domainOnly", "organization"],
+ "default": "domainOnly"
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier for this configuration.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "scope": {
+ "description": "Whether this config applies globally or to a specific domain.",
+ "$ref": "#/definitions/activityStreamScope"
+ },
+ "scopeReference": {
+ "description": "Reference to the domain this config applies to (when scope is 'domain').",
+ "$ref": "../../type/entityReference.json"
+ },
+ "enabled": {
+ "description": "Whether to generate activity events for this scope.",
+ "type": "boolean",
+ "default": true
+ },
+ "retentionDays": {
+ "description": "How long to keep activity events before automatic deletion.",
+ "type": "integer",
+ "default": 30,
+ "minimum": 1,
+ "maximum": 365
+ },
+ "excludeEventTypes": {
+ "description": "Event types to exclude from the activity stream.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "default": []
+ },
+ "excludeEntityTypes": {
+ "description": "Entity types to exclude from the activity stream.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "default": []
+ },
+ "visibility": {
+ "description": "Who can see activity events in this scope.",
+ "$ref": "#/definitions/activityStreamVisibility"
+ }
+ },
+ "required": ["id", "scope", "enabled"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/ai/agentExecution.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/ai/agentExecution.json
new file mode 100644
index 000000000000..d2ca8c4a27ad
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/ai/agentExecution.json
@@ -0,0 +1,306 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/ai/agentExecution.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AgentExecution",
+ "$comment": "@om-entity-type",
+ "description": "Agent Execution entity representing a single execution run of an AI agent. Tracks inputs, outputs, data lineage, performance metrics, and errors for observability and governance.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.ai.AgentExecution",
+ "javaInterfaces": ["org.openmetadata.schema.EntityTimeSeriesInterface"],
+ "definitions": {
+ "executionStatus": {
+ "type": "string",
+ "enum": ["Running", "Success", "Failed", "Timeout", "Cancelled", "PartialSuccess"],
+ "javaType": "org.openmetadata.schema.entity.ai.ExecutionStatus",
+ "javaEnums": [
+ {"name": "Running"},
+ {"name": "Success"},
+ {"name": "Failed"},
+ {"name": "Timeout"},
+ {"name": "Cancelled"},
+ {"name": "PartialSuccess"}
+ ]
+ },
+ "modelCall": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.ai.ModelCall",
+ "description": "Individual LLM model call during execution",
+ "additionalProperties": false,
+ "properties": {
+ "model": {
+ "$ref": "../../type/entityReference.json",
+ "description": "LLM Model used"
+ },
+ "prompt": {
+ "type": "string",
+ "description": "Prompt sent to the model"
+ },
+ "response": {
+ "type": "string",
+ "description": "Response from the model"
+ },
+ "inputTokens": {
+ "type": "integer",
+ "description": "Number of input tokens"
+ },
+ "outputTokens": {
+ "type": "integer",
+ "description": "Number of output tokens"
+ },
+ "latencyMs": {
+ "type": "number",
+ "description": "Latency in milliseconds"
+ },
+ "cost": {
+ "type": "number",
+ "description": "Cost for this call"
+ },
+ "timestamp": {
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "purpose": {
+ "type": "string",
+ "description": "Purpose of this model call"
+ }
+ }
+ },
+ "dataAccess": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.ai.DataAccess",
+ "description": "Data accessed during execution - CRITICAL for lineage and impact analysis",
+ "additionalProperties": false,
+ "properties": {
+ "dataSource": {
+ "$ref": "../../type/entityReference.json",
+ "description": "Reference to the data source (Table, Dashboard, etc.)"
+ },
+ "accessType": {
+ "type": "string",
+ "enum": ["Read", "Write", "Update", "Delete"],
+ "description": "Type of access"
+ },
+ "columns": {
+ "type": "array",
+ "items": {"type": "string"},
+ "description": "Specific columns accessed"
+ },
+ "recordCount": {
+ "type": "integer",
+ "description": "Number of records accessed"
+ },
+ "query": {
+ "type": "string",
+ "description": "Query executed (if applicable)"
+ },
+ "timestamp": {
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "piiAccessed": {
+ "type": "boolean",
+ "description": "Whether PII data was accessed"
+ },
+ "sensitivityLevel": {
+ "type": "string",
+ "enum": ["Public", "Internal", "Confidential", "Restricted"]
+ }
+ },
+ "required": ["dataSource", "accessType"]
+ },
+ "toolCall": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.ai.ToolCall",
+ "description": "Tool/function call made during execution",
+ "additionalProperties": false,
+ "properties": {
+ "tool": {
+ "$ref": "../../type/entityReference.json",
+ "description": "Reference to MCP Tool or custom tool"
+ },
+ "parameters": {
+ "type": "object",
+ "description": "Parameters passed to the tool"
+ },
+ "result": {
+ "type": "string",
+ "description": "Result from the tool"
+ },
+ "success": {
+ "type": "boolean",
+ "description": "Whether the tool call succeeded"
+ },
+ "latencyMs": {
+ "type": "number",
+ "description": "Latency in milliseconds"
+ },
+ "timestamp": {
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "errorMessage": {
+ "type": "string",
+ "description": "Error message if failed"
+ }
+ }
+ },
+ "executionMetrics": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.ai.ExecutionMetrics",
+ "description": "Performance and cost metrics for the execution",
+ "additionalProperties": false,
+ "properties": {
+ "totalTokens": {
+ "type": "integer",
+ "description": "Total tokens used across all model calls"
+ },
+ "totalCost": {
+ "type": "number",
+ "description": "Total cost in USD"
+ },
+ "totalLatencyMs": {
+ "type": "number",
+ "description": "Total execution time in milliseconds"
+ },
+ "modelCallCount": {
+ "type": "integer",
+ "description": "Number of model calls made"
+ },
+ "toolCallCount": {
+ "type": "integer",
+ "description": "Number of tool calls made"
+ },
+ "dataSourcesAccessed": {
+ "type": "integer",
+ "description": "Number of unique data sources accessed"
+ },
+ "piiDataAccessed": {
+ "type": "boolean",
+ "description": "Whether any PII data was accessed"
+ }
+ }
+ },
+ "complianceCheck": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.ai.ComplianceCheck",
+ "description": "Compliance checks performed during execution",
+ "additionalProperties": false,
+ "properties": {
+ "checkName": {
+ "type": "string",
+ "description": "Name of the compliance check"
+ },
+ "passed": {
+ "type": "boolean",
+ "description": "Whether the check passed"
+ },
+ "details": {
+ "type": "string",
+ "description": "Details about the check result"
+ },
+ "severity": {
+ "type": "string",
+ "enum": ["Low", "Medium", "High", "Critical"]
+ }
+ }
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier of the Agent Execution",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "agent": {
+ "description": "AI Agent that was executed",
+ "$ref": "../../type/entityReference.json"
+ },
+ "agentId": {
+ "description": "ID of the AI Agent (for indexing)",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "timestamp": {
+ "description": "Execution start timestamp",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "endTimestamp": {
+ "description": "Execution end timestamp",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "status": {
+ "$ref": "#/definitions/executionStatus"
+ },
+ "input": {
+ "description": "Input provided to the agent",
+ "type": "string"
+ },
+ "output": {
+ "description": "Output generated by the agent",
+ "type": "string"
+ },
+ "modelCalls": {
+ "description": "LLM model calls made during execution",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/modelCall"
+ }
+ },
+ "dataAccessed": {
+ "description": "Data sources accessed during execution - KEY FOR LINEAGE",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/dataAccess"
+ }
+ },
+ "toolCalls": {
+ "description": "Tool calls made during execution",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/toolCall"
+ }
+ },
+ "metrics": {
+ "$ref": "#/definitions/executionMetrics"
+ },
+ "errorMessage": {
+ "description": "Error message if execution failed",
+ "type": "string"
+ },
+ "errorStack": {
+ "description": "Error stack trace",
+ "type": "string"
+ },
+ "complianceChecks": {
+ "description": "Compliance checks performed",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/complianceCheck"
+ }
+ },
+ "executedBy": {
+ "description": "User or system that triggered the execution",
+ "type": "string"
+ },
+ "sessionId": {
+ "description": "Session ID for grouping related executions",
+ "type": "string"
+ },
+ "environment": {
+ "description": "Environment where execution occurred",
+ "type": "string",
+ "enum": ["Development", "Staging", "Production"]
+ },
+ "agentVersion": {
+ "description": "Version of the agent at execution time",
+ "type": "string"
+ },
+ "metadata": {
+ "description": "Additional execution metadata",
+ "type": "object",
+ "additionalProperties": {"type": "string"}
+ },
+ "deleted": {
+ "description": "When true, indicates the entity has been soft deleted",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "required": ["agent", "agentId", "timestamp", "status"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/ai/aiApplication.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/ai/aiApplication.json
new file mode 100644
index 000000000000..24cc5ff328fd
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/ai/aiApplication.json
@@ -0,0 +1,557 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/ai/aiApplication.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AIApplication",
+ "$comment": "@om-entity-type",
+ "description": "AI Application entity representing AI systems including chatbots, agents, copilots, and other AI-powered applications. Applications can use multiple LLM models and integrate with various tools and data sources.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.ai.AIApplication",
+ "javaInterfaces": ["org.openmetadata.schema.EntityInterface"],
+ "definitions": {
+ "applicationType": {
+ "javaType": "org.openmetadata.schema.entity.ai.ApplicationType",
+ "description": "Type of AI application based on primary function and interaction pattern",
+ "type": "string",
+ "enum": [
+ "Chatbot",
+ "Agent",
+ "Copilot",
+ "Assistant",
+ "RAG",
+ "CodeGenerator",
+ "DataAnalyst",
+ "AutomationBot",
+ "MultiAgent",
+ "Custom"
+ ],
+ "javaEnums": [
+ {"name": "Chatbot"},
+ {"name": "Agent"},
+ {"name": "Copilot"},
+ {"name": "Assistant"},
+ {"name": "RAG"},
+ {"name": "CodeGenerator"},
+ {"name": "DataAnalyst"},
+ {"name": "AutomationBot"},
+ {"name": "MultiAgent"},
+ {"name": "Custom"}
+ ]
+ },
+ "developmentStage": {
+ "javaType": "org.openmetadata.schema.entity.ai.DevelopmentStage",
+ "description": "Development stage of the AI application. 'Unauthorized' indicates Shadow AI that needs governance review.",
+ "type": "string",
+ "enum": [
+ "Proposal",
+ "Development",
+ "Testing",
+ "Staging",
+ "Production",
+ "Deprecated",
+ "Unauthorized"
+ ],
+ "javaEnums": [
+ {"name": "Proposal"},
+ {"name": "Development"},
+ {"name": "Testing"},
+ {"name": "Staging"},
+ {"name": "Production"},
+ {"name": "Deprecated"},
+ {"name": "Unauthorized"}
+ ]
+ },
+ "modelConfiguration": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.ai.ModelConfiguration",
+ "description": "Configuration for one LLM model used by this application. Applications can have multiple model configurations for different purposes.",
+ "additionalProperties": false,
+ "properties": {
+ "model": {
+ "$ref": "../../type/entityReference.json",
+ "description": "Reference to LLMModel entity"
+ },
+ "purpose": {
+ "description": "Purpose of this model in the application workflow",
+ "type": "string",
+ "enum": ["Primary", "Reasoning", "Embedding", "CodeGeneration", "Fallback", "CostOptimization"],
+ "javaType": "org.openmetadata.schema.entity.ai.ModelPurpose",
+ "javaEnums": [
+ {"name": "Primary"},
+ {"name": "Reasoning"},
+ {"name": "Embedding"},
+ {"name": "CodeGeneration"},
+ {"name": "Fallback"},
+ {"name": "CostOptimization"}
+ ]
+ },
+ "selectionCriteria": {
+ "type": "object",
+ "description": "Criteria for when to use this model",
+ "properties": {
+ "queryTypes": {
+ "type": "array",
+ "items": {"type": "string"},
+ "description": "Types of queries this model handles"
+ },
+ "maxTokens": {
+ "type": "integer",
+ "description": "Use this model only if query is under this token count"
+ },
+ "costThreshold": {
+ "type": "number",
+ "description": "Use this model if cost per query is under this threshold"
+ }
+ }
+ },
+ "parameters": {
+ "type": "object",
+ "description": "Model-specific parameters for this application",
+ "properties": {
+ "temperature": {"type": "number"},
+ "maxTokens": {"type": "integer"},
+ "topP": {"type": "number"},
+ "frequencyPenalty": {"type": "number"},
+ "presencePenalty": {"type": "number"}
+ }
+ }
+ },
+ "required": ["model", "purpose"]
+ },
+ "governanceMetadata": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.ai.GovernanceMetadata",
+ "description": "AI governance metadata for compliance and risk management",
+ "additionalProperties": false,
+ "properties": {
+ "registrationStatus": {
+ "type": "string",
+ "description": "Registration status - used to track Shadow AI",
+ "enum": ["Registered", "Unregistered", "PendingApproval", "Approved", "Rejected"]
+ },
+ "registeredBy": {"type": "string"},
+ "registeredAt": {
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "approvedBy": {"type": "string"},
+ "approvedAt": {
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "riskAssessment": {
+ "type": "object",
+ "description": "Risk assessment for this AI application",
+ "properties": {
+ "riskLevel": {
+ "type": "string",
+ "enum": ["Low", "Medium", "High", "Critical"]
+ },
+ "riskFactors": {
+ "type": "array",
+ "items": {"type": "string"},
+ "description": "Identified risk factors"
+ },
+ "mitigations": {
+ "type": "array",
+ "items": {"type": "string"},
+ "description": "Risk mitigation measures in place"
+ },
+ "assessedBy": {"type": "string"},
+ "assessedAt": {
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ }
+ }
+ },
+ "dataClassification": {
+ "type": "object",
+ "description": "Classification of data accessed by this application",
+ "properties": {
+ "accessesPII": {
+ "type": "boolean",
+ "description": "Does this application access Personally Identifiable Information"
+ },
+ "accessesSensitiveData": {
+ "type": "boolean",
+ "description": "Does this application access sensitive business data"
+ },
+ "dataCategories": {
+ "type": "array",
+ "items": {"type": "string"},
+ "description": "Categories of data accessed"
+ },
+ "dataRetentionPeriod": {
+ "type": "string",
+ "description": "Data retention period for application logs"
+ }
+ }
+ },
+ "governancePolicies": {
+ "$ref": "../../type/entityReferenceList.json",
+ "description": "Governance policies applied to this application"
+ },
+ "aiCompliance": {
+ "$ref": "../../type/aiCompliance.json",
+ "description": "AI compliance assessments for various regulatory frameworks (EU AI Act, NIST AI RMF, etc.)"
+ },
+ "intakeNotes": {
+ "type": "string",
+ "description": "Notes from AI governance intake form or review process"
+ },
+ "approvalComments": {
+ "type": "string",
+ "description": "Comments from governance council on approval/rejection decision"
+ }
+ }
+ },
+ "biasMetrics": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.ai.BiasMetrics",
+ "description": "Bias evaluation metrics for the AI application",
+ "additionalProperties": false,
+ "properties": {
+ "lastEvaluatedAt": {
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "evaluationMethod": {
+ "type": "string",
+ "description": "Method used for bias evaluation (e.g., Fairlearn, AI Fairness 360)"
+ },
+ "overallBiasScore": {
+ "type": "number",
+ "description": "Overall bias score from 0-1, where higher values indicate more bias",
+ "minimum": 0,
+ "maximum": 1
+ },
+ "demographicParity": {
+ "type": "number",
+ "description": "Demographic parity score"
+ },
+ "equalizedOdds": {
+ "type": "number",
+ "description": "Equalized odds score"
+ },
+ "disparateImpact": {
+ "type": "number",
+ "description": "Disparate impact ratio"
+ },
+ "dimensionScores": {
+ "type": "object",
+ "description": "Bias scores by demographic dimension",
+ "properties": {
+ "gender": {"type": "number"},
+ "race": {"type": "number"},
+ "age": {"type": "number"},
+ "religion": {"type": "number"},
+ "disability": {"type": "number"},
+ "socioeconomic": {"type": "number"}
+ }
+ },
+ "testDataset": {
+ "$ref": "../../type/entityReference.json",
+ "description": "Dataset used for bias evaluation"
+ },
+ "biasDetected": {
+ "type": "boolean",
+ "description": "Whether significant bias was detected"
+ },
+ "remediationSteps": {
+ "type": "array",
+ "items": {"type": "string"},
+ "description": "Steps taken or recommended to remediate bias"
+ }
+ }
+ },
+ "performanceMetrics": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.ai.PerformanceMetrics",
+ "description": "Runtime performance metrics for the AI application",
+ "additionalProperties": false,
+ "properties": {
+ "totalExecutions": {
+ "type": "integer",
+ "description": "Total number of executions"
+ },
+ "successRate": {
+ "type": "number",
+ "description": "Success rate (0-1)"
+ },
+ "averageLatencyMs": {
+ "type": "number",
+ "description": "Average latency in milliseconds"
+ },
+ "p95LatencyMs": {
+ "type": "number",
+ "description": "95th percentile latency in milliseconds"
+ },
+ "p99LatencyMs": {
+ "type": "number",
+ "description": "99th percentile latency in milliseconds"
+ },
+ "averageCost": {
+ "type": "number",
+ "description": "Average cost per execution"
+ },
+ "totalCost": {
+ "type": "number",
+ "description": "Total cost across all executions"
+ },
+ "currency": {
+ "type": "string",
+ "default": "USD"
+ },
+ "lastExecutionAt": {
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ }
+ }
+ },
+ "qualityMetrics": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.ai.QualityMetrics",
+ "description": "Quality metrics for AI application responses",
+ "additionalProperties": false,
+ "properties": {
+ "answerRelevancy": {
+ "type": "number",
+ "description": "Answer relevancy score (0-1)"
+ },
+ "contextPrecision": {
+ "type": "number",
+ "description": "Context precision score (0-1)"
+ },
+ "faithfulness": {
+ "type": "number",
+ "description": "Faithfulness to source data (0-1)"
+ },
+ "hallucinationRate": {
+ "type": "number",
+ "description": "Rate of hallucinations (0-1)"
+ }
+ }
+ },
+ "safetyMetrics": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.ai.SafetyMetrics",
+ "description": "Safety metrics for AI application",
+ "additionalProperties": false,
+ "properties": {
+ "piiLeakageRate": {
+ "type": "number",
+ "description": "Rate of PII leakage incidents"
+ },
+ "harmfulContentRate": {
+ "type": "number",
+ "description": "Rate of harmful content generated"
+ },
+ "promptInjectionAttempts": {
+ "type": "integer",
+ "description": "Number of prompt injection attempts detected"
+ },
+ "blockedRequests": {
+ "type": "integer",
+ "description": "Number of requests blocked by safety filters"
+ }
+ }
+ },
+ "frameworkInfo": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.ai.FrameworkInfo",
+ "description": "Information about the framework used to build the application",
+ "additionalProperties": false,
+ "properties": {
+ "name": {
+ "type": "string",
+ "enum": ["LangChain", "LlamaIndex", "AutoGen", "CrewAI", "Semantic Kernel", "Haystack", "Custom"]
+ },
+ "version": {"type": "string"},
+ "language": {
+ "type": "string",
+ "enum": ["Python", "TypeScript", "JavaScript", "Java", "C#", "Go"]
+ }
+ }
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier of the AI Application.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name that identifies this AI Application.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "fullyQualifiedName": {
+ "description": "Fully qualified name of the AI Application.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "displayName": {
+ "description": "Display name for the AI Application.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the AI Application, its purpose, and usage.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "applicationType": {
+ "$ref": "#/definitions/applicationType"
+ },
+ "developmentStage": {
+ "$ref": "#/definitions/developmentStage"
+ },
+ "modelConfigurations": {
+ "description": "Multiple LLM models this application can use for different purposes",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/modelConfiguration"
+ },
+ "minItems": 1
+ },
+ "primaryModel": {
+ "description": "Primary/default LLM model used by this application",
+ "$ref": "../../type/entityReference.json"
+ },
+ "promptTemplates": {
+ "description": "Prompt templates used by this application",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "tools": {
+ "description": "MCP tools or other tools available to this application",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "mcpServers": {
+ "description": "MCP servers this application connects to for tools, resources, and prompts",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "dataSources": {
+ "description": "Data sources (tables, APIs, etc.) this application can access",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "knowledgeBases": {
+ "description": "Vector databases, document stores used for RAG",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "upstreamApplications": {
+ "description": "Other AI applications this application depends on (multi-agent orchestration)",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "downstreamApplications": {
+ "description": "AI applications that depend on this application",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "framework": {
+ "$ref": "#/definitions/frameworkInfo"
+ },
+ "governanceMetadata": {
+ "$ref": "#/definitions/governanceMetadata"
+ },
+ "biasMetrics": {
+ "$ref": "#/definitions/biasMetrics"
+ },
+ "performanceMetrics": {
+ "$ref": "#/definitions/performanceMetrics"
+ },
+ "qualityMetrics": {
+ "$ref": "#/definitions/qualityMetrics"
+ },
+ "safetyMetrics": {
+ "$ref": "#/definitions/safetyMetrics"
+ },
+ "testSuites": {
+ "description": "Test suites for validating this AI application",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "sourceCode": {
+ "description": "Link to source code repository",
+ "type": "string"
+ },
+ "deploymentUrl": {
+ "description": "Production deployment endpoint",
+ "type": "string"
+ },
+ "documentation": {
+ "description": "Link to external documentation",
+ "type": "string"
+ },
+ "owners": {
+ "description": "Owners of this AI Application",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "followers": {
+ "description": "Followers of this AI Application",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "domain": {
+ "description": "Domain the AI Application belongs to",
+ "$ref": "../../type/entityReference.json"
+ },
+ "dataProducts": {
+ "description": "Data products this AI Application is part of",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "dataContract": {
+ "description": "Reference to the data contract for this entity.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "tags": {
+ "description": "Tags for this AI Application",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "version": {
+ "description": "Metadata version of the entity",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time in Unix epoch milliseconds",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update",
+ "type": "string"
+ },
+ "href": {
+ "description": "Link to this resource",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "changeDescription": {
+ "description": "Change that led to this version",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that led to this version",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When true, indicates the entity has been soft deleted",
+ "type": "boolean",
+ "default": false
+ },
+ "certification": {
+ "$ref": "../../type/assetCertification.json"
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ },
+ "domains": {
+ "description": "Domains the AI Application belongs to",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "votes": {
+ "description": "Votes on the entity",
+ "$ref": "../../type/votes.json"
+ },
+ "lifeCycle": {
+ "description": "Life Cycle properties of the entity",
+ "$ref": "../../type/lifeCycle.json"
+ },
+ "sourceHash": {
+ "description": "Source hash of the entity",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32
+ }
+ },
+ "required": ["id", "name", "applicationType", "modelConfigurations"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/ai/aiGovernancePolicy.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/ai/aiGovernancePolicy.json
new file mode 100644
index 000000000000..fcb3fe35a337
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/ai/aiGovernancePolicy.json
@@ -0,0 +1,402 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/ai/aiGovernancePolicy.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AIGovernancePolicy",
+ "$comment": "@om-entity-type",
+ "description": "AI Governance Policy entity representing organizational policies and rules for AI/LLM usage, compliance, and risk management. Enforces standards for model approval, data access, bias thresholds, and regulatory compliance.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.ai.AIGovernancePolicy",
+ "javaInterfaces": ["org.openmetadata.schema.EntityInterface"],
+ "definitions": {
+ "policyType": {
+ "type": "string",
+ "enum": ["ModelApproval", "DataAccess", "BiasThreshold", "ComplianceCheck", "CostControl", "PerformanceStandard", "SecurityControl"],
+ "javaType": "org.openmetadata.schema.entity.ai.PolicyType",
+ "javaEnums": [
+ {"name": "ModelApproval"},
+ {"name": "DataAccess"},
+ {"name": "BiasThreshold"},
+ {"name": "ComplianceCheck"},
+ {"name": "CostControl"},
+ {"name": "PerformanceStandard"},
+ {"name": "SecurityControl"}
+ ]
+ },
+ "policyRule": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.ai.PolicyRule",
+ "description": "Individual rule within a governance policy",
+ "additionalProperties": false,
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "Rule name"
+ },
+ "description": {
+ "type": "string",
+ "description": "Rule description"
+ },
+ "ruleType": {
+ "type": "string",
+ "enum": ["Threshold", "Approval", "Prohibition", "Requirement", "Notification"],
+ "description": "Type of rule"
+ },
+ "condition": {
+ "type": "string",
+ "description": "Condition expression (e.g., 'biasScore > 0.3')"
+ },
+ "action": {
+ "type": "string",
+ "enum": ["Block", "Warn", "Notify", "Require_Approval", "Log"],
+ "description": "Action to take when rule is triggered"
+ },
+ "severity": {
+ "type": "string",
+ "enum": ["Low", "Medium", "High", "Critical"]
+ },
+ "enabled": {
+ "type": "boolean",
+ "default": true
+ }
+ },
+ "required": ["name", "ruleType", "action"]
+ },
+ "biasThreshold": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.ai.BiasThreshold",
+ "description": "Bias threshold limits for LLM models",
+ "additionalProperties": false,
+ "properties": {
+ "maxOverallBiasScore": {
+ "type": "number",
+ "description": "Maximum allowed overall bias score (0-1)"
+ },
+ "dimensionThresholds": {
+ "type": "object",
+ "description": "Maximum bias scores per dimension",
+ "properties": {
+ "gender": {"type": "number"},
+ "race": {"type": "number"},
+ "age": {"type": "number"},
+ "religion": {"type": "number"},
+ "disability": {"type": "number"},
+ "nationality": {"type": "number"},
+ "socioeconomic": {"type": "number"}
+ }
+ },
+ "evaluationFrequency": {
+ "type": "string",
+ "enum": ["Continuous", "Daily", "Weekly", "Monthly", "OnDemand"],
+ "description": "How often to evaluate bias"
+ }
+ }
+ },
+ "dataAccessControl": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.ai.DataAccessControl",
+ "description": "Data access controls for AI agents",
+ "additionalProperties": false,
+ "properties": {
+ "allowedDataSources": {
+ "$ref": "../../type/entityReferenceList.json",
+ "description": "Allowed data sources"
+ },
+ "prohibitedDataSources": {
+ "$ref": "../../type/entityReferenceList.json",
+ "description": "Prohibited data sources"
+ },
+ "maxSensitivityLevel": {
+ "type": "string",
+ "enum": ["Public", "Internal", "Confidential", "Restricted"],
+ "description": "Maximum data sensitivity level allowed"
+ },
+ "piiAccessAllowed": {
+ "type": "boolean",
+ "default": false,
+ "description": "Whether PII data access is allowed"
+ },
+ "requireApprovalForSensitiveData": {
+ "type": "boolean",
+ "default": true
+ },
+ "dataRetentionDays": {
+ "type": "integer",
+ "description": "How long execution data can be retained"
+ }
+ }
+ },
+ "costControl": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.ai.CostControl",
+ "description": "Cost control limits",
+ "additionalProperties": false,
+ "properties": {
+ "dailyBudget": {
+ "type": "number",
+ "description": "Maximum daily spend in USD"
+ },
+ "monthlyBudget": {
+ "type": "number",
+ "description": "Maximum monthly spend in USD"
+ },
+ "perExecutionLimit": {
+ "type": "number",
+ "description": "Maximum cost per execution"
+ },
+ "warningThreshold": {
+ "type": "number",
+ "description": "Percentage threshold for warnings (0-100)"
+ },
+ "currency": {
+ "type": "string",
+ "default": "USD"
+ }
+ }
+ },
+ "complianceRequirement": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.ai.ComplianceRequirement",
+ "description": "Regulatory compliance requirement",
+ "additionalProperties": false,
+ "properties": {
+ "standard": {
+ "type": "string",
+ "enum": ["GDPR", "HIPAA", "SOC2", "ISO27001", "NIST_AI_RMF", "EU_AI_Act", "OWASP_LLM_Top10", "Custom"],
+ "description": "Compliance standard"
+ },
+ "requirements": {
+ "type": "array",
+ "items": {"type": "string"},
+ "description": "Specific requirements"
+ },
+ "attestationRequired": {
+ "type": "boolean",
+ "default": false,
+ "description": "Whether attestation is required"
+ },
+ "auditFrequency": {
+ "type": "string",
+ "enum": ["Continuous", "Weekly", "Monthly", "Quarterly", "Annually"]
+ }
+ }
+ },
+ "performanceStandard": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.ai.PerformanceStandard",
+ "description": "Performance standards for AI agents",
+ "additionalProperties": false,
+ "properties": {
+ "minAccuracy": {
+ "type": "number",
+ "description": "Minimum required accuracy (0-1)"
+ },
+ "maxLatencyMs": {
+ "type": "number",
+ "description": "Maximum allowed latency in milliseconds"
+ },
+ "minSuccessRate": {
+ "type": "number",
+ "description": "Minimum success rate (0-1)"
+ },
+ "maxErrorRate": {
+ "type": "number",
+ "description": "Maximum error rate (0-1)"
+ },
+ "evaluationDataset": {
+ "$ref": "../../type/entityReference.json",
+ "description": "Dataset to use for evaluation"
+ }
+ }
+ },
+ "policyViolation": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.ai.PolicyViolation",
+ "description": "Policy violation record",
+ "additionalProperties": false,
+ "properties": {
+ "violatedRule": {
+ "type": "string",
+ "description": "Name of the violated rule"
+ },
+ "violatingEntity": {
+ "$ref": "../../type/entityReference.json",
+ "description": "Entity that violated the policy"
+ },
+ "timestamp": {
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "details": {
+ "type": "string",
+ "description": "Details about the violation"
+ },
+ "resolved": {
+ "type": "boolean",
+ "default": false
+ },
+ "resolvedBy": {
+ "type": "string"
+ },
+ "resolvedAt": {
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ }
+ }
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier of the AI Governance Policy",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name that identifies this AI Governance Policy",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "fullyQualifiedName": {
+ "description": "Fully qualified name of the AI Governance Policy",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "displayName": {
+ "description": "Display name for the AI Governance Policy",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the policy and its purpose",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "policyType": {
+ "$ref": "#/definitions/policyType"
+ },
+ "rules": {
+ "description": "Rules that make up this policy",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/policyRule"
+ }
+ },
+ "biasThresholds": {
+ "$ref": "#/definitions/biasThreshold"
+ },
+ "dataAccessControls": {
+ "$ref": "#/definitions/dataAccessControl"
+ },
+ "costControls": {
+ "$ref": "#/definitions/costControl"
+ },
+ "complianceRequirements": {
+ "description": "Compliance requirements this policy enforces",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/complianceRequirement"
+ }
+ },
+ "performanceStandards": {
+ "$ref": "#/definitions/performanceStandard"
+ },
+ "appliesTo": {
+ "description": "Entities this policy applies to",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "enforcementLevel": {
+ "description": "How strictly to enforce this policy",
+ "type": "string",
+ "enum": ["Advisory", "Warning", "Blocking"],
+ "default": "Warning"
+ },
+ "enabled": {
+ "description": "Whether this policy is currently active",
+ "type": "boolean",
+ "default": true
+ },
+ "effectiveDate": {
+ "description": "Date when policy becomes effective",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "expirationDate": {
+ "description": "Date when policy expires",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "approvedBy": {
+ "description": "Who approved this policy",
+ "type": "string"
+ },
+ "violations": {
+ "description": "Recent policy violations",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/policyViolation"
+ }
+ },
+ "owners": {
+ "description": "Owners of this AI Governance Policy",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "followers": {
+ "description": "Followers of this AI Governance Policy",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "domain": {
+ "description": "Domain the policy belongs to",
+ "$ref": "../../type/entityReference.json"
+ },
+ "tags": {
+ "description": "Tags for this AI Governance Policy",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ }
+ },
+ "version": {
+ "description": "Metadata version of the entity",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time in Unix epoch milliseconds",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update",
+ "type": "string"
+ },
+ "href": {
+ "description": "Link to this resource",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "changeDescription": {
+ "description": "Change that led to this version",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that led to this version",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When true, indicates the entity has been soft deleted",
+ "type": "boolean",
+ "default": false
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ },
+ "domains": {
+ "description": "Domains the policy belongs to",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "votes": {
+ "description": "Votes on the entity",
+ "$ref": "../../type/votes.json"
+ },
+ "lifeCycle": {
+ "description": "Life Cycle properties of the entity",
+ "$ref": "../../type/lifeCycle.json"
+ },
+ "sourceHash": {
+ "description": "Source hash of the entity",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32
+ }
+ },
+ "required": ["id", "name", "policyType"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/ai/llmModel.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/ai/llmModel.json
new file mode 100644
index 000000000000..6d1ba7160733
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/ai/llmModel.json
@@ -0,0 +1,462 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/ai/llmModel.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "LLMModel",
+ "$comment": "@om-entity-type",
+ "description": "LLM Model entity representing a registered Large Language Model deployment, fine-tune, or base model. Models are independent entities that can be referenced by multiple AI agents.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.ai.LLMModel",
+ "javaInterfaces": ["org.openmetadata.schema.EntityInterface"],
+ "definitions": {
+ "modelType": {
+ "javaType": "org.openmetadata.schema.entity.ai.ModelType",
+ "description": "Type of LLM model",
+ "type": "string",
+ "enum": ["BaseModel", "FineTuned", "Quantized", "Distilled", "Adapter", "Custom"],
+ "javaEnums": [
+ {"name": "BaseModel"},
+ {"name": "FineTuned"},
+ {"name": "Quantized"},
+ {"name": "Distilled"},
+ {"name": "Adapter"},
+ {"name": "Custom"}
+ ]
+ },
+ "modelCapability": {
+ "type": "string",
+ "enum": ["TextGeneration", "CodeGeneration", "Embeddings", "Chat", "Vision", "Audio", "FunctionCalling", "ToolUse"]
+ },
+ "trainingMetadata": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.ai.TrainingMetadata",
+ "description": "Training or fine-tuning metadata - critical for data lineage and impact analysis",
+ "additionalProperties": false,
+ "properties": {
+ "baseModel": {
+ "type": "string",
+ "description": "Base model this was trained/fine-tuned from"
+ },
+ "trainingType": {
+ "type": "string",
+ "enum": ["FullFineTune", "LoRA", "QLoRA", "PrefixTuning", "PromptTuning", "RLHF"]
+ },
+ "trainingDatasets": {
+ "$ref": "../../type/entityReferenceList.json",
+ "description": "Datasets used for training - KEY FOR DATA LINEAGE"
+ },
+ "validationDatasets": {
+ "$ref": "../../type/entityReferenceList.json",
+ "description": "Datasets used for validation"
+ },
+ "dataLineage": {
+ "type": "array",
+ "description": "Detailed data lineage for training - tracks exactly what data was used",
+ "items": {
+ "type": "object",
+ "properties": {
+ "dataset": {
+ "$ref": "../../type/entityReference.json"
+ },
+ "recordCount": {
+ "type": "integer",
+ "description": "Number of records used from this dataset"
+ },
+ "dateRange": {
+ "type": "object",
+ "properties": {
+ "start": {"$ref": "../../type/basic.json#/definitions/timestamp"},
+ "end": {"$ref": "../../type/basic.json#/definitions/timestamp"}
+ }
+ },
+ "columns": {
+ "type": "array",
+ "items": {"type": "string"},
+ "description": "Columns used from the dataset"
+ },
+ "piiHandling": {
+ "type": "string",
+ "description": "How PII was handled in this dataset"
+ },
+ "dataTransformations": {
+ "type": "array",
+ "items": {"type": "string"},
+ "description": "Transformations applied to the data"
+ },
+ "sensitivityLevel": {
+ "type": "string",
+ "enum": ["Public", "Internal", "Confidential", "Restricted"]
+ }
+ }
+ }
+ },
+ "trainingPeriod": {
+ "type": "object",
+ "properties": {
+ "startDate": {"$ref": "../../type/basic.json#/definitions/timestamp"},
+ "endDate": {"$ref": "../../type/basic.json#/definitions/timestamp"},
+ "durationHours": {"type": "number"}
+ }
+ },
+ "trainingCost": {
+ "type": "object",
+ "properties": {
+ "totalCost": {"type": "number"},
+ "currency": {"type": "string", "default": "USD"},
+ "computeHours": {"type": "number"},
+ "resourceType": {"type": "string"}
+ }
+ },
+ "hyperparameters": {
+ "type": "object",
+ "description": "Hyperparameters used for training",
+ "properties": {
+ "learningRate": {"type": "number"},
+ "batchSize": {"type": "integer"},
+ "epochs": {"type": "integer"},
+ "optimizer": {"type": "string"},
+ "warmupSteps": {"type": "integer"},
+ "weightDecay": {"type": "number"}
+ }
+ },
+ "trainingMetrics": {
+ "type": "object",
+ "description": "Metrics from training process",
+ "properties": {
+ "finalLoss": {"type": "number"},
+ "accuracy": {"type": "number"},
+ "perplexity": {"type": "number"},
+ "validationLoss": {"type": "number"}
+ }
+ },
+ "trainedBy": {"type": "string"},
+ "trainingJobId": {"type": "string"}
+ }
+ },
+ "modelEvaluation": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.ai.ModelEvaluation",
+ "description": "Comprehensive evaluation metrics for the LLM model",
+ "additionalProperties": false,
+ "properties": {
+ "evaluatedAt": {
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "evaluationDataset": {
+ "$ref": "../../type/entityReference.json"
+ },
+ "accuracyMetrics": {
+ "type": "object",
+ "properties": {
+ "accuracy": {"type": "number"},
+ "precision": {"type": "number"},
+ "recall": {"type": "number"},
+ "f1Score": {"type": "number"},
+ "bleuScore": {"type": "number"},
+ "rougeScore": {"type": "number"}
+ }
+ },
+ "biasMetrics": {
+ "type": "object",
+ "description": "LLM BIAS EVALUATION - critical for governance",
+ "properties": {
+ "overallBiasScore": {
+ "type": "number",
+ "description": "Overall bias score 0-1, higher = more biased"
+ },
+ "demographicParity": {"type": "number"},
+ "equalizedOdds": {"type": "number"},
+ "disparateImpact": {"type": "number"},
+ "dimensionScores": {
+ "type": "object",
+ "properties": {
+ "gender": {"type": "number"},
+ "race": {"type": "number"},
+ "age": {"type": "number"},
+ "religion": {"type": "number"},
+ "disability": {"type": "number"},
+ "nationality": {"type": "number"},
+ "socioeconomic": {"type": "number"}
+ }
+ },
+ "testMethod": {"type": "string"},
+ "testDataset": {"$ref": "../../type/entityReference.json"}
+ }
+ },
+ "fairnessMetrics": {
+ "type": "object",
+ "properties": {
+ "groupFairness": {"type": "number"},
+ "individualFairness": {"type": "number"},
+ "counterfactualFairness": {"type": "number"}
+ }
+ },
+ "robustnessMetrics": {
+ "type": "object",
+ "properties": {
+ "adversarialRobustness": {"type": "number"},
+ "outlierSensitivity": {"type": "number"},
+ "noiseRobustness": {"type": "number"}
+ }
+ },
+ "safetyMetrics": {
+ "type": "object",
+ "properties": {
+ "toxicityScore": {"type": "number"},
+ "harmfulContentRate": {"type": "number"},
+ "piiLeakageRisk": {"type": "number"}
+ }
+ }
+ }
+ },
+ "modelSpecifications": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.ai.ModelSpecifications",
+ "description": "Technical specifications of the model",
+ "additionalProperties": false,
+ "properties": {
+ "contextWindow": {
+ "type": "integer",
+ "description": "Context window size in tokens"
+ },
+ "maxOutputTokens": {
+ "type": "integer",
+ "description": "Maximum output tokens"
+ },
+ "parametersCount": {
+ "type": "string",
+ "description": "Number of parameters (e.g., '7B', '70B', '175B')"
+ },
+ "architecture": {
+ "type": "string",
+ "description": "Model architecture (e.g., 'Transformer', 'GPT', 'BERT')"
+ },
+ "quantization": {
+ "type": "string",
+ "description": "Quantization method if applicable"
+ }
+ }
+ },
+ "costMetrics": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.ai.CostMetrics",
+ "description": "Cost metrics for using this model",
+ "additionalProperties": false,
+ "properties": {
+ "inputCostPer1kTokens": {
+ "type": "number",
+ "description": "Cost per 1000 input tokens"
+ },
+ "outputCostPer1kTokens": {
+ "type": "number",
+ "description": "Cost per 1000 output tokens"
+ },
+ "currency": {
+ "type": "string",
+ "default": "USD"
+ },
+ "estimatedMonthlyUsage": {
+ "type": "integer",
+ "description": "Estimated monthly token usage"
+ },
+ "estimatedMonthlyCost": {
+ "type": "number",
+ "description": "Estimated monthly cost"
+ }
+ }
+ },
+ "deploymentInfo": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.ai.DeploymentInfo",
+ "description": "Deployment information for the model",
+ "additionalProperties": false,
+ "properties": {
+ "deploymentType": {
+ "type": "string",
+ "enum": ["API", "SelfHosted", "Hybrid", "OnPremise"]
+ },
+ "endpoint": {
+ "type": "string",
+ "description": "API endpoint for the model"
+ },
+ "region": {
+ "type": "string",
+ "description": "Deployment region"
+ },
+ "availabilityZones": {
+ "type": "array",
+ "items": {"type": "string"}
+ }
+ }
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier of the LLM Model",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name that identifies this LLM Model",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "fullyQualifiedName": {
+ "description": "Fully qualified name of the LLM Model",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "displayName": {
+ "description": "Display name for the LLM Model",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the LLM Model, its purpose, and capabilities",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "service": {
+ "description": "OPTIONAL reference to LLMService where this model is hosted",
+ "$ref": "../../type/entityReference.json"
+ },
+ "modelType": {
+ "$ref": "#/definitions/modelType"
+ },
+ "baseModel": {
+ "description": "Base model name (e.g., 'gpt-4', 'claude-3-opus', 'llama-2-70b')",
+ "type": "string"
+ },
+ "modelVersion": {
+ "description": "Version of the model",
+ "type": "string"
+ },
+ "modelProvider": {
+ "description": "Model provider (e.g., 'OpenAI', 'Anthropic', 'Meta')",
+ "type": "string"
+ },
+ "providerModelId": {
+ "description": "Provider's internal model ID",
+ "type": "string"
+ },
+ "capabilities": {
+ "description": "Capabilities of this model",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/modelCapability"
+ }
+ },
+ "modelSpecifications": {
+ "$ref": "#/definitions/modelSpecifications"
+ },
+ "trainingMetadata": {
+ "$ref": "#/definitions/trainingMetadata"
+ },
+ "modelEvaluation": {
+ "$ref": "#/definitions/modelEvaluation"
+ },
+ "usedByAgents": {
+ "description": "AI Agents that use this model",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "governanceStatus": {
+ "description": "Governance status - tracks unauthorized/shadow AI models",
+ "type": "string",
+ "enum": ["Approved", "PendingReview", "Rejected", "Unauthorized"]
+ },
+ "certifications": {
+ "description": "Certifications this model has received",
+ "type": "array",
+ "items": {"type": "string"}
+ },
+ "regulatoryCompliance": {
+ "description": "Regulatory compliance standards met",
+ "type": "array",
+ "items": {"type": "string"}
+ },
+ "costMetrics": {
+ "$ref": "#/definitions/costMetrics"
+ },
+ "deploymentInfo": {
+ "$ref": "#/definitions/deploymentInfo"
+ },
+ "owners": {
+ "description": "Owners of this LLM Model",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "followers": {
+ "description": "Followers of this LLM Model",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "domain": {
+ "description": "Domain the LLM Model belongs to",
+ "$ref": "../../type/entityReference.json"
+ },
+ "dataProducts": {
+ "description": "Data products this model is part of",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "dataContract": {
+ "description": "Reference to the data contract for this entity.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "tags": {
+ "description": "Tags for this LLM Model",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "version": {
+ "description": "Metadata version of the entity",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time in Unix epoch milliseconds",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update",
+ "type": "string"
+ },
+ "href": {
+ "description": "Link to this resource",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "changeDescription": {
+ "description": "Change that led to this version",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that led to this version",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When true, indicates the entity has been soft deleted",
+ "type": "boolean",
+ "default": false
+ },
+ "certification": {
+ "$ref": "../../type/assetCertification.json"
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ },
+ "domains": {
+ "description": "Domains the LLMModel belongs to",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "votes": {
+ "description": "Votes on the entity",
+ "$ref": "../../type/votes.json"
+ },
+ "lifeCycle": {
+ "description": "Life Cycle properties of the entity",
+ "$ref": "../../type/lifeCycle.json"
+ },
+ "sourceHash": {
+ "description": "Source hash of the entity",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32
+ }
+ },
+ "required": ["id", "name", "modelType", "baseModel"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/ai/mcpExecution.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/ai/mcpExecution.json
new file mode 100644
index 000000000000..9649ca7e466f
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/ai/mcpExecution.json
@@ -0,0 +1,368 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/ai/mcpExecution.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "McpExecution",
+ "$comment": "@om-entity-type",
+ "description": "MCP Execution entity representing a single execution session of an MCP server. Tracks tool calls, resource accesses, prompt uses, and data lineage for audit trails and governance. This is a time-series entity for observability and compliance.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.ai.McpExecution",
+ "javaInterfaces": ["org.openmetadata.schema.EntityTimeSeriesInterface"],
+ "definitions": {
+ "executionStatus": {
+ "type": "string",
+ "javaType": "org.openmetadata.schema.entity.ai.McpExecutionStatus",
+ "description": "Status of the MCP execution",
+ "enum": ["Running", "Success", "Failed", "Timeout", "Cancelled"],
+ "javaEnums": [
+ {"name": "Running"},
+ {"name": "Success"},
+ {"name": "Failed"},
+ {"name": "Timeout"},
+ {"name": "Cancelled"}
+ ]
+ },
+ "accessType": {
+ "type": "string",
+ "javaType": "org.openmetadata.schema.entity.ai.McpAccessType",
+ "description": "Type of data access",
+ "enum": ["Read", "Write", "Delete"],
+ "javaEnums": [
+ {"name": "Read"},
+ {"name": "Write"},
+ {"name": "Delete"}
+ ]
+ },
+ "sensitivityLevel": {
+ "type": "string",
+ "javaType": "org.openmetadata.schema.entity.ai.McpExecutionSensitivityLevel",
+ "description": "Sensitivity level of data accessed",
+ "enum": ["Public", "Internal", "Confidential", "Restricted"],
+ "javaEnums": [
+ {"name": "Public"},
+ {"name": "Internal"},
+ {"name": "Confidential"},
+ {"name": "Restricted"}
+ ]
+ },
+ "complianceSeverity": {
+ "type": "string",
+ "javaType": "org.openmetadata.schema.entity.ai.McpComplianceSeverity",
+ "description": "Severity level for compliance checks",
+ "enum": ["Info", "Warning", "Error", "Critical"],
+ "javaEnums": [
+ {"name": "Info"},
+ {"name": "Warning"},
+ {"name": "Error"},
+ {"name": "Critical"}
+ ]
+ },
+ "toolCallRecord": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.ai.McpToolCallRecord",
+ "description": "Record of a tool invocation during execution",
+ "additionalProperties": false,
+ "properties": {
+ "toolName": {
+ "type": "string",
+ "description": "Name of the tool that was called"
+ },
+ "parameters": {
+ "type": "object",
+ "description": "Parameters passed to the tool"
+ },
+ "result": {
+ "type": "string",
+ "description": "Result returned by the tool"
+ },
+ "success": {
+ "type": "boolean",
+ "description": "Whether the tool call succeeded"
+ },
+ "latencyMs": {
+ "type": "number",
+ "description": "Latency in milliseconds"
+ },
+ "timestamp": {
+ "$ref": "../../type/basic.json#/definitions/timestamp",
+ "description": "When the tool was called"
+ },
+ "errorMessage": {
+ "type": "string",
+ "description": "Error message if failed"
+ },
+ "dataAccessed": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/dataAccessRecord"
+ },
+ "description": "Data accessed during this tool call"
+ }
+ }
+ },
+ "dataAccessRecord": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.ai.McpDataAccessRecord",
+ "description": "Record of data accessed during execution",
+ "additionalProperties": false,
+ "properties": {
+ "dataSource": {
+ "$ref": "../../type/entityReference.json",
+ "description": "Reference to the data source accessed"
+ },
+ "accessType": {
+ "$ref": "#/definitions/accessType"
+ },
+ "recordCount": {
+ "type": "integer",
+ "description": "Number of records accessed"
+ },
+ "columns": {
+ "type": "array",
+ "items": {"type": "string"},
+ "description": "Columns accessed if applicable"
+ },
+ "piiAccessed": {
+ "type": "boolean",
+ "description": "Whether PII data was accessed"
+ },
+ "sensitivityLevel": {
+ "$ref": "#/definitions/sensitivityLevel"
+ },
+ "timestamp": {
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ }
+ }
+ },
+ "resourceAccessRecord": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.ai.McpResourceAccessRecord",
+ "description": "Record of a resource access during execution",
+ "additionalProperties": false,
+ "properties": {
+ "resourceName": {
+ "type": "string",
+ "description": "Name of the resource accessed"
+ },
+ "resourceUri": {
+ "type": "string",
+ "description": "URI of the resource accessed"
+ },
+ "accessType": {
+ "$ref": "#/definitions/accessType"
+ },
+ "success": {
+ "type": "boolean",
+ "description": "Whether the access succeeded"
+ },
+ "timestamp": {
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "bytesTransferred": {
+ "type": "integer",
+ "description": "Bytes read or written"
+ }
+ }
+ },
+ "promptUseRecord": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.ai.McpPromptUseRecord",
+ "description": "Record of a prompt use during execution",
+ "additionalProperties": false,
+ "properties": {
+ "promptName": {
+ "type": "string",
+ "description": "Name of the prompt that was used"
+ },
+ "arguments": {
+ "type": "object",
+ "description": "Arguments passed to the prompt"
+ },
+ "timestamp": {
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "tokensGenerated": {
+ "type": "integer",
+ "description": "Number of tokens in the generated output"
+ }
+ }
+ },
+ "complianceCheckRecord": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.ai.McpComplianceCheckRecord",
+ "description": "Record of a compliance check during execution",
+ "additionalProperties": false,
+ "properties": {
+ "checkName": {
+ "type": "string",
+ "description": "Name of the compliance check"
+ },
+ "passed": {
+ "type": "boolean",
+ "description": "Whether the check passed"
+ },
+ "details": {
+ "type": "string",
+ "description": "Details about the check result"
+ },
+ "severity": {
+ "$ref": "#/definitions/complianceSeverity"
+ },
+ "timestamp": {
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ }
+ }
+ },
+ "executionMetrics": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.ai.McpExecutionMetrics",
+ "description": "Aggregated metrics for the execution",
+ "additionalProperties": false,
+ "properties": {
+ "totalToolCalls": {
+ "type": "integer",
+ "description": "Total number of tool calls"
+ },
+ "successfulToolCalls": {
+ "type": "integer",
+ "description": "Number of successful tool calls"
+ },
+ "totalResourceAccesses": {
+ "type": "integer",
+ "description": "Total number of resource accesses"
+ },
+ "totalPromptUses": {
+ "type": "integer",
+ "description": "Total number of prompt uses"
+ },
+ "piiDataAccessed": {
+ "type": "boolean",
+ "description": "Whether any PII data was accessed"
+ },
+ "highSensitivityDataAccessed": {
+ "type": "boolean",
+ "description": "Whether confidential or restricted data was accessed"
+ },
+ "highRiskOperations": {
+ "type": "integer",
+ "description": "Number of high-risk operations performed"
+ },
+ "complianceViolations": {
+ "type": "integer",
+ "description": "Number of compliance violations detected"
+ }
+ }
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier of the MCP Execution",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "server": {
+ "description": "MCP Server that was executed",
+ "$ref": "../../type/entityReference.json"
+ },
+ "serverId": {
+ "description": "ID of the MCP Server (for indexing)",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "timestamp": {
+ "description": "Execution start timestamp",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "endTimestamp": {
+ "description": "Execution end timestamp",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "durationMs": {
+ "description": "Total execution duration in milliseconds",
+ "type": "number"
+ },
+ "status": {
+ "$ref": "#/definitions/executionStatus"
+ },
+ "executedBy": {
+ "description": "User or system that initiated the execution",
+ "type": "string"
+ },
+ "applicationContext": {
+ "description": "AI Application that triggered this execution, if applicable",
+ "$ref": "../../type/entityReference.json"
+ },
+ "sessionId": {
+ "description": "Session ID for grouping related executions",
+ "type": "string"
+ },
+ "toolCalls": {
+ "description": "Tool invocations during this execution",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/toolCallRecord"
+ }
+ },
+ "resourceAccesses": {
+ "description": "Resource accesses during this execution",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/resourceAccessRecord"
+ }
+ },
+ "promptUses": {
+ "description": "Prompt uses during this execution",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/promptUseRecord"
+ }
+ },
+ "dataAccessed": {
+ "description": "All data sources accessed during execution",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/dataAccessRecord"
+ }
+ },
+ "complianceChecks": {
+ "description": "Compliance checks performed during execution",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/complianceCheckRecord"
+ }
+ },
+ "metrics": {
+ "$ref": "#/definitions/executionMetrics"
+ },
+ "errorMessage": {
+ "description": "Error message if execution failed",
+ "type": "string"
+ },
+ "errorStack": {
+ "description": "Error stack trace if available",
+ "type": "string"
+ },
+ "environment": {
+ "description": "Environment where execution occurred",
+ "type": "string",
+ "enum": ["Development", "Testing", "Staging", "Production"]
+ },
+ "serverVersion": {
+ "description": "Version of the MCP server at execution time",
+ "type": "string"
+ },
+ "protocolVersion": {
+ "description": "MCP protocol version used",
+ "type": "string"
+ },
+ "metadata": {
+ "description": "Additional execution metadata",
+ "type": "object",
+ "additionalProperties": {"type": "string"}
+ },
+ "deleted": {
+ "description": "When true, indicates the entity has been soft deleted",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "required": ["server", "serverId", "timestamp", "status"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/ai/mcpServer.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/ai/mcpServer.json
new file mode 100644
index 000000000000..a38b396fe4fb
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/ai/mcpServer.json
@@ -0,0 +1,975 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/ai/mcpServer.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "McpServer",
+ "$comment": "@om-entity-type",
+ "description": "MCP (Model Context Protocol) Server entity representing an MCP server deployment for AI governance. MCP servers expose tools, resources, and prompts that can be used by AI applications. This entity enables comprehensive governance including risk assessment, compliance, shadow AI detection, and data access tracking.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.ai.McpServer",
+ "javaInterfaces": ["org.openmetadata.schema.EntityInterface"],
+ "definitions": {
+ "serverType": {
+ "javaType": "org.openmetadata.schema.entity.ai.McpServerType",
+ "description": "Type of MCP server based on its primary function",
+ "type": "string",
+ "enum": [
+ "DataAccess",
+ "FileSystem",
+ "WebAPI",
+ "Database",
+ "Cloud",
+ "Security",
+ "Development",
+ "Communication",
+ "Custom"
+ ],
+ "javaEnums": [
+ {"name": "DataAccess"},
+ {"name": "FileSystem"},
+ {"name": "WebAPI"},
+ {"name": "Database"},
+ {"name": "Cloud"},
+ {"name": "Security"},
+ {"name": "Development"},
+ {"name": "Communication"},
+ {"name": "Custom"}
+ ]
+ },
+ "transportType": {
+ "javaType": "org.openmetadata.schema.entity.ai.McpTransportType",
+ "description": "Transport protocol used by the MCP server",
+ "type": "string",
+ "enum": [
+ "Stdio",
+ "SSE",
+ "StreamableHTTP"
+ ],
+ "javaEnums": [
+ {"name": "Stdio"},
+ {"name": "SSE"},
+ {"name": "StreamableHTTP"}
+ ]
+ },
+ "developmentStage": {
+ "javaType": "org.openmetadata.schema.entity.ai.McpDevelopmentStage",
+ "description": "Development stage of the MCP server. 'Unauthorized' indicates Shadow AI that needs governance review.",
+ "type": "string",
+ "enum": [
+ "Proposal",
+ "Development",
+ "Testing",
+ "Staging",
+ "Production",
+ "Deprecated",
+ "Unauthorized"
+ ],
+ "javaEnums": [
+ {"name": "Proposal"},
+ {"name": "Development"},
+ {"name": "Testing"},
+ {"name": "Staging"},
+ {"name": "Production"},
+ {"name": "Deprecated"},
+ {"name": "Unauthorized"}
+ ]
+ },
+ "serverInfo": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.ai.McpServerInfo",
+ "description": "Information about the MCP server software",
+ "additionalProperties": false,
+ "properties": {
+ "serverName": {
+ "type": "string",
+ "description": "Name of the MCP server software"
+ },
+ "serverVersion": {
+ "type": "string",
+ "description": "Version of the MCP server software"
+ },
+ "vendor": {
+ "type": "string",
+ "description": "Vendor or organization that provides the server"
+ },
+ "repositoryUrl": {
+ "type": "string",
+ "description": "URL to the server's source code repository"
+ },
+ "documentationUrl": {
+ "type": "string",
+ "description": "URL to the server's documentation"
+ }
+ }
+ },
+ "connectionConfig": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.ai.McpConnectionConfig",
+ "description": "Connection configuration for the MCP server",
+ "additionalProperties": false,
+ "properties": {
+ "command": {
+ "type": "string",
+ "description": "Command to start the MCP server"
+ },
+ "args": {
+ "type": "array",
+ "items": {"type": "string"},
+ "description": "Arguments to pass to the server command"
+ },
+ "env": {
+ "type": "object",
+ "additionalProperties": {"type": "string"},
+ "description": "Environment variables for the server"
+ },
+ "workingDirectory": {
+ "type": "string",
+ "description": "Working directory for the server process"
+ },
+ "url": {
+ "type": "string",
+ "description": "URL for SSE or Streamable transport servers"
+ },
+ "timeout": {
+ "type": "integer",
+ "description": "Connection timeout in milliseconds"
+ },
+ "retryAttempts": {
+ "type": "integer",
+ "description": "Number of retry attempts on connection failure"
+ }
+ }
+ },
+ "serverCapabilities": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.ai.McpServerCapabilities",
+ "description": "Capabilities supported by the MCP server",
+ "additionalProperties": false,
+ "properties": {
+ "toolsSupported": {
+ "type": "boolean",
+ "description": "Whether the server supports tools"
+ },
+ "resourcesSupported": {
+ "type": "boolean",
+ "description": "Whether the server supports resources"
+ },
+ "promptsSupported": {
+ "type": "boolean",
+ "description": "Whether the server supports prompts"
+ },
+ "loggingSupported": {
+ "type": "boolean",
+ "description": "Whether the server supports logging"
+ },
+ "samplingSupported": {
+ "type": "boolean",
+ "description": "Whether the server supports sampling"
+ },
+ "rootsSupported": {
+ "type": "boolean",
+ "description": "Whether the server supports roots"
+ }
+ }
+ },
+ "governanceMetadata": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.ai.McpGovernanceMetadata",
+ "description": "Governance metadata for compliance and risk management of the MCP server",
+ "additionalProperties": false,
+ "properties": {
+ "registrationStatus": {
+ "type": "string",
+ "description": "Registration status - used to track Shadow AI",
+ "enum": ["Registered", "Unregistered", "PendingApproval", "Approved", "Rejected"]
+ },
+ "registeredBy": {
+ "type": "string",
+ "description": "User who registered the server"
+ },
+ "registeredAt": {
+ "$ref": "../../type/basic.json#/definitions/timestamp",
+ "description": "Timestamp when the server was registered"
+ },
+ "approvedBy": {
+ "type": "string",
+ "description": "User who approved the server"
+ },
+ "approvedAt": {
+ "$ref": "../../type/basic.json#/definitions/timestamp",
+ "description": "Timestamp when the server was approved"
+ },
+ "riskAssessment": {
+ "type": "object",
+ "description": "Risk assessment for this MCP server",
+ "properties": {
+ "riskLevel": {
+ "type": "string",
+ "enum": ["Low", "Medium", "High", "Critical"]
+ },
+ "riskFactors": {
+ "type": "array",
+ "items": {"type": "string"},
+ "description": "Identified risk factors"
+ },
+ "mitigations": {
+ "type": "array",
+ "items": {"type": "string"},
+ "description": "Risk mitigation measures in place"
+ },
+ "assessedBy": {
+ "type": "string"
+ },
+ "assessedAt": {
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ }
+ }
+ },
+ "dataClassification": {
+ "type": "object",
+ "description": "Classification of data accessed by this server",
+ "properties": {
+ "accessesPII": {
+ "type": "boolean",
+ "description": "Whether this server accesses Personally Identifiable Information"
+ },
+ "accessesSensitiveData": {
+ "type": "boolean",
+ "description": "Whether this server accesses sensitive business data"
+ },
+ "dataCategories": {
+ "type": "array",
+ "items": {"type": "string"},
+ "description": "Categories of data accessed"
+ },
+ "dataRetentionPeriod": {
+ "type": "string",
+ "description": "Data retention period for server logs"
+ }
+ }
+ },
+ "governancePolicies": {
+ "$ref": "../../type/entityReferenceList.json",
+ "description": "Governance policies applied to this server"
+ },
+ "aiCompliance": {
+ "$ref": "../../type/aiCompliance.json",
+ "description": "AI compliance assessments for various regulatory frameworks (EU AI Act, NIST AI RMF, etc.)"
+ },
+ "intakeNotes": {
+ "type": "string",
+ "description": "Notes from AI governance intake form or review process"
+ },
+ "approvalComments": {
+ "type": "string",
+ "description": "Comments from governance council on approval/rejection decision"
+ }
+ }
+ },
+ "dataAccessSummary": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.ai.McpDataAccessSummary",
+ "description": "Summary of data access patterns for this MCP server",
+ "additionalProperties": false,
+ "properties": {
+ "dataSources": {
+ "$ref": "../../type/entityReferenceList.json",
+ "description": "Data sources accessed by this server"
+ },
+ "accessPatterns": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "enum": ["Read", "Write", "Execute"]
+ },
+ "description": "Types of access patterns"
+ },
+ "sensitivityLevel": {
+ "type": "string",
+ "enum": ["Public", "Internal", "Confidential", "Restricted"],
+ "description": "Highest sensitivity level of data accessed"
+ },
+ "piiAccess": {
+ "type": "boolean",
+ "description": "Whether this server accesses PII data"
+ },
+ "externalApiAccess": {
+ "type": "boolean",
+ "description": "Whether this server accesses external APIs"
+ },
+ "fileSystemAccess": {
+ "type": "boolean",
+ "description": "Whether this server accesses the file system"
+ },
+ "networkAccess": {
+ "type": "boolean",
+ "description": "Whether this server requires network access"
+ },
+ "databaseAccess": {
+ "type": "boolean",
+ "description": "Whether this server accesses databases"
+ }
+ }
+ },
+ "usageMetrics": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.ai.McpUsageMetrics",
+ "description": "Usage metrics for the MCP server",
+ "additionalProperties": false,
+ "properties": {
+ "totalInvocations": {
+ "type": "integer",
+ "description": "Total number of invocations"
+ },
+ "successRate": {
+ "type": "number",
+ "minimum": 0,
+ "maximum": 1,
+ "description": "Success rate (0-1)"
+ },
+ "averageLatencyMs": {
+ "type": "number",
+ "description": "Average latency in milliseconds"
+ },
+ "p95LatencyMs": {
+ "type": "number",
+ "description": "95th percentile latency in milliseconds"
+ },
+ "lastInvokedAt": {
+ "$ref": "../../type/basic.json#/definitions/timestamp",
+ "description": "Timestamp of last invocation"
+ },
+ "uniqueUsers": {
+ "type": "integer",
+ "description": "Number of unique users"
+ },
+ "dailyActiveUsers": {
+ "type": "integer",
+ "description": "Daily active users"
+ }
+ }
+ },
+ "securityMetrics": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.ai.McpSecurityMetrics",
+ "description": "Security metrics and settings for the MCP server",
+ "additionalProperties": false,
+ "properties": {
+ "authenticationRequired": {
+ "type": "boolean",
+ "description": "Whether authentication is required"
+ },
+ "authorizationEnforced": {
+ "type": "boolean",
+ "description": "Whether authorization is enforced"
+ },
+ "auditLoggingEnabled": {
+ "type": "boolean",
+ "description": "Whether audit logging is enabled"
+ },
+ "encryptionInTransit": {
+ "type": "boolean",
+ "description": "Whether data is encrypted in transit"
+ },
+ "sandboxed": {
+ "type": "boolean",
+ "description": "Whether the server runs in a sandboxed environment"
+ },
+ "secretsManagement": {
+ "type": "string",
+ "description": "Method used for secrets management"
+ }
+ }
+ },
+ "toolCategory": {
+ "javaType": "org.openmetadata.schema.entity.ai.McpToolCategory",
+ "description": "Category of the MCP tool based on its primary function",
+ "type": "string",
+ "enum": [
+ "FileOperation",
+ "WebOperation",
+ "DataOperation",
+ "DatabaseOperation",
+ "SystemOperation",
+ "SecurityOperation",
+ "CommunicationOperation",
+ "CodeOperation",
+ "SearchOperation",
+ "Custom"
+ ],
+ "javaEnums": [
+ {"name": "FileOperation"},
+ {"name": "WebOperation"},
+ {"name": "DataOperation"},
+ {"name": "DatabaseOperation"},
+ {"name": "SystemOperation"},
+ {"name": "SecurityOperation"},
+ {"name": "CommunicationOperation"},
+ {"name": "CodeOperation"},
+ {"name": "SearchOperation"},
+ {"name": "Custom"}
+ ]
+ },
+ "riskLevel": {
+ "javaType": "org.openmetadata.schema.entity.ai.McpRiskLevel",
+ "description": "Risk level based on capabilities and data access",
+ "type": "string",
+ "enum": ["Low", "Medium", "High", "Critical"],
+ "javaEnums": [
+ {"name": "Low"},
+ {"name": "Medium"},
+ {"name": "High"},
+ {"name": "Critical"}
+ ]
+ },
+ "sensitivityLevel": {
+ "javaType": "org.openmetadata.schema.entity.ai.McpSensitivityLevel",
+ "description": "Sensitivity level of data",
+ "type": "string",
+ "enum": ["Public", "Internal", "Confidential", "Restricted"],
+ "javaEnums": [
+ {"name": "Public"},
+ {"name": "Internal"},
+ {"name": "Confidential"},
+ {"name": "Restricted"}
+ ]
+ },
+ "mcpTool": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.ai.McpTool",
+ "description": "MCP Tool - a capability exposed by the server that can perform operations",
+ "additionalProperties": false,
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "Name of the tool"
+ },
+ "displayName": {
+ "type": "string",
+ "description": "Display name for the tool"
+ },
+ "description": {
+ "type": "string",
+ "description": "Description of what the tool does"
+ },
+ "toolCategory": {
+ "$ref": "#/definitions/toolCategory"
+ },
+ "inputSchema": {
+ "type": "object",
+ "description": "JSON Schema for tool input parameters"
+ },
+ "outputSchema": {
+ "type": "object",
+ "description": "JSON Schema for tool output"
+ },
+ "riskLevel": {
+ "$ref": "#/definitions/riskLevel"
+ },
+ "riskFactors": {
+ "type": "array",
+ "items": {"type": "string"},
+ "description": "Identified risk factors"
+ },
+ "dataAccess": {
+ "type": "object",
+ "description": "Data access patterns for the tool",
+ "properties": {
+ "readsData": {"type": "boolean"},
+ "writesData": {"type": "boolean"},
+ "deletesData": {"type": "boolean"},
+ "sensitivityLevel": {"$ref": "#/definitions/sensitivityLevel"},
+ "piiAccess": {"type": "boolean"},
+ "dataTypes": {
+ "type": "array",
+ "items": {"type": "string"}
+ }
+ }
+ },
+ "requiredPermissions": {
+ "type": "array",
+ "items": {"type": "string"},
+ "description": "Permissions required to use this tool"
+ },
+ "sideEffects": {
+ "type": "boolean",
+ "description": "Whether this tool causes side effects",
+ "default": false
+ },
+ "idempotent": {
+ "type": "boolean",
+ "description": "Whether this tool is idempotent",
+ "default": false
+ },
+ "reversible": {
+ "type": "boolean",
+ "description": "Whether this tool's action can be reversed",
+ "default": false
+ },
+ "timeout": {
+ "type": "integer",
+ "description": "Maximum execution time in milliseconds"
+ },
+ "rateLimitPerMinute": {
+ "type": "integer",
+ "description": "Rate limit for tool invocations per minute"
+ },
+ "annotations": {
+ "type": "object",
+ "description": "MCP tool annotations",
+ "properties": {
+ "title": {"type": "string"},
+ "readOnlyHint": {"type": "boolean"},
+ "destructiveHint": {"type": "boolean"},
+ "idempotentHint": {"type": "boolean"},
+ "openWorldHint": {"type": "boolean"}
+ }
+ },
+ "usageCount": {
+ "type": "integer",
+ "description": "Number of times this tool has been invoked"
+ },
+ "lastUsedAt": {
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "tags": {
+ "type": "array",
+ "items": {"$ref": "../../type/tagLabel.json"},
+ "default": null
+ }
+ },
+ "required": ["name"]
+ },
+ "resourceType": {
+ "javaType": "org.openmetadata.schema.entity.ai.McpResourceType",
+ "description": "Type of MCP resource",
+ "type": "string",
+ "enum": ["File", "Directory", "URL", "Database", "API", "Blob", "Stream", "Document", "Custom"],
+ "javaEnums": [
+ {"name": "File"},
+ {"name": "Directory"},
+ {"name": "URL"},
+ {"name": "Database"},
+ {"name": "API"},
+ {"name": "Blob"},
+ {"name": "Stream"},
+ {"name": "Document"},
+ {"name": "Custom"}
+ ]
+ },
+ "mcpResource": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.ai.McpResource",
+ "description": "MCP Resource - data exposed by the server that can be read by AI applications",
+ "additionalProperties": false,
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "Name of the resource"
+ },
+ "displayName": {
+ "type": "string",
+ "description": "Display name for the resource"
+ },
+ "description": {
+ "type": "string",
+ "description": "Description of the resource"
+ },
+ "resourceType": {
+ "$ref": "#/definitions/resourceType"
+ },
+ "uri": {
+ "type": "string",
+ "description": "URI pattern for accessing this resource"
+ },
+ "uriTemplate": {
+ "type": "string",
+ "description": "URI template if the resource supports dynamic URIs"
+ },
+ "mimeType": {
+ "type": "string",
+ "description": "MIME type of the resource content"
+ },
+ "dataClassification": {
+ "type": "object",
+ "description": "Data classification for the resource",
+ "properties": {
+ "sensitivityLevel": {"$ref": "#/definitions/sensitivityLevel"},
+ "containsPII": {"type": "boolean"},
+ "tags": {
+ "description": "Tags for data classification including PII types",
+ "type": "array",
+ "items": {"$ref": "../../type/tagLabel.json"}
+ },
+ "dataCategories": {
+ "type": "array",
+ "items": {"type": "string"}
+ },
+ "retentionPeriod": {"type": "string"},
+ "complianceRequirements": {
+ "type": "array",
+ "items": {"type": "string"}
+ }
+ }
+ },
+ "accessLevel": {
+ "type": "string",
+ "enum": ["ReadOnly", "ReadWrite", "Full"]
+ },
+ "requiredPermissions": {
+ "type": "array",
+ "items": {"type": "string"}
+ },
+ "sourceEntity": {
+ "$ref": "../../type/entityReference.json",
+ "description": "Reference to the underlying data entity if known"
+ },
+ "annotations": {
+ "type": "object",
+ "properties": {
+ "audience": {
+ "type": "array",
+ "items": {"type": "string"}
+ },
+ "priority": {"type": "number"}
+ }
+ },
+ "size": {
+ "type": "integer",
+ "description": "Size in bytes"
+ },
+ "lastModified": {
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "accessCount": {
+ "type": "integer",
+ "description": "Number of times accessed"
+ },
+ "tags": {
+ "type": "array",
+ "items": {"$ref": "../../type/tagLabel.json"},
+ "default": null
+ }
+ },
+ "required": ["name", "uri"]
+ },
+ "promptType": {
+ "javaType": "org.openmetadata.schema.entity.ai.McpPromptType",
+ "description": "Type of MCP prompt",
+ "type": "string",
+ "enum": ["Analysis", "Generation", "Transformation", "Validation", "Query", "Summarization", "Extraction", "Classification", "Custom"],
+ "javaEnums": [
+ {"name": "Analysis"},
+ {"name": "Generation"},
+ {"name": "Transformation"},
+ {"name": "Validation"},
+ {"name": "Query"},
+ {"name": "Summarization"},
+ {"name": "Extraction"},
+ {"name": "Classification"},
+ {"name": "Custom"}
+ ]
+ },
+ "promptArgument": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.ai.McpPromptArgument",
+ "description": "Argument definition for a prompt",
+ "additionalProperties": false,
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "Name of the argument"
+ },
+ "type": {
+ "type": "string",
+ "enum": ["String", "Number", "Boolean", "Array", "Object"]
+ },
+ "description": {
+ "type": "string"
+ },
+ "required": {
+ "type": "boolean",
+ "default": false
+ },
+ "default": {
+ "description": "Default value"
+ },
+ "enum": {
+ "type": "array",
+ "description": "Allowed values"
+ },
+ "sensitive": {
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "required": ["name"]
+ },
+ "promptMessage": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.ai.McpPromptMessage",
+ "description": "A message in the prompt template",
+ "additionalProperties": false,
+ "properties": {
+ "role": {
+ "type": "string",
+ "enum": ["user", "assistant", "system"]
+ },
+ "content": {
+ "type": "string"
+ }
+ },
+ "required": ["role", "content"]
+ },
+ "mcpPrompt": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.ai.McpPrompt",
+ "description": "MCP Prompt - a reusable prompt template exposed by the server",
+ "additionalProperties": false,
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "Name of the prompt"
+ },
+ "displayName": {
+ "type": "string",
+ "description": "Display name for the prompt"
+ },
+ "description": {
+ "type": "string",
+ "description": "Description of the prompt"
+ },
+ "promptType": {
+ "$ref": "#/definitions/promptType"
+ },
+ "arguments": {
+ "type": "array",
+ "items": {"$ref": "#/definitions/promptArgument"},
+ "description": "Arguments that can be passed to this prompt"
+ },
+ "messages": {
+ "type": "array",
+ "items": {"$ref": "#/definitions/promptMessage"},
+ "description": "Message templates"
+ },
+ "examples": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "name": {"type": "string"},
+ "arguments": {"type": "object"},
+ "expectedOutput": {"type": "string"}
+ }
+ }
+ },
+ "dataAccessPatterns": {
+ "type": "array",
+ "items": {"type": "string"}
+ },
+ "outputClassification": {
+ "type": "object",
+ "properties": {
+ "sensitivityLevel": {"$ref": "#/definitions/sensitivityLevel"},
+ "mayContainPII": {"type": "boolean"},
+ "outputCategories": {
+ "type": "array",
+ "items": {"type": "string"}
+ }
+ }
+ },
+ "usageCount": {
+ "type": "integer"
+ },
+ "lastUsedAt": {
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "tags": {
+ "type": "array",
+ "items": {"$ref": "../../type/tagLabel.json"},
+ "default": null
+ }
+ },
+ "required": ["name"]
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier of the MCP Server.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name that identifies this MCP Server.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "fullyQualifiedName": {
+ "description": "Fully qualified name of the MCP Server.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "displayName": {
+ "description": "Display name for the MCP Server.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the MCP Server, its purpose, and capabilities.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "service": {
+ "description": "Reference to the MCP Service that contains this MCP Server.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "serverType": {
+ "$ref": "#/definitions/serverType"
+ },
+ "transportType": {
+ "$ref": "#/definitions/transportType"
+ },
+ "protocolVersion": {
+ "type": "string",
+ "description": "MCP protocol version supported by this server"
+ },
+ "developmentStage": {
+ "$ref": "#/definitions/developmentStage"
+ },
+ "serverInfo": {
+ "$ref": "#/definitions/serverInfo"
+ },
+ "connectionConfig": {
+ "$ref": "#/definitions/connectionConfig"
+ },
+ "capabilities": {
+ "$ref": "#/definitions/serverCapabilities"
+ },
+ "tools": {
+ "description": "Tools exposed by this MCP Server",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/mcpTool"
+ },
+ "default": null
+ },
+ "resources": {
+ "description": "Resources exposed by this MCP Server",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/mcpResource"
+ },
+ "default": null
+ },
+ "prompts": {
+ "description": "Prompt templates exposed by this MCP Server",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/mcpPrompt"
+ },
+ "default": null
+ },
+ "governanceMetadata": {
+ "$ref": "#/definitions/governanceMetadata"
+ },
+ "dataAccessSummary": {
+ "$ref": "#/definitions/dataAccessSummary"
+ },
+ "usageMetrics": {
+ "$ref": "#/definitions/usageMetrics"
+ },
+ "securityMetrics": {
+ "$ref": "#/definitions/securityMetrics"
+ },
+ "usedByApplications": {
+ "description": "AI Applications that use this MCP Server",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "sourceCode": {
+ "description": "Link to source code repository",
+ "type": "string"
+ },
+ "deploymentUrl": {
+ "description": "Deployment endpoint URL",
+ "type": "string"
+ },
+ "documentation": {
+ "description": "Link to external documentation",
+ "type": "string"
+ },
+ "owners": {
+ "description": "Owners of this MCP Server",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "followers": {
+ "description": "Followers of this MCP Server",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "domain": {
+ "description": "Domain the MCP Server belongs to",
+ "$ref": "../../type/entityReference.json"
+ },
+ "dataProducts": {
+ "description": "Data products this MCP Server is part of",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "tags": {
+ "description": "Tags for this MCP Server",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "version": {
+ "description": "Metadata version of the entity",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time in Unix epoch milliseconds",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update",
+ "type": "string"
+ },
+ "href": {
+ "description": "Link to this resource",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "changeDescription": {
+ "description": "Change that led to this version",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that led to this version",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When true, indicates the entity has been soft deleted",
+ "type": "boolean",
+ "default": false
+ },
+ "certification": {
+ "$ref": "../../type/assetCertification.json"
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ },
+ "domains": {
+ "description": "Domains the MCP Server belongs to",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "votes": {
+ "description": "Votes on the entity",
+ "$ref": "../../type/votes.json"
+ },
+ "lifeCycle": {
+ "description": "Life Cycle properties of the entity",
+ "$ref": "../../type/lifeCycle.json"
+ },
+ "sourceHash": {
+ "description": "Source hash of the entity",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32
+ }
+ },
+ "required": ["id", "name", "serverType"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/ai/promptTemplate.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/ai/promptTemplate.json
new file mode 100644
index 000000000000..66ae4c8d3cd9
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/ai/promptTemplate.json
@@ -0,0 +1,235 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/ai/promptTemplate.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "PromptTemplate",
+ "$comment": "@om-entity-type",
+ "description": "Prompt Template entity representing a reusable prompt template for AI agents. Templates can include variables, system prompts, and examples for consistent AI behavior.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.ai.PromptTemplate",
+ "javaInterfaces": ["org.openmetadata.schema.EntityInterface"],
+ "definitions": {
+ "templateVariable": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.ai.TemplateVariable",
+ "description": "Variable definition in the prompt template",
+ "additionalProperties": false,
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "Variable name (e.g., 'user_query', 'context')"
+ },
+ "description": {
+ "type": "string",
+ "description": "Description of what this variable represents"
+ },
+ "dataType": {
+ "type": "string",
+ "enum": ["String", "Number", "Boolean", "Array", "Object"],
+ "description": "Expected data type for this variable"
+ },
+ "required": {
+ "type": "boolean",
+ "default": false,
+ "description": "Whether this variable is required"
+ },
+ "defaultValue": {
+ "type": "string",
+ "description": "Default value if not provided"
+ },
+ "validationPattern": {
+ "type": "string",
+ "description": "Regex pattern for validation"
+ }
+ },
+ "required": ["name"]
+ },
+ "promptExample": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.ai.PromptExample",
+ "description": "Example of how to use this prompt template",
+ "additionalProperties": false,
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "Example name"
+ },
+ "description": {
+ "type": "string",
+ "description": "Description of this example"
+ },
+ "variables": {
+ "type": "object",
+ "description": "Example variable values",
+ "additionalProperties": {"type": "string"}
+ },
+ "expectedOutput": {
+ "type": "string",
+ "description": "Expected output for this example"
+ }
+ }
+ },
+ "promptMetrics": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.ai.PromptMetrics",
+ "description": "Usage and performance metrics for the prompt template",
+ "additionalProperties": false,
+ "properties": {
+ "usageCount": {
+ "type": "integer",
+ "description": "Number of times this template has been used"
+ },
+ "averageTokens": {
+ "type": "number",
+ "description": "Average tokens used when rendering this template"
+ },
+ "averageLatencyMs": {
+ "type": "number",
+ "description": "Average latency in milliseconds"
+ },
+ "successRate": {
+ "type": "number",
+ "description": "Success rate (0-1) of executions using this template"
+ },
+ "lastUsedAt": {
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ }
+ }
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier of the Prompt Template",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name that identifies this Prompt Template",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "fullyQualifiedName": {
+ "description": "Fully qualified name of the Prompt Template",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "displayName": {
+ "description": "Display name for the Prompt Template",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the Prompt Template and its purpose",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "templateContent": {
+ "description": "The actual prompt template content with variables in {{variable}} format",
+ "type": "string"
+ },
+ "systemPrompt": {
+ "description": "System prompt to set the AI's behavior and context",
+ "type": "string"
+ },
+ "variables": {
+ "description": "Variables used in this template",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/templateVariable"
+ }
+ },
+ "examples": {
+ "description": "Examples demonstrating how to use this template",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/promptExample"
+ }
+ },
+ "templateType": {
+ "description": "Type of prompt template",
+ "type": "string",
+ "enum": ["ChatCompletion", "TextGeneration", "CodeGeneration", "Embedding", "Classification", "Extraction", "Custom"]
+ },
+ "templateVersion": {
+ "description": "Template version for tracking changes",
+ "type": "string"
+ },
+ "parentTemplate": {
+ "description": "Reference to parent template if this is a version/fork",
+ "$ref": "../../type/entityReference.json"
+ },
+ "usedByAgents": {
+ "description": "AI Agents using this template",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "metrics": {
+ "$ref": "#/definitions/promptMetrics"
+ },
+ "tags": {
+ "description": "Tags for this Prompt Template",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ }
+ },
+ "version": {
+ "description": "Metadata version of the entity",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "owners": {
+ "description": "Owners of this Prompt Template",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "followers": {
+ "description": "Followers of this Prompt Template",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "domain": {
+ "description": "Domain the Prompt Template belongs to",
+ "$ref": "../../type/entityReference.json"
+ },
+ "updatedAt": {
+ "description": "Last update time in Unix epoch milliseconds",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update",
+ "type": "string"
+ },
+ "href": {
+ "description": "Link to this resource",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "changeDescription": {
+ "description": "Change that led to this version",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that led to this version",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When true, indicates the entity has been soft deleted",
+ "type": "boolean",
+ "default": false
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ },
+ "domains": {
+ "description": "Domains the Prompt Template belongs to",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "votes": {
+ "description": "Votes on the entity",
+ "$ref": "../../type/votes.json"
+ },
+ "lifeCycle": {
+ "description": "Life Cycle properties of the entity",
+ "$ref": "../../type/lifeCycle.json"
+ },
+ "sourceHash": {
+ "description": "Source hash of the entity",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32
+ }
+ },
+ "required": ["id", "name", "templateContent"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/app.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/app.json
new file mode 100644
index 000000000000..78a027b3119b
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/app.json
@@ -0,0 +1,337 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/applications/app.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "App",
+ "javaType": "org.openmetadata.schema.entity.app.App",
+ "javaInterfaces": [
+ "org.openmetadata.schema.EntityInterface"
+ ],
+ "description": "This schema defines the applications for Open-Metadata.",
+ "type": "object",
+ "definitions": {
+ "scheduleType": {
+ "javaType": "org.openmetadata.schema.entity.app.ScheduleType",
+ "description": "This schema defines the type of application.",
+ "type": "string",
+ "enum": [
+ "Live",
+ "Scheduled",
+ "ScheduledOrManual",
+ "NoSchedule",
+ "OnlyManual"
+ ],
+ "javaEnums": [
+ {
+ "name": "Live",
+ "description": "An app that has other trigger mechanisms."
+ },
+ {
+ "name": "Scheduled",
+ "description": "An app that has a schedule and cannot be run manually."
+ },
+ {
+ "name": "ScheduledOrManual",
+ "description": "An app that has a schedule and can be run manually."
+ },
+ {
+ "name": "NoSchedule",
+ "description": "An app that has no schedule and cannot be run manually."
+ },
+ {
+ "name": "OnlyManual",
+ "description": "An app that has no schedule but can be run manually."
+ }
+ ]
+ },
+ "scheduleTimeline": {
+ "javaType": "org.openmetadata.schema.entity.app.ScheduleTimeline",
+ "description": "This schema defines the Application ScheduleTimeline Options",
+ "type": "string",
+ "enum": [
+ "Hourly",
+ "Daily",
+ "Weekly",
+ "Monthly",
+ "Custom",
+ "None"
+ ],
+ "default": "Weekly"
+ },
+ "appSchedule": {
+ "javaType": "org.openmetadata.schema.entity.app.AppSchedule",
+ "description": "This schema defines the type of application.",
+ "properties": {
+ "scheduleTimeline": {
+ "$ref": "#/definitions/scheduleTimeline"
+ },
+ "cronExpression": {
+ "description": "Cron Expression in case of Custom scheduled Trigger",
+ "type": "string"
+ }
+ },
+ "required": [
+ "scheduleTimeline"
+ ],
+ "additionalProperties": false
+ },
+ "appType": {
+ "javaType": "org.openmetadata.schema.entity.app.AppType",
+ "description": "This schema defines the type of application.",
+ "type": "string",
+ "enum": [
+ "internal",
+ "external"
+ ],
+ "javaEnums": [
+ {
+ "name": "Internal"
+ },
+ {
+ "name": "External"
+ }
+ ]
+ },
+ "agentType": {
+ "javaType": "org.openmetadata.schema.entity.app.AgentType",
+ "description": "This schema defines the type of application.",
+ "type": "string",
+ "enum": [
+ "CollateAI",
+ "CollateAITierAgent",
+ "CollateAIQualityAgent",
+ "Metadata"
+ ],
+ "javaEnums": [
+ {
+ "name": "CollateAI"
+ },
+ {
+ "name": "CollateAITierAgent"
+ },
+ {
+ "name": "CollateAIQualityAgent"
+ },
+ {
+ "name": "Metadata"
+ }
+ ]
+ },
+ "permissions": {
+ "javaType": "org.openmetadata.schema.entity.app.NativeAppPermission",
+ "description": "This schema defines the Permission used by Native Application.",
+ "type": "string",
+ "enum": [
+ "All"
+ ],
+ "javaEnums": [
+ {
+ "name": "All"
+ }
+ ]
+ },
+ "executionContext": {
+ "description": "Execution Configuration.",
+ "oneOf": [
+ {
+ "$ref": "./liveExecutionContext.json"
+ },
+ {
+ "$ref": "./scheduledExecutionContext.json"
+ }
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier of this application.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name of the Application.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name for the application.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the Application.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "features": {
+ "description": "Features of the Application.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "fullyQualifiedName": {
+ "description": "FullyQualifiedName same as `name`.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "owners": {
+ "description": "Owners of this workflow.",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this entity.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "provider": {
+ "$ref": "../../type/basic.json#/definitions/providerType"
+ },
+ "developer": {
+ "description": "Developer For the Application.",
+ "type": "string"
+ },
+ "developerUrl": {
+ "description": "Url for the developer",
+ "type": "string"
+ },
+ "privacyPolicyUrl": {
+ "description": "Privacy Policy for the developer",
+ "type": "string"
+ },
+ "supportEmail": {
+ "description": "Support Email for the application",
+ "type": "string"
+ },
+ "className": {
+ "description": "Fully Qualified ClassName for the Schedule",
+ "type": "string"
+ },
+ "sourcePythonClass": {
+ "description": "Fully Qualified class name for the Python source that will execute the external application.",
+ "type": "string"
+ },
+ "appType": {
+ "description": "This schema defines the type of application.",
+ "$ref": "#/definitions/appType"
+ },
+ "agentType": {
+ "description": "This schema defines the type of the agent.",
+ "$ref": "#/definitions/agentType"
+ },
+ "scheduleType": {
+ "description": "This schema defines the Schedule Type of Application.",
+ "$ref": "#/definitions/scheduleType"
+ },
+ "permission": {
+ "description": "Permission used by Native Applications.",
+ "$ref": "#/definitions/permissions"
+ },
+ "bot": {
+ "description": "Bot User Associated with this application.",
+ "$ref": "../../type/entityReference.json",
+ "default": null
+ },
+ "runtime": {
+ "description": "Execution Configuration.",
+ "$ref": "#/definitions/executionContext"
+ },
+ "allowConfiguration": {
+ "description": "Allow users to configure the app from the UI. If `false`, the `configure` step will be hidden.",
+ "type": "boolean",
+ "default": true
+ },
+ "system": {
+ "description": "A system app cannot be uninstalled or modified.",
+ "type": "boolean",
+ "default": false
+ },
+ "appConfiguration": {
+ "description": "Application Configuration object.",
+ "$ref": "./configuration/applicationConfig.json#/definitions/appConfig"
+ },
+ "privateConfiguration": {
+ "description": "Application Private configuration loaded at runtime.",
+ "$ref": "./configuration/applicationConfig.json#/definitions/privateConfig"
+ },
+ "enabled": {
+ "type": "boolean",
+ "description": "Flag to enable/disable the application. If the app is not enabled, it can't be installed.",
+ "default": true
+ },
+ "pipelines": {
+ "description": "References to pipelines deployed for this database service to extract metadata, usage, lineage etc..",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "appSchedule": {
+ "description": "In case the app supports scheduling, list of different app schedules",
+ "$ref": "#/definitions/appSchedule"
+ },
+ "openMetadataServerConnection": {
+ "$ref": "../services/connections/metadata/openMetadataConnection.json"
+ },
+ "appLogoUrl": {
+ "description": "Application Logo Url.",
+ "type": "string",
+ "format": "uri"
+ },
+ "appScreenshots": {
+ "description": "Application Screenshots.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "uniqueItems": true
+ },
+ "domains": {
+ "description": "Domains the asset belongs to. When not set, the asset inherits the domain from the parent it belongs to.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "supportsInterrupt": {
+ "description": "If the app run can be interrupted as part of the execution.",
+ "type": "boolean",
+ "default": false
+ },
+ "eventSubscriptions": {
+ "description": "Event Subscriptions for the Application.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "supportsIngestionRunner": {
+ "description": "If the app support execution through the external runner.",
+ "type": "boolean",
+ "default": false
+ },
+ "ingestionRunner" : {
+ "description": "The ingestion agent responsible for executing the ingestion pipeline. It will be defined at runtime based on the Ingestion Agent of the service.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "allowConcurrentExecution": {
+ "description": "If true, multiple instances of this app can run concurrently. This is useful for apps like QueryRunner that support parallel executions with different configurations.",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "additionalProperties": false,
+ "required": ["id", "name", "appType", "className", "scheduleType", "permission", "runtime"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/appExtension.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/appExtension.json
new file mode 100644
index 000000000000..4533a27c66c6
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/appExtension.json
@@ -0,0 +1,38 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/applications/appExtension.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AppExtension",
+ "javaType": "org.openmetadata.schema.entity.app.AppExtension",
+ "description": "App Extension Object.",
+ "type": "object",
+ "definitions": {
+ "extensionType": {
+ "description": "Extension type.",
+ "type": "string",
+ "enum": [
+ "status",
+ "limits",
+ "custom"
+ ]
+ }
+ },
+ "properties": {
+ "appId": {
+ "description": "Unique identifier of this application.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "appName": {
+ "description": "Name of the application.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "timestamp": {
+ "description": "Start of the job status.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "extension": {
+ "$ref": "#/definitions/extensionType"
+ }
+ },
+ "additionalProperties": true,
+ "required": ["appId", "appName", "extension"]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/appRunRecord.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/appRunRecord.json
new file mode 100644
index 000000000000..6f63c31499ec
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/appRunRecord.json
@@ -0,0 +1,100 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/applications/appRunRecord.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AppRunRecord",
+ "javaType": "org.openmetadata.schema.entity.app.AppRunRecord",
+ "description": "App Run Record.",
+ "type": "object",
+ "properties": {
+ "appId": {
+ "description": "Unique identifier of this application for which the job is ran.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "appName": {
+ "description": "Name of the application.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "timestamp": {
+ "description": "Update time of the job status.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "extension": {
+ "description": "Extension type.",
+ "type": "string",
+ "default": "status"
+ },
+ "status": {
+ "description": "Status for the Job.",
+ "type": "string",
+ "enum": [
+ "started",
+ "running",
+ "completed",
+ "failed",
+ "active",
+ "activeError",
+ "stopped",
+ "stopInProgress",
+ "success",
+ "pending"
+ ]
+ },
+ "runType": {
+ "description": "This schema defines the type of application Run.",
+ "type": "string"
+ },
+ "startTime": {
+ "description": "Start of the job status.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "endTime": {
+ "description": "End time of the job status.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "executionTime": {
+ "description": "Execution time of the job status.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "failureContext": {
+ "javaType": "org.openmetadata.schema.entity.app.FailureContext",
+ "description": "Container for messages regarding the failure of the application. Use the 'failure' field to get the error message. Additional properties are there for backward compatibility.",
+ "type": "object",
+ "properties": {
+ "failure": {
+ "$ref": "../../system/indexingError.json"
+ }
+ },
+ "additionalProperties": true
+ },
+ "successContext": {
+ "javaType": "org.openmetadata.schema.entity.app.SuccessContext",
+ "description": "Success Context for the Application.",
+ "type": "object",
+ "properties": {
+ "stats": {
+ "description": "Stats for the application.",
+ "$ref": "../../system/eventPublisherJob.json#/definitions/stats"
+ }
+ }
+ },
+ "scheduleInfo": {
+ "$ref": "./app.json#/definitions/appSchedule"
+ },
+ "config": {
+ "description": "The configuration used for this application run. It's type will be based on the application type. Old runs might not be compatible with schema of app configuration.",
+ "$ref": "../../type/basic.json#/definitions/map"
+ },
+ "services": {
+ "description": "Services configured in the application run. This information is generated based on the given configuration.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/entityReference.json"
+ }
+ },
+ "properties": {
+ "description": "Arbitrary metadata that will be attached to the report.",
+ "$ref": "../../type/basic.json#/definitions/map"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/applicationConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/applicationConfig.json
new file mode 100644
index 000000000000..e7b9b73a3da5
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/applicationConfig.json
@@ -0,0 +1,61 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/applications/configuration/applicationConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "ApplicationConfigModel",
+ "description": "Application Pipeline Configuration.",
+ "type": "object",
+ "definitions": {
+ "appConfig": {
+ "oneOf": [
+ {
+ "$ref": "external/collateAIAppConfig.json"
+ },
+ {
+ "$ref": "external/automatorAppConfig.json"
+ },
+ {
+ "$ref": "../../../configuration/slackAppConfiguration.json"
+ },
+ {
+ "$ref": "external/collateAIQualityAgentAppConfig.json"
+ },
+ {
+ "$ref": "external/collateAITierAgentAppConfig.json"
+ },
+ {
+ "$ref": "internal/dataInsightsAppConfig.json"
+ },
+ {
+ "$ref": "internal/dataInsightsReportAppConfig.json"
+ },
+ {
+ "$ref": "internal/searchIndexingAppConfig.json"
+ },
+ {
+ "$ref": "internal/cacheWarmupAppConfig.json"
+ },
+ {
+ "$ref": "internal/dataRetentionConfiguration.json"
+ },
+ {
+ "$ref": "internal/autoPilotAppConfig.json"
+ },
+ {
+ "type": "object",
+ "additionalProperties": true
+ }
+ ]
+ },
+ "privateConfig": {
+ "oneOf": [
+ {
+ "$ref": "private/external/collateAIAppPrivateConfig.json"
+ },
+ {
+ "type": "object",
+ "additionalProperties": true
+ }
+ ]
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/addCustomProperties.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/addCustomProperties.json
new file mode 100644
index 000000000000..476192e9e7d2
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/addCustomProperties.json
@@ -0,0 +1,36 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/applications/configuration/external/automator/addCustomPropertiesAction.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AddCustomPropertiesAction",
+ "description": "Add a Custom Property to the selected assets.",
+ "type": "object",
+ "definitions": {
+ "AddCustomPropertiesActionType": {
+ "description": "Add Custom Properties Action Type.",
+ "type": "string",
+ "enum": ["AddCustomPropertiesAction"],
+ "default": "AddCustomPropertiesAction"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Application Type",
+ "description": "Application Type",
+ "$ref": "#/definitions/AddCustomPropertiesActionType",
+ "default": "AddCustomPropertiesAction"
+ },
+ "customProperties": {
+ "description": "Owners to apply",
+ "$ref": "../../../../../type/basic.json#/definitions/entityExtension",
+ "default": null
+ },
+ "overwriteMetadata": {
+ "title": "Overwrite Metadata",
+ "description": "Update the Custom Property even if it is defined in the asset. By default, we will only apply the owners to assets without the given Custom Property informed.",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "required": ["type", "customProperties"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/addDataProductAction.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/addDataProductAction.json
new file mode 100644
index 000000000000..b7088b4c8cc4
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/addDataProductAction.json
@@ -0,0 +1,39 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/applications/configuration/external/automator/addDataProductAction.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AddDataProductAction",
+ "description": "Add a Data Product to the selected assets.",
+ "type": "object",
+ "definitions": {
+ "AddDataProductActionType": {
+ "description": "Add Data Products Action Type.",
+ "type": "string",
+ "enum": ["AddDataProductAction"],
+ "default": "AddDataProductAction"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Application Type",
+ "description": "Application Type",
+ "$ref": "#/definitions/AddDataProductActionType",
+ "default": "AddDataProductAction"
+ },
+ "dataProducts": {
+ "description": "Data Products to apply",
+ "type": "array",
+ "items": {
+ "$ref": "../../../../../type/entityReference.json"
+ },
+ "default": null
+ },
+ "overwriteMetadata": {
+ "title": "Overwrite Metadata",
+ "description": "Update the Data Product even if the asset belongs to a different Domain. By default, we will only add the Data Product if the asset has no Domain, or it belongs to the same domain as the Data Product.",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "required": ["type", "dataProducts"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/addDescriptionAction.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/addDescriptionAction.json
new file mode 100644
index 000000000000..76fb7715b626
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/addDescriptionAction.json
@@ -0,0 +1,44 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/applications/configuration/external/automator/addDescriptionAction.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AddDescriptionAction",
+ "description": "Apply Tags to the selected assets.",
+ "type": "object",
+ "definitions": {
+ "addDescriptionActionType": {
+ "description": "Add Description Action Type.",
+ "type": "string",
+ "enum": ["AddDescriptionAction"],
+ "default": "AddDescriptionAction"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Application Type",
+ "description": "Application Type",
+ "$ref": "#/definitions/addDescriptionActionType",
+ "default": "AddDescriptionAction"
+ },
+ "description": {
+ "description": "Description to apply",
+ "type": "string"
+ },
+ "applyToChildren": {
+ "title": "Apply to Children",
+ "description": "Apply the description to the children of the selected assets that match the criteria. E.g., columns, tasks, topic fields,...",
+ "type": "array",
+ "items": {
+ "$ref": "../../../../../type/basic.json#/definitions/entityName"
+ },
+ "default": null
+ },
+ "overwriteMetadata": {
+ "title": "Overwrite Metadata",
+ "description": "Update the description even if they are already defined in the asset. By default, we'll only add the descriptions to assets without the description set.",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "required": ["type", "description"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/addDomainAction.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/addDomainAction.json
new file mode 100644
index 000000000000..b76c7a82a9c4
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/addDomainAction.json
@@ -0,0 +1,35 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/applications/configuration/external/automator/addDomainAction.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AddDomainAction",
+ "description": "Add domains to the selected assets.",
+ "type": "object",
+ "definitions": {
+ "addDomainActionType": {
+ "description": "Add Domain Action Type.",
+ "type": "string",
+ "enum": ["AddDomainAction"],
+ "default": "AddDomainAction"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Application Type",
+ "description": "Application Type",
+ "$ref": "#/definitions/addDomainActionType",
+ "default": "AddDomainAction"
+ },
+ "domains": {
+ "description": "Domains to apply",
+ "$ref": "../../../../../type/entityReferenceList.json"
+ },
+ "overwriteMetadata": {
+ "title": "Overwrite Metadata",
+ "description": "Update the domains even if they are defined in the asset. By default, we will only apply the domains to assets without domains.",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "required": ["type", "domains"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/addOwnerAction.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/addOwnerAction.json
new file mode 100644
index 000000000000..04c2adc2471f
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/addOwnerAction.json
@@ -0,0 +1,36 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/applications/configuration/external/automator/addOwnerAction.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AddOwnerAction",
+ "description": "Add owners to the selected assets.",
+ "type": "object",
+ "definitions": {
+ "addOwnerActionType": {
+ "description": "Add Owner Action Type.",
+ "type": "string",
+ "enum": ["AddOwnerAction"],
+ "default": "AddOwnerAction"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Application Type",
+ "description": "Application Type",
+ "$ref": "#/definitions/addOwnerActionType",
+ "default": "AddOwnerAction"
+ },
+ "owners": {
+ "description": "Owners to apply",
+ "$ref": "../../../../../type/entityReferenceList.json",
+ "default": null
+ },
+ "overwriteMetadata": {
+ "title": "Overwrite Metadata",
+ "description": "Update the owners even if it is defined in the asset. By default, we will only apply the owners to assets without owner.",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "required": ["type", "owners"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/addTagsAction.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/addTagsAction.json
new file mode 100644
index 000000000000..1d92a7362816
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/addTagsAction.json
@@ -0,0 +1,47 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/applications/configuration/external/automator/addTagsAction.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AddTagsAction",
+ "description": "Apply Classification Tags to the selected assets.",
+ "type": "object",
+ "definitions": {
+ "addTagsActionType": {
+ "description": "Add Tags action type.",
+ "type": "string",
+ "enum": ["AddTagsAction"],
+ "default": "AddTagsAction"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Application Type",
+ "description": "Application Type",
+ "$ref": "#/definitions/addTagsActionType",
+ "default": "AddTagsAction"
+ },
+ "tags": {
+ "description": "Classification Tags to apply (source must be 'Classification')",
+ "type": "array",
+ "items": {
+ "$ref": "../../../../../type/tagLabel.json"
+ }
+ },
+ "applyToChildren": {
+ "title": "Apply to Children",
+ "description": "Apply tags to the children of the selected assets that match the criteria. E.g., columns, tasks, topic fields,...",
+ "type": "array",
+ "items": {
+ "$ref": "../../../../../type/basic.json#/definitions/entityName"
+ },
+ "default": null
+ },
+ "overwriteMetadata": {
+ "title": "Overwrite Metadata",
+ "description": "Update tags even if they are already defined in the asset. By default, incoming tags are merged with the existing ones.",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "required": ["type", "tags"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/addTermsAction.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/addTermsAction.json
new file mode 100644
index 000000000000..8c5c3f0d2447
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/addTermsAction.json
@@ -0,0 +1,47 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/applications/configuration/external/automator/addTermsAction.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AddTermsAction",
+ "description": "Apply Glossary Terms to the selected assets.",
+ "type": "object",
+ "definitions": {
+ "addTermsActionType": {
+ "description": "Add Terms action type.",
+ "type": "string",
+ "enum": ["AddTermsAction"],
+ "default": "AddTermsAction"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Application Type",
+ "description": "Application Type",
+ "$ref": "#/definitions/addTermsActionType",
+ "default": "AddTermsAction"
+ },
+ "terms": {
+ "description": "Glossary Terms to apply",
+ "type": "array",
+ "items": {
+ "$ref": "../../../../../type/tagLabel.json"
+ }
+ },
+ "applyToChildren": {
+ "title": "Apply to Children",
+ "description": "Apply terms to the children of the selected assets that match the criteria. E.g., columns, tasks, topic fields,...",
+ "type": "array",
+ "items": {
+ "$ref": "../../../../../type/basic.json#/definitions/entityName"
+ },
+ "default": null
+ },
+ "overwriteMetadata": {
+ "title": "Overwrite Metadata",
+ "description": "Update terms even if they are already defined in the asset. By default, incoming terms are merged with the existing ones.",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "required": ["type", "terms"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/addTestCaseAction.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/addTestCaseAction.json
new file mode 100644
index 000000000000..bb9fc5d7dc7b
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/addTestCaseAction.json
@@ -0,0 +1,81 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/applications/configuration/external/automator/addTestCaseAction.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AddTestCaseAction",
+ "description": "Add Test Cases to the selected assets.",
+ "type": "object",
+ "definitions": {
+ "addTestCaseActionType": {
+ "description": "Add Test Case Action Type.",
+ "type": "string",
+ "enum": ["AddTestCaseAction"],
+ "default": "AddTestCaseAction"
+ },
+ "testCaseDefinitions": {
+ "description": "Minimum set of requirements to get a Test Case request ready",
+ "type": "object",
+ "properties": {
+ "testDefinition": {
+ "description": "Fully qualified name of the test definition.",
+ "$ref": "../../../../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "parameterValues": {
+ "type": "array",
+ "items": {
+ "$ref": "../../../../../tests/testCase.json#/definitions/testCaseParameterValue"
+ }
+ },
+ "computePassedFailedRowCount": {
+ "description": "Compute the passed and failed row count for the test case.",
+ "type": "boolean",
+ "default": false
+ },
+ "useDynamicAssertion": {
+ "description": "If the test definition supports it, use dynamic assertion to evaluate the test case.",
+ "type": "boolean",
+ "default": false
+ },
+ "tags": {
+ "description": "Tags to apply",
+ "type": "array",
+ "items": {
+ "$ref": "../../../../../type/tagLabel.json"
+ },
+ "default": []
+ }
+ }
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Application Type",
+ "description": "Application Type",
+ "$ref": "#/definitions/addTestCaseActionType",
+ "default": "AddTestCaseAction"
+ },
+ "testCases": {
+ "description": "Test Cases to apply",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/testCaseDefinitions"
+ }
+ },
+ "applyToChildren": {
+ "title": "Apply to Children",
+ "description": "Add tests to the selected table columns",
+ "type": "array",
+ "items": {
+ "$ref": "../../../../../type/basic.json#/definitions/entityName"
+ },
+ "default": null
+ },
+ "overwriteMetadata": {
+ "title": "Overwrite Metadata",
+ "description": "Update the test even if it is defined in the asset. By default, we will only apply the test to assets without the existing test already existing.",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "required": ["type", "testCases"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/addTierAction.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/addTierAction.json
new file mode 100644
index 000000000000..419723d3490a
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/addTierAction.json
@@ -0,0 +1,35 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/applications/configuration/external/automator/addTierAction.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AddTierAction",
+ "description": "Add an owner to the selected assets.",
+ "type": "object",
+ "definitions": {
+ "addTierActionType": {
+ "description": "Add Tier Action Type.",
+ "type": "string",
+ "enum": ["AddTierAction"],
+ "default": "AddTierAction"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Application Type",
+ "description": "Application Type",
+ "$ref": "#/definitions/addTierActionType",
+ "default": "AddTierAction"
+ },
+ "tier": {
+ "description": "tier to apply",
+ "$ref": "../../../../../type/tagLabel.json"
+ },
+ "overwriteMetadata": {
+ "title": "Overwrite Metadata",
+ "description": "Update the tier even if it is defined in the asset. By default, we will only apply the tier to assets without tier.",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "required": ["type", "tier"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/lineagePropagationAction.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/lineagePropagationAction.json
new file mode 100644
index 000000000000..f928ce902095
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/lineagePropagationAction.json
@@ -0,0 +1,114 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/applications/configuration/external/automator/lineagePropagationAction.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "LineagePropagationAction",
+ "description": "Propagate description, tags and glossary terms via lineage",
+ "type": "object",
+ "definitions": {
+ "lineagePropagationActionType": {
+ "description": "Lineage propagation action type.",
+ "type": "string",
+ "enum": ["LineagePropagationAction"],
+ "default": "LineagePropagationAction"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Application Type",
+ "description": "Application Type",
+ "$ref": "#/definitions/lineagePropagationActionType",
+ "default": "LineagePropagationAction"
+ },
+ "propagationFilterMode": {
+ "title": "Propagation Filter Mode",
+ "description": "Determines how the filter selects entities. 'SOURCE' (default): filtered entities push their metadata downstream to all discovered entities via lineage. 'TARGET': filtered entities receive metadata from upstream lineage.",
+ "type": "string",
+ "enum": ["TARGET", "SOURCE"],
+ "default": "SOURCE"
+ },
+ "propagateDescription": {
+ "title": "Propagate Description",
+ "description": "Propagate description through lineage",
+ "type": "boolean",
+ "default": true
+ },
+ "propagateTags": {
+ "title": "Propagate Tags",
+ "description": "Propagate tags through lineage",
+ "type": "boolean",
+ "default": true
+ },
+ "propagateGlossaryTerms": {
+ "title": "Propagate Glossary Terms",
+ "description": "Propagate glossary terms through lineage",
+ "type": "boolean",
+ "default": true
+ },
+ "propagateTier": {
+ "title": "Propagate Tier",
+ "description": "Propagate tier from the parent",
+ "type": "boolean",
+ "default": false
+ },
+ "propagateDomains": {
+ "title": "Propagate Domains",
+ "description": "Propagate domains from the parent through lineage",
+ "type": "boolean",
+ "default": false
+ },
+ "propagateOwner": {
+ "title": "Propagate Owner",
+ "description": "Propagate owner from the parent",
+ "type": "boolean",
+ "default": false
+ },
+ "propagateColumnLevel": {
+ "title": "Propagate Column Level",
+ "description": "Propagate the metadata to columns via column-level lineage.",
+ "type": "boolean",
+ "default": true
+ },
+ "propagateParent": {
+ "title": "Propagate Parent",
+ "description": "Propagate the metadata to the parents (e.g., tables) via lineage.",
+ "type": "boolean",
+ "default": false
+ },
+ "overwriteMetadata": {
+ "title": "Overwrite Metadata",
+ "description": "Update descriptions, tags and Glossary Terms via lineage even if they are already defined in the asset. By default, descriptions are only updated if they are not already defined in the asset, and incoming tags are merged with the existing ones.",
+ "type": "boolean",
+ "default": false
+ },
+ "propagationDepth": {
+ "title": "Propagation Depth",
+ "description": "Number of levels to propagate lineage. If not set, it will propagate to all levels.",
+ "type": "integer",
+ "default": null
+ },
+ "propagationDepthMode": {
+ "title": "Propagation Depth Mode",
+ "description": "Mode for calculating propagation depth. 'ROOT' calculates depth from root nodes (sources with no parents). 'DATA_ASSET' calculates depth relative to each data asset being processed, ensuring each asset only receives metadata from nodes within the specified number of hops upstream.",
+ "type": "string",
+ "enum": ["ROOT", "DATA_ASSET"],
+ "default": "ROOT"
+ },
+ "propagationStopConfigs": {
+ "title": "Propagation Stop Configurations",
+ "description": "List of configurations to stop propagation based on conditions",
+ "type": "array",
+ "default": null,
+ "items": {
+ "$ref": "propagationStopConfig.json"
+ }
+ },
+ "useOptimizedPropagation": {
+ "title": "Use Optimized Propagation",
+ "description": "Use the optimized propagation algorithm that reduces memory usage and API calls. Recommended for large lineage graphs. If set to false, uses the original propagation algorithm. Default is true.",
+ "type": "boolean",
+ "default": true
+ }
+ },
+ "required": ["type"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/mlTaggingAction.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/mlTaggingAction.json
new file mode 100644
index 000000000000..4badf41449b3
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/mlTaggingAction.json
@@ -0,0 +1,25 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/applications/configuration/external/automator/mlTaggingAction.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "MLTaggingAction",
+ "description": "ML Tagging action configuration for external automator.",
+ "type": "object",
+ "definitions": {
+ "mlTaggingActionType": {
+ "description": "ML PII Tagging action type.",
+ "type": "string",
+ "enum": ["MLTaggingAction"],
+ "default": "MLTaggingAction"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Application Type",
+ "description": "Application Type",
+ "$ref": "#/definitions/mlTaggingActionType",
+ "default": "MLTaggingAction"
+ }
+ },
+ "required": ["type"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/propagationStopConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/propagationStopConfig.json
new file mode 100644
index 000000000000..fd55fb74afc7
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/propagationStopConfig.json
@@ -0,0 +1,45 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/applications/configuration/external/automator/propagationStopConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "PropagationStopConfig",
+ "description": "Configuration to stop lineage propagation based on conditions",
+ "type": "object",
+ "properties": {
+ "metadataAttribute": {
+ "title": "Metadata Attribute",
+ "description": "The metadata attribute to check for stopping propagation",
+ "type": "string",
+ "enum": [
+ "description",
+ "tags",
+ "glossaryTerms",
+ "owner",
+ "tier",
+ "domains"
+ ]
+ },
+ "value": {
+ "title": "Stop Values",
+ "description": "List of attribute values that will stop propagation when any of them is matched",
+ "type": "array",
+ "items": {
+ "oneOf": [
+ {
+ "type": "string"
+ },
+ {
+ "$ref": "../../../../../type/tagLabel.json"
+ },
+ {
+ "$ref": "../../../../../type/entityReference.json"
+ }
+ ]
+ }
+ }
+ },
+ "required": [
+ "metadataAttribute",
+ "value"
+ ],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/removeCustomPropertiesAction.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/removeCustomPropertiesAction.json
new file mode 100644
index 000000000000..e975ab6c1622
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/removeCustomPropertiesAction.json
@@ -0,0 +1,32 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/applications/configuration/external/automator/removeCustomPropertiesAction.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "RemoveCustomPropertiesAction",
+ "description": "Remove Custom Properties Action Type",
+ "type": "object",
+ "definitions": {
+ "removeCustomPropertiesActionType": {
+ "description": "Remove Custom Properties Action Type.",
+ "type": "string",
+ "enum": ["RemoveCustomPropertiesAction"],
+ "default": "RemoveCustomPropertiesAction"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Application Type",
+ "description": "Application Type",
+ "$ref": "#/definitions/removeCustomPropertiesActionType",
+ "default": "removeCustomPropertiesActionType"
+ },
+ "customProperties": {
+ "description": "Custom Properties keys to remove",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "required": ["type", "customProperties"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/removeDataProductAction.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/removeDataProductAction.json
new file mode 100644
index 000000000000..e35d073f6b17
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/removeDataProductAction.json
@@ -0,0 +1,33 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/applications/configuration/external/automator/removeDataProductAction.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "RemoveDataProductAction",
+ "description": "Remove a Data Product to the selected assets.",
+ "type": "object",
+ "definitions": {
+ "RemoveDataProductActionType": {
+ "description": "Remove Data Products Action Type.",
+ "type": "string",
+ "enum": ["RemoveDataProductAction"],
+ "default": "RemoveDataProductAction"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Application Type",
+ "description": "Application Type",
+ "$ref": "#/definitions/RemoveDataProductActionType",
+ "default": "RemoveDataProductAction"
+ },
+ "dataProducts": {
+ "description": "Data Products to remove",
+ "type": "array",
+ "items": {
+ "$ref": "../../../../../type/entityReference.json"
+ },
+ "default": null
+ }
+ },
+ "required": ["type", "dataProducts"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/removeDescriptionAction.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/removeDescriptionAction.json
new file mode 100644
index 000000000000..9dcd2a4ecf99
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/removeDescriptionAction.json
@@ -0,0 +1,40 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/applications/configuration/external/automator/removeDescriptionAction.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "RemoveDescriptionAction",
+ "description": "Remove Owner Action Type",
+ "type": "object",
+ "definitions": {
+ "removeDescriptionActionType": {
+ "description": "Remove Description Action Type",
+ "type": "string",
+ "enum": ["RemoveDescriptionAction"],
+ "default": "RemoveDescriptionAction"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Application Type",
+ "description": "Application Type",
+ "$ref": "#/definitions/removeDescriptionActionType",
+ "default": "RemoveDescriptionAction"
+ },
+ "applyToChildren": {
+ "title": "Apply to Children",
+ "description": "Remove descriptions from the children of the selected assets. E.g., columns, tasks, topic fields,...",
+ "type": "array",
+ "items": {
+ "$ref": "../../../../../type/basic.json#/definitions/entityName"
+ },
+ "default": null
+ },
+ "applyToAll": {
+ "title": "Apply to All",
+ "description": "Remove descriptions from all the children and parent of the selected assets.",
+ "type": "boolean",
+ "default": null
+ }
+ },
+ "required": ["type"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/removeDomainAction.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/removeDomainAction.json
new file mode 100644
index 000000000000..13492107b673
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/removeDomainAction.json
@@ -0,0 +1,25 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/applications/configuration/external/automator/removeDomainAction.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "RemoveDomainAction",
+ "description": "Remove domains from the selected assets.",
+ "type": "object",
+ "definitions": {
+ "removeDomainActionType": {
+ "description": "Remove Domain Action Type",
+ "type": "string",
+ "enum": ["RemoveDomainAction"],
+ "default": "RemoveDomainAction"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Application Type",
+ "description": "Application Type",
+ "$ref": "#/definitions/removeDomainActionType",
+ "default": "RemoveDomainAction"
+ }
+ },
+ "required": ["type"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/removeOwnerAction.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/removeOwnerAction.json
new file mode 100644
index 000000000000..a4e5017abb4e
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/removeOwnerAction.json
@@ -0,0 +1,25 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/applications/configuration/external/automator/removeOwnerAction.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "RemoveOwnerAction",
+ "description": "Remove Owner Action Type",
+ "type": "object",
+ "definitions": {
+ "removeOwnerActionType": {
+ "description": "Remove Owner Action Type",
+ "type": "string",
+ "enum": ["RemoveOwnerAction"],
+ "default": "RemoveOwnerAction"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Application Type",
+ "description": "Application Type",
+ "$ref": "#/definitions/removeOwnerActionType",
+ "default": "RemoveOwnerAction"
+ }
+ },
+ "required": ["type"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/removeTagsAction.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/removeTagsAction.json
new file mode 100644
index 000000000000..8a1ed43f7fa8
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/removeTagsAction.json
@@ -0,0 +1,64 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/applications/configuration/external/automator/removeTagsAction.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "RemoveTagsAction",
+ "description": "Remove Classification Tags Action Type",
+ "type": "object",
+ "definitions": {
+ "removeTagsActionType": {
+ "description": "Remove Classification Tags Action Type.",
+ "type": "string",
+ "enum": ["RemoveTagsAction"],
+ "default": "RemoveTagsAction"
+ },
+ "labelType": {
+ "description" : "Remove tags by its label type",
+ "type": "string",
+ "enum": [
+ "Manual",
+ "Propagated",
+ "Automated"
+ ]
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Application Type",
+ "description": "Application Type",
+ "$ref": "#/definitions/removeTagsActionType",
+ "default": "AddTagsAction"
+ },
+ "tags": {
+ "description": "Classification Tags to remove (source must be 'Classification')",
+ "type": "array",
+ "items": {
+ "$ref": "../../../../../type/tagLabel.json"
+ }
+ },
+ "labels": {
+ "description": "Remove tags by its label type",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/labelType"
+ },
+ "default": null
+ },
+ "applyToChildren": {
+ "title": "Apply to Children",
+ "description": "Remove tags from the children of the selected assets. E.g., columns, tasks, topic fields,...",
+ "type": "array",
+ "items": {
+ "$ref": "../../../../../type/basic.json#/definitions/entityName"
+ },
+ "default": null
+ },
+ "applyToAll": {
+ "title": "Apply to All",
+ "description": "Remove tags from all the children and parent of the selected assets.",
+ "type": "boolean",
+ "default": null
+ }
+ },
+ "required": ["type"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/removeTermsAction.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/removeTermsAction.json
new file mode 100644
index 000000000000..7a3530376804
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/removeTermsAction.json
@@ -0,0 +1,64 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/applications/configuration/external/automator/removeTermsAction.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "RemoveTermsAction",
+ "description": "Remove Glossary Terms Action Type",
+ "type": "object",
+ "definitions": {
+ "removeTermsActionType": {
+ "description": "Remove Terms Action Type.",
+ "type": "string",
+ "enum": ["RemoveTermsAction"],
+ "default": "RemoveTermsAction"
+ },
+ "labelType": {
+ "description" : "Remove terms by its label type",
+ "type": "string",
+ "enum": [
+ "Manual",
+ "Propagated",
+ "Automated"
+ ]
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Application Type",
+ "description": "Application Type",
+ "$ref": "#/definitions/removeTermsActionType",
+ "default": "RemoveTermsAction"
+ },
+ "terms": {
+ "description": "Glossary Terms to remove",
+ "type": "array",
+ "items": {
+ "$ref": "../../../../../type/tagLabel.json"
+ }
+ },
+ "labels": {
+ "description": "Remove terms by its label type",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/labelType"
+ },
+ "default": null
+ },
+ "applyToChildren": {
+ "title": "Apply to Children",
+ "description": "Remove terms from the children of the selected assets. E.g., columns, tasks, topic fields,...",
+ "type": "array",
+ "items": {
+ "$ref": "../../../../../type/basic.json#/definitions/entityName"
+ },
+ "default": null
+ },
+ "applyToAll": {
+ "title": "Apply to All",
+ "description": "Remove terms from all the children and parent of the selected assets.",
+ "type": "boolean",
+ "default": null
+ }
+ },
+ "required": ["type"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/removeTestCaseAction.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/removeTestCaseAction.json
new file mode 100644
index 000000000000..c18041755e47
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/removeTestCaseAction.json
@@ -0,0 +1,47 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/applications/configuration/external/automator/removeTestCaseAction.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "RemoveTestCaseAction",
+ "description": "Remove Test Cases Action Type",
+ "type": "object",
+ "definitions": {
+ "removeTestCaseActionType": {
+ "description": "Remove Test Case Action Type",
+ "type": "string",
+ "enum": ["RemoveTestCaseAction"],
+ "default": "RemoveTestCaseAction"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Application Type",
+ "description": "Application Type",
+ "$ref": "#/definitions/removeTestCaseActionType",
+ "default": "RemoveTestCaseAction"
+ },
+ "testCaseDefinitions": {
+ "description": "Test Cases to remove",
+ "type": "array",
+ "items": {
+ "$ref": "../../../../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ }
+ },
+ "applyToChildren": {
+ "title": "Apply to Children",
+ "description": "Remove tests to the selected table columns",
+ "type": "array",
+ "items": {
+ "$ref": "../../../../../type/basic.json#/definitions/entityName"
+ },
+ "default": null
+ },
+ "removeAll": {
+ "title": "Remove All",
+ "description": "Remove all test cases",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "required": ["type"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/removeTierAction.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/removeTierAction.json
new file mode 100644
index 000000000000..35fad07792d0
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automator/removeTierAction.json
@@ -0,0 +1,25 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/applications/configuration/external/automator/removeTierAction.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "RemoveTierAction",
+ "description": "Remove Owner Action Type",
+ "type": "object",
+ "definitions": {
+ "removeTierActionType": {
+ "description": "Remove Tier Action Type",
+ "type": "string",
+ "enum": ["RemoveTierAction"],
+ "default": "RemoveTierAction"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Application Type",
+ "description": "Application Type",
+ "$ref": "#/definitions/removeTierActionType",
+ "default": "RemoveTierAction"
+ }
+ },
+ "required": ["type"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automatorAppConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automatorAppConfig.json
new file mode 100644
index 000000000000..7b47eba29bb6
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/automatorAppConfig.json
@@ -0,0 +1,123 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/applications/configuration/external/automatorAppConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AutomatorAppConfig",
+ "description": "Configuration for the Automator External Application.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.app.external.AutomatorAppConfig",
+ "definitions": {
+ "automatorAppType": {
+ "description": "Application type.",
+ "type": "string",
+ "enum": ["Automator"],
+ "default": "Automator"
+ },
+ "resource": {
+ "description": "Entities selected to run the automation.",
+ "type": "object",
+ "properties": {
+ "type": {
+ "description": "Type of the entity. E.g., 'table', 'chart',...",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "queryFilter": {
+ "description": "Query filter to be passed to ES. E.g., `{\"query\":{\"bool\":{\"must\":[{\"bool\":{\"should\":[{\"term\":{\"domains.displayName.keyword\":\"DG Anim\"}}]}}]}}}`. This is the same payload as in the Explore page.",
+ "type": "string"
+ },
+ "filterJsonTree": {
+ "description": "Filter JSON tree to be used for rendering the filters in the UI. This comes from Immutable Tree type of react-awesome-query-builder.",
+ "type": "string"
+ }
+ }
+ },
+ "action": {
+ "description": "Action to take on those entities. E.g., propagate description through lineage, auto tagging, etc.",
+ "oneOf": [
+ {
+ "$ref": "automator/addTagsAction.json"
+ },
+ {
+ "$ref": "automator/removeTagsAction.json"
+ },
+ {
+ "$ref": "automator/addTermsAction.json"
+ },
+ {
+ "$ref": "automator/removeTermsAction.json"
+ },
+ {
+ "$ref": "automator/addDomainAction.json"
+ },
+ {
+ "$ref": "automator/removeDomainAction.json"
+ },
+ {
+ "$ref": "automator/addDescriptionAction.json"
+ },
+ {
+ "$ref": "automator/addCustomProperties.json"
+ },
+ {
+ "$ref": "automator/removeDescriptionAction.json"
+ },
+ {
+ "$ref": "automator/addTierAction.json"
+ },
+ {
+ "$ref": "automator/removeTierAction.json"
+ },
+ {
+ "$ref": "automator/addTestCaseAction.json"
+ },
+ {
+ "$ref": "automator/removeTestCaseAction.json"
+ },
+ {
+ "$ref": "automator/addOwnerAction.json"
+ },
+ {
+ "$ref": "automator/removeOwnerAction.json"
+ },
+ {
+ "$ref": "automator/removeCustomPropertiesAction.json"
+ },
+ {
+ "$ref": "automator/addDataProductAction.json"
+ },
+ {
+ "$ref": "automator/removeDataProductAction.json"
+ },
+ {
+ "$ref": "automator/lineagePropagationAction.json"
+ },
+ {
+ "$ref": "automator/mlTaggingAction.json"
+ }
+ ]
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Application Type",
+ "description": "Application Type",
+ "$ref": "#/definitions/automatorAppType",
+ "default": "Automator"
+ },
+ "resources": {
+ "description": "Entities selected to run the automation.",
+ "$ref": "#/definitions/resource"
+ },
+ "actions": {
+ "description": "Action to take on those entities. E.g., propagate description through lineage, auto tagging, etc.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/action"
+ }
+ }
+ },
+ "required": ["type", "resources", "actions"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/collateAIAppConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/collateAIAppConfig.json
new file mode 100644
index 000000000000..3e6886eef2cf
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/collateAIAppConfig.json
@@ -0,0 +1,37 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/applications/configuration/external/collateAIAppConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CollateAIAppConfig",
+ "description": "Configuration for the CollateAI External Application.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.app.external.CollateAIAppConfig",
+ "definitions": {
+ "collateAIAppType": {
+ "description": "Application type.",
+ "type": "string",
+ "enum": ["CollateAI"],
+ "default": "CollateAI"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Application Type",
+ "description": "Application Type",
+ "$ref": "#/definitions/collateAIAppType",
+ "default": "CollateAI"
+ },
+ "filter": {
+ "title": "Filter",
+ "description": "Query filter to be passed to ES. E.g., `{\"query\":{\"bool\":{\"must\":[{\"bool\":{\"should\":[{\"term\":{\"domains.displayName.keyword\":\"DG Anim\"}}]}}]}}}`. This is the same payload as in the Explore page.",
+ "type": "string"
+ },
+ "patchIfEmpty": {
+ "title": "Patch Description If Empty",
+ "description": "Patch the description if it is empty, instead of raising a suggestion",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "additionalProperties": false,
+ "required": ["filter"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/collateAIQualityAgentAppConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/collateAIQualityAgentAppConfig.json
new file mode 100644
index 000000000000..c8954fb3a3dd
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/collateAIQualityAgentAppConfig.json
@@ -0,0 +1,37 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/applications/configuration/external/collateAIQualityAgentAppConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CollateAIQualityAgentAppConfig.json",
+ "description": "Configuration for the Collate AI Quality Agent.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.app.internal.CollateAIQualityAgentAppConfig",
+ "definitions": {
+ "collateAIQualityAgentAppType": {
+ "description": "Application type.",
+ "type": "string",
+ "enum": ["CollateAIQualityAgent"],
+ "default": "CollateAIQualityAgent"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Application Type",
+ "description": "Application Type",
+ "$ref": "#/definitions/collateAIQualityAgentAppType",
+ "default": "CollateAIQualityAgent"
+ },
+ "filter": {
+ "title": "Filter",
+ "description": "Query filter to be passed to ES. E.g., `{\"query\":{\"bool\":{\"must\":[{\"bool\":{\"should\":[{\"term\":{\"domains.displayName.keyword\":\"DG Anim\"}}]}}]}}}`. This is the same payload as in the Explore page.",
+ "type": "string"
+ },
+ "active": {
+ "title": "Active",
+ "description": "Whether the suggested tests should be active or not upon suggestion",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "additionalProperties": false,
+ "required": ["filter"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/collateAITierAgentAppConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/collateAITierAgentAppConfig.json
new file mode 100644
index 000000000000..993eb9d2c8ee
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/collateAITierAgentAppConfig.json
@@ -0,0 +1,37 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/applications/configuration/external/collateAITierAgentAppConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CollateAITierAgentAppConfig.json",
+ "description": "Configuration for the Collate AI Quality Agent.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.app.internal.CollateAITierAgentAppConfig",
+ "definitions": {
+ "collateAITierAgentAppType": {
+ "description": "Application type.",
+ "type": "string",
+ "enum": ["CollateAITierAgent"],
+ "default": "CollateAITierAgent"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Application Type",
+ "description": "Application Type",
+ "$ref": "#/definitions/collateAITierAgentAppType",
+ "default": "CollateAITierAgent"
+ },
+ "filter": {
+ "title": "Filter",
+ "description": "Query filter to be passed to ES. E.g., `{\"query\":{\"bool\":{\"must\":[{\"bool\":{\"should\":[{\"term\":{\"domains.displayName.keyword\":\"DG Anim\"}}]}}]}}}`. This is the same payload as in the Explore page.",
+ "type": "string"
+ },
+ "patchIfEmpty": {
+ "title": "Patch Tier If Empty",
+ "description": "Patch the tier if it is empty, instead of raising a suggestion",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "additionalProperties": false,
+ "required": ["filter"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/metadataExporterAppConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/metadataExporterAppConfig.json
new file mode 100644
index 000000000000..5b97a761be05
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/metadataExporterAppConfig.json
@@ -0,0 +1,118 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/applications/configuration/external/metadataExporterAppConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "MetadataExporterAppConfig",
+ "description": "Configuration for the Metadata Exporter Application.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.app.external.MetadataExporterAppConfig",
+ "definitions": {
+ "metadataExporterAppType": {
+ "description": "Application type.",
+ "type": "string",
+ "enum": ["MetadataExporter"],
+ "default": "MetadataExporter"
+ },
+ "exportRangeConfig": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.applications.configuration.metadataExporter.ExportRangeConfig",
+ "title": "Export Range Configuration",
+ "description": "Configuration for the export range of data.",
+ "properties": {
+ "rangeType": {
+ "type": "string",
+ "enum": ["ALL", "LATEST", "DATE_RANGE"],
+ "default": "ALL",
+ "description": "Type of range for data export."
+ },
+ "interval": {
+ "type": "integer",
+ "description": "Interval for the export range, applicable when rangeType is 'DATE_RANGE'."
+ },
+ "unit": {
+ "type": "string",
+ "enum": ["DAYS", "HOURS"],
+ "description": "Unit of time for the export range."
+ }
+ },
+ "required": [
+ "rangeType"
+ ]
+ },
+ "tableConfig": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.applications.configuration.metadataExporter.TableConfig",
+ "title": "Configuration for the table to export the data to.",
+ "description": "Configuration for the table to export the data to.",
+ "properties": {
+ "databaseName": {
+ "type": "string"
+ },
+ "schemaName": {
+ "type": "string"
+ },
+ "tableName": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "databaseName",
+ "schemaName",
+ "tableName"
+ ]
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Application Type",
+ "description": "Application Type",
+ "$ref": "#/definitions/metadataExporterAppType",
+ "default": "MetadataExporter"
+ },
+ "connectionConfig": {
+ "description": "Connection details for the Metadata Exporter Application.",
+ "mask": true,
+ "oneOf": [
+ {
+ "$ref": "metadataExporterConnectors/snowflakeConnection.json"
+ },
+ {
+ "$ref": "metadataExporterConnectors/databricksConnection.json"
+ },
+ {
+ "$ref": "metadataExporterConnectors/bigQueryConnection.json"
+ },
+ {
+ "$ref": "metadataExporterConnectors/trinoConnection.json"
+ }
+ ]
+ },
+ "exportRange": {
+ "description": "Range of data to export. Options are 'ALL' for all data, 'LATEST' for the latest data, or a specific date range.",
+ "$ref": "#/definitions/exportRangeConfig"
+ },
+ "eventTypes": {
+ "description": "List of event types to export.",
+ "type": "array",
+ "items": {
+ "type": "string",
+ "enum": [
+ "PROFILE",
+ "TEST_CASE_RESULTS",
+ "ENTITY_HISTORY"
+ ]
+ },
+ "default": ["PROFILE", "TEST_CASE_RESULTS", "ENTITY_HISTORY"]
+ },
+ "backfill": {
+ "description": "Enable backfill for the exporter to process historical data. This will only work on the very first run of the exporter.",
+ "type": "boolean",
+ "default": false
+ },
+ "tableConfiguration": {
+ "description": "Configuration for the table to export the data to.",
+ "$ref": "#/definitions/tableConfig"
+ }
+ },
+ "required": ["connectionConfig", "exportRange", "tableConfiguration"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/metadataExporterConnectors/bigQueryConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/metadataExporterConnectors/bigQueryConnection.json
new file mode 100644
index 000000000000..60510850c454
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/metadataExporterConnectors/bigQueryConnection.json
@@ -0,0 +1,89 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/bigQueryConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "BigQueryConnection",
+ "description": "Google BigQuery Connection Config",
+ "type": "object",
+ "definitions": {
+ "bigqueryType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": [
+ "BigQuery"
+ ],
+ "default": "BigQuery"
+ },
+ "bigqueryScheme": {
+ "description": "SQLAlchemy driver scheme options.",
+ "type": "string",
+ "enum": [
+ "bigquery"
+ ],
+ "default": "bigquery"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/bigqueryType",
+ "default": "BigQuery"
+ },
+ "scheme": {
+ "title": "Connection Scheme",
+ "description": "SQLAlchemy driver scheme options.",
+ "$ref": "#/definitions/bigqueryScheme",
+ "default": "bigquery"
+ },
+ "hostPort": {
+ "title": "Host and Port",
+ "description": "BigQuery APIs URL.",
+ "type": "string",
+ "default": "bigquery.googleapis.com"
+ },
+ "billingProjectId": {
+ "title": "Billing Project ID",
+ "description": "Billing Project ID",
+ "type": "string",
+ "default": null
+ },
+ "credentials": {
+ "title": "GCP Credentials",
+ "description": "GCP Credentials",
+ "$ref": "../../../../../security/credentials/gcpCredentials.json"
+ },
+ "taxonomyProjectID": {
+ "title": "Taxonomy Project IDs",
+ "description": "Project IDs used to fetch policy tags",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "default": null
+ },
+ "taxonomyLocation": {
+ "title": "Taxonomy Location",
+ "description": "Taxonomy location used to fetch policy tags",
+ "type": "string",
+ "default": "us"
+ },
+ "usageLocation": {
+ "title": "Usage Location",
+ "description": "Location used to query INFORMATION_SCHEMA.JOBS_BY_PROJECT to fetch usage data. You can pass multi-regions, such as `us` or `eu`, or you specific region. Australia and Asia multi-regions are not yet in GA.",
+ "type": "string",
+ "default": "us"
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../../../../services/connections/connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../../../../services/connections/connectionBasicType.json#/definitions/connectionArguments"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "credentials"
+ ]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/metadataExporterConnectors/databricksConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/metadataExporterConnectors/databricksConnection.json
new file mode 100644
index 000000000000..1a6c39f14140
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/metadataExporterConnectors/databricksConnection.json
@@ -0,0 +1,97 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/databricksConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DatabricksConnection",
+ "description": "Databricks Connection Config",
+ "type": "object",
+ "definitions": {
+ "databricksType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": [
+ "Databricks"
+ ],
+ "default": "Databricks"
+ },
+ "databricksScheme": {
+ "description": "SQLAlchemy driver scheme options.",
+ "type": "string",
+ "enum": [
+ "databricks+connector"
+ ],
+ "default": "databricks+connector"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/databricksType",
+ "default": "Databricks"
+ },
+ "scheme": {
+ "title": "Connection Scheme",
+ "description": "SQLAlchemy driver scheme options.",
+ "$ref": "#/definitions/databricksScheme",
+ "default": "databricks+connector"
+ },
+ "hostPort": {
+ "title": "Host and Port",
+ "description": "Host and port of the Databricks service.",
+ "type": "string"
+ },
+ "authType": {
+ "title": "Authentication Type",
+ "description": "Choose between different authentication types for Databricks.",
+ "oneOf": [
+ {
+ "title": "Personal Access Token",
+ "$ref": "../../../../services/connections/database/databricks/personalAccessToken.json"
+ },
+ {
+ "title": "Databricks OAuth",
+ "$ref": "../../../../services/connections/database/databricks/databricksOAuth.json"
+ },
+ {
+ "title": "Azure AD Setup",
+ "$ref": "../../../../services/connections/database/databricks/azureAdSetup.json"
+ }
+ ]
+ },
+ "httpPath": {
+ "title": "Http Path",
+ "description": "Databricks compute resources URL.",
+ "type": "string"
+ },
+ "catalog": {
+ "title": "Catalog",
+ "description": "Catalog of the data source(Example: hive_metastore). This is optional parameter, if you would like to restrict the metadata reading to a single catalog. When left blank, OpenMetadata Ingestion attempts to scan all the catalog.",
+ "type": "string"
+ },
+ "databaseSchema": {
+ "title": "Database Schema",
+ "description": "Database Schema of the data source. This is optional parameter, if you would like to restrict the metadata reading to a single schema. When left blank, OpenMetadata Ingestion attempts to scan all the schemas.",
+ "type": "string"
+ },
+ "connectionTimeout": {
+ "title": "Connection Timeout",
+ "description": "The maximum amount of time (in seconds) to wait for a successful connection to the data source. If the connection attempt takes longer than this timeout period, an error will be returned.",
+ "type": "integer",
+ "default": 120
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../../../../services/connections/connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../../../../services/connections/connectionBasicType.json#/definitions/connectionArguments"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "hostPort",
+ "authType",
+ "httpPath"
+ ]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/metadataExporterConnectors/redshiftConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/metadataExporterConnectors/redshiftConnection.json
new file mode 100644
index 000000000000..4d5a32a534f0
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/metadataExporterConnectors/redshiftConnection.json
@@ -0,0 +1,80 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/redshiftConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "RedshiftConnection",
+ "description": "Redshift Connection Config",
+ "type": "object",
+ "definitions": {
+ "redshiftType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": [
+ "Redshift"
+ ],
+ "default": "Redshift"
+ },
+ "redshiftScheme": {
+ "description": "SQLAlchemy driver scheme options.",
+ "type": "string",
+ "enum": [
+ "redshift+psycopg2"
+ ],
+ "default": "redshift+psycopg2"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/redshiftType",
+ "default": "Redshift"
+ },
+ "scheme": {
+ "title": "Connection Scheme",
+ "description": "SQLAlchemy driver scheme options.",
+ "$ref": "#/definitions/redshiftScheme",
+ "default": "redshift+psycopg2"
+ },
+ "username": {
+ "title": "Username",
+ "description": "Username to connect to Redshift. This user should have privileges to read all the metadata in Redshift.",
+ "type": "string"
+ },
+ "password": {
+ "title": "Password",
+ "description": "Password to connect to Redshift.",
+ "type": "string",
+ "format": "password"
+ },
+ "hostPort": {
+ "title": "Host and Port",
+ "description": "Host and port of the Redshift service.",
+ "type": "string"
+ },
+ "database": {
+ "title": "Database",
+ "description": "Initial Redshift database to connect to. If you want to ingest all databases, set ingestAllDatabases to true.",
+ "type": "string"
+ },
+ "sslMode": {
+ "$ref": "../../../../../security/ssl/verifySSLConfig.json#/definitions/sslMode"
+ },
+ "sslConfig": {
+ "$ref": "../../../../../security/ssl/verifySSLConfig.json#/definitions/sslConfig"
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../../../../services/connections/connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../../../../services/connections/connectionBasicType.json#/definitions/connectionArguments"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "hostPort",
+ "username",
+ "database"
+ ]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/metadataExporterConnectors/snowflakeConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/metadataExporterConnectors/snowflakeConnection.json
new file mode 100644
index 000000000000..a9ee40c7589f
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/metadataExporterConnectors/snowflakeConnection.json
@@ -0,0 +1,99 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/snowflakeConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SnowflakeConnection",
+ "description": "Snowflake Connection Config",
+ "type": "object",
+ "definitions": {
+ "snowflakeType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["Snowflake"],
+ "default": "Snowflake"
+ },
+ "snowflakeScheme": {
+ "description": "SQLAlchemy driver scheme options.",
+ "type": "string",
+ "enum": ["snowflake"],
+ "default": "snowflake"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/snowflakeType",
+ "default": "Snowflake"
+ },
+ "scheme": {
+ "title": "Connection Scheme",
+ "description": "SQLAlchemy driver scheme options.",
+ "$ref": "#/definitions/snowflakeScheme",
+ "default": "snowflake"
+ },
+ "username": {
+ "title": "Username",
+ "description": "Username to connect to Snowflake. This user should have privileges to read all the metadata in Snowflake.",
+ "type": "string"
+ },
+ "password": {
+ "title": "Password",
+ "description": "Password to connect to Snowflake.",
+ "type": "string",
+ "format": "password"
+ },
+ "account": {
+ "title": "Account",
+ "description": "If the Snowflake URL is https://xyz1234.us-east-1.gcp.snowflakecomputing.com, then the account is xyz1234.us-east-1.gcp",
+ "type": "string"
+ },
+ "role": {
+ "title": "Role",
+ "description": "Snowflake Role.",
+ "type": "string"
+ },
+ "database": {
+ "title": "Database",
+ "description": "Database of the data source. This is optional parameter, if you would like to restrict the metadata reading to a single database. When left blank, OpenMetadata Ingestion attempts to scan all the databases.",
+ "type": "string"
+ },
+ "warehouse": {
+ "title": "Warehouse",
+ "description": "Snowflake warehouse.",
+ "type": "string"
+ },
+ "queryTag": {
+ "title": "Query Tag",
+ "description": "Session query tag used to monitor usage on snowflake. To use a query tag snowflake user should have enough privileges to alter the session.",
+ "type": "string"
+ },
+ "privateKey": {
+ "title": "Private Key",
+ "description": "Connection to Snowflake instance via Private Key",
+ "type": "string",
+ "format": "password"
+ },
+ "snowflakePrivatekeyPassphrase": {
+ "title": "Snowflake Passphrase Key",
+ "description": "Snowflake Passphrase Key used with Private Key",
+ "type": "string",
+ "format": "password"
+ },
+ "clientSessionKeepAlive": {
+ "title": "Client Session Keep Alive",
+ "description": "Optional configuration for ingestion to keep the client session active in case the ingestion process runs for longer durations.",
+ "type": "boolean",
+ "default": false
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../../../../services/connections/connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../../../../services/connections/connectionBasicType.json#/definitions/connectionArguments"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["username", "account", "warehouse"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/metadataExporterConnectors/trinoConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/metadataExporterConnectors/trinoConnection.json
new file mode 100644
index 000000000000..392fd62de35b
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/external/metadataExporterConnectors/trinoConnection.json
@@ -0,0 +1,90 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/trinoConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "TrinoConnection",
+ "description": "Trino Connection Config",
+ "type": "object",
+ "definitions": {
+ "trinoType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": [
+ "Trino"
+ ],
+ "default": "Trino"
+ },
+ "trinoScheme": {
+ "description": "SQLAlchemy driver scheme options.",
+ "type": "string",
+ "enum": [
+ "trino"
+ ],
+ "default": "trino"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/trinoType",
+ "default": "Trino"
+ },
+ "scheme": {
+ "title": "Connection Scheme",
+ "description": "SQLAlchemy driver scheme options.",
+ "$ref": "#/definitions/trinoScheme",
+ "default": "trino"
+ },
+ "username": {
+ "title": "Username",
+ "description": "Username to connect to Trino.",
+ "type": "string"
+ },
+ "authType": {
+ "title": "Auth Configuration Type",
+ "description": "Choose Auth Config Type.",
+ "oneOf": [
+ {
+ "$ref": "../../../../services/connections/database/common/basicAuth.json"
+ },
+ {
+ "$ref": "../../../../services/connections/database/common/jwtAuth.json"
+ },
+ {
+ "$ref": "../../../../services/connections/database/common/azureConfig.json"
+ },
+ {
+ "$ref": "../../../../services/connections/database/common/noConfigAuthenticationTypes.json"
+ }
+ ]
+ },
+ "hostPort": {
+ "title": "Host and Port",
+ "description": "Host and port of the Trino service.",
+ "type": "string"
+ },
+ "catalog": {
+ "title": "Catalog",
+ "description": "Catalog of the data source.",
+ "type": "string"
+ },
+ "databaseSchema": {
+ "title": "Database Schema",
+ "description": "Database Schema of the data source.",
+ "type": "string"
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../../../../services/connections/connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../../../../services/connections/connectionBasicType.json#/definitions/connectionArguments"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "hostPort",
+ "username"
+ ]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/internal/autoPilotAppConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/internal/autoPilotAppConfig.json
new file mode 100644
index 000000000000..545eaa2d5179
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/internal/autoPilotAppConfig.json
@@ -0,0 +1,37 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/applications/configuration/internal/autoPilotAppConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AutoPilotAppConfig",
+ "description": "Configuration for the AutoPilot Application.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.app.internal.AutoPilotAppConfig",
+ "definitions": {
+ "autoPilotAppType": {
+ "description": "Application type.",
+ "type": "string",
+ "enum": ["AutoPilotApplication"],
+ "default": "AutoPilotApplication"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Application Type",
+ "description": "Application Type",
+ "$ref": "#/definitions/autoPilotAppType",
+ "default": "AutoPilotApplication"
+ },
+ "active": {
+ "title": "Active",
+ "description": "Whether the AutoPilot Workflow should be active or not.",
+ "type": "boolean",
+ "default": true
+ },
+ "entityLink": {
+ "title": "Service Entity Link",
+ "description": "Service Entity Link for which to trigger the application.",
+ "$ref": "../../../../type/basic.json#/definitions/entityLink"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["active"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/internal/cacheWarmupAppConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/internal/cacheWarmupAppConfig.json
new file mode 100644
index 000000000000..916e9e06ee51
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/internal/cacheWarmupAppConfig.json
@@ -0,0 +1,64 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/applications/configuration/cacheWarmupApp.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CacheWarmupApp",
+ "type": "object",
+ "description": "Cache Warmup Application Configuration.",
+ "definitions": {
+ "cacheWarmupType": {
+ "description": "Application type.",
+ "type": "string",
+ "enum": ["CacheWarmup"],
+ "default": "CacheWarmup"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Application Type",
+ "description": "Application Type",
+ "$ref": "#/definitions/cacheWarmupType",
+ "default": "CacheWarmup"
+ },
+ "entities": {
+ "title": "Entities",
+ "description": "List of entity types to warm up in cache. Use 'all' to warm up all entity types.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "default": ["all"],
+ "uniqueItems": true
+ },
+ "batchSize": {
+ "title": "Batch Size",
+ "description": "Number of entities to process in each batch.",
+ "type": "integer",
+ "default": 100,
+ "minimum": 10,
+ "maximum": 1000
+ },
+ "consumerThreads": {
+ "title": "Consumer Threads",
+ "description": "Number of parallel threads for processing entities and warming cache.",
+ "type": "integer",
+ "default": 4,
+ "minimum": 1,
+ "maximum": 10
+ },
+ "queueSize": {
+ "title": "Queue Size",
+ "description": "Internal queue size for entity processing pipeline.",
+ "type": "integer",
+ "default": 1000,
+ "minimum": 100,
+ "maximum": 10000
+ },
+ "force": {
+ "title": "Force Warmup",
+ "description": "Force cache warmup even if another instance is detected (use with caution).",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/internal/dataInsightsAppConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/internal/dataInsightsAppConfig.json
new file mode 100644
index 000000000000..a5055c34cf8c
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/internal/dataInsightsAppConfig.json
@@ -0,0 +1,175 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/applications/configuration/dataInsightsApp.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DataInsightsAppConfig",
+ "description": "No configuration needed to instantiate the Data Insights Pipeline. The logic is handled in the backend.",
+ "type": "object",
+ "definitions": {
+ "dataInsightsAppType": {
+ "description": "Application Type",
+ "type": "string",
+ "enum": ["DataInsights"],
+ "default": "DataInsights"
+ },
+ "backfillConfiguration": {
+ "description": "Backfill Configuration",
+ "type": "object",
+ "properties": {
+ "enabled": {
+ "title": "Enabled",
+ "description": "Enable Backfill for the configured dates",
+ "type": "boolean"
+ },
+ "startDate": {
+ "title": "Start Date",
+ "description": "Date from which to start the backfill",
+ "type": "string",
+ "format": "date"
+ },
+ "endDate": {
+ "title": "End Date",
+ "description": "Date for which the backfill will end",
+ "type": "string",
+ "format": "date"
+ }
+ }
+ },
+ "dataAssetsConfig": {
+ "type": "object",
+ "properties": {
+ "enabled": {
+ "title": "Enabled",
+ "description": "If Enabled, Data Asset insights will be populated when the App runs.",
+ "type": "boolean",
+ "default": true
+ },
+ "entities": {
+ "description": "List of Entities to Reindex",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "default": ["all"],
+ "uniqueItems": true
+ },
+ "retention": {
+ "title": "Data Retention (Days)",
+ "description": "Defines the number of days the Data Assets Insights information will be kept. After it they will be deleted.",
+ "type": "integer",
+ "default": 90,
+ "minimum": 0
+ },
+ "serviceFilter": {
+ "type": "object",
+ "properties": {
+ "serviceType": {
+ "type": "string"
+ },
+ "serviceName": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "default": null
+ }
+ },
+ "additionalProperties": false,
+ "required": ["enabled"]
+ },
+ "appAnalyticsConfig": {
+ "type": "object",
+ "properties": {
+ "enabled": {
+ "title": "Enabled",
+ "description": "If Enabled, App Analytics insights will be populated when the App runs.",
+ "type": "boolean",
+ "default": true
+ }
+ },
+ "additionalProperties": false,
+ "required": ["enabled"]
+ },
+ "dataQualityConfig": {
+ "type": "object",
+ "properties": {
+ "enabled": {
+ "title": "Enabled",
+ "description": "If Enabled, Data Quality insights will be populated when the App runs.",
+ "type": "boolean",
+ "default": true
+ }
+ },
+ "additionalProperties": false,
+ "required": ["enabled"]
+ },
+ "costAnalysisConfig": {
+ "type": "object",
+ "properties": {
+ "enabled": {
+ "title": "Enabled",
+ "description": "If Enabled, Cost Analysis insights will be populated when the App runs.",
+ "type": "boolean",
+ "default": true
+ }
+ },
+ "additionalProperties": false,
+ "required": ["enabled"]
+ },
+ "moduleConfiguration": {
+ "description": "Different Module Configurations",
+ "title": "Module Configuration",
+ "type": "object",
+ "properties": {
+ "dataAssets": {
+ "title": "Data Assets Module",
+ "description": "Data Assets Insights Module configuration",
+ "$ref": "#/definitions/dataAssetsConfig"
+ },
+ "appAnalytics": {
+ "title": "App Analytics Module",
+ "description": "App Analytics Module configuration",
+ "$ref": "#/definitions/appAnalyticsConfig"
+ },
+ "dataQuality": {
+ "title": "Data Quality Insights Module",
+ "description": "Data Quality Insights Module configuration",
+ "$ref": "#/definitions/dataQualityConfig"
+ },
+ "costAnalysis": {
+ "title": "Cost Analysis Insights Module",
+ "description": "Cost Analysis Insights Module configuration",
+ "$ref": "#/definitions/costAnalysisConfig"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["dataAssets", "appAnalytics", "dataQuality", "costAnalysis"]
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Application Type",
+ "description": "Application Type",
+ "$ref": "#/definitions/dataInsightsAppType",
+ "default": "DataInsights"
+ },
+ "batchSize": {
+ "description": "Maximum number of events processed at a time (Default 100).",
+ "type": "integer",
+ "default": 100,
+ "minimum": 0
+ },
+ "recreateDataAssetsIndex": {
+ "title": "Recreate DataInsights DataAssets Index",
+ "description": "Recreates the DataAssets index on DataInsights. Useful if you changed a Custom Property Type and are facing errors. Bear in mind that recreating the index will delete your DataAssets and a backfill will be needed.",
+ "type": "boolean",
+ "default": false
+ },
+ "backfillConfiguration": {
+ "$ref": "#/definitions/backfillConfiguration"
+ },
+ "moduleConfiguration": {
+ "$ref": "#/definitions/moduleConfiguration"
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/internal/dataInsightsReportAppConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/internal/dataInsightsReportAppConfig.json
new file mode 100644
index 000000000000..31e00b7ef43d
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/internal/dataInsightsReportAppConfig.json
@@ -0,0 +1,33 @@
+{
+ "$id": "DataInsightsReportApplication.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DataInsightsReportAppConfig",
+ "description": "This schema defines configuration for Data Insights Report Application.",
+ "definitions": {
+ "dataInsightsReportAppType": {
+ "description": "Application type.",
+ "type": "string",
+ "enum": ["DataInsightsReport"],
+ "default": "DataInsightsReport"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Application Type",
+ "description": "Application Type",
+ "$ref": "#/definitions/dataInsightsReportAppType",
+ "default": "DataInsightsReport"
+ },
+ "sendToAdmins": {
+ "title": "Send To Admins",
+ "type": "boolean",
+ "default": true
+ },
+ "sendToTeams": {
+ "title": "Send To Teams",
+ "type": "boolean",
+ "default": true
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/internal/dataRetentionConfiguration.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/internal/dataRetentionConfiguration.json
new file mode 100644
index 000000000000..fddfc5bb9f24
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/internal/dataRetentionConfiguration.json
@@ -0,0 +1,45 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/applications/configuration/dataRetentionConfiguration.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Retention Configuration",
+ "description": "Configure retention policies for each entity.",
+ "properties": {
+ "changeEventRetentionPeriod": {
+ "title": "Change Event Retention Period (days)",
+ "description": "Enter the retention period for change event records in days (e.g., 7 for one week, 30 for one month).",
+ "type": "integer",
+ "default": 7,
+ "minimum": 1
+ },
+ "activityThreadsRetentionPeriod": {
+ "title": "Activity Threads Retention Period (days)",
+ "description": "Enter the retention period for Activity Threads of type = 'Conversation' records in days (e.g., 30 for one month, 60 for two months).",
+ "type": "integer",
+ "default": 60,
+ "minimum": 0
+ },
+ "testCaseResultsRetentionPeriod": {
+ "title": "Test Case Results Retention Period (days)",
+ "description": "Enter the retention period for Test Case Results in days (e.g., 30 for one month, 60 for two months).",
+ "type": "integer",
+ "default": 1440
+ },
+ "profileDataRetentionPeriod": {
+ "title": "Profile Data Retention Period (days)",
+ "description": "Enter the retention period for Profile Data in days (e.g., 30 for one month, 60 for two months).",
+ "type": "integer",
+ "default": 1440
+ },
+ "auditLogRetentionPeriod": {
+ "title": "Audit Log Retention Period (days)",
+ "description": "Enter the retention period for Audit Log entries in days (e.g., 90 for three months).",
+ "type": "integer",
+ "default": 90,
+ "minimum": 1
+ }
+ },
+ "required": [
+ "changeEventRetentionPeriod", "activityThreadsRetentionPeriod", "testCaseResultsRetentionPeriod", "profileDataRetentionPeriod", "auditLogRetentionPeriod"
+ ],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/internal/helloPipelinesConfiguration.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/internal/helloPipelinesConfiguration.json
new file mode 100644
index 000000000000..9e75f5a87a43
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/internal/helloPipelinesConfiguration.json
@@ -0,0 +1,21 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/applications/configuration/helloPipeliesConfiguration.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Hello Pipelines App Configuration",
+ "description": "This is an example external application.",
+ "properties": {
+ "sleep": {
+ "title": "Sleep time (seconds)",
+ "type": "integer"
+ },
+ "echo": {
+ "title": "Echo message",
+ "type": "string"
+ }
+ },
+ "required": [
+ "sleep",
+ "echo"
+ ],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/internal/rdfIndexingAppConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/internal/rdfIndexingAppConfig.json
new file mode 100644
index 000000000000..e5f2f4d28015
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/internal/rdfIndexingAppConfig.json
@@ -0,0 +1,153 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/applications/configuration/rdfIndexingApp.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "RdfIndexingApp",
+ "type": "object",
+ "description": "RDF indexing application configuration.",
+ "definitions": {
+ "rdfIndexingType": {
+ "description": "Application type.",
+ "type": "string",
+ "enum": ["RdfIndexing"],
+ "default": "RdfIndexing"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Application Type",
+ "description": "Application Type",
+ "$ref": "#/definitions/rdfIndexingType",
+ "default": "RdfIndexing"
+ },
+ "entities": {
+ "title": "Entities",
+ "description": "List of entities that you need to reindex. Leave empty to index all supported entities.",
+ "type": "array",
+ "items": {
+ "type": "string",
+ "enum": [
+ "aiApplication",
+ "aiGovernancePolicy",
+ "apiCollection",
+ "apiEndpoint",
+ "apiService",
+ "app",
+ "appMarketPlaceDefinition",
+ "bot",
+ "chart",
+ "classification",
+ "container",
+ "dashboard",
+ "dashboardDataModel",
+ "dashboardService",
+ "dataContract",
+ "dataInsightChart",
+ "dataInsightCustomChart",
+ "dataProduct",
+ "database",
+ "databaseSchema",
+ "databaseService",
+ "directory",
+ "document",
+ "domain",
+ "driveService",
+ "eventsubscription",
+ "file",
+ "glossary",
+ "glossaryTerm",
+ "ingestionPipeline",
+ "kpi",
+ "learningResource",
+ "llmModel",
+ "llmService",
+ "messagingService",
+ "metadataService",
+ "metric",
+ "mlmodel",
+ "mlmodelService",
+ "notificationTemplate",
+ "persona",
+ "pipeline",
+ "pipelineService",
+ "policy",
+ "promptTemplate",
+ "query",
+ "report",
+ "role",
+ "searchIndex",
+ "searchService",
+ "securityService",
+ "spreadsheet",
+ "storageService",
+ "storedProcedure",
+ "table",
+ "tag",
+ "team",
+ "testCase",
+ "testConnectionDefinition",
+ "testDefinition",
+ "testSuite",
+ "topic",
+ "type",
+ "user",
+ "webAnalyticEvent",
+ "workflow",
+ "workflowDefinition",
+ "worksheet"
+ ]
+ },
+ "default": [],
+ "uiFieldType": "treeSelect",
+ "uniqueItems": true
+ },
+ "recreateIndex": {
+ "title": "Recreate RDF Store",
+ "description": "Recreate the RDF store before indexing.",
+ "type": "boolean",
+ "default": false
+ },
+ "batchSize": {
+ "title": "Batch Size",
+ "description": "Maximum number of entities processed in a batch.",
+ "type": "integer",
+ "default": 100,
+ "minimum": 1
+ },
+ "producerThreads": {
+ "title": "Number of Producer Threads",
+ "description": "Number of producer threads to use for non-distributed RDF reindexing",
+ "type": "integer",
+ "default": 2,
+ "minimum": 1
+ },
+ "consumerThreads": {
+ "title": "Number of Consumer Threads",
+ "description": "Number of consumer threads to use for non-distributed RDF reindexing",
+ "type": "integer",
+ "default": 3,
+ "minimum": 1
+ },
+ "queueSize": {
+ "title": "Queue Size",
+ "description": "Queue size to use internally for non-distributed RDF reindexing.",
+ "type": "integer",
+ "default": 5000,
+ "minimum": 1
+ },
+ "useDistributedIndexing": {
+ "title": "Use Distributed Indexing",
+ "description": "Enable distributed RDF indexing across multiple servers with partition coordination and recovery.",
+ "type": "boolean",
+ "default": true
+ },
+ "partitionSize": {
+ "title": "Partition Size",
+ "description": "Number of entities per partition for distributed RDF indexing. Smaller values create more partitions for better distribution across servers.",
+ "type": "integer",
+ "default": 10000,
+ "minimum": 1000,
+ "maximum": 50000
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/internal/searchIndexingAppConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/internal/searchIndexingAppConfig.json
new file mode 100644
index 000000000000..1239a88811f7
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/internal/searchIndexingAppConfig.json
@@ -0,0 +1,130 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/applications/configuration/searchIndexingApp.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SearchIndexingApp",
+ "type": "object",
+ "description": "Search Indexing App.",
+ "definitions": {
+ "searchIndexingType": {
+ "description": "Application type.",
+ "type": "string",
+ "enum": ["SearchIndexing"],
+ "default": "SearchIndexing"
+ }
+ },
+ "properties" : {
+ "type": {
+ "title": "Application Type",
+ "description": "Application Type",
+ "$ref": "#/definitions/searchIndexingType",
+ "default": "SearchIndexing"
+ },
+ "entities": {
+ "description": "List of Entities to Reindex",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "default": ["all"],
+ "uniqueItems": true
+ },
+ "recreateIndex": {
+ "description": "This schema publisher run modes.",
+ "type": "boolean",
+ "default": true
+ },
+ "batchSize": {
+ "description": "Maximum number of events sent in a batch (Default 100).",
+ "type": "integer",
+ "default": 100
+ },
+ "payLoadSize": {
+ "description": "Maximum number of events sent in a batch (Default 100).",
+ "type": "integer",
+ "existingJavaType": "java.lang.Long",
+ "default": 9437184
+ },
+ "producerThreads": {
+ "title": "Number of Producer Threads",
+ "description": "Number of threads to use for reindexing",
+ "type": "integer",
+ "default": 10
+ },
+ "consumerThreads": {
+ "title": "Number of Consumer Threads",
+ "description": "Number of threads to use for reindexing",
+ "type": "integer",
+ "default": 10
+ },
+ "maxConcurrentRequests": {
+ "title": "Max Concurrent Requests",
+ "description": "Maximum number of concurrent requests to the search index",
+ "type": "integer",
+ "default": 100
+ },
+ "maxRetries": {
+ "title": "Max Retries",
+ "description": "Maximum number of retries for a failed request",
+ "type": "integer",
+ "default": 3
+ },
+ "initialBackoff": {
+ "title": "Initial Backoff Millis",
+ "description": "Initial backoff time in milliseconds",
+ "type": "integer",
+ "default": 1000
+ },
+ "maxBackoff": {
+ "title": "Max Backoff Millis",
+ "description": "Maximum backoff time in milliseconds",
+ "type": "integer",
+ "default": 10000
+ },
+ "queueSize": {
+ "title": "Queue Size to use.",
+ "description": "Queue Size to user internally for reindexing.",
+ "type": "integer",
+ "default": 100
+ },
+ "searchIndexMappingLanguage": {
+ "description": "Recreate Indexes with updated Language",
+ "$ref": "../../../../configuration/elasticSearchConfiguration.json#/definitions/searchIndexMappingLanguage"
+ },
+ "autoTune": {
+ "title": "Auto Tune",
+ "description": "Enable automatic performance tuning based on cluster capabilities and database entity count",
+ "type": "boolean",
+ "default": false
+ },
+ "useDistributedIndexing": {
+ "title": "Use Distributed Indexing",
+ "description": "Enable distributed indexing to scale reindexing across multiple servers with fault tolerance and parallel processing",
+ "type": "boolean",
+ "default": true
+ },
+ "partitionSize": {
+ "title": "Partition Size",
+ "description": "Number of entities per partition for distributed indexing. Smaller values create more partitions for better distribution across servers. Range: 1000-50000.",
+ "type": "integer",
+ "default": 10000,
+ "minimum": 1000,
+ "maximum": 50000
+ },
+ "timeSeriesMaxDays": {
+ "title": "Time Series Max Days",
+ "description": "Maximum age in days for time series data during reindexing. Default 0 (index all data). Set to a positive value like 15 to limit to recent data only.",
+ "type": "integer",
+ "default": 0,
+ "minimum": -1
+ },
+ "timeSeriesEntityDays": {
+ "title": "Time Series Entity Days Override",
+ "description": "Per-entity-type override for time series max days. Keys are entity type names (e.g. testCaseResult, queryCostRecord), values are number of days. Entities not listed here use the default Time Series Max Days value.",
+ "type": "object",
+ "additionalProperties": {
+ "type": "integer"
+ }
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/private/external/collateAIAppPrivateConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/private/external/collateAIAppPrivateConfig.json
new file mode 100644
index 000000000000..62e19a0865c8
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/private/external/collateAIAppPrivateConfig.json
@@ -0,0 +1,36 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/applications/configuration/private/external/collateAIAppConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CollateAIAppPrivateConfig",
+ "description": "Private Configuration for the CollateAI External Application.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.app.external.CollateAIAppPrivateConfig",
+ "properties": {
+ "waiiInstance": {
+ "title": "WAII Instance",
+ "description": "WAII API host URL",
+ "type": "string",
+ "format": "URI",
+ "default": "https://tweakit.waii.ai/api/"
+ },
+ "collateURL": {
+ "title": "Collate URL",
+ "description": "Collate Server public URL. WAII will use this information to interact with the server. E.g., https://sandbox.getcollate.io",
+ "type": "string",
+ "format": "URI"
+ },
+ "token": {
+ "title": "WAII API Token",
+ "description": "WAII API Token",
+ "type": "string",
+ "format": "password"
+ },
+ "limits": {
+ "title": "Limits",
+ "description": "Limits for the CollateAI Application.",
+ "$ref": "../../private/limits.json"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["waiiInstance", "collateURL", "token", "limits"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/private/internal/collateAITierAgentAppPrivateConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/private/internal/collateAITierAgentAppPrivateConfig.json
new file mode 100644
index 000000000000..08c2db21b5a0
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/private/internal/collateAITierAgentAppPrivateConfig.json
@@ -0,0 +1,17 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/applications/configuration/private/external/collateAITierAgentAppPrivateConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CollateAITierAgentAppPrivateConfig",
+ "description": "Private Configuration for the CollateAITierAgent Internal Application.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.app.internal.CollateAITierAgentAppPrivateConfig",
+ "properties": {
+ "limits": {
+ "title": "Limits",
+ "description": "Limits for the CollateAITierAgent Application.",
+ "$ref": "../../private/limits.json"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["limits"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/private/limits.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/private/limits.json
new file mode 100644
index 000000000000..e3d9ba340fa9
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/configuration/private/limits.json
@@ -0,0 +1,37 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/applications/configuration/private/appLimitsConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AppLimitsConfig",
+ "description": "Private Configuration for the App Limits.",
+ "type": "object",
+ "javaType": "io.collate.schema.entity.app.Limits",
+ "definitions": {
+ "actions": {
+ "title": "Actions",
+ "javaType": "io.collate.schema.entity.app.LimitActions",
+ "description": "The action and its limit.",
+ "type": "object",
+ "additionalProperties": {
+ "type": "number",
+ "existingJavaType": "java.math.BigDecimal",
+ "description": "Limit for the named action."
+ }
+ }
+ },
+ "properties": {
+ "actions": {
+ "title": "Actions",
+ "description": "The records of the limits.",
+ "$ref": "#/definitions/actions"
+ },
+ "billingCycleStart": {
+ "title": "Cycle Start",
+ "description": "The start of this limit cycle. DEPRECATED: Use central billingCycleStart from LimitsConfiguration in openmetadata.yaml",
+ "$ref": "../../../../type/basic.json#/definitions/date"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "actions"
+ ]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/createAppRequest.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/createAppRequest.json
new file mode 100644
index 000000000000..cbb24ae9fc4d
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/createAppRequest.json
@@ -0,0 +1,61 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/applications/createAppRequest.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateAppRequest",
+ "javaType": "org.openmetadata.schema.entity.app.CreateApp",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+ "description": "This schema defines the create applications request for Open-Metadata.",
+ "type": "object",
+ "properties": {
+ "name": {
+ "description": "Name of the Application.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name for the application.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the Application.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "owners": {
+ "description": "Owners of this workflow.",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "bot": {
+ "description": "Fqn of Bot Associated with this application.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName",
+ "default": null
+ },
+ "appConfiguration": {
+ "description": "Application Configuration object."
+ },
+ "appSchedule": {
+ "$ref": "./app.json#/definitions/appSchedule"
+ },
+ "domains" : {
+ "description": "Fully qualified names of the domains the Application belongs to.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "supportsInterrupt": {
+ "description": "If the app run can be interrupted as part of the execution.",
+ "type": "boolean",
+ "default": false
+ },
+ "ingestionRunner" : {
+ "description": "The ingestion agent responsible for executing the ingestion pipeline. It will be defined at runtime based on the Ingestion Agent of the service.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "allowBotImpersonation": {
+ "description": "When true, the bot created for this application will have allowImpersonation enabled, allowing it to act on behalf of users.",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/jobStatus.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/jobStatus.json
new file mode 100644
index 000000000000..8a0f40b96ba0
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/jobStatus.json
@@ -0,0 +1,21 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/applications/jobStatus.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "JobRun",
+ "javaType": "org.openmetadata.schema.entity.app.AppConfiguration",
+ "description": "Configuration object.",
+ "type": "object",
+ "definitions": {
+ "configuration": {
+ "description": "Configuration Object.",
+ "oneOf": [
+ {
+ "$ref": "configuration/internal/searchIndexingAppConfig.json"
+ },
+ {
+ "$ref": "configuration/internal/rdfIndexingAppConfig.json"
+ }
+ ]
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/liveExecutionContext.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/liveExecutionContext.json
new file mode 100644
index 000000000000..c950edcb2670
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/liveExecutionContext.json
@@ -0,0 +1,23 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/applications/liveExecutionContext.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "JobRun",
+ "javaType": "org.openmetadata.schema.entity.app.LiveExecutionContext",
+ "javaInterfaces": ["org.openmetadata.schema.AppRuntime"],
+ "description": "Live Execution object.",
+ "type": "object",
+ "properties": {
+ "enabled": {
+ "description": "If Live Execution is enabled",
+ "type": "boolean",
+ "default": false
+ },
+ "resources": {
+ "description": "Resource full classname to register to extend any endpoints.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/marketplace/appMarketPlaceDefinition.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/marketplace/appMarketPlaceDefinition.json
new file mode 100644
index 000000000000..10f241297d35
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/marketplace/appMarketPlaceDefinition.json
@@ -0,0 +1,191 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/applications/marketplace/appMarketPlaceDefinition.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AppMarketPlaceDefinition",
+ "javaType": "org.openmetadata.schema.entity.app.AppMarketPlaceDefinition",
+ "javaInterfaces": ["org.openmetadata.schema.EntityInterface"],
+ "description": "This schema defines the applications for Open-Metadata.",
+ "type": "object",
+ "properties": {
+ "id": {
+ "description": "Unique identifier of this application.",
+ "$ref": "../../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name of the Application.",
+ "$ref": "../../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name for the application.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the Application.",
+ "$ref": "../../../type/basic.json#/definitions/markdown"
+ },
+ "features": {
+ "description": "Features of the Application.",
+ "$ref": "../../../type/basic.json#/definitions/markdown"
+ },
+ "fullyQualifiedName": {
+ "description": "FullyQualifiedName same as `name`.",
+ "$ref": "../../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "owners": {
+ "description": "Owners of this workflow.",
+ "$ref": "../../../type/entityReferenceList.json",
+ "default": null
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this entity.",
+ "$ref": "../../../type/basic.json#/definitions/href"
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "tags": {
+ "description": "Tags associated with the entity.",
+ "type": "array",
+ "items": {
+ "$ref": "../../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "developer": {
+ "description": "Developer For the Application.",
+ "type": "string"
+ },
+ "developerUrl": {
+ "description": "Url for the developer",
+ "type": "string"
+ },
+ "privacyPolicyUrl": {
+ "description": "Privacy Policy for the developer",
+ "type": "string"
+ },
+ "supportEmail": {
+ "description": "Support Email for the application",
+ "type": "string"
+ },
+ "className": {
+ "description": "Full Qualified ClassName for the the application. Use can use 'org.openmetadata.service.apps.AbstractNativeApplication' if you don't have one yet.",
+ "type": "string"
+ },
+ "sourcePythonClass": {
+ "description": "Fully Qualified class name for the Python source that will execute the external application.",
+ "type": "string"
+ },
+ "appType": {
+ "description": "This schema defines the type of application.",
+ "$ref": "../app.json#/definitions/appType"
+ },
+ "agentType": {
+ "description": "This schema defines the type of the agent.",
+ "$ref": "../app.json#/definitions/agentType"
+ },
+ "scheduleType": {
+ "description": "This schema defines the Schedule Type of Application.",
+ "$ref": "../app.json#/definitions/scheduleType"
+ },
+ "permission": {
+ "description": "Permission used by Native Applications.",
+ "$ref": "../app.json#/definitions/permissions"
+ },
+ "runtime": {
+ "description": "If app type is live, user can provide additional runtime context.",
+ "$ref": "../app.json#/definitions/executionContext"
+ },
+ "allowConfiguration": {
+ "description": "Allow users to configure the app from the UI. If `false`, the `configure` step will be hidden.",
+ "type": "boolean",
+ "default": true
+ },
+ "allowConcurrentExecution": {
+ "description": "If true, multiple instances of this app can run concurrently. This is useful for apps like QueryRunner that support parallel executions with different configurations.",
+ "type": "boolean",
+ "default": false
+ },
+ "appConfiguration": {
+ "description": "Application Configuration object.",
+ "$ref": "../configuration/applicationConfig.json#/definitions/appConfig"
+ },
+ "appLogoUrl": {
+ "description": "Application Logo Url.",
+ "type": "string",
+ "format": "uri"
+ },
+ "appScreenshots": {
+ "description": "Application Screenshots.",
+ "type": "array",
+ "items":{
+ "type": "string"
+ },
+ "uniqueItems": true
+ },
+ "system": {
+ "description": "A system app cannot be uninstalled or modified.",
+ "type": "boolean",
+ "default": false
+ },
+ "enabled": {
+ "type": "boolean",
+ "description": "Flag to enable/disable the application. If the app is not enabled, it can't be installed.",
+ "default": true
+ },
+ "domains" : {
+ "description": "Domains the asset belongs to. When not set, the asset inherits the domain from the parent it belongs to.",
+ "$ref": "../../../type/entityReferenceList.json"
+ },
+ "supportsInterrupt": {
+ "description": "If the app run can be interrupted as part of the execution.",
+ "type": "boolean",
+ "default": false
+ },
+ "eventSubscriptions": {
+ "description": "Event subscriptions that will be created when the application is installed.",
+ "type": "array",
+ "default": [],
+ "items": {
+ "$ref": "../../../events/api/createEventSubscription.json"
+ }
+ },
+ "supportsIngestionRunner": {
+ "description": "If the app support execution through the external runner.",
+ "type": "boolean",
+ "default": false
+ },
+ "allowBotImpersonation": {
+ "description": "When true, the bot created for this application will have allowImpersonation enabled, allowing it to act on behalf of users.",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "additionalProperties": false,
+ "required": ["id", "name", "appType", "className", "scheduleType", "permission"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/marketplace/createAppMarketPlaceDefinitionReq.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/marketplace/createAppMarketPlaceDefinitionReq.json
new file mode 100644
index 000000000000..ba041dbf7555
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/marketplace/createAppMarketPlaceDefinitionReq.json
@@ -0,0 +1,153 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/applications/marketplace/createAppMarketPlaceDefinitionReq.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateAppMarketPlaceDefinitionRequest",
+ "javaType": "org.openmetadata.schema.entity.app.CreateAppMarketPlaceDefinitionReq",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+ "description": "This schema defines the applications for Open-Metadata.",
+ "type": "object",
+ "properties": {
+ "name": {
+ "description": "Name of the Application.",
+ "$ref": "../../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name for the application.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the Application.",
+ "$ref": "../../../type/basic.json#/definitions/markdown"
+ },
+ "features": {
+ "description": "Features of the Application.",
+ "$ref": "../../../type/basic.json#/definitions/markdown"
+ },
+ "owners": {
+ "description": "Owners of this workflow.",
+ "$ref": "../../../type/entityReferenceList.json",
+ "default": null
+ },
+ "tags": {
+ "description": "Tags associated with the entity.",
+ "type": "array",
+ "items": {
+ "$ref": "../../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "developer": {
+ "description": "Developer For the Application.",
+ "type": "string"
+ },
+ "developerUrl": {
+ "description": "Url for the developer",
+ "type": "string"
+ },
+ "privacyPolicyUrl": {
+ "description": "Privacy Policy for the developer",
+ "type": "string"
+ },
+ "supportEmail": {
+ "description": "Support Email for the application",
+ "type": "string"
+ },
+ "className": {
+ "description": "Full Qualified ClassName for the the application. Use can use 'org.openmetadata.service.apps.AbstractNativeApplication' if you don't have one yet.",
+ "type": "string"
+ },
+ "sourcePythonClass": {
+ "description": "Fully Qualified class name for the Python source that will execute the external application.",
+ "type": "string"
+ },
+ "appType": {
+ "description": "This schema defines the type of application.",
+ "$ref": "../app.json#/definitions/appType"
+ },
+ "agentType": {
+ "description": "This schema defines the type of the agent.",
+ "$ref": "../app.json#/definitions/agentType"
+ },
+ "scheduleType": {
+ "description": "This schema defines the Schedule Type of Application.",
+ "$ref": "../app.json#/definitions/scheduleType"
+ },
+ "permission": {
+ "description": "Permission used by Native Applications.",
+ "$ref": "../app.json#/definitions/permissions"
+ },
+ "runtime": {
+ "description": "If app type is live, user can provide additional runtime context.",
+ "$ref": "../app.json#/definitions/executionContext"
+ },
+ "allowConfiguration": {
+ "description": "Allow users to configure the app from the UI. If `false`, the `configure` step will be hidden.",
+ "type": "boolean",
+ "default": true
+ },
+ "appConfiguration": {
+ "description": "Application Configuration object.",
+ "$ref": "../configuration/applicationConfig.json#/definitions/appConfig"
+ },
+ "appLogoUrl": {
+ "description": "Application Logo Url.",
+ "type": "string",
+ "format": "uri"
+ },
+ "appScreenshots": {
+ "description": "Application Screenshots.",
+ "type": "array",
+ "items":{
+ "type": "string"
+ },
+ "uniqueItems": true
+ },
+ "system": {
+ "description": "A system app cannot be uninstalled or modified.",
+ "type": "boolean",
+ "default": false
+ },
+ "domains" : {
+ "description": "Fully qualified names of the domains the Application belongs to.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "supportsInterrupt": {
+ "description": "If the app run can be interrupted as part of the execution.",
+ "type": "boolean",
+ "default": false
+ },
+ "eventSubscriptions": {
+ "description": "Event subscriptions that will be created when the application is installed.",
+ "type": "array",
+ "default": [],
+ "items": {
+ "$ref": "../../../events/api/createEventSubscription.json"
+ }
+ },
+ "enabled": {
+ "description": "The app will be installable only if this flag is set to true.",
+ "type": "boolean",
+ "default": true
+ },
+ "supportsIngestionRunner": {
+ "description": "If the app support execution through the external runner.",
+ "type": "boolean",
+ "default": false
+ },
+ "allowConcurrentExecution": {
+ "description": "If true, multiple instances of this app can run concurrently. This is useful for apps like QueryRunner that support parallel executions with different configurations.",
+ "type": "boolean",
+ "default": false
+ },
+ "allowBotImpersonation": {
+ "description": "When true, the bot created for this application will have allowImpersonation enabled, allowing it to act on behalf of users.",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "additionalProperties": false,
+ "required": ["name", "appType", "className", "scheduleType", "permission"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/scheduledExecutionContext.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/scheduledExecutionContext.json
new file mode 100644
index 000000000000..7edc700a16c5
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/applications/scheduledExecutionContext.json
@@ -0,0 +1,16 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/applications/scheduledExecutionContext.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "JobRun",
+ "javaType": "org.openmetadata.schema.entity.app.ScheduledExecutionContext",
+ "javaInterfaces": ["org.openmetadata.schema.AppRuntime"],
+ "description": "Scheduled Execution Context Configuration.",
+ "type": "object",
+ "properties": {
+ "enabled": {
+ "description": "If Live Execution is Enabled.",
+ "type": "boolean",
+ "default": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/automations/queryRunnerRequest.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/automations/queryRunnerRequest.json
new file mode 100644
index 000000000000..c1ca182b4086
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/automations/queryRunnerRequest.json
@@ -0,0 +1,72 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/automations/queryRunnerRequest.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "QueryRunnerRequest",
+ "javaType": "org.openmetadata.schema.entity.automations.QueryRunnerRequest",
+ "description": "Query Runner Request",
+ "type": "object",
+ "properties": {
+ "connectionType": {
+ "description": "Type of the connection to test such as Snowflake, MySQL, Looker, etc.",
+ "type": "string"
+ },
+ "serviceName": {
+ "description": "Optional value that identifies this service name.",
+ "$ref": "../../type/basic.json#/definitions/entityName",
+ "default": null
+ },
+ "query": {
+ "description": "Query to be executed.",
+ "type": "string"
+ },
+ "transpile": {
+ "description": "Optional value to indicate if the query should be transpiled.",
+ "type": "boolean"
+ },
+ "workflowName": {
+ "description": "Optional value of the workflow name responsible for running the test",
+ "type": "string"
+ },
+ "userId": {
+ "description": "UUID of the user executing the query (extracted from JWT token in backend)",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "userConfigId": {
+ "description": "UUID of the user's QueryRunner config for this specific service (looked up by backend using userId + serviceName)",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "authType": {
+ "description": "Authentication type configured by admin in QueryRunnerConfig (e.g., Basic, ExternalOAuth, etc.). Used to determine which credential field to use from user config.",
+ "type": "string"
+ },
+ "role": {
+ "description": "Optional role to use for query execution (selected by user in QueryRunner Studio). Service-specific (e.g., Snowflake role).",
+ "type": "string",
+ "default": null
+ },
+ "database": {
+ "description": "Optional database/dataset to use for query execution (selected by user in QueryRunner Studio). Service-specific name (e.g., Snowflake database).",
+ "type": "string",
+ "default": null
+ },
+ "databaseSchema": {
+ "description": "Optional database schema to use for query execution (selected by user in QueryRunner Studio). Service-specific name (e.g., Snowflake schema). Named 'databaseSchema' instead of 'schema' to avoid conflicts with Pydantic's BaseModel.schema() method.",
+ "type": "string",
+ "default": null
+ },
+ "maxResultSize": {
+ "description": "RUNTIME FIELD - Automatically injected by backend from admin QueryRunnerConfig.querySettings.maxResultSize. This is NOT user-configurable in the request. The backend fetches this value from the service's QueryRunnerConfig and injects it here for enforcement by the Python workflow. If query has LIMIT exceeding this value, an error is raised. If query has no LIMIT, one is automatically injected.",
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 10000,
+ "default": null
+ },
+ "credentialSourceType": {
+ "description": "Source type of the resolved credentials. Indicates whether the credentials come from a user-level config or a team-level config. Set by the backend during credential resolution.",
+ "type": "string",
+ "enum": ["user", "team"],
+ "default": "user"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/automations/response/queryRunnerResponse.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/automations/response/queryRunnerResponse.json
new file mode 100644
index 000000000000..5d797fa37b42
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/automations/response/queryRunnerResponse.json
@@ -0,0 +1,47 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/automations/response/queryRunnerResponse.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "QueryRunnerResponse",
+ "javaType": "org.openmetadata.schema.entity.automations.QueryRunnerResponse",
+ "description": "Query Runner Response",
+ "type": "object",
+ "definitions": {
+ "statusType": {
+ "javaType": "org.openmetadata.schema.entity.automations.QueryRunnerStatus",
+ "description": "Enum defining possible Query Runner status",
+ "type": "string",
+ "enum": [
+ "Successful",
+ "Failed",
+ "Running"
+ ]
+ }
+ },
+ "properties": {
+ "status": {
+ "description": "Status of the query execution",
+ "$ref": "#/definitions/statusType"
+ },
+ "message": {
+ "description": "Error message in case of failure",
+ "type": "string"
+ },
+ "errorLog": {
+ "description": "Detailed error log in case of failure",
+ "type": "string"
+ },
+ "duration": {
+ "description": "Duration of the query execution in seconds",
+ "type": "number"
+ },
+ "results": {
+ "description": "Results of the query execution",
+ "$ref": "../../data/table.json#/definitions/tableData"
+ },
+ "executedQuery": {
+ "description": "The actual query that was executed (may be transpiled or modified from the original)",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/automations/testServiceConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/automations/testServiceConnection.json
new file mode 100644
index 000000000000..9b864f3a132d
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/automations/testServiceConnection.json
@@ -0,0 +1,71 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/automations/workflow/testServiceConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "TestServiceConnectionRequest",
+ "javaType": "org.openmetadata.schema.entity.automations.TestServiceConnectionRequest",
+ "description": "Test Service Connection to test user provided configuration is valid or not.",
+ "type": "object",
+ "properties": {
+ "connection": {
+ "description": "Connection object.",
+ "oneOf": [
+ {
+ "$ref": "../services/apiService.json#/definitions/apiConnection"
+ },
+ {
+ "$ref": "../services/databaseService.json#/definitions/databaseConnection"
+ },
+ {
+ "$ref": "../services/dashboardService.json#/definitions/dashboardConnection"
+ },
+ {
+ "$ref": "../services/messagingService.json#/definitions/messagingConnection"
+ },
+ {
+ "$ref": "../services/pipelineService.json#/definitions/pipelineConnection"
+ },
+ {
+ "$ref": "../services/mlmodelService.json#/definitions/mlModelConnection"
+ },
+ {
+ "$ref": "../services/metadataService.json#/definitions/metadataConnection"
+ },
+ {
+ "$ref": "../services/storageService.json#/definitions/storageConnection"
+ },
+ {
+ "$ref": "../services/searchService.json#/definitions/searchConnection"
+ },
+ {
+ "$ref": "../services/securityService.json#/definitions/securityConnection"
+ },
+ {
+ "$ref": "../services/driveService.json#/definitions/driveConnection"
+ }
+ ]
+ },
+ "serviceType": {
+ "description": "Type of service such as Database, Dashboard, Messaging, etc.",
+ "$ref": "../services/serviceType.json"
+ },
+ "connectionType": {
+ "description": "Type of the connection to test such as Snowflake, MySQL, Looker, etc.",
+ "type": "string"
+ },
+ "serviceName": {
+ "description": "Optional value that identifies this service name.",
+ "$ref": "../../type/basic.json#/definitions/entityName",
+ "default": null
+ },
+ "secretsManagerProvider": {
+ "description": "Secrets Manager Provider to use for fetching secrets.",
+ "$ref": "../../security/secrets/secretsManagerProvider.json",
+ "default": "db"
+ },
+ "ingestionRunner": {
+ "description": "Optional value of the ingestion runner name responsible for running the test",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/automations/testSparkEngineConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/automations/testSparkEngineConnection.json
new file mode 100644
index 000000000000..fee8dd703c0e
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/automations/testSparkEngineConnection.json
@@ -0,0 +1,19 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/automations/testSparkEngineConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "TestSparkEngineConnectionRequest",
+ "javaType": "org.openmetadata.schema.entity.automations.TestSparkEngineConnectionRequest",
+ "description": "Test Spark Engine Connection to test user provided configuration is valid or not.",
+ "type": "object",
+ "properties": {
+ "sparkEngine": {
+ "description": "Spark Engine Configuration.",
+ "$ref": "../../metadataIngestion/engine/sparkEngineConfig.json"
+ },
+ "ingestionRunner": {
+ "description": "Optional value of the ingestion runner name responsible for running the test",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/automations/workflow.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/automations/workflow.json
new file mode 100644
index 000000000000..5f27a0bf8e3f
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/automations/workflow.json
@@ -0,0 +1,153 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/automations/workflow.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Workflow",
+ "description": "A unit of work that will be triggered as an API call to the OpenMetadata server.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.automations.Workflow",
+ "javaInterfaces": [
+ "org.openmetadata.schema.EntityInterface"
+ ],
+ "definitions": {
+ "workflowType": {
+ "javaType": "org.openmetadata.schema.entity.automations.WorkflowType",
+ "description": "This enum defines the type for which this workflow applies to.",
+ "type": "string",
+ "enum": [
+ "TEST_CONNECTION",
+ "REVERSE_INGESTION",
+ "QUERY_RUNNER",
+ "TEST_SPARK_ENGINE_CONNECTION"
+ ]
+ },
+ "workflowStatus": {
+ "javaType": "org.openmetadata.schema.entity.automations.WorkflowStatus",
+ "description": "Enum defining possible Workflow status",
+ "type": "string",
+ "enum": [
+ "Pending",
+ "Successful",
+ "Failed",
+ "Running"
+ ]
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier of this workflow instance.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name of the workflow.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this workflow definition.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the test connection def.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "fullyQualifiedName": {
+ "description": "FullyQualifiedName same as `name`.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "workflowType": {
+ "description": "Type of the workflow.",
+ "$ref": "#/definitions/workflowType"
+ },
+ "status": {
+ "description": "Workflow computation status.",
+ "$ref": "#/definitions/workflowStatus",
+ "default": "Pending"
+ },
+ "request": {
+ "description": "Request body for a specific workflow type",
+ "oneOf": [
+ {
+ "$ref": "testServiceConnection.json"
+ },
+ {
+ "$ref": "../../metadataIngestion/reverseIngestionPipeline.json"
+ },
+ {
+ "$ref": "queryRunnerRequest.json"
+ },
+ {
+ "$ref": "testSparkEngineConnection.json"
+ }
+ ]
+ },
+ "response": {
+ "description": "Response to the request.",
+ "oneOf": [
+ {
+ "$ref": "../services/connections/testConnectionResult.json"
+ },
+ {
+ "$ref": "../services/ingestionPipelines/reverseIngestionResponse.json"
+ },
+ {
+ "$ref": "response/queryRunnerResponse.json"
+ }
+ ]
+ },
+ "openMetadataServerConnection": {
+ "$ref": "../services/connections/metadata/openMetadataConnection.json"
+ },
+ "owners": {
+ "description": "Owners of this workflow.",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this entity.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "domains": {
+ "description": "Domains the asset belongs to. When not set, the asset inherits the domain from the parent it belongs to.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "dataProducts": {
+ "description": "List of data products this entity is part of.",
+ "$ref": "../../type/entityReferenceList.json"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "id",
+ "name",
+ "workflowType",
+ "request"
+ ]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/bot.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/bot.json
new file mode 100644
index 000000000000..e9b6dc094e2d
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/bot.json
@@ -0,0 +1,77 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/bots.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Bot",
+ "description": "This schema defines a Bot entity. A bot automates tasks, such as adding description, identifying the importance of data. It performs this task as a special user in the system.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.Bot",
+ "javaInterfaces": ["org.openmetadata.schema.EntityInterface"],
+ "properties": {
+ "id": {
+ "description": "Unique identifier of a bot instance.",
+ "$ref": "../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name of the bot.",
+ "$ref": "../type/basic.json#/definitions/entityName"
+ },
+ "fullyQualifiedName": {
+ "description": "FullyQualifiedName same as `name`.",
+ "$ref": "../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "displayName": {
+ "description": "Name used for display purposes. Example 'FirstName LastName'.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the bot.",
+ "$ref": "../type/basic.json#/definitions/markdown"
+ },
+ "botUser" : {
+ "description": "Bot user created for this bot on behalf of which the bot performs all the operations, such as updating description, responding on the conversation threads, etc.",
+ "$ref" : "../type/entityReference.json"
+ },
+ "provider" : {
+ "$ref": "../type/basic.json#/definitions/providerType"
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../type/basic.json#/definitions/impersonatedBy"
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this bot.",
+ "$ref": "../type/basic.json#/definitions/href"
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "domains" : {
+ "description": "Domains the asset belongs to. When not set, the asset inherits the domain from the parent it belongs to.",
+ "$ref": "../type/entityReferenceList.json"
+ }
+ },
+ "required": ["id", "name", "botUser"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/classification/classification.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/classification/classification.json
new file mode 100644
index 000000000000..6c4212c08b40
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/classification/classification.json
@@ -0,0 +1,134 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/classification/classification.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Classification",
+ "$comment": "@om-entity-type",
+ "description": "A `Classification` entity contains hierarchical terms called tags used for categorizing and classifying data assets and other entities.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.classification.Classification",
+ "javaInterfaces": ["org.openmetadata.schema.EntityInterface"],
+ "properties": {
+ "id": {
+ "description": "Unique identifier of this entity instance.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "fullyQualifiedName": {
+ "description": "FullyQualifiedName same as `name`.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this entity.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the classification.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "termCount" : {
+ "description": "Total number of children tag terms under this classification. This includes all the children in the hierarchy.",
+ "type" : "integer",
+ "minimum": 0
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "href": {
+ "description": "Link to the resource corresponding to the classification.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "usageCount": {
+ "description": "Count of how many times the tags from this classification are used.",
+ "type": "integer"
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "provider" : {
+ "$ref": "../../type/basic.json#/definitions/providerType"
+ },
+ "disabled" : {
+ "description": "System classifications can't be deleted. Use this flag to disable them.",
+ "type": "boolean",
+ "default": false
+ },
+ "mutuallyExclusive" : {
+ "description" : "Tags under this classification are mutually exclusive. When mutually exclusive is `true` the tags from this classification are used to **classify** an entity. An entity can only be in one class - example, it can only be either `tier1` or `tier2` and not both. When mutually exclusive is `false`, the tags from this classification are used to **categorize** an entity. An entity have multiple tags simultaneously - example a customer can be `newCustomer` and `atRisk` simultaneously.",
+ "type" : "boolean",
+ "default" : "false"
+ },
+ "domains" : {
+ "description": "Domains the asset belongs to. When not set, the asset inherits the domain from the parent it belongs to.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "owners": {
+ "description": "Owners of this Classification.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "reviewers": {
+ "description": "User references of the reviewers for this tag.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "entityStatus": {
+ "description": "Status of the tag.",
+ "$ref": "../../type/status.json"
+ },
+ "autoClassificationConfig": {
+ "description": "Configuration for automatic classification behavior",
+ "type": "object",
+ "properties": {
+ "enabled": {
+ "description": "Whether automatic classification is enabled for this classification",
+ "type": "boolean",
+ "default": false
+ },
+ "conflictResolution": {
+ "description": "Strategy for resolving conflicts when multiple tags match",
+ "type": "string",
+ "enum": ["highest_confidence", "highest_priority", "most_specific"],
+ "default": "highest_confidence"
+ },
+ "minimumConfidence": {
+ "description": "Minimum confidence score required to apply a tag",
+ "type": "number",
+ "minimum": 0.0,
+ "maximum": 1.0,
+ "default": 0.6
+ },
+ "requireExplicitMatch": {
+ "description": "Only apply tags when recognizers explicitly match (no default tagging)",
+ "type": "boolean",
+ "default": true
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "required": ["id", "name", "description"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/classification/tag.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/classification/tag.json
new file mode 100644
index 000000000000..2e95d6adfe4f
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/classification/tag.json
@@ -0,0 +1,154 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/classification/tag.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Tag",
+ "$comment": "@om-entity-type",
+ "description": "A `Tag` entity is used for classification or categorization. It is a term defined under `Classification` entity. Tags are used to label the entities and entity fields, such as Tables, and Columns.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.classification.Tag",
+ "javaInterfaces": [
+ "org.openmetadata.schema.EntityInterface"
+ ],
+ "definitions": {},
+ "properties": {
+ "id": {
+ "description": "Unique identifier of this entity instance.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name of the tag.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this tag.",
+ "type": "string"
+ },
+ "fullyQualifiedName": {
+ "description": "Unique name of the tag of format `Classification.tag1.tag2`.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the tag.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "style": {
+ "$ref": "../../type/basic.json#/definitions/style"
+ },
+ "classification": {
+ "description": "Reference to the classification that this tag is part of.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "parent": {
+ "description": "Reference to the parent tag. When null, the term is at the root of the Classification.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "children": {
+ "description": "Children tags under this tag.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "href": {
+ "description": "Link to the resource corresponding to the tag.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "usageCount": {
+ "description": "Count of how many times this tag and children tags are used.",
+ "type": "integer"
+ },
+ "deprecated": {
+ "description": "If the tag is deprecated.",
+ "type": "boolean",
+ "default": false
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "provider": {
+ "$ref": "../../type/basic.json#/definitions/providerType"
+ },
+ "disabled": {
+ "description": "System tags can't be deleted. Use this flag to disable them.",
+ "type": "boolean",
+ "default": false
+ },
+ "mutuallyExclusive": {
+ "description": "Children tags under this group are mutually exclusive. When mutually exclusive is `true` the tags from this group are used to **classify** an entity. An entity can only be in one class - example, it can only be either `tier1` or `tier2` and not both. When mutually exclusive is `false`, the tags from this group are used to **categorize** an entity. An entity can be in multiple categories simultaneously - example a customer can be `newCustomer` and `atRisk` simultaneously.",
+ "type": "boolean",
+ "default": "false"
+ },
+ "domains" : {
+ "description": "Domains the asset belongs to. When not set, the asset inherits the domain from the parent it belongs to.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "dataProducts" : {
+ "description": "List of data products this entity is part of.",
+ "$ref" : "../../type/entityReferenceList.json"
+ },
+ "dataContract": {
+ "description": "Reference to the data contract for this entity.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "owners": {
+ "description": "Owners of this glossary term.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "reviewers": {
+ "description": "User references of the reviewers for this tag.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "entityStatus": {
+ "description": "Status of the tag.",
+ "$ref": "../../type/status.json"
+ },
+ "recognizers": {
+ "description": "List of recognizers configured for automatic detection of this tag",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/recognizer.json"
+ }
+ },
+ "autoClassificationEnabled": {
+ "description": "Whether automatic classification is enabled for this tag",
+ "type": "boolean",
+ "default": false
+ },
+ "autoClassificationPriority": {
+ "description": "Priority for conflict resolution when multiple tags match (higher number = higher priority)",
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 100,
+ "default": 50
+ }
+ },
+ "required": [
+ "id",
+ "name",
+ "description"
+ ],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/column/dashboardDataModelColumn.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/column/dashboardDataModelColumn.json
new file mode 100644
index 000000000000..a84de4e0e0c1
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/column/dashboardDataModelColumn.json
@@ -0,0 +1,9 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/column/dashboardDataModelColumn.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Dashboard Data Model Column Type",
+ "$comment": "@om-entity-type",
+ "description": "This schema defines the type for dashboard data model column context to support custom properties extension.",
+ "type": "object",
+ "properties": {}
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/column/tableColumn.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/column/tableColumn.json
new file mode 100644
index 000000000000..9d6530dbe537
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/column/tableColumn.json
@@ -0,0 +1,9 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/column/tableColumn.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Table Column Type",
+ "$comment": "@om-entity-type",
+ "description": "This schema defines the type for table column context to support custom properties extension.",
+ "type": "object",
+ "properties": {}
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/apiCollection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/apiCollection.json
new file mode 100644
index 000000000000..01568d78a6b8
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/apiCollection.json
@@ -0,0 +1,136 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/data/apiCollection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "APICollection",
+ "$comment": "@om-entity-type",
+ "description": "This schema defines the APICollection entity. API Collection allows user to group multiple APIs together. In OpenAPI specification its marked as a Tag.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.data.APICollection",
+ "javaInterfaces": ["org.openmetadata.schema.EntityInterface"],
+ "properties": {
+ "id": {
+ "description": "Unique identifier that identifies a API Collection instance.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name that identifies this API Collection.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this API Collection. It could be title or label from the source services.",
+ "type": "string"
+ },
+ "fullyQualifiedName": {
+ "description": "A unique name that identifies a API Collection in the format 'ServiceName.ApiCollectionName'.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "description": {
+ "description": "Description of the API Collection, what it is, and how to use it.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "endpointURL": {
+ "title": "Endpoint URL",
+ "description": "EndPoint URL for the API Collection. Capture the Root URL of the collection.",
+ "type": "string",
+ "format": "uri"
+ },
+ "apiEndpoints": {
+ "description": "All the APIs included in this API Collection.",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this entity.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "owners": {
+ "description": "Owners of this API Collection.",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "tags": {
+ "description": "Tags for this API Collection.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": []
+ },
+ "service": {
+ "description": "Link to service where this API Collection is hosted in.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "serviceType": {
+ "description": "Service type where this API Collection is hosted in.",
+ "$ref": "../services/apiService.json#/definitions/apiServiceType"
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ },
+ "domains": {
+ "description": "Domains the API Collection belongs to. When not set, the API Collection inherits the domain from the API service it belongs to.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "dataProducts": {
+ "description": "List of data products this entity is part of.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "dataContract": {
+ "description": "Reference to the data contract for this entity.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "votes": {
+ "description": "Votes on the entity.",
+ "$ref": "../../type/votes.json"
+ },
+ "lifeCycle": {
+ "description": "Life Cycle properties of the entity",
+ "$ref": "../../type/lifeCycle.json"
+ },
+ "certification": {
+ "$ref": "../../type/assetCertification.json"
+ },
+ "sourceHash": {
+ "description": "Source hash of the entity",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32
+ },
+ "entityStatus": {
+ "description": "Status of the API Collection.",
+ "$ref": "../../type/status.json"
+ }
+ },
+ "required": ["id", "name", "service"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/apiEndpoint.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/apiEndpoint.json
new file mode 100644
index 000000000000..3e6e564fa8e8
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/apiEndpoint.json
@@ -0,0 +1,198 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/data/apiEndpoint.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "APIEndpoint",
+ "$comment": "@om-entity-type",
+ "description": "This schema defines the APIEndpoint entity. An APIEndpoint is a specific endpoint of an API that is part of an API Collection.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.data.APIEndpoint",
+ "javaInterfaces": ["org.openmetadata.schema.EntityInterface"],
+ "definitions": {
+ "apiRequestMethod": {
+ "javaType": "org.openmetadata.schema.type.APIRequestMethod",
+ "description": "This schema defines the Request Method type for APIs .",
+ "type": "string",
+ "default": "GET",
+ "enum": [
+ "GET",
+ "POST",
+ "PUT",
+ "PATCH",
+ "DELETE",
+ "HEAD",
+ "CONNECT",
+ "OPTIONS",
+ "TRACE"
+ ],
+ "javaEnums": [
+ {
+ "name": "GET"
+ },
+ {
+ "name": "POST"
+ },
+ {
+ "name": "PUT"
+ },
+ {
+ "name": "PATCH"
+ },
+ {
+ "name": "DELETE"
+ },
+ {
+ "name": "HEAD"
+ },
+ {
+ "name": "CONNECT"
+ },
+ {
+ "name": "OPTIONS"
+ },
+ {
+ "name": "TRACE"
+ }
+ ]
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier that identifies a API Endpoint instance.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name that identifies this API Endpoint.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this API Endpoint.",
+ "type": "string"
+ },
+ "fullyQualifiedName": {
+ "description": "A unique name that identifies a API Collection in the format 'ServiceName.ApiCollectionName.APIEndpoint'.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "description": {
+ "description": "Description of the API Endpoint, what it is, and how to use it.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "endpointURL": {
+ "title": "Endpoint URL",
+ "description": "EndPoint URL for the API Collection. Capture the Root URL of the collection.",
+ "type": "string",
+ "format": "uri"
+ },
+ "requestMethod": {
+ "description": "Request Method for the API Endpoint.",
+ "$ref": "#/definitions/apiRequestMethod"
+ },
+ "requestSchema": {
+ "description": "Request Schema for the API Endpoint.",
+ "$ref": "../../type/apiSchema.json"
+ },
+ "responseSchema": {
+ "description": "Response Schema for the API Endpoint.",
+ "$ref": "../../type/apiSchema.json"
+ },
+ "apiCollection": {
+ "description": "Reference to API Collection that contains this API Endpoint.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this entity.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "owners": {
+ "description": "Owners of this API Collection.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "followers": {
+ "description": "Followers of this API Collection.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "tags": {
+ "description": "Tags for this API Collection.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": []
+ },
+ "service": {
+ "description": "Link to service where this API Collection is hosted in.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "serviceType": {
+ "description": "Service type where this API Collection is hosted in.",
+ "$ref": "../services/apiService.json#/definitions/apiServiceType"
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ },
+ "domains": {
+ "description": "Domains the API Collection belongs to. When not set, the API Collection inherits the domain from the API service it belongs to.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "dataProducts": {
+ "description": "List of data products this entity is part of.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "dataContract": {
+ "description": "Reference to the data contract for this entity.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "votes": {
+ "description": "Votes on the entity.",
+ "$ref": "../../type/votes.json"
+ },
+ "lifeCycle": {
+ "description": "Life Cycle properties of the entity",
+ "$ref": "../../type/lifeCycle.json"
+ },
+ "certification": {
+ "$ref": "../../type/assetCertification.json"
+ },
+ "sourceHash": {
+ "description": "Source hash of the entity",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32
+ },
+ "entityStatus": {
+ "description": "Status of the APIEndpoint.",
+ "$ref": "../../type/status.json"
+ }
+ },
+ "required": ["id", "name", "service"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/chart.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/chart.json
new file mode 100644
index 000000000000..bf4cecc1e9ac
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/chart.json
@@ -0,0 +1,220 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/data/chart.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Chart",
+ "$comment": "@om-entity-type",
+ "description": "A `Chart` presents data visually. Charts can be part of `Dashboards`.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.data.Chart",
+ "javaInterfaces": ["org.openmetadata.schema.EntityInterface"],
+ "definitions": {
+ "chartType": {
+ "javaType": "org.openmetadata.schema.type.ChartType",
+ "description": "This schema defines the type used for describing different types of charts.",
+ "type": "string",
+ "enum": [
+ "Line",
+ "Table",
+ "Bar",
+ "Area",
+ "Pie",
+ "Histogram",
+ "Scatter",
+ "Text",
+ "BoxPlot",
+ "SanKey",
+ "Gauge",
+ "Map",
+ "Graph",
+ "Heatmap",
+ "Timeline",
+ "Other"
+ ],
+ "javaEnums": [
+ {
+ "name": "Line"
+ },
+ {
+ "name": "Table"
+ },
+ {
+ "name": "Bar"
+ },
+ {
+ "name": "Area"
+ },
+ {
+ "name": "Pie"
+ },
+ {
+ "name": "Histogram"
+ },
+ {
+ "name": "Scatter"
+ },
+ {
+ "name": "Text"
+ },
+ {
+ "name": "BoxPlot"
+ },
+ {
+ "name": "SanKey"
+ },
+ {
+ "name": "Gauge"
+ },
+ {
+ "name": "Map"
+ },
+ {
+ "name": "Graph"
+ },
+ {
+ "name": "Heatmap"
+ },
+ {
+ "name": "Timeline"
+ },
+ {
+ "name": "Other"
+ }
+ ]
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier that identifies a chart instance.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name that identifies this Chart.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this Chart. It could be title or label from the source services.",
+ "type": "string"
+ },
+ "fullyQualifiedName": {
+ "description": "A unique name that identifies a dashboard in the format 'ServiceName.ChartName'.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "description": {
+ "description": "Description of the dashboard, what it is, and how to use it.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "chartType": {
+ "$ref": "#/definitions/chartType"
+ },
+ "sourceUrl": {
+ "description": "Chart URL suffix from its service.",
+ "$ref": "../../type/basic.json#/definitions/sourceUrl"
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this entity.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "owners": {
+ "description": "Owners of this chart.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "followers": {
+ "description": "Followers of this chart.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "tags": {
+ "description": "Tags for this chart.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": []
+ },
+ "service": {
+ "description": "Link to service where this dashboard is hosted in.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "serviceType": {
+ "description": "Service type where this chart is hosted in.",
+ "$ref": "../services/dashboardService.json#/definitions/dashboardServiceType"
+ },
+ "usageSummary": {
+ "description": "Latest usage information for this chart.",
+ "$ref": "../../type/usageDetails.json",
+ "default": null
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "domains" : {
+ "description": "Domains the Chart belongs to. The Chart inherits domain from the dashboard service it belongs to.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "dataProducts": {
+ "description": "List of data products this entity is part of.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "dataContract": {
+ "description": "Reference to the data contract for this entity.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "votes": {
+ "description": "Votes on the entity.",
+ "$ref": "../../type/votes.json"
+ },
+ "lifeCycle": {
+ "description": "Life Cycle properties of the entity",
+ "$ref": "../../type/lifeCycle.json"
+ },
+ "certification": {
+ "$ref": "../../type/assetCertification.json"
+ },
+ "sourceHash": {
+ "description": "Source hash of the entity",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ },
+ "dashboards": {
+ "description": "All the dashboards containing this chart.",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "entityStatus": {
+ "description": "Status of the Chart.",
+ "$ref": "../../type/status.json"
+ }
+ },
+ "required": ["id", "name", "service"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/container.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/container.json
new file mode 100644
index 000000000000..a837ad3dce70
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/container.json
@@ -0,0 +1,255 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/data/container.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Container",
+ "$comment": "@om-entity-type",
+ "description": "This schema defines the Container entity. A Container is an abstraction for any path(including the top level eg. bucket in S3) storing data in an Object store such as S3, GCP, Azure. It maps a tree-like structure, where each Container can have a parent and a list of sub-folders, and it can be structured - where it contains structured data, or unstructured where no schema for its data is defined.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.data.Container",
+ "javaInterfaces": [
+ "org.openmetadata.schema.EntityInterface"
+ ],
+ "definitions": {
+ "containerDataModel": {
+ "description": "This captures information about how the container's data is modeled, if it has a schema. ",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.ContainerDataModel",
+ "properties": {
+ "isPartitioned": {
+ "description": "Whether the data under this container is partitioned by some property, eg. eventTime=yyyy-mm-dd",
+ "type": "boolean",
+ "default": false
+ },
+ "columns": {
+ "description": "Columns belonging to this container's schema",
+ "type": "array",
+ "items": {
+ "$ref": "../data/table.json#/definitions/column"
+ }
+ }
+ },
+ "required": [
+ "columns"
+ ],
+ "additionalProperties": false
+ },
+ "fileFormat": {
+ "javaType": "org.openmetadata.schema.type.ContainerFileFormat",
+ "description": "This schema defines the file formats for the object/files within a container.",
+ "javaInterfaces": [
+ "org.openmetadata.schema.EnumInterface"
+ ],
+ "type": "string",
+ "enum": [
+ "zip",
+ "gz",
+ "zstd",
+ "csv",
+ "tsv",
+ "json",
+ "parquet",
+ "avro",
+ "MF4"
+ ],
+ "javaEnums": [
+ {
+ "name": "Zip"
+ },
+ {
+ "name": "Gz"
+ },
+ {
+ "name": "Zstd"
+ },
+ {
+ "name": "Csv"
+ },
+ {
+ "name": "Tsv"
+ },
+ {
+ "name": "Json"
+ },
+ {
+ "name": "Parquet"
+ },
+ {
+ "name": "Avro"
+ },
+ {
+ "name": "MF4"
+ }
+ ]
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier that identifies this container instance.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name that identifies the container.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "fullyQualifiedName": {
+ "description": "Name that uniquely identifies a container in the format 'ServiceName.ContainerName'.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this container.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the container instance.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this entity.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "owners": {
+ "description": "Owners of this container.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "service": {
+ "description": "Link to the storage service where this container is hosted in.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "parent": {
+ "description": "Link to the parent container under which this entity sits, if not top level.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "children": {
+ "description": "References to child containers residing under this entity.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "dataModel": {
+ "description": "References to the container's data model, if data is structured, or null otherwise",
+ "$ref": "#/definitions/containerDataModel",
+ "default": null
+ },
+ "prefix": {
+ "description": "Optional prefix path defined for this container",
+ "type": "string",
+ "default": null
+ },
+ "numberOfObjects": {
+ "description": "The number of objects/files this container has.",
+ "type": "number",
+ "default": null
+ },
+ "size": {
+ "description": "The total size in KB this container has.",
+ "type": "number",
+ "default": null
+ },
+ "fileFormats": {
+ "description": "File & data formats identified for the container: e.g. dataFormats=[csv, json]. These can be present both when the container has a dataModel or not",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/fileFormat"
+ },
+ "default": null
+ },
+ "serviceType": {
+ "description": "Service type this table is hosted in.",
+ "$ref": "../services/storageService.json#/definitions/storageServiceType"
+ },
+ "followers": {
+ "description": "Followers of this container.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "tags": {
+ "description": "Tags for this container.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": []
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "retentionPeriod": {
+ "description": "Retention period of the data in the Container. Period is expressed as duration in ISO 8601 format in UTC. Example - `P23DT23H`.",
+ "$ref": "../../type/basic.json#/definitions/duration"
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ },
+ "sourceUrl": {
+ "description": "Source URL of container.",
+ "$ref": "../../type/basic.json#/definitions/sourceUrl"
+ },
+ "fullPath": {
+ "description": "Full path of the container/file.",
+ "type": "string"
+ },
+ "domains": {
+ "description": "Domains the Container belongs to. When not set, the Container inherits the domain from the storage service it belongs to.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "dataProducts": {
+ "description": "List of data products this entity is part of.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "dataContract": {
+ "description": "Reference to the data contract for this entity.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "votes": {
+ "description": "Votes on the entity.",
+ "$ref": "../../type/votes.json"
+ },
+ "lifeCycle": {
+ "description": "Life Cycle properties of the entity",
+ "$ref": "../../type/lifeCycle.json"
+ },
+ "certification": {
+ "$ref": "../../type/assetCertification.json"
+ },
+ "sourceHash": {
+ "description": "Source hash of the entity",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32
+ },
+ "entityStatus": {
+ "description": "Status of the Container.",
+ "$ref": "../../type/status.json"
+ }
+ },
+ "required": [
+ "id",
+ "name",
+ "service"
+ ],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/dashboard.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/dashboard.json
new file mode 100644
index 000000000000..de790341cfd1
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/dashboard.json
@@ -0,0 +1,174 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/data/dashboard.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Dashboard",
+ "$comment": "@om-entity-type",
+ "description": "This schema defines the Dashboard entity. Dashboards are computed from data and visually present data, metrics, and KPIs. They are typically updated in real-time and allow interactive data exploration.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.data.Dashboard",
+ "javaInterfaces": ["org.openmetadata.schema.EntityInterface"],
+ "definitions": {
+ "dashboardType": {
+ "javaType": "org.openmetadata.schema.type.DashboardType",
+ "description": "This schema defines the type used for describing different types of dashboards.",
+ "type": "string",
+ "default": "Dashboard",
+ "enum": [
+ "Dashboard",
+ "Report"
+ ],
+ "javaEnums": [
+ {
+ "name": "Dashboard"
+ },
+ {
+ "name": "Report"
+ }
+ ]
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier that identifies a dashboard instance.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name that identifies this dashboard.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this Dashboard. It could be title or label from the source services.",
+ "type": "string"
+ },
+ "fullyQualifiedName": {
+ "description": "A unique name that identifies a dashboard in the format 'ServiceName.DashboardName'.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "description": {
+ "description": "Description of the dashboard, what it is, and how to use it.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "project": {
+ "description": "Name of the project / workspace / collection in which the dashboard is contained",
+ "type": "string"
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "dashboardType": {
+ "$ref": "#/definitions/dashboardType"
+ },
+ "sourceUrl": {
+ "description": "Dashboard URL suffix from its service.",
+ "$ref": "../../type/basic.json#/definitions/sourceUrl"
+ },
+ "charts": {
+ "description": "All the charts included in this Dashboard.",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "dataModels": {
+ "description": "List of data models used by this dashboard or the charts contained on it.",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this entity.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "owners": {
+ "description": "Owners of this dashboard.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "followers": {
+ "description": "Followers of this dashboard.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "tags": {
+ "description": "Tags for this dashboard.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": []
+ },
+ "service": {
+ "description": "Link to service where this dashboard is hosted in.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "serviceType": {
+ "description": "Service type where this dashboard is hosted in.",
+ "$ref": "../services/dashboardService.json#/definitions/dashboardServiceType"
+ },
+ "usageSummary": {
+ "description": "Latest usage information for this dashboard.",
+ "$ref": "../../type/usageDetails.json",
+ "default": null
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ },
+ "domains": {
+ "description": "Domains the Dashboard belongs to. When not set, the Dashboard inherits the domain from the dashboard service it belongs to.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "dataProducts": {
+ "description": "List of data products this entity is part of.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "dataContract": {
+ "description": "Reference to the data contract for this entity.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "votes": {
+ "description": "Votes on the entity.",
+ "$ref": "../../type/votes.json"
+ },
+ "lifeCycle": {
+ "description": "Life Cycle properties of the entity",
+ "$ref": "../../type/lifeCycle.json"
+ },
+ "certification": {
+ "$ref": "../../type/assetCertification.json"
+ },
+ "sourceHash": {
+ "description": "Source hash of the entity",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32
+ },
+ "entityStatus": {
+ "description": "Status of the Dashboard.",
+ "$ref": "../../type/status.json"
+ }
+ },
+ "required": ["id", "name", "service"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/dashboardDataModel.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/dashboardDataModel.json
new file mode 100644
index 000000000000..aa8e3a1a3518
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/dashboardDataModel.json
@@ -0,0 +1,237 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/data/dashboardDataModel.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DashboardDataModel",
+ "$comment": "@om-entity-type",
+ "description": "Dashboard Data Model entity definition. Data models are the schemas used to build dashboards, charts, or other data assets.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.data.DashboardDataModel",
+ "javaInterfaces": [
+ "org.openmetadata.schema.EntityInterface",
+ "org.openmetadata.schema.ColumnsEntityInterface"
+ ],
+ "definitions": {
+ "dataModelType": {
+ "javaType": "org.openmetadata.schema.type.DataModelType",
+ "description": "This schema defines the type used for describing different types of data models.",
+ "type": "string",
+ "$comment": "Data Model types supported.",
+ "enum": [
+ "TableauDataModel",
+ "TableauPublishedDatasource",
+ "TableauEmbeddedDatasource",
+ "SupersetDataModel",
+ "MetabaseDataModel",
+ "LookMlView",
+ "LookMlExplore",
+ "PowerBIDataModel",
+ "QlikDataModel",
+ "QuickSightDataModel",
+ "SigmaDataModel",
+ "PowerBIDataFlow",
+ "MicroStrategyDataset",
+ "ThoughtSpotDataModel",
+ "SapS4HanaCdsView",
+ "SsrsDataModel"
+ ],
+ "javaEnums": [
+ {
+ "name": "TableauDataModel"
+ },
+ {
+ "name": "TableauPublishedDatasource"
+ },
+ {
+ "name": "TableauEmbeddedDatasource"
+ },
+ {
+ "name": "SupersetDataModel"
+ },
+ {
+ "name": "MetabaseDataModel"
+ },
+ {
+ "name": "LookMlView"
+ },
+ {
+ "name": "LookMlExplore"
+ },
+ {
+ "name": "PowerBIDataModel"
+ },
+ {
+ "name": "QlikDataModel"
+ },
+ {
+ "name": "QuickSightDataModel"
+ },
+ {
+ "name": "SigmaDataModel"
+ },
+ {
+ "name": "PowerBIDataFlow"
+ },
+ {
+ "name": "MicroStrategyDataset"
+ },
+ {
+ "name": "ThoughtSpotDataModel"
+ },
+ {
+ "name": "SapS4HanaCdsView"
+ },
+ {
+ "name": "SsrsDataModel"
+ }
+ ]
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier of this data model instance.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name of a data model. Expected to be unique within a Dashboard.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this data model. It could be title or label from the source.",
+ "type": "string"
+ },
+ "fullyQualifiedName": {
+ "description": "Fully qualified name of a data model in the form `serviceName.dashboardName.datamodel.datamodelName`.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "description": {
+ "description": "Description of a data model.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "href": {
+ "description": "Link to this data model entity.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "owners": {
+ "description": "Owners of this data model.",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "dataProducts": {
+ "description": "List of data products this entity is part of.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "dataContract": {
+ "description": "Reference to the data contract for this entity.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "tags": {
+ "description": "Tags for this data model.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": []
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "followers": {
+ "description": "Followers of this dashboard.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "service": {
+ "description": "Link to service where this data model is hosted in.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "serviceType": {
+ "description": "Service type where this data model is hosted in.",
+ "$ref": "../services/dashboardService.json#/definitions/dashboardServiceType"
+ },
+ "dataModelType": {
+ "$ref": "#/definitions/dataModelType"
+ },
+ "sql": {
+ "description": "In case the Data Model is based on a SQL query.",
+ "$ref": "../../type/basic.json#/definitions/sqlQuery",
+ "default": null
+ },
+ "columns": {
+ "description": "Columns from the data model.",
+ "type": "array",
+ "items": {
+ "$ref": "table.json#/definitions/column"
+ },
+ "default": null
+ },
+ "project": {
+ "description": "Name of the project / workspace / collection in which the dataModel is contained",
+ "type": "string"
+ },
+ "sourceUrl": {
+ "description": "Dashboard Data Model URL suffix from its service.",
+ "$ref": "../../type/basic.json#/definitions/sourceUrl"
+ },
+ "domains": {
+ "description": "Domains the Dashboard Data Model belongs to. When not set, the Dashboard model inherits the domain from the dashboard service it belongs to.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "votes": {
+ "description": "Votes on the entity.",
+ "$ref": "../../type/votes.json"
+ },
+ "lifeCycle": {
+ "description": "Life Cycle properties of the entity",
+ "$ref": "../../type/lifeCycle.json"
+ },
+ "certification": {
+ "$ref": "../../type/assetCertification.json"
+ },
+ "sourceHash": {
+ "description": "Source hash of the entity",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ },
+ "entityStatus": {
+ "description": "Status of the DashboardDataModel.",
+ "$ref": "../../type/status.json"
+ }
+ },
+ "required": [
+ "id",
+ "name",
+ "dataModelType",
+ "columns"
+ ],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/dataContract.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/dataContract.json
new file mode 100644
index 000000000000..935ea9f0ec39
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/dataContract.json
@@ -0,0 +1,424 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/data/dataContract.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DataContract",
+ "$comment": "@om-entity-type",
+ "description": "A `DataContract` entity defines the schema and quality guarantees for a data asset.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.data.DataContract",
+ "javaInterfaces": ["org.openmetadata.schema.EntityInterface"],
+ "definitions": {
+ "contractStatus": {
+ "javaType": "org.openmetadata.schema.type.ContractStatus",
+ "description": "Status of the data contract.",
+ "type": "string",
+ "enum": ["Draft", "Active", "Deprecated"],
+ "javaEnums": [
+ {
+ "name": "Draft"
+ },
+ {
+ "name": "Active"
+ },
+ {
+ "name": "Deprecated"
+ }
+ ]
+ },
+ "contractUpdate": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.ContractUpdate",
+ "description": "Record of updates to the data contract.",
+ "properties": {
+ "timestamp": {
+ "description": "Timestamp when the contract was updated.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who updated the contract.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "changeDescription": {
+ "description": "Description of changes made to the contract.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "version": {
+ "description": "Version number of the contract after the update.",
+ "type": "string"
+ }
+ },
+ "required": ["timestamp", "updatedBy", "version"],
+ "additionalProperties": false
+ },
+ "rowFilter": {
+ "type": "object",
+ "description": "Filter that defines what subset of the data is accessible to certain consumers",
+ "properties": {
+ "columnName": {
+ "type": "string",
+ "title": "Column Name",
+ "description": "Column to apply the filter"
+ },
+ "values": {
+ "type": "array",
+ "title": "Filter Values",
+ "description": "Values applied to the filter",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "policy": {
+ "type": "object",
+ "description": "Intended consumers of the data (e.g. internal teams, external partners, etc.)",
+ "properties": {
+ "accessPolicy": {
+ "type": "string",
+ "title": "Access Policy",
+ "description": "Reference to an access policy ID or name that should govern this data"
+ },
+ "identities": {
+ "type": "array",
+ "title": "Consumer AD Groups",
+ "description": "List of groups that are intended consumers of the data",
+ "items": {
+ "type": "string"
+ },
+ "default": null
+ },
+ "rowFilters": {
+ "type": "array",
+ "title": "Row Data Filters",
+ "description": "List of filters that define what subset of the data is accessible to the consumers",
+ "items": {
+ "$ref": "#/definitions/rowFilter"
+ },
+ "default": null
+ }
+ }
+ },
+ "contractSecurity": {
+ "type": "object",
+ "description": "Security and access policy expectations",
+ "properties": {
+ "inherited": {
+ "description": "If the property is inherited from the Data Product",
+ "type": "boolean"
+ },
+ "dataClassification": {
+ "type": "string",
+ "title": "Data Classification",
+ "description": "Expected data classification (e.g. Confidential, PII, etc.)"
+ },
+ "policies": {
+ "type": "array",
+ "title": "Data Consumers",
+ "description": "Intended consumers of the data (e.g. internal teams, external partners, etc.)",
+ "items": {
+ "$ref": "#/definitions/policy"
+ }
+ }
+ }
+ },
+ "contractSLA": {
+ "type": "object",
+ "description": "Service Level Agreement expectations (timeliness, availability, etc.)",
+ "properties": {
+ "inherited": {
+ "description": "If the property is inherited from the Data Product",
+ "type": "boolean"
+ },
+ "refreshFrequency": {
+ "type": "object",
+ "title": "Refresh Frequency",
+ "properties": {
+ "interval": { "type": "integer" },
+ "unit": { "type": "string", "enum": ["hour", "day", "week", "month", "year"] }
+ },
+ "description": "Expected frequency of data updates (e.g. every 1 day)",
+ "required": ["interval", "unit"]
+ },
+ "maxLatency": {
+ "type": "object",
+ "title": "Maximum Latency",
+ "properties": {
+ "value": { "type": "integer" },
+ "unit": { "type": "string", "enum": ["minute", "hour", "day"] }
+ },
+ "description": "Maximum acceptable latency between data generation and availability (e.g. 4 hours)",
+ "required": ["value", "unit"]
+ },
+ "availabilityTime": {
+ "title": "Availability Time",
+ "type": "string",
+ "description": "Time of day by which data is expected to be available (e.g. \"09:00 UTC\")"
+ },
+ "timezone": {
+ "type": "string",
+ "title": "Timezone",
+ "description": "Timezone for the availability time. UTC by default.",
+ "enum": [
+ "GMT-11:00 (Pacific/Niue)",
+ "GMT-10:00 (Pacific/Honolulu)",
+ "GMT-09:30 (Pacific/Marquesas)",
+ "GMT-09:00 (America/Anchorage)",
+ "GMT-08:00 (America/Los Angeles)",
+ "GMT-07:00 (America/Denver)",
+ "GMT-06:00 (America/Chicago)",
+ "GMT-05:00 (America/New York)",
+ "GMT-04:00 (America/Santiago)",
+ "GMT-03:00 (America/Sao Paulo)",
+ "GMT-02:30 (Atlantic/Newfoundland)",
+ "GMT-02:00 (Atlantic/South_Georgia)",
+ "GMT-01:00 (Atlantic/Azores)",
+ "GMT+00:00 (Europe/London)",
+ "GMT+01:00 (Europe/Paris)",
+ "GMT+02:00 (Europe/Athens)",
+ "GMT+03:00 (Europe/Moscow)",
+ "GMT+03:00 (Asia/Iran)",
+ "GMT+04:00 (Asia/Dubai)",
+ "GMT+04:30 (Asia/Afghanistan)",
+ "GMT+05:00 (Asia/Karachi)",
+ "GMT+05:30 (Asia/Kolkata)",
+ "GMT+05:45 (Asia/Nepal)",
+ "GMT+06:00 (Asia/Dhaka)",
+ "GMT+06:00 (Asia/Myanmar)",
+ "GMT+07:00 (Asia/Bangkok)",
+ "GMT+08:00 (Asia/Shanghai)",
+ "GMT+08:45 (Australia/Australian Central Western Standard Time)",
+ "GMT+09:00 (Asia/Tokyo)",
+ "GMT+09:00 (Australia/Adelaide)",
+ "GMT+10:00 (Australia/Sydney)",
+ "GMT+10:30 (Australia/Lord Howe)",
+ "GMT+11:00 (Pacific/Norfolk)",
+ "GMT+12:00 (Pacific/Auckland)",
+ "GMT+13:00 (Pacific/Tongatapu)",
+ "GMT+14:00 (Pacific/Kiritimati)"
+ ],
+ "default": "GMT+00:00 (Europe/London)"
+ },
+ "retention": {
+ "type": "object",
+ "title": "Data Retention Period",
+ "properties": {
+ "period": { "type": "integer" },
+ "unit": { "type": "string", "enum": ["day", "week", "month", "year"] }
+ },
+ "description": "How long the data is retained (if relevant)",
+ "required": ["period", "unit"]
+ },
+ "columnName": {
+ "type": "string",
+ "title": "Column Name",
+ "description": "Column that represents the refresh time of the data (if applicable)"
+ }
+ }
+ },
+ "termsOfUse": {
+ "type": "object",
+ "description": "Terms of use for the data contract for both human and AI agents consumption.",
+ "properties": {
+ "content": {
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "inherited": {
+ "description": "If the property is inherited from the Data Product",
+ "type": "boolean"
+ }
+ }
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier of this data contract instance.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name of the data contract.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display name of the data contract.",
+ "type": "string"
+ },
+ "fullyQualifiedName": {
+ "description": "Fully qualified name of the data contract.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "description": {
+ "description": "Description of the data contract.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "createdAt": {
+ "description": "Timestamp in Unix epoch time milliseconds corresponding to when the data contract was created.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "createdBy": {
+ "description": "User or Bot who created the data contract.",
+ "type": "string"
+ },
+ "href": {
+ "description": "Link to this data contract resource.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "entityStatus": {
+ "description": "Approval status of the data contract.",
+ "$ref": "../../type/status.json",
+ "default": "Draft"
+ },
+ "entity": {
+ "description": "Reference to the data entity (table, topic, etc.) this contract applies to.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "testSuite": {
+ "description": "Reference to the test suite that contains tests related to this data contract.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "schema": {
+ "description": "Schema definition for the data contract.",
+ "type": "array",
+ "items": {
+ "$ref": "./table.json#/definitions/column"
+ },
+ "default": null
+
+ },
+ "semantics": {
+ "description": "Semantics rules defined in the data contract.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/basic.json#/definitions/semanticsRule"
+ },
+ "default": null
+ },
+ "termsOfUse": {
+ "description": "Terms of use for the data contract for both human and AI agents consumption.",
+ "$ref": "#/definitions/termsOfUse",
+ "default": null
+ },
+ "security": {
+ "title": "Contract Security",
+ "description": "Security and access policy expectations defined in the data contract.",
+ "$ref": "#/definitions/contractSecurity",
+ "default": null
+ },
+ "sla": {
+ "title": "Contract SLA",
+ "description": "Service Level Agreement expectations defined in the data contract.",
+ "$ref": "#/definitions/contractSLA",
+ "default": null
+ },
+ "qualityExpectations": {
+ "description": "Quality expectations defined in the data contract.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/entityReference.json"
+ },
+ "default": null
+ },
+ "odcsQualityRules": {
+ "description": "ODCS quality rules stored during import for round-trip compatibility with ODCS export.",
+ "type": "array",
+ "items": {
+ "$ref": "../datacontract/odcs/odcsDataContract.json#/definitions/odcsQualityRule"
+ },
+ "default": null
+ },
+ "contractUpdates": {
+ "description": "History of updates to the data contract.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/contractUpdate"
+ },
+ "default": null
+ },
+ "owners": {
+ "description": "Owners of this data contract.",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "reviewers": {
+ "description": "User references of the reviewers for this data contract.",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "effectiveFrom": {
+ "description": "Date from which this data contract is effective.",
+ "$ref": "../../type/basic.json#/definitions/dateTime",
+ "default": null
+ },
+ "effectiveUntil": {
+ "description": "Date until which this data contract is effective.",
+ "$ref": "../../type/basic.json#/definitions/dateTime",
+ "default": null
+ },
+ "changeDescription": {
+ "description": "Change that led to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Incremental change description of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "sourceUrl": {
+ "description": "Source URL of the data contract.",
+ "$ref": "../../type/basic.json#/definitions/sourceUrl"
+ },
+ "latestResult": {
+ "description": "Latest validation result for this data contract.",
+ "type": "object",
+ "properties": {
+ "timestamp": {
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "status": {
+ "$ref": "../../type/contractExecutionStatus.json"
+ },
+ "message": {
+ "type": "string"
+ },
+ "resultId": {
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ }
+ },
+ "additionalProperties": false
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ },
+ "inherited": {
+ "description": "Indicates whether this data contract is inherited from a parent entity.",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "required": ["id", "name", "entity"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/database.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/database.json
new file mode 100644
index 000000000000..960d7d249b0c
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/database.json
@@ -0,0 +1,181 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/data/database.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Database",
+ "$comment": "@om-entity-type",
+ "description": "This schema defines the Database entity. A database also referred to as Database Catalog is a collection of schemas.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.data.Database",
+ "javaInterfaces": ["org.openmetadata.schema.EntityInterface"],
+ "definitions": {
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier that identifies this database instance.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name that identifies the database.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "fullyQualifiedName": {
+ "description": "Name that uniquely identifies a database in the format 'ServiceName.DatabaseName'.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this database.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the database instance.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "dataProducts" : {
+ "description": "List of data products this entity is part of.",
+ "$ref" : "../../type/entityReferenceList.json"
+ },
+ "dataContract": {
+ "description": "Reference to the data contract for this entity.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "tags": {
+ "description": "Tags for this Database.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": []
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this entity.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "owners": {
+ "description": "Owners of this database.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "service": {
+ "description": "Link to the database cluster/service where this database is hosted in.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "serviceType": {
+ "description": "Service type where this database is hosted in.",
+ "$ref": "../services/databaseService.json#/definitions/databaseServiceType"
+ },
+ "location": {
+ "description": "Reference to the Location that contains this database.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "usageSummary": {
+ "description": "Latest usage information for this database.",
+ "$ref": "../../type/usageDetails.json",
+ "default": null
+ },
+ "databaseSchemas": {
+ "description": "References to schemas in the database.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "default": {
+ "description": "Some databases don't support a database/catalog in the hierarchy and use default database. For example, `MySql`. For such databases, set this flag to true to indicate that this is a default database.",
+ "type": "boolean",
+ "default": false
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "retentionPeriod" : {
+ "description": "Retention period of the data in the database. Period is expressed as duration in ISO 8601 format in UTC. Example - `P23DT23H`.",
+ "$ref": "../../type/basic.json#/definitions/duration"
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ },
+ "sourceUrl": {
+ "description": "Source URL of database.",
+ "$ref": "../../type/basic.json#/definitions/sourceUrl"
+ },
+ "domains": {
+ "description": "Domains the Database belongs to. When not set, the Database inherits the domain from the database service it belongs to.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "votes": {
+ "description": "Votes on the entity.",
+ "$ref": "../../type/votes.json"
+ },
+ "lifeCycle": {
+ "description": "Life Cycle properties of the entity",
+ "$ref": "../../type/lifeCycle.json"
+ },
+ "certification": {
+ "$ref": "../../type/assetCertification.json"
+ },
+ "followers": {
+ "description": "Followers of this entity.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "sourceHash": {
+ "description": "Source hash of the entity",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32
+ },
+ "databaseProfilerConfig": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.DatabaseProfilerConfig",
+ "description": "This schema defines the type for Database profile config.",
+ "properties": {
+ "sampleDataCount": {
+ "description": "Number of row of sample data to be generated",
+ "type": "integer",
+ "default": 50,
+ "title": "Sample Data Rows Count"
+ },
+ "sampleDataStorageConfig": {
+ "title": "Storage Config for Sample Data",
+ "$ref": "../services/connections/connectionBasicType.json#/definitions/sampleDataStorageConfig"
+ },
+ "randomizedSample": {
+ "description": "Whether to randomize the sample data or not.",
+ "type": "boolean",
+ "default": true
+ },
+ "profileSampleConfig": {
+ "$ref": "../../type/samplingConfig.json#/definitions/profileSampleConfig"
+ }
+ }
+ },
+ "entityStatus": {
+ "description": "Status of the Database.",
+ "$ref": "../../type/status.json"
+ }
+ },
+ "required": ["id", "name", "service"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/databaseSchema.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/databaseSchema.json
new file mode 100644
index 000000000000..f9bb9e6f1ba6
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/databaseSchema.json
@@ -0,0 +1,177 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/data/databaseSchema.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Database Schema",
+ "$comment": "@om-entity-type",
+ "description": "This schema defines the Database Schema entity. A `Database Schema` is collection of tables, views, stored procedures, and other database objects.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.data.DatabaseSchema",
+ "javaInterfaces": ["org.openmetadata.schema.EntityInterface"],
+"definitions": {
+
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier that identifies this schema instance.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name that identifies the schema.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "fullyQualifiedName": {
+ "description": "Name that uniquely identifies a schema in the format 'ServiceName.DatabaseName.SchemaName'.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this schema.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the schema instance.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "dataProducts" : {
+ "description": "List of data products this entity is part of.",
+ "$ref" : "../../type/entityReferenceList.json"
+ },
+ "dataContract": {
+ "description": "Reference to the data contract for this entity.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this entity.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "owners": {
+ "description": "Owner of this schema.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "service": {
+ "description": "Link to the database cluster/service where this schema is hosted in.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "serviceType": {
+ "description": "Service type where this schema is hosted in.",
+ "$ref": "../services/databaseService.json#/definitions/databaseServiceType"
+ },
+ "database": {
+ "description": "Reference to Database that contains this table.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "tables": {
+ "description": "References to tables in the schema.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "usageSummary": {
+ "description": "Latest usage information for this database.",
+ "$ref": "../../type/usageDetails.json",
+ "default": null
+ },
+ "tags": {
+ "description": "Tags for this Database Schema Service.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": []
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "retentionPeriod" : {
+ "description": "Retention period of the data in the database schema. Period is expressed as duration in ISO 8601 format in UTC. Example - `P23DT23H`. When not set, the retention period is inherited from the parent database, if it exists.",
+ "$ref": "../../type/basic.json#/definitions/duration"
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ },
+ "sourceUrl": {
+ "description": "Source URL of database schema.",
+ "$ref": "../../type/basic.json#/definitions/sourceUrl"
+ },
+ "domains": {
+ "description": "Domains the Database Schema belongs to. When not set, the Schema inherits the domain from the database it belongs to.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "votes": {
+ "description": "Votes on the entity.",
+ "$ref": "../../type/votes.json"
+ },
+ "lifeCycle": {
+ "description": "Life Cycle properties of the entity",
+ "$ref": "../../type/lifeCycle.json"
+ },
+ "followers": {
+ "description": "Followers of this entity.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "certification": {
+ "$ref": "../../type/assetCertification.json"
+ },
+ "sourceHash": {
+ "description": "Source hash of the entity",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32
+ },
+ "databaseSchemaProfilerConfig": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.DatabaseSchemaProfilerConfig",
+ "description": "This schema defines the type for Schema profile config.",
+ "properties": {
+ "sampleDataCount": {
+ "description": "Number of row of sample data to be generated",
+ "type": "integer",
+ "default": 50,
+ "title": "Sample Data Rows Count"
+ },
+ "sampleDataStorageConfig": {
+ "title": "Storage Config for Sample Data",
+ "$ref": "../services/connections/connectionBasicType.json#/definitions/sampleDataStorageConfig"
+ },
+ "randomizedSample": {
+ "description": "Whether to randomize the sample data or not.",
+ "type": "boolean",
+ "default": true
+ },
+ "profileSampleConfig": {
+ "$ref": "../../type/samplingConfig.json#/definitions/profileSampleConfig"
+ }
+ }
+ },
+ "entityStatus": {
+ "description": "Status of the DatabaseSchema.",
+ "$ref": "../../type/status.json"
+ }
+ },
+ "required": ["id", "name", "database", "service"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/directory.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/directory.json
new file mode 100644
index 000000000000..91fdc1b3e24f
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/directory.json
@@ -0,0 +1,196 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/data/directory.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Directory",
+ "$comment": "@om-entity-type",
+ "description": "This schema defines the Directory entity. A Directory is a folder or organizational unit in a Drive Service that can contain files, worksheets, and other directories.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.data.Directory",
+ "javaInterfaces": [
+ "org.openmetadata.schema.EntityInterface"
+ ],
+ "definitions": {
+ "directoryType": {
+ "description": "Type of directory",
+ "javaInterfaces": ["org.openmetadata.schema.EnumInterface"],
+ "type": "string",
+ "enum": [
+ "Root",
+ "MyDrive",
+ "SharedDrive",
+ "TeamDrive",
+ "Folder",
+ "SharePointSite",
+ "SharePointLibrary"
+ ],
+ "javaEnums": [
+ {"name": "Root"},
+ {"name": "MyDrive"},
+ {"name": "SharedDrive"},
+ {"name": "TeamDrive"},
+ {"name": "Folder"},
+ {"name": "SharePointSite"},
+ {"name": "SharePointLibrary"}
+ ]
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier of this directory instance.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name of the directory.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "fullyQualifiedName": {
+ "description": "Fully qualified name of the directory.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this directory.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the directory.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "service": {
+ "description": "Link to the drive service this directory belongs to",
+ "$ref": "../../type/entityReference.json"
+ },
+ "serviceType": {
+ "description": "Type of drive service",
+ "$ref": "../../entity/services/driveService.json#/definitions/driveServiceType"
+ },
+ "parent": {
+ "description": "Parent directory reference",
+ "$ref": "../../type/entityReference.json"
+ },
+ "children": {
+ "description": "Child directories and files",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "directoryType": {
+ "$ref": "#/definitions/directoryType"
+ },
+ "path": {
+ "description": "Full path to the directory",
+ "type": "string"
+ },
+ "isShared": {
+ "description": "Whether this directory is shared",
+ "type": "boolean",
+ "default": false
+ },
+ "numberOfFiles": {
+ "description": "Number of files in this directory",
+ "type": "integer"
+ },
+ "numberOfSubDirectories": {
+ "description": "Number of subdirectories",
+ "type": "integer"
+ },
+ "totalSize": {
+ "description": "Total size of all files in bytes",
+ "type": "integer"
+ },
+ "sourceUrl": {
+ "description": "Link to this directory in the source system.",
+ "$ref": "../../type/basic.json#/definitions/sourceUrl"
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this directory.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "owners": {
+ "description": "Owners of this directory.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "followers": {
+ "description": "Followers of this entity.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "tags": {
+ "description": "Tags associated with this directory.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "domains" : {
+ "description": "Domains the Directory belongs to.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "dataProducts": {
+ "description": "List of data products this entity is part of.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "dataContract": {
+ "description": "Reference to the data contract for this entity.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "lifeCycle": {
+ "description": "Life Cycle of the entity",
+ "$ref": "../../type/lifeCycle.json"
+ },
+ "sourceHash": {
+ "description": "Source hash of the entity",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ },
+ "votes": {
+ "description": "Votes on the entity.",
+ "$ref": "../../type/votes.json"
+ },
+ "certification": {
+ "$ref": "../../type/assetCertification.json"
+ },
+ "usageSummary": {
+ "description": "Latest usage information for this directory.",
+ "$ref": "../../type/usageDetails.json",
+ "default": null
+ },
+ "entityStatus": {
+ "description": "Status of the Directory.",
+ "$ref": "../../type/status.json"
+ }
+ },
+ "required": ["id", "name", "service"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/file.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/file.json
new file mode 100644
index 000000000000..660db0bd264b
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/file.json
@@ -0,0 +1,246 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/data/file.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "File",
+ "$comment": "@om-entity-type",
+ "description": "This schema defines the File entity. A File is a document or resource stored in a Drive Service.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.data.File",
+ "javaInterfaces": [
+ "org.openmetadata.schema.EntityInterface"
+ ],
+ "definitions": {
+ "fileType": {
+ "javaType": "org.openmetadata.schema.type.FileType",
+ "description": "Type of file based on content",
+ "type": "string",
+ "enum": [
+ "Document",
+ "Spreadsheet",
+ "Presentation",
+ "Image",
+ "Video",
+ "Audio",
+ "PDF",
+ "Archive",
+ "Code",
+ "Data",
+ "CSV",
+ "Text",
+ "Other"
+ ],
+ "javaEnums": [
+ {"name": "Document"},
+ {"name": "Spreadsheet"},
+ {"name": "Presentation"},
+ {"name": "Image"},
+ {"name": "Video"},
+ {"name": "Audio"},
+ {"name": "PDF"},
+ {"name": "Archive"},
+ {"name": "Code"},
+ {"name": "Data"},
+ {"name": "CSV"},
+ {"name": "Text"},
+ {"name": "Other"}
+ ]
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier of this file instance.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name of the file.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "fullyQualifiedName": {
+ "description": "Fully qualified name of the file.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this file.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the file.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "service": {
+ "description": "Link to the drive service",
+ "$ref": "../../type/entityReference.json"
+ },
+ "serviceType": {
+ "description": "Type of drive service",
+ "$ref": "../../entity/services/driveService.json#/definitions/driveServiceType"
+ },
+ "directory": {
+ "description": "Parent directory containing this file",
+ "$ref": "../../type/entityReference.json"
+ },
+ "fileType": {
+ "$ref": "#/definitions/fileType"
+ },
+ "mimeType": {
+ "description": "MIME type of the file",
+ "type": "string"
+ },
+ "fileExtension": {
+ "description": "File extension",
+ "type": "string"
+ },
+ "path": {
+ "description": "Full path to the file",
+ "type": "string"
+ },
+ "size": {
+ "description": "File size in bytes",
+ "type": "integer"
+ },
+ "columns": {
+ "description": "Column definitions for structured data files (CSV, etc.)",
+ "type": "array",
+ "items": {
+ "$ref": "../data/table.json#/definitions/column"
+ },
+ "default": null
+ },
+ "sampleData": {
+ "description": "Sample data from the file",
+ "$ref": "../data/table.json#/definitions/tableData"
+ },
+ "checksum": {
+ "description": "File checksum/hash",
+ "type": "string"
+ },
+ "webViewLink": {
+ "description": "Web link to view the file",
+ "type": "string",
+ "format": "uri"
+ },
+ "downloadLink": {
+ "description": "Direct download link",
+ "type": "string",
+ "format": "uri"
+ },
+ "isShared": {
+ "description": "Whether this file is shared",
+ "type": "boolean",
+ "default": false
+ },
+ "fileVersion": {
+ "description": "File version information",
+ "type": "string"
+ },
+ "createdTime": {
+ "description": "File creation timestamp",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "modifiedTime": {
+ "description": "Last modification timestamp",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "lastModifiedBy": {
+ "description": "User who last modified the file",
+ "$ref": "../../type/entityReference.json"
+ },
+ "sourceUrl": {
+ "description": "Link to this file in the source system.",
+ "$ref": "../../type/basic.json#/definitions/sourceUrl"
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this file.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "owners": {
+ "description": "Owners of this file.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "followers": {
+ "description": "Followers of this entity.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "tags": {
+ "description": "Tags associated with this file.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "domains" : {
+ "description": "Domains the File belongs to.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "dataProducts": {
+ "description": "List of data products this entity is part of.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "dataContract": {
+ "description": "Reference to the data contract for this entity.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "lifeCycle": {
+ "description": "Life Cycle of the entity",
+ "$ref": "../../type/lifeCycle.json"
+ },
+ "sourceHash": {
+ "description": "Source hash of the entity",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ },
+ "votes": {
+ "description": "Votes on the entity.",
+ "$ref": "../../type/votes.json"
+ },
+ "certification": {
+ "$ref": "../../type/assetCertification.json"
+ },
+ "usageSummary": {
+ "description": "Latest usage information for this file.",
+ "$ref": "../../type/usageDetails.json",
+ "default": null
+ },
+ "entityStatus": {
+ "description": "Status of the File.",
+ "$ref": "../../type/status.json"
+ }
+ },
+ "required": ["id", "name", "service"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/glossary.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/glossary.json
new file mode 100644
index 000000000000..bba3de364263
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/glossary.json
@@ -0,0 +1,131 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/data/glossary.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Glossary",
+ "description": "This schema defines the Glossary entity. A Glossary is collection of hierarchical GlossaryTerms.",
+ "$comment": "@om-entity-type",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.data.Glossary",
+ "javaInterfaces": ["org.openmetadata.schema.EntityInterface"],
+ "properties": {
+ "id": {
+ "description": "Unique identifier of a glossary instance.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name of the glossary",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "fullyQualifiedName": {
+ "description": "FullyQualifiedName same as name.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this glossary.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the glossary.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this entity.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "reviewers": {
+ "description": "User references of the reviewers for this glossary.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/entityReference.json"
+ }
+ },
+ "owners": {
+ "description": "Owners of this glossary.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "usageCount": {
+ "description": "Count of how many times terms from this glossary are used.",
+ "type": "integer"
+ },
+ "tags": {
+ "description": "Tags for this glossary.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": []
+ },
+ "termCount" : {
+ "description": "Total number of terms in the glossary. This includes all the children in the hierarchy.",
+ "type" : "integer",
+ "minimum": 0
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "provider" : {
+ "$ref": "../../type/basic.json#/definitions/providerType"
+ },
+ "disabled" : {
+ "description": "System glossary can't be deleted. Use this flag to disable them.",
+ "type": "boolean"
+ },
+ "mutuallyExclusive" : {
+ "description" : "Glossary terms that are direct children in this glossary are mutually exclusive. When mutually exclusive is `true` only one term can be used to label an entity. When mutually exclusive is `false`, multiple terms from this group can be used to label an entity.",
+ "type" : "boolean",
+ "default" : "false"
+ },
+ "domains": {
+ "description": "Domains the Glossary belongs to.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "dataProducts": {
+ "description": "List of data products this entity is part of.",
+ "$ref" : "../../type/entityReferenceList.json"
+ },
+ "dataContract": {
+ "description": "Reference to the data contract for this entity.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "votes": {
+ "description": "Votes on the entity.",
+ "$ref": "../../type/votes.json"
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ },
+ "entityStatus": {
+ "description": "Status of the Glossary.",
+ "$ref": "../../type/status.json"
+ }
+ },
+ "required": ["id", "name", "description"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/glossaryTerm.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/glossaryTerm.json
new file mode 100644
index 000000000000..7052226d2d84
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/glossaryTerm.json
@@ -0,0 +1,227 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/data/glossaryTerm.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "GlossaryTerm",
+ "description": "This schema defines te Glossary term entities.",
+ "$comment": "@om-entity-type",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.data.GlossaryTerm",
+ "javaInterfaces": ["org.openmetadata.schema.EntityInterface"],
+ "definitions": {
+ "termReference": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "description": "Name that identifies the source of an external glossary term. Example `HealthCare.gov`.",
+ "type": "string"
+ },
+ "endpoint": {
+ "description": "Name that identifies the source of an external glossary term. Example `HealthCare.gov`.",
+ "type": "string",
+ "format": "uri"
+ }
+ },
+ "additionalProperties": false
+ },
+ "conceptMappingType": {
+ "description": "Type of mapping used to align this term with an external concept.",
+ "type": "string",
+ "enum": [
+ "EXACT_MATCH",
+ "CLOSE_MATCH",
+ "BROAD_MATCH",
+ "NARROW_MATCH",
+ "RELATED_MATCH",
+ "SAME_AS"
+ ]
+ },
+ "conceptMapping": {
+ "description": "Mapping to an external concept (e.g., SKOS concept IRI).",
+ "type": "object",
+ "properties": {
+ "conceptIri": {
+ "description": "External concept IRI to map this glossary term to.",
+ "type": "string",
+ "format": "uri"
+ },
+ "mappingType": {
+ "description": "Type of mapping used for the external concept alignment.",
+ "$ref": "#/definitions/conceptMappingType"
+ },
+ "schemeIri": {
+ "description": "Optional external concept scheme IRI for the mapped concept.",
+ "type": "string",
+ "format": "uri"
+ },
+ "source": {
+ "description": "Optional source label or catalog for the external concept.",
+ "type": "string"
+ }
+ },
+ "required": ["conceptIri", "mappingType"],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier of a glossary term instance.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Preferred name for the glossary term.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this glossary.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the glossary term.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "style": {
+ "$ref": "../../type/basic.json#/definitions/style"
+ },
+ "fullyQualifiedName": {
+ "description": "A unique name that identifies a glossary term. It captures name hierarchy of glossary of terms in the form of `glossaryName.parentTerm.childTerm`.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "synonyms": {
+ "description": "Alternate names that are synonyms or near-synonyms for the glossary term.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ }
+ },
+ "glossary": {
+ "description": "Glossary that this term belongs to.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "parent": {
+ "description": "Parent glossary term that this term is child of. When `null` this term is the root term of the glossary.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "children": {
+ "description": "Other glossary terms that are children of this glossary term.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "relatedTerms": {
+ "description": "Other glossary terms that are related to this glossary term with typed semantic relations.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/termRelation.json"
+ },
+ "default": []
+ },
+ "references": {
+ "description": "Link to a reference from an external glossary.",
+ "type": "array",
+ "items": {
+ "$ref": "../../entity/data/glossaryTerm.json#/definitions/termReference"
+ }
+ },
+ "conceptMappings": {
+ "description": "Optional mappings to external concepts (e.g., SKOS alignments).",
+ "type": "array",
+ "items": {
+ "$ref": "../../entity/data/glossaryTerm.json#/definitions/conceptMapping"
+ },
+ "default": []
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this entity.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "reviewers": {
+ "description": "User names of the reviewers for this glossary.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "owners": {
+ "description": "Owners of this glossary term.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "usageCount": {
+ "description": "Count of how many times this and it's children glossary terms are used as labels.",
+ "type": "integer"
+ },
+ "tags": {
+ "description": "Tags associated with this glossary term. These tags captures relationship of a glossary term with a tag automatically. As an example a glossary term 'User.PhoneNumber' might have an associated tag 'PII.Sensitive'. When 'User.Address' is used to label a column in a table, 'PII.Sensitive' label is also applied automatically due to Associated tag relationship.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": []
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "entityStatus": {
+ "description": "Approval status of the glossary term.",
+ "$ref": "../../type/status.json"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "provider" : {
+ "$ref": "../../type/basic.json#/definitions/providerType"
+ },
+ "disabled" : {
+ "description": "System glossary can't be deleted. Use this flag to disable them.",
+ "type": "boolean"
+ },
+ "mutuallyExclusive" : {
+ "description" : "Glossary terms that are children of this term are mutually exclusive. When mutually exclusive is `true` only one term can be used to label an entity from this group. When mutually exclusive is `false`, multiple terms from this group can be used to label an entity.",
+ "type" : "boolean",
+ "default" : "false"
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ },
+ "domains" : {
+ "description": "Domains the Glossary Term belongs to. When not set, the Glossary TErm inherits the domain from the Glossary it belongs to.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "dataProducts" : {
+ "description": "List of data products this entity is part of.",
+ "$ref" : "../../type/entityReferenceList.json"
+ },
+ "dataContract": {
+ "description": "Reference to the data contract for this entity.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "votes" : {
+ "description": "Votes on the entity.",
+ "$ref": "../../type/votes.json"
+ },
+ "childrenCount": {
+ "description": "Count of immediate children glossary terms.",
+ "type": "integer"
+ }
+ },
+ "required": ["id", "name", "description", "glossary"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/metric.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/metric.json
new file mode 100644
index 000000000000..ddea32d34aaa
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/metric.json
@@ -0,0 +1,230 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/data/metrics.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Metric",
+ "description": "This schema defines the Metrics entity. `Metrics` are measurements computed from data such as `Monthly Active Users`. Some of the metrics that measures used to determine performance against an objective are called KPIs or Key Performance Indicators, such as `User Retention`.",
+ "$comment": "@om-entity-type",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.data.Metric",
+ "javaInterfaces": ["org.openmetadata.schema.EntityInterface"],
+ "definitions": {
+ "metricExpression": {
+ "type": "object",
+ "properties": {
+ "language": {
+ "javaType": "org.openmetadata.schema.type.MetricExpressionLanguage",
+ "description": "This schema defines the type of the language used for Metric Expression Code.",
+ "type": "string",
+ "enum": [
+ "SQL",
+ "Java",
+ "JavaScript",
+ "Python",
+ "External"
+ ],
+ "javaEnums": [
+ {
+ "name": "SQL"
+ },
+ {
+ "name": "Java"
+ },
+ {
+ "name": "JavaScript"
+ },
+ {
+ "name": "Python"
+ },
+ {
+ "name": "External"
+ }
+ ]
+ },
+ "code": {
+ "javaType": "org.openmetadata.schema.type.MetricExpressionCode",
+ "description": "This schema defines the type of the language used for Metric Formula's Code.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "metricType": {
+ "javaType": "org.openmetadata.schema.type.MetricType",
+ "description": "This schema defines the type of Metric.",
+ "type": "string",
+ "enum": [
+ "COUNT",
+ "SUM",
+ "AVERAGE",
+ "RATIO",
+ "PERCENTAGE",
+ "MIN",
+ "MAX",
+ "MEDIAN",
+ "MODE",
+ "STANDARD_DEVIATION",
+ "VARIANCE",
+ "OTHER"
+ ]
+ },
+ "unitOfMeasurement": {
+ "javaType": "org.openmetadata.schema.type.MetricUnitOfMeasurement",
+ "description": "This schema defines the type of Metric's unit of measurement.",
+ "type": "string",
+ "enum": [
+ "COUNT",
+ "DOLLARS",
+ "PERCENTAGE",
+ "TIMESTAMP",
+ "SIZE",
+ "REQUESTS",
+ "EVENTS",
+ "TRANSACTIONS",
+ "OTHER"
+ ]
+ },
+ "metricGranularity": {
+ "javaType": "org.openmetadata.schema.type.MetricGranularity",
+ "description": "This schema defines the type of Metric's granularity.",
+ "type": "string",
+ "enum": [
+ "SECOND",
+ "MINUTE",
+ "HOUR",
+ "DAY",
+ "WEEK",
+ "MONTH",
+ "QUARTER",
+ "YEAR"
+ ]
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier that identifies this Metric instance.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name that identifies this Metric instance uniquely.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "fullyQualifiedName": {
+ "description": "A unique name that identifies a metric in the format 'ServiceName.MetricName'.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this metric.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of metrics instance, what it is, and how to use it.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "metricExpression": {
+ "description": "Expression used to compute the metric.",
+ "$ref": "#/definitions/metricExpression"
+ },
+ "metricType": {
+ "description": "Type of the metric.",
+ "$ref": "#/definitions/metricType"
+ },
+ "unitOfMeasurement": {
+ "description": "Unit of measurement for the metric.",
+ "$ref": "#/definitions/unitOfMeasurement"
+ },
+ "customUnitOfMeasurement": {
+ "description": "Custom unit of measurement when unitOfMeasurement is OTHER.",
+ "type": "string"
+ },
+ "granularity": {
+ "description": "Metric's granularity.",
+ "$ref": "#/definitions/metricGranularity"
+ },
+ "relatedMetrics": {
+ "description": "Related Metrics.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this entity.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "owners": {
+ "description": "Owners of this metrics.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "reviewers": {
+ "description": "Reviewers of this Metric.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "followers": {
+ "description": "Followers of this API Collection.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "tags": {
+ "description": "Tags for this chart.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": []
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "domains": {
+ "description": "Domains the Glossary belongs to.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "dataProducts": {
+ "description": "List of data products this entity is part of.",
+ "$ref" : "../../type/entityReferenceList.json"
+ },
+ "dataContract": {
+ "description": "Reference to the data contract for this entity.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "votes": {
+ "description": "Votes on the entity.",
+ "$ref": "../../type/votes.json"
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ },
+ "certification": {
+ "$ref": "../../type/assetCertification.json"
+ },
+ "entityStatus": {
+ "description": "Status of the Metric.",
+ "$ref": "../../type/status.json"
+ }
+ },
+ "required": ["id", "name"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/mlmodel.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/mlmodel.json
new file mode 100644
index 000000000000..e4942567b703
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/mlmodel.json
@@ -0,0 +1,316 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/data/mlmodel.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "MlModel",
+ "$comment": "@om-entity-type",
+ "description": "This schema defines the Model entity. `Machine Learning Models` are algorithms trained on data to find patterns or make predictions.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.data.MlModel",
+ "javaInterfaces": ["org.openmetadata.schema.EntityInterface"],
+ "definitions": {
+ "featureType": {
+ "javaType": "org.openmetadata.schema.type.MlFeatureDataType",
+ "description": "This enum defines the type of data stored in a ML Feature.",
+ "type": "string",
+ "enum": ["numerical", "categorical"],
+ "javaEnums": [
+ {
+ "name": "Numerical"
+ },
+ {
+ "name": "Categorical"
+ }
+ ]
+ },
+ "featureSourceDataType": {
+ "javaType": "org.openmetadata.schema.type.FeatureSourceDataType",
+ "description": "This enum defines the type of data of a ML Feature source.",
+ "type": "string",
+ "enum": [
+ "integer",
+ "number",
+ "string",
+ "array",
+ "date",
+ "timestamp",
+ "object",
+ "boolean"
+ ]
+ },
+ "featureSource": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.MlFeatureSource",
+ "description": "This schema defines the sources of a ML Feature.",
+ "additionalProperties": false,
+ "properties": {
+ "name": {
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "dataType": {
+ "description": "Data type of the source (int, date etc.).",
+ "$ref": "#/definitions/featureSourceDataType"
+ },
+ "description": {
+ "description": "Description of the feature source.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "fullyQualifiedName": {
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "dataSource": {
+ "description": "Description of the Data Source (e.g., a Table).",
+ "$ref": "../../type/entityReference.json"
+ },
+ "tags": {
+ "description": "Tags associated with the feature source.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": []
+ }
+ }
+ },
+ "mlFeature": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.MlFeature",
+ "description": "This schema defines the type for an ML Feature used in an ML Model.",
+ "additionalProperties": false,
+ "properties": {
+ "name": {
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "dataType": {
+ "description": "Data type of the column (numerical vs. categorical).",
+ "$ref": "#/definitions/featureType"
+ },
+ "description": {
+ "description": "Description of the ML Feature.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "fullyQualifiedName": {
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "featureSources": {
+ "description": "Columns used to create the ML Feature.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/featureSource"
+ },
+ "default": null
+ },
+ "featureAlgorithm": {
+ "description": "Description of the algorithm used to compute the feature, e.g., PCA, bucketing...",
+ "type": "string"
+ },
+ "tags": {
+ "description": "Tags associated with the feature.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ }
+ }
+ },
+ "mlHyperParameter": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.MlHyperParameter",
+ "description": "This schema defines the type for an ML HyperParameter used in an ML Model.",
+ "additionalProperties": false,
+ "properties": {
+ "name": {
+ "description": "Hyper parameter name.",
+ "type": "string"
+ },
+ "value": {
+ "description": "Hyper parameter value.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the Hyper Parameter.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ }
+ }
+ },
+ "mlStore": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.MlStore",
+ "description": "Location containing the ML Model. It can be a storage layer and/or a container repository.",
+ "additionalProperties": false,
+ "properties": {
+ "storage": {
+ "description": "Storage Layer containing the ML Model data.",
+ "type": "string"
+ },
+ "imageRepository": {
+ "description": "Container Repository with the ML Model image.",
+ "type": "string"
+ }
+ }
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier of an ML Model instance.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name that identifies this ML Model.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "fullyQualifiedName": {
+ "description": "A unique name that identifies an ML Model.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this ML Model.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the ML Model, what it is, and how to use it.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "algorithm": {
+ "description": "Algorithm used to train the ML Model.",
+ "type": "string"
+ },
+ "mlFeatures": {
+ "description": "Features used to train the ML Model.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/mlFeature"
+ },
+ "default": null
+ },
+ "mlHyperParameters": {
+ "description": "Hyper Parameters used to train the ML Model.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/mlHyperParameter"
+ },
+ "default": null
+ },
+ "target": {
+ "description": "For supervised ML Models, the value to estimate.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "dashboard": {
+ "description": "Performance Dashboard URL to track metric evolution.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "mlStore": {
+ "description": "Location containing the ML Model. It can be a storage layer and/or a container repository.",
+ "$ref": "#/definitions/mlStore"
+ },
+ "server": {
+ "description": "Endpoint that makes the ML Model available, e.g,. a REST API serving the data or computing predictions.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this entity.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "owners": {
+ "description": "Owners of this ML Model.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "followers": {
+ "description": "Followers of this ML Model.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "tags": {
+ "description": "Tags for this ML Model.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "usageSummary": {
+ "description": "Latest usage information for this ML Model.",
+ "$ref": "../../type/usageDetails.json",
+ "default": null
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "service": {
+ "description": "Link to service where this pipeline is hosted in.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "serviceType": {
+ "description": "Service type where this pipeline is hosted in.",
+ "$ref": "../services/mlmodelService.json#/definitions/mlModelServiceType"
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ },
+ "sourceUrl": {
+ "description": "Source URL of mlModel.",
+ "$ref": "../../type/basic.json#/definitions/sourceUrl"
+ },
+ "domains" : {
+ "description": "Domains the MLModel belongs to. When not set, the MLModel inherits the domain from the ML Model Service it belongs to.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "dataProducts" : {
+ "description": "List of data products this entity is part of.",
+ "$ref" : "../../type/entityReferenceList.json"
+ },
+ "dataContract": {
+ "description": "Reference to the data contract for this entity.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "votes" : {
+ "description": "Votes on the entity.",
+ "$ref": "../../type/votes.json"
+ },
+ "lifeCycle": {
+ "description": "Life Cycle properties of the entity",
+ "$ref": "../../type/lifeCycle.json"
+ },
+ "certification": {
+ "$ref": "../../type/assetCertification.json"
+ },
+ "sourceHash": {
+ "description": "Source hash of the entity",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32
+ },
+ "entityStatus": {
+ "description": "Status of the MlModel.",
+ "$ref": "../../type/status.json"
+ }
+ },
+ "required": ["id", "name", "algorithm", "service"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/pipeline.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/pipeline.json
new file mode 100644
index 000000000000..67106e460959
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/pipeline.json
@@ -0,0 +1,533 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/data/pipeline.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Pipeline",
+ "$comment": "@om-entity-type",
+ "description": "This schema defines the Pipeline entity. A pipeline enables the flow of data from source to destination through a series of processing steps. ETL is a type of pipeline where the series of steps Extract, Transform and Load the data.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.data.Pipeline",
+ "javaInterfaces": ["org.openmetadata.schema.EntityInterface"],
+ "definitions": {
+ "statusType": {
+ "javaType": "org.openmetadata.schema.type.StatusType",
+ "description": "Enum defining the possible Status.",
+ "type": "string",
+ "enum": ["Successful", "Failed", "Pending", "Skipped"],
+ "javaEnums": [
+ {
+ "name": "Successful"
+ },
+ {
+ "name": "Failed"
+ },
+ {
+ "name": "Pending"
+ },
+ {
+ "name": "Skipped"
+ }
+ ]
+ },
+ "pipelineState": {
+ "description": "Enum defining the possible Pipeline State.",
+ "type": "string",
+ "enum": ["Active", "Inactive"],
+ "javaEnums": [
+ {
+ "name": "Active"
+ },
+ {
+ "name": "Inactive"
+ }
+ ]
+ },
+ "taskStatus": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.Status",
+ "description": "This schema defines a time series of the status of a Pipeline or Task.",
+ "properties": {
+ "name": {
+ "description": "Name of the Task.",
+ "type": "string"
+ },
+ "executionStatus": {
+ "description": "Status at a specific execution date.",
+ "$ref": "#/definitions/statusType"
+ },
+ "startTime": {
+ "description": "Task start time",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "endTime": {
+ "description": "Task end time",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "logLink": {
+ "description": "Task end time",
+ "type": "string",
+ "format": "uri"
+ },
+ "taskId": {
+ "description": "Task ID from orchestrator",
+ "type": "string"
+ },
+ "transformationType": {
+ "description": "Type of transformation",
+ "type": "string",
+ "enum": ["filter", "aggregate", "join", "pivot", "custom", "extract", "load"]
+ },
+ "transformationLogic": {
+ "description": "SQL or code executed",
+ "type": "string"
+ },
+ "inputs": {
+ "description": "Task-specific inputs",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/datasetUsage"
+ }
+ },
+ "outputs": {
+ "description": "Task-specific outputs",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/datasetGeneration"
+ }
+ },
+ "metrics": {
+ "$ref": "#/definitions/taskMetrics"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["name", "executionStatus"]
+ },
+ "task": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.Task",
+ "properties": {
+ "name": {
+ "description": "Name that identifies this task instance uniquely.",
+ "type": "string"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this Task. It could be title or label from the pipeline services.",
+ "type": "string"
+ },
+ "fullyQualifiedName": {
+ "description": "A unique name that identifies a pipeline in the format 'ServiceName.PipelineName.TaskName'.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of this Task.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "sourceUrl": {
+ "description": "Task URL to visit/manage. This URL points to respective pipeline service UI.",
+ "$ref": "../../type/basic.json#/definitions/sourceUrl"
+ },
+ "downstreamTasks": {
+ "description": "All the tasks that are downstream of this task.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "default": null
+ },
+ "taskType": {
+ "description": "Type of the Task. Usually refers to the class it implements.",
+ "type": "string"
+ },
+ "taskSQL": {
+ "description": "SQL used in the task. Can be used to determine the lineage.",
+ "$ref": "../../type/basic.json#/definitions/sqlQuery"
+ },
+ "startDate": {
+ "description": "start date for the task.",
+ "type": "string"
+ },
+ "endDate": {
+ "description": "end date for the task.",
+ "type": "string"
+ },
+ "tags": {
+ "description": "Tags for this task.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": []
+ },
+ "owners": {
+ "description": "Owners of this task.",
+ "$ref": "../../type/entityReferenceList.json"
+ }
+ },
+ "required": ["name"],
+ "additionalProperties": false
+ },
+ "pipelineStatus": {
+ "description": "Series of pipeline executions, its status and task status.",
+ "type": "object",
+ "properties": {
+ "timestamp": {
+ "description": "Timestamp where the job was executed.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "executionStatus": {
+ "description": "Status at a specific execution date.",
+ "$ref": "#/definitions/statusType"
+ },
+ "taskStatus": {
+ "description": "Series of task executions and its status.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/taskStatus"
+ },
+ "default": null
+ },
+ "executionId": {
+ "description": "External execution ID from the orchestrator (e.g., Airflow run_id)",
+ "type": "string"
+ },
+ "endTime": {
+ "description": "Execution end time",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "version": {
+ "description": "Pipeline version that was executed",
+ "type": "string"
+ },
+ "parameters": {
+ "description": "Execution parameters/configuration",
+ "type": "object",
+ "additionalProperties": true
+ },
+ "executedBy": {
+ "description": "User or service that triggered the execution",
+ "$ref": "../../type/entityReference.json"
+ },
+ "inputs": {
+ "description": "Input datasets consumed by this execution",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/datasetUsage"
+ }
+ },
+ "outputs": {
+ "description": "Output datasets generated by this execution",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/datasetGeneration"
+ }
+ },
+ "metrics": {
+ "description": "Execution metrics",
+ "$ref": "#/definitions/executionMetrics"
+ },
+ "error": {
+ "description": "Error details if execution failed",
+ "$ref": "#/definitions/executionError"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["timestamp", "executionStatus"]
+ },
+ "datasetUsage": {
+ "type": "object",
+ "properties": {
+ "datasetFQN": {
+ "description": "Fully qualified name of the dataset",
+ "type": "string"
+ },
+ "columns": {
+ "description": "Specific columns used",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "rowCount": {
+ "description": "Number of rows read",
+ "type": "integer"
+ },
+ "sizeBytes": {
+ "description": "Data size in bytes",
+ "type": "integer"
+ },
+ "filter": {
+ "description": "Filter applied when reading",
+ "type": "string"
+ },
+ "version": {
+ "description": "Dataset version/snapshot used",
+ "type": "string"
+ }
+ },
+ "required": ["datasetFQN"]
+ },
+ "datasetGeneration": {
+ "type": "object",
+ "properties": {
+ "datasetFQN": {
+ "description": "Fully qualified name of the dataset",
+ "type": "string"
+ },
+ "columns": {
+ "description": "Columns written/updated",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "rowCount": {
+ "description": "Number of rows written",
+ "type": "integer"
+ },
+ "sizeBytes": {
+ "description": "Data size in bytes",
+ "type": "integer"
+ },
+ "mode": {
+ "description": "Write mode",
+ "type": "string",
+ "enum": ["overwrite", "append", "merge", "upsert"]
+ },
+ "partitions": {
+ "description": "Partitions written",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "version": {
+ "description": "Dataset version created",
+ "type": "string"
+ }
+ },
+ "required": ["datasetFQN"]
+ },
+ "executionMetrics": {
+ "type": "object",
+ "properties": {
+ "totalRowsProcessed": {
+ "type": "integer"
+ },
+ "totalBytesProcessed": {
+ "type": "integer"
+ },
+ "cpuTime": {
+ "description": "CPU time in seconds",
+ "type": "number"
+ },
+ "memoryUsed": {
+ "description": "Peak memory usage in bytes",
+ "type": "integer"
+ },
+ "cost": {
+ "description": "Execution cost if applicable",
+ "type": "number"
+ }
+ }
+ },
+ "taskMetrics": {
+ "type": "object",
+ "properties": {
+ "rowsRead": {
+ "type": "integer"
+ },
+ "rowsWritten": {
+ "type": "integer"
+ },
+ "rowsFiltered": {
+ "type": "integer"
+ },
+ "executionTimeMs": {
+ "type": "integer"
+ }
+ }
+ },
+ "executionError": {
+ "type": "object",
+ "properties": {
+ "errorType": {
+ "type": "string"
+ },
+ "errorMessage": {
+ "type": "string"
+ },
+ "stackTrace": {
+ "type": "string"
+ },
+ "failedTask": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier that identifies a pipeline instance.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name that identifies this pipeline instance uniquely.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this Pipeline. It could be title or label from the source services.",
+ "type": "string"
+ },
+ "fullyQualifiedName": {
+ "description": "A unique name that identifies a pipeline in the format 'ServiceName.PipelineName'.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "description": {
+ "description": "Description of this Pipeline.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "dataProducts" : {
+ "description": "List of data products this entity is part of.",
+ "$ref" : "../../type/entityReferenceList.json"
+ },
+ "dataContract": {
+ "description": "Reference to the data contract for this entity.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "sourceUrl": {
+ "description": "Pipeline URL to visit/manage. This URL points to respective pipeline service UI.",
+ "$ref": "../../type/basic.json#/definitions/sourceUrl"
+ },
+ "concurrency": {
+ "description": "Concurrency of the Pipeline.",
+ "type": "integer"
+ },
+ "pipelineLocation": {
+ "description": "Pipeline Code Location.",
+ "type": "string"
+ },
+ "startDate": {
+ "description": "Start date of the workflow.",
+ "$ref": "../../type/basic.json#/definitions/dateTime"
+ },
+ "endDate": {
+ "description": "End date of the workflow.",
+ "$ref": "../../type/basic.json#/definitions/dateTime"
+ },
+ "tasks": {
+ "description": "All the tasks that are part of pipeline.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/task"
+ },
+ "default": null
+ },
+ "pipelineStatus": {
+ "description": "Latest Pipeline Status.",
+ "$ref": "#/definitions/pipelineStatus",
+ "default": null
+ },
+ "state": {
+ "description": "State of the Pipeline.",
+ "$ref": "#/definitions/pipelineState",
+ "default": null
+ },
+ "followers": {
+ "description": "Followers of this Pipeline.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "tags": {
+ "description": "Tags for this Pipeline.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this entity.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "owners": {
+ "description": "Owners of this pipeline.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "service": {
+ "description": "Link to service where this pipeline is hosted in.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "serviceType": {
+ "description": "Service type where this pipeline is hosted in.",
+ "$ref": "../services/pipelineService.json#/definitions/pipelineServiceType"
+ },
+ "usageSummary": {
+ "description": "Latest usage information for this pipeline.",
+ "$ref": "../../type/usageDetails.json",
+ "default": null
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ },
+ "scheduleInterval": {
+ "description": "Scheduler Interval for the pipeline in cron format.",
+ "type": "string",
+ "default": null
+ },
+ "domains" : {
+ "description": "Domains the Pipeline belongs to. When not set, the pipeline inherits the domain from the Pipeline service it belongs to.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "votes" : {
+ "description": "Votes on the entity.",
+ "$ref": "../../type/votes.json"
+ },
+ "lifeCycle": {
+ "description": "Life Cycle properties of the entity",
+ "$ref": "../../type/lifeCycle.json"
+ },
+ "certification": {
+ "$ref": "../../type/assetCertification.json"
+ },
+ "sourceHash": {
+ "description": "Source hash of the entity",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32
+ },
+ "entityStatus": {
+ "description": "Status of the Pipeline.",
+ "$ref": "../../type/status.json"
+ }
+ },
+ "required": ["id", "name", "service"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/query.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/query.json
new file mode 100644
index 000000000000..a76d32644661
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/query.json
@@ -0,0 +1,147 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/data/Query.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Query",
+ "description": "This schema defines the type to capture any data asset's queries.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.data.Query",
+ "javaInterfaces": ["org.openmetadata.schema.EntityInterface"],
+ "properties": {
+ "id": {
+ "description": "Unique identifier of the query.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name of an entity to which the query belongs to",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "fullyQualifiedName": {
+ "description": "Fully qualified name of a query.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this Query. It could be title or label.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of a query.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the query.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "href": {
+ "description": "Link to this Query resource.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "owners": {
+ "description": "Owners of this Query.",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "duration": {
+ "description": "How long did the query took to run in milliseconds.",
+ "type": "number"
+ },
+ "users": {
+ "description": "List of users who ran this query.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/entityReference.json"
+ },
+ "default": null
+ },
+ "followers": {
+ "description": "Followers of this Query.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "votes" : {
+ "description": "Votes on the entity.",
+ "$ref": "../../type/votes.json"
+ },
+ "query": {
+ "description": "SQL Query definition.",
+ "$ref": "../../type/basic.json#/definitions/sqlQuery"
+ },
+ "query_type": {
+ "description": "SQL query type",
+ "type": "string"
+ },
+ "exclude_usage": {
+ "description": "Flag to check if query is to be excluded while processing usage",
+ "type": "boolean"
+ },
+ "checksum": {
+ "description": "Checksum to avoid registering duplicate queries.",
+ "type": "string"
+ },
+ "queryDate": {
+ "description": "Date on which the query ran.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "usedBy" : {
+ "description": "List of users who ran the query but does not exist in OpenMetadata.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "uniqueItems": true
+ },
+ "tags": {
+ "description": "Tags for this SQL query.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": []
+ },
+ "queryUsedIn": {
+ "description": "Entities that are using this query",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "triggeredBy": {
+ "description": "Entity that triggered the query. E.g., a Stored Procedure or a Pipeline Task.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "processedLineage": {
+ "description": "Flag if this query has already been successfully processed for lineage",
+ "type": "boolean",
+ "default": false
+ },
+ "service": {
+ "description": "Link to the service this query belongs to.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "domains" : {
+ "description": "Domains the asset belongs to. When not set, the asset inherits the domain from the parent it belongs to.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "entityStatus": {
+ "description": "Status of the Query.",
+ "$ref": "../../type/status.json"
+ }
+ },
+ "required": ["id", "name", "query", "service"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/queryCostRecord.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/queryCostRecord.json
new file mode 100644
index 000000000000..8db12cfa569f
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/queryCostRecord.json
@@ -0,0 +1,62 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/data/queryCostRecord.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "QueryCostRecord",
+ "description": "Query Cost Record",
+ "javaType": "org.openmetadata.schema.entity.data.QueryCostRecord",
+ "javaInterfaces": [
+ "org.openmetadata.schema.EntityTimeSeriesInterface"
+ ],
+ "type": "object",
+ "properties": {
+ "id": {
+ "description": "Unique identifier of this failure instance",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "timestamp": {
+ "description": "Timestamp on which the failure was created.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "jsonSchema": {
+ "description": "Json schema of the query",
+ "type": "string"
+ },
+ "queryReference": {
+ "description": "Query entity reference",
+ "$ref": "../../type/entityReference.json"
+ },
+ "cost": {
+ "description": "Avg query cost per execution",
+ "type": "number"
+ },
+ "updatedBy": {
+ "description": "User who updated the query cost record.",
+ "$ref": "../../type/entityReference.json",
+ "default": null
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "updatedAt": {
+ "description": "Time when query cost record was updated.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "count": {
+ "description": "Number of times the query was executed",
+ "type": "number"
+ },
+ "totalDuration": {
+ "description": "Total duration of the query",
+ "type": "number",
+ "default": 0
+ }
+ },
+ "required": [
+ "timestamp",
+ "queryReference",
+ "cost",
+ "count"
+ ],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/queryCostSearchResult.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/queryCostSearchResult.json
new file mode 100644
index 000000000000..1e0645edce01
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/queryCostSearchResult.json
@@ -0,0 +1,103 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/data/queryCostSearchResult.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "QueryCostSearchResult",
+ "description": "Query Cost Search Result",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.data.QueryCostSearchResult",
+ "definitions": {
+ "queryDetails": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.data.QueryDetails",
+ "properties": {
+ "query": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.data.QueryHolder",
+ "additionalProperties": true,
+ "description": "Query information"
+ }
+ },
+ "additionalProperties": true,
+ "description": "Details about the query"
+ },
+ "queryGroup": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.data.QueryGroup",
+ "properties": {
+ "queryText": {
+ "type": "string",
+ "description": "The text of the query"
+ },
+ "users": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "description": "List of users who executed the query"
+ },
+ "totalCost": {
+ "type": "number",
+ "description": "Total cost of all query executions"
+ },
+ "totalCount": {
+ "type": "integer",
+ "description": "Total number of query executions"
+ },
+ "totalDuration": {
+ "type": "number",
+ "description": "Total duration of all query executions"
+ },
+ "avgDuration": {
+ "type": "number",
+ "description": "Average duration per query execution"
+ },
+ "queryDetails": {
+ "$ref": "#/definitions/queryDetails",
+ "description": "Additional query details"
+ }
+ },
+ "required": ["queryText", "users", "totalCost", "totalCount", "totalDuration", "avgDuration", "queryDetails"]
+ },
+ "overallStats": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.data.OverallStats",
+ "properties": {
+ "totalCost": {
+ "type": "number",
+ "description": "Total cost across all queries"
+ },
+ "minCost": {
+ "type": "number",
+ "description": "Minimum cost among all queries"
+ },
+ "maxCost": {
+ "type": "number",
+ "description": "Maximum cost among all queries"
+ },
+ "avgCost": {
+ "type": "number",
+ "description": "Average cost across all queries"
+ },
+ "totalExecutionCount": {
+ "type": "integer",
+ "description": "Total number of query executions"
+ }
+ },
+ "required": ["totalCost", "minCost", "maxCost", "avgCost", "totalExecutionCount"]
+ }
+ },
+ "properties": {
+ "queryGroups": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/queryGroup"
+ },
+ "description": "List of query groups with their metrics"
+ },
+ "overallStats": {
+ "$ref": "#/definitions/overallStats",
+ "description": "Overall statistics across all queries"
+ }
+ },
+ "required": ["queryGroups", "overallStats"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/report.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/report.json
new file mode 100644
index 000000000000..f360cad64342
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/report.json
@@ -0,0 +1,91 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/data/report.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Report",
+ "description": "This schema defines the Report entity. `Reports` are static information computed from data periodically that includes data in text, table, and visual form.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.data.Report",
+ "javaInterfaces": ["org.openmetadata.schema.EntityInterface"],
+ "properties": {
+ "id": {
+ "description": "Unique identifier that identifies this report.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name that identifies this report instance uniquely.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "fullyQualifiedName": {
+ "description": "A unique name that identifies a report in the format 'ServiceName.ReportName'.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this report. It could be title or label from the source services.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of this report instance.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this report.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "owners": {
+ "description": "Owners of this Report.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "service": {
+ "description": "Link to service where this report is hosted in.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "usageSummary": {
+ "description": "Latest usage information for this database.",
+ "$ref": "../../type/usageDetails.json",
+ "default": null
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "votes" : {
+ "description": "Votes on the entity.",
+ "$ref": "../../type/votes.json"
+ },
+ "domains" : {
+ "description": "Domains the asset belongs to. When not set, the asset inherits the domain from the parent it belongs to.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "entityStatus": {
+ "description": "Status of the Report.",
+ "$ref": "../../type/status.json"
+ }
+ },
+ "required": ["id", "name", "service"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/searchIndex.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/searchIndex.json
new file mode 100644
index 000000000000..d35d2e74224c
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/searchIndex.json
@@ -0,0 +1,302 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/data/SearchIndex.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SearchIndex",
+ "$comment": "@om-entity-type",
+ "description": "A `SearchIndex` is a index mapping definition in ElasticSearch or OpenSearch",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.data.SearchIndex",
+ "javaInterfaces": [
+ "org.openmetadata.schema.EntityInterface"
+ ],
+ "definitions": {
+ "searchIndexSettings": {
+ "javaType": "org.openmetadata.schema.type.searchindex.SearchIndexSettings",
+ "description": "Contains key/value pair of SearchIndex Settings.",
+ "type": "object",
+ "additionalProperties": {
+ ".{1,}": {
+ "type": "string"
+ }
+ }
+ },
+ "searchIndexSampleData": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.searchindex.SearchIndexSampleData",
+ "description": "This schema defines the type to capture sample data for a SearchIndex.",
+ "properties": {
+ "messages": {
+ "description": "List of local sample messages for a SearchIndex.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "indexType": {
+ "description": "Whether the entity is index or index template.",
+ "type": "string",
+ "enum": ["Index", "IndexTemplate"],
+ "default": "Index"
+ },
+ "dataType": {
+ "javaType": "org.openmetadata.schema.type.SearchIndexDataType",
+ "description": "This enum defines the type of data stored in a searchIndex.",
+ "type": "string",
+ "enum": [
+ "NUMBER",
+ "TEXT",
+ "BINARY",
+ "TIMESTAMP",
+ "TIMESTAMPZ",
+ "TIME",
+ "DATE",
+ "DATETIME",
+ "KEYWORD",
+ "ARRAY",
+ "OBJECT",
+ "FLATTENED",
+ "NESTED",
+ "JOIN",
+ "RANGE",
+ "IP",
+ "VERSION",
+ "MURMUR3",
+ "AGGREGATE_METRIC_DOUBLE",
+ "HISTOGRAM",
+ "ANNOTATED-TEXT",
+ "COMPLETION",
+ "SEARCH_AS_YOU_TYPE",
+ "DENSE_VECTOR",
+ "RANK_FEATURE",
+ "RANK_FEATURES",
+ "GEO_POINT",
+ "GEO_SHAPE",
+ "POINT",
+ "SHAPE",
+ "PERCOLATOR",
+ "BOOLEAN",
+ "CONSTANT_KEYWORD",
+ "WILDCARD",
+ "LONG",
+ "INTEGER",
+ "SHORT",
+ "BYTE",
+ "DOUBLE",
+ "FLOAT",
+ "HALF_FLOAT",
+ "SCALED_FLOAT",
+ "UNSIGNED_LONG",
+ "UNKNOWN"
+ ]
+ },
+ "searchIndexFieldName": {
+ "description": "Local name (not fully qualified name) of the field. ",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256,
+ "pattern": "^((?!::).)*$"
+ },
+ "searchIndexField": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.SearchIndexField",
+ "javaInterfaces": [
+ "org.openmetadata.schema.FieldInterface"
+ ],
+ "description": "This schema defines the type for a field in a searchIndex.",
+ "properties": {
+ "name": {
+ "$ref": "#/definitions/searchIndexFieldName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this searchIndexField name.",
+ "type": "string"
+ },
+ "dataType": {
+ "description": "Data type of the searchIndex (int, date etc.).",
+ "$ref": "#/definitions/dataType"
+ },
+ "dataTypeDisplay": {
+ "description": "Display name used for dataType. ",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the field.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "fullyQualifiedName": {
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "tags": {
+ "description": "Tags associated with the column.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": []
+ },
+ "children": {
+ "description": "Child columns if dataType has properties.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/searchIndexField"
+ },
+ "default": null
+ }
+ },
+ "required": [
+ "name",
+ "dataType"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier that identifies this SearchIndex instance.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name that identifies the SearchIndex.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "fullyQualifiedName": {
+ "description": "Name that uniquely identifies a SearchIndex in the format 'searchServiceName.searchIndexName'.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this SearchIndex. It could be title or label from the source services.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the SearchIndex instance.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "service": {
+ "description": "Link to the search cluster/service where this SearchIndex is hosted in.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "serviceType": {
+ "description": "Service type where this SearchIndex is hosted in.",
+ "$ref": "../services/searchService.json#/definitions/searchServiceType"
+ },
+ "fields": {
+ "description": "Fields in this SearchIndex.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/searchIndexField"
+ },
+ "default": null
+ },
+ "searchIndexSettings": {
+ "description": "Contains key/value pair of searchIndex settings.",
+ "$ref": "#/definitions/searchIndexSettings"
+ },
+ "indexType": {
+ "description": "Whether the entity is index or index template.",
+ "$ref": "#/definitions/indexType",
+ "default": "Index"
+ },
+ "sampleData": {
+ "description": "Sample data for a searchIndex.",
+ "$ref": "#/definitions/searchIndexSampleData",
+ "default": null
+ },
+
+ "owners": {
+ "description": "Owners of this searchIndex.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "followers": {
+ "description": "Followers of this searchIndex.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "tags": {
+ "description": "Tags for this searchIndex.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this entity.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ },
+ "domains": {
+ "description": "Domains the SearchIndex belongs to. When not set, the SearchIndex inherits the domain from the messaging service it belongs to.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "dataProducts": {
+ "description": "List of data products this entity is part of.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "dataContract": {
+ "description": "Reference to the data contract for this entity.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "votes": {
+ "description": "Votes on the entity.",
+ "$ref": "../../type/votes.json"
+ },
+ "lifeCycle": {
+ "description": "Life Cycle of the entity",
+ "$ref": "../../type/lifeCycle.json"
+ },
+ "certification": {
+ "$ref": "../../type/assetCertification.json"
+ },
+ "sourceHash": {
+ "description": "Source hash of the entity",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32
+ },
+ "entityStatus": {
+ "description": "Status of the SearchIndex.",
+ "$ref": "../../type/status.json"
+ }
+ },
+ "required": [
+ "id",
+ "name",
+ "service",
+ "fields"
+ ],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/spreadsheet.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/spreadsheet.json
new file mode 100644
index 000000000000..89a6d49ff1c0
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/spreadsheet.json
@@ -0,0 +1,202 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/data/spreadsheet.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Spreadsheet",
+ "$comment": "@om-entity-type",
+ "description": "This schema defines the Spreadsheet entity. A Spreadsheet is a file containing multiple worksheets/tabs, such as Google Sheets or Excel files.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.data.Spreadsheet",
+ "javaInterfaces": ["org.openmetadata.schema.EntityInterface"],
+ "definitions": {
+ "spreadsheetMimeType": {
+ "description": "MIME type for spreadsheet files",
+ "javaInterfaces": ["org.openmetadata.schema.EnumInterface"],
+ "type": "string",
+ "enum": [
+ "application/vnd.google-apps.spreadsheet",
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
+ "application/vnd.ms-excel",
+ "application/vnd.oasis.opendocument.spreadsheet",
+ "text/csv",
+ "text/tab-separated-values",
+ "Other"
+ ],
+ "javaEnums": [
+ { "name": "GoogleSheets" },
+ { "name": "ExcelXlsx" },
+ { "name": "ExcelXls" },
+ { "name": "OpenDocument" },
+ { "name": "Csv" },
+ { "name": "Tsv" },
+ { "name": "Other" }
+ ]
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier that identifies this spreadsheet instance.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name that identifies the spreadsheet.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "fullyQualifiedName": {
+ "description": "Name that uniquely identifies a spreadsheet in the format 'ServiceName.DirectoryPath.SpreadsheetName'.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this spreadsheet.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the spreadsheet instance.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "service": {
+ "description": "Link to the drive service where this spreadsheet is hosted.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "serviceType": {
+ "description": "Service type where this spreadsheet is hosted.",
+ "$ref": "../../entity/services/driveService.json#/definitions/driveServiceType"
+ },
+ "directory": {
+ "description": "Reference to Directory that contains this spreadsheet.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "worksheets": {
+ "description": "References to worksheets/tabs in the spreadsheet.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "mimeType": {
+ "description": "MIME type of the spreadsheet file",
+ "$ref": "#/definitions/spreadsheetMimeType"
+ },
+ "path": {
+ "description": "Full path to the spreadsheet file",
+ "type": "string"
+ },
+ "driveFileId": {
+ "description": "Native file ID in the source system",
+ "type": "string"
+ },
+ "size": {
+ "description": "File size in bytes (may be null for cloud-native files like Google Sheets)",
+ "type": "integer"
+ },
+ "fileVersion": {
+ "description": "File version information",
+ "type": "string"
+ },
+ "createdTime": {
+ "description": "Spreadsheet creation timestamp",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "modifiedTime": {
+ "description": "Last modification timestamp",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "lastModifiedBy": {
+ "description": "User who last modified the spreadsheet",
+ "$ref": "../../type/entityReference.json"
+ },
+ "usageSummary": {
+ "description": "Latest usage information for this spreadsheet.",
+ "$ref": "../../type/usageDetails.json",
+ "default": null
+ },
+ "sourceUrl": {
+ "description": "Link to view/edit this spreadsheet in the source system (e.g., Google Sheets URL, SharePoint URL).",
+ "$ref": "../../type/basic.json#/definitions/sourceUrl"
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this spreadsheet.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "owners": {
+ "description": "Owners of this spreadsheet.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "followers": {
+ "description": "Followers of this entity.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "tags": {
+ "description": "Tags associated with this spreadsheet.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "domains": {
+ "description": "Domains the Spreadsheet belongs to.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "dataProducts": {
+ "description": "List of data products this entity is part of.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "dataContract": {
+ "description": "Reference to the data contract for this entity.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "lifeCycle": {
+ "description": "Life Cycle of the entity",
+ "$ref": "../../type/lifeCycle.json"
+ },
+ "sourceHash": {
+ "description": "Source hash of the entity",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ },
+ "votes": {
+ "description": "Votes on the entity.",
+ "$ref": "../../type/votes.json"
+ },
+ "certification": {
+ "$ref": "../../type/assetCertification.json"
+ },
+ "entityStatus": {
+ "description": "Status of the Spreadsheet.",
+ "$ref": "../../type/status.json"
+ }
+ },
+ "required": ["id", "name", "service"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/storedProcedure.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/storedProcedure.json
new file mode 100644
index 000000000000..20ff114ae4f9
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/storedProcedure.json
@@ -0,0 +1,231 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/data/storedProcedure.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "StoredProcedure",
+ "$comment": "@om-entity-type",
+ "description": "A `StoredProcedure` entity that contains the set of code statements with an assigned name and is defined in a `Database Schema`.\"",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.data.StoredProcedure",
+ "javaInterfaces": [
+ "org.openmetadata.schema.EntityInterface"
+ ],
+ "definitions": {
+ "storedProcedureType": {
+ "javaType": "org.openmetadata.schema.type.StoredProcedureType",
+ "description": "This schema defines the type of the type of Procedures",
+ "type": "string",
+ "default": "StoredProcedure",
+ "enum": [
+ "StoredProcedure",
+ "UDF",
+ "StoredPackage",
+ "Function"
+ ],
+ "javaEnums": [
+ {
+ "name": "StoredProcedure"
+ },
+ {
+ "name": "UDF"
+ },
+ {
+ "name": "StoredPackage"
+ },
+ {
+ "name": "Function"
+ }
+ ]
+ },
+ "storedProcedureCode": {
+ "properties": {
+ "language": {
+ "javaType": "org.openmetadata.schema.type.StoredProcedureLanguage",
+ "description": "This schema defines the type of the language used for Stored Procedure's Code.",
+ "type": "string",
+ "enum": [
+ "SQL",
+ "Java",
+ "JavaScript",
+ "Python",
+ "External"
+ ],
+ "javaEnums": [
+ {
+ "name": "SQL"
+ },
+ {
+ "name": "Java"
+ },
+ {
+ "name": "JavaScript"
+ },
+ {
+ "name": "Python"
+ },
+ {
+ "name": "External"
+ }
+ ]
+ },
+ "code": {
+ "javaType": "org.openmetadata.schema.type.StoredProcedureCode",
+ "description": "This schema defines the type of the language used for Stored Procedure's Code.",
+ "type": "string"
+ }
+ }
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier of the StoredProcedure.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name of Stored Procedure.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "fullyQualifiedName": {
+ "description": "Fully qualified name of a Stored Procedure.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this Stored Procedure.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of a Stored Procedure.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "storedProcedureCode": {
+ "description": "Stored Procedure Code.",
+ "$ref": "#/definitions/storedProcedureCode"
+ },
+ "version": {
+ "description": "Metadata version of the Stored Procedure.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "dataProducts": {
+ "description": "List of data products this entity is part of.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "dataContract": {
+ "description": "Reference to the data contract for this entity.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "storedProcedureType": {
+ "description": "Type of the Stored Procedure.",
+ "$ref": "#/definitions/storedProcedureType",
+ "default": "StoredProcedure"
+ },
+ "updatedBy": {
+ "description": "User who made the query.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "href": {
+ "description": "Link to this Query resource.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "databaseSchema": {
+ "description": "Reference to Database Schema that contains this stored procedure.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "database": {
+ "description": "Reference to Database that contains this stored procedure.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "service": {
+ "description": "Link to Database service this table is hosted in.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "serviceType": {
+ "description": "Service type this table is hosted in.",
+ "$ref": "../services/databaseService.json#/definitions/databaseServiceType"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "owners": {
+ "description": "Owners of this Stored Procedure.",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "followers": {
+ "description": "Followers of this Stored Procedure.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "votes": {
+ "description": "Votes on the entity.",
+ "$ref": "../../type/votes.json"
+ },
+ "code": {
+ "description": "SQL Query definition.",
+ "$ref": "../../type/basic.json#/definitions/sqlQuery"
+ },
+ "tags": {
+ "description": "Tags for this SQL query.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": []
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ },
+ "sourceUrl": {
+ "description": "Source URL of database schema.",
+ "$ref": "../../type/basic.json#/definitions/sourceUrl"
+ },
+ "domains": {
+ "description": "Domains the Stored Procedure belongs to. When not set, the Stored Procedure inherits the domain from the database schemna it belongs to.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "lifeCycle": {
+ "description": "Life Cycle properties of the entity",
+ "$ref": "../../type/lifeCycle.json"
+ },
+ "certification": {
+ "$ref": "../../type/assetCertification.json"
+ },
+ "sourceHash": {
+ "description": "Source hash of the entity",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32
+ },
+ "processedLineage": {
+ "description": "Processed lineage for the stored procedure",
+ "type": "boolean",
+ "default": false
+ },
+ "entityStatus": {
+ "description": "Status of the StoredProcedure.",
+ "$ref": "../../type/status.json"
+ }
+ },
+ "required": [
+ "id",
+ "name",
+ "storedProcedureCode"
+ ],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/table.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/table.json
new file mode 100644
index 000000000000..c39ee7b56ba4
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/table.json
@@ -0,0 +1,1339 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/data/table.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Table",
+ "$comment": "@om-entity-type",
+ "description": "A `Table` entity organizes data in rows and columns and is defined in a `Database Schema`.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.data.Table",
+ "javaInterfaces": [
+ "org.openmetadata.schema.EntityInterface",
+ "org.openmetadata.schema.ColumnsEntityInterface"
+ ],
+ "definitions": {
+ "profileSampleType": {
+ "$ref": "../../type/basic.json#/definitions/profileSampleType"
+ },
+ "samplingMethodType": {
+ "$ref": "../../type/basic.json#/definitions/samplingMethodType"
+ },
+ "profileSampleConfig": {
+ "$ref": "../../type/samplingConfig.json#/definitions/profileSampleConfig"
+ },
+ "tableType": {
+ "javaType": "org.openmetadata.schema.type.TableType",
+ "description": "This schema defines the type used for describing different types of tables.",
+ "type": "string",
+ "enum": [
+ "Regular",
+ "External",
+ "Dynamic",
+ "View",
+ "SecureView",
+ "MaterializedView",
+ "Iceberg",
+ "Local",
+ "Partitioned",
+ "Foreign",
+ "Transient",
+ "Stream",
+ "Stage"
+ ],
+ "javaEnums": [
+ {
+ "name": "Regular"
+ },
+ {
+ "name": "External"
+ },
+ {
+ "name": "Dynamic"
+ },
+ {
+ "name": "View"
+ },
+ {
+ "name": "SecureView"
+ },
+ {
+ "name": "MaterializedView"
+ },
+ {
+ "name": "Iceberg"
+ },
+ {
+ "name": "Local"
+ },
+ {
+ "name": "Partitioned"
+ },
+ {
+ "name": "Foreign"
+ },
+ {
+ "name": "Transient"
+ },
+ {
+ "name": "Stream"
+ },
+ {
+ "name": "Stage"
+ }
+ ]
+ },
+ "dataType": {
+ "javaType": "org.openmetadata.schema.type.ColumnDataType",
+ "description": "This enum defines the type of data stored in a column.",
+ "type": "string",
+ "enum": [
+ "NUMBER",
+ "TINYINT",
+ "SMALLINT",
+ "INT",
+ "BIGINT",
+ "BYTEINT",
+ "BYTES",
+ "FLOAT",
+ "DOUBLE",
+ "DECIMAL",
+ "NUMERIC",
+ "TIMESTAMP",
+ "TIMESTAMPZ",
+ "TIME",
+ "DATE",
+ "DATETIME",
+ "INTERVAL",
+ "STRING",
+ "MEDIUMTEXT",
+ "TEXT",
+ "CHAR",
+ "LONG",
+ "VARCHAR",
+ "BOOLEAN",
+ "BINARY",
+ "VARBINARY",
+ "ARRAY",
+ "BLOB",
+ "LONGBLOB",
+ "MEDIUMBLOB",
+ "MAP",
+ "STRUCT",
+ "UNION",
+ "SET",
+ "GEOGRAPHY",
+ "ENUM",
+ "JSON",
+ "UUID",
+ "VARIANT",
+ "GEOMETRY",
+ "BYTEA",
+ "AGGREGATEFUNCTION",
+ "ERROR",
+ "FIXED",
+ "RECORD",
+ "NULL",
+ "SUPER",
+ "HLLSKETCH",
+ "PG_LSN",
+ "PG_SNAPSHOT",
+ "TSQUERY",
+ "TXID_SNAPSHOT",
+ "XML",
+ "MACADDR",
+ "TSVECTOR",
+ "UNKNOWN",
+ "CIDR",
+ "INET",
+ "CLOB",
+ "ROWID",
+ "LOWCARDINALITY",
+ "YEAR",
+ "POINT",
+ "POLYGON",
+ "TUPLE",
+ "SPATIAL",
+ "TABLE",
+ "NTEXT",
+ "IMAGE",
+ "IPV4",
+ "IPV6",
+ "DATETIMERANGE",
+ "HLL",
+ "LARGEINT",
+ "QUANTILE_STATE",
+ "AGG_STATE",
+ "BITMAP",
+ "UINT",
+ "BIT",
+ "MONEY",
+ "MEASURE HIDDEN",
+ "MEASURE VISIBLE",
+ "MEASURE",
+ "KPI",
+ "HEIRARCHY",
+ "HIERARCHYID"
+ ]
+ },
+ "constraint": {
+ "javaType": "org.openmetadata.schema.type.ColumnConstraint",
+ "description": "This enum defines the type for column constraint.",
+ "type": "string",
+ "enum": [
+ "NULL",
+ "NOT_NULL",
+ "UNIQUE",
+ "PRIMARY_KEY"
+ ],
+ "default": null,
+ "additionalProperties": false
+ },
+ "tableConstraint": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.TableConstraint",
+ "title": "TableConstraint",
+ "description": "This enum defines the type for table constraint.",
+ "properties": {
+ "constraintType": {
+ "type": "string",
+ "enum": [
+ "UNIQUE",
+ "PRIMARY_KEY",
+ "FOREIGN_KEY",
+ "SORT_KEY",
+ "DIST_KEY",
+ "CLUSTER_KEY"
+ ]
+ },
+ "columns": {
+ "description": "List of column names corresponding to the constraint.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "referredColumns": {
+ "description": "List of referred columns for the constraint.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "default": null
+ },
+ "relationshipType": {
+ "type": "string",
+ "enum": [
+ "ONE_TO_ONE",
+ "ONE_TO_MANY",
+ "MANY_TO_ONE",
+ "MANY_TO_MANY"
+ ]
+ }
+ },
+ "additionalProperties": false
+ },
+ "columnName": {
+ "description": "Local name (not fully qualified name) of the column. ColumnName is `-` when the column is not named in struct dataType. For example, BigQuery supports struct with unnamed fields.",
+ "type": "string",
+ "minLength": 1,
+ "pattern": "^((?!::).)*$"
+ },
+ "partitionIntervalTypes": {
+ "javaType": "org.openmetadata.schema.type.PartitionIntervalTypes",
+ "description": "type of partition interval",
+ "type": "string",
+ "enum": [
+ "TIME-UNIT",
+ "INTEGER-RANGE",
+ "INGESTION-TIME",
+ "COLUMN-VALUE",
+ "INJECTED",
+ "ENUM",
+ "OTHER"
+ ]
+ },
+ "tablePartition": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.TablePartition",
+ "description": "This schema defines the partition column of a table and format the partition is created.",
+ "properties": {
+ "columns": {
+ "description": "List of column partitions with their type and interval.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/partitionColumnDetails"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "partitionColumnDetails": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.PartitionColumnDetails",
+ "description": "This schema defines the partition column of a table and format the partition is created.",
+ "properties": {
+ "columnName": {
+ "description": "List of column names corresponding to the partition.",
+ "type": "string"
+ },
+ "intervalType": {
+ "$ref": "#/definitions/partitionIntervalTypes"
+ },
+ "interval": {
+ "type": "string",
+ "description": "partition interval , example hourly, daily, monthly."
+ }
+ },
+ "additionalProperties": false
+ },
+ "column": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.Column",
+ "javaInterfaces": [
+ "org.openmetadata.schema.FieldInterface"
+ ],
+ "description": "This schema defines the type for a column in a table.",
+ "properties": {
+ "name": {
+ "$ref": "#/definitions/columnName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this column name.",
+ "type": "string"
+ },
+ "dataType": {
+ "description": "Data type of the column (int, date etc.).",
+ "$ref": "#/definitions/dataType"
+ },
+ "arrayDataType": {
+ "description": "Data type used array in dataType. For example, `array` has dataType as `array` and arrayDataType as `int`.",
+ "$ref": "#/definitions/dataType"
+ },
+ "dataLength": {
+ "description": "Length of `char`, `varchar`, `binary`, `varbinary` `dataTypes`, else null. For example, `varchar(20)` has dataType as `varchar` and dataLength as `20`.",
+ "type": "integer"
+ },
+ "precision": {
+ "description": "The precision of a numeric is the total count of significant digits in the whole number, that is, the number of digits to both sides of the decimal point. Precision is applicable Integer types, such as `INT`, `SMALLINT`, `BIGINT`, etc. It also applies to other Numeric types, such as `NUMBER`, `DECIMAL`, `DOUBLE`, `FLOAT`, etc.",
+ "type": "integer"
+ },
+ "scale": {
+ "description": "The scale of a numeric is the count of decimal digits in the fractional part, to the right of the decimal point. For Integer types, the scale is `0`. It mainly applies to non Integer Numeric types, such as `NUMBER`, `DECIMAL`, `DOUBLE`, `FLOAT`, etc.",
+ "type": "integer"
+ },
+ "dataTypeDisplay": {
+ "description": "Display name used for dataType. This is useful for complex types, such as `array`, `map`, `struct<>`, and union types.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the column.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "fullyQualifiedName": {
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "tags": {
+ "description": "Tags associated with the column.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": []
+ },
+ "constraint": {
+ "description": "Column level constraint.",
+ "$ref": "#/definitions/constraint"
+ },
+ "ordinalPosition": {
+ "description": "Ordinal position of the column.",
+ "type": "integer"
+ },
+ "jsonSchema": {
+ "description": "Json schema only if the dataType is JSON else null.",
+ "type": "string"
+ },
+ "children": {
+ "description": "Child columns if dataType or arrayDataType is `map`, `struct`, or `union` else `null`.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/column"
+ }
+ },
+ "profile": {
+ "description": "Latest Data profile for a Column.",
+ "$ref": "#/definitions/columnProfile",
+ "default": null
+ },
+ "customMetrics": {
+ "description": "List of Custom Metrics registered for a table.",
+ "type": "array",
+ "items": {
+ "$ref": "../../tests/customMetric.json"
+ },
+ "default": null
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ }
+ },
+ "required": [
+ "name",
+ "dataType"
+ ],
+ "additionalProperties": false
+ },
+ "joinedWith": {
+ "description": "Fully qualified names of the fields/entities that this field/entity is joined with.",
+ "type": "object",
+ "properties": {
+ "fullyQualifiedName": {
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "joinCount": {
+ "type": "integer"
+ }
+ },
+ "required": [
+ "fullyQualifiedName",
+ "joinCount"
+ ],
+ "additionalProperties": false
+ },
+ "columnJoins": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.ColumnJoin",
+ "description": "This schema defines the type to capture how frequently a column is joined with columns in the other tables.",
+ "properties": {
+ "columnName": {
+ "$ref": "#/definitions/columnName"
+ },
+ "joinedWith": {
+ "description": "Fully qualified names of the columns that this column is joined with.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/joinedWith"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "tableJoins": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.TableJoins",
+ "description": "This schema defines the type to capture information about how this table is joined with other tables and columns.",
+ "properties": {
+ "startDate": {
+ "description": "Date can be only from today going back to last 29 days.",
+ "$ref": "../../type/basic.json#/definitions/date"
+ },
+ "dayCount": {
+ "type": "integer",
+ "default": 1
+ },
+ "columnJoins": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/columnJoins"
+ }
+ },
+ "directTableJoins": {
+ "description": "Joins with other tables that are not on a specific column (e.g: UNION join)",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/joinedWith"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "tableData": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.TableData",
+ "description": "This schema defines the type to capture rows of sample data for a table.",
+ "properties": {
+ "columns": {
+ "description": "List of local column names (not fully qualified column names) of the table.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/columnName"
+ }
+ },
+ "rows": {
+ "description": "Data for multiple rows of the table.",
+ "type": "array",
+ "items": {
+ "description": "Data for a single row of the table within the same order as columns fields.",
+ "type": "array"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "customMetricProfile": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.CustomMetricProfile",
+ "description": "Profiling results of a Custom Metric.",
+ "properties": {
+ "name": {
+ "description": "Custom metric name.",
+ "type": "string"
+ },
+ "value": {
+ "description": "Profiling results for the metric.",
+ "type": "number"
+ }
+ },
+ "additionalProperties": false
+ },
+ "columnProfile": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.ColumnProfile",
+ "description": "This schema defines the type to capture the table's column profile.",
+ "properties": {
+ "name": {
+ "description": "Column Name.",
+ "type": "string"
+ },
+ "timestamp": {
+ "description": "Timestamp on which profile is taken.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "valuesCount": {
+ "description": "Total count of the values in this column.",
+ "type": "number"
+ },
+ "valuesPercentage": {
+ "description": "Percentage of values in this column with respect to row count.",
+ "type": "number"
+ },
+ "validCount": {
+ "description": "Total count of valid values in this column.",
+ "type": "number"
+ },
+ "duplicateCount": {
+ "description": "No.of Rows that contain duplicates in a column.",
+ "type": "number"
+ },
+ "nullCount": {
+ "description": "No.of null values in a column.",
+ "type": "number"
+ },
+ "nullProportion": {
+ "description": "No.of null value proportion in columns.",
+ "type": "number"
+ },
+ "missingPercentage": {
+ "description": "Missing Percentage is calculated by taking percentage of validCount/valuesCount.",
+ "type": "number"
+ },
+ "missingCount": {
+ "description": "Missing count is calculated by subtracting valuesCount - validCount.",
+ "type": "number"
+ },
+ "uniqueCount": {
+ "description": "No. of unique values in the column.",
+ "type": "number"
+ },
+ "uniqueProportion": {
+ "description": "Proportion of number of unique values in a column.",
+ "type": "number"
+ },
+ "distinctCount": {
+ "description": "Number of values that contain distinct values.",
+ "type": "number"
+ },
+ "distinctProportion": {
+ "description": "Proportion of distinct values in a column.",
+ "type": "number"
+ },
+ "min": {
+ "description": "Minimum value in a column.",
+ "oneOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "integer"
+ },
+ {
+ "$ref": "../../type/basic.json#/definitions/dateTime"
+ },
+ {
+ "$ref": "../../type/basic.json#/definitions/time"
+ },
+ {
+ "$ref": "../../type/basic.json#/definitions/date"
+ },
+ {
+ "type": "string"
+ }
+ ]
+ },
+ "max": {
+ "description": "Maximum value in a column.",
+ "oneOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "integer"
+ },
+ {
+ "$ref": "../../type/basic.json#/definitions/dateTime"
+ },
+ {
+ "$ref": "../../type/basic.json#/definitions/time"
+ },
+ {
+ "$ref": "../../type/basic.json#/definitions/date"
+ },
+ {
+ "type": "string"
+ }
+ ]
+ },
+ "minLength": {
+ "description": "Minimum string length in a column.",
+ "type": "number"
+ },
+ "maxLength": {
+ "description": "Maximum string length in a column.",
+ "type": "number"
+ },
+ "mean": {
+ "description": "Avg value in a column.",
+ "type": "number"
+ },
+ "sum": {
+ "description": "Median value in a column.",
+ "type": "number"
+ },
+ "stddev": {
+ "description": "Standard deviation of a column.",
+ "type": "number"
+ },
+ "variance": {
+ "description": "Variance of a column.",
+ "type": "number"
+ },
+ "median": {
+ "description": "Median of a column.",
+ "type": "number"
+ },
+ "firstQuartile": {
+ "description": "First quartile of a column.",
+ "type": "number"
+ },
+ "thirdQuartile": {
+ "description": "First quartile of a column.",
+ "type": "number"
+ },
+ "interQuartileRange": {
+ "description": "Inter quartile range of a column.",
+ "type": "number"
+ },
+ "nonParametricSkew": {
+ "description": "Non parametric skew of a column.",
+ "type": "number"
+ },
+ "histogram": {
+ "description": "Histogram of a column.",
+ "properties": {
+ "boundaries": {
+ "description": "Boundaries of Histogram.",
+ "type": "array"
+ },
+ "frequencies": {
+ "description": "Frequencies of Histogram.",
+ "type": "array"
+ }
+ },
+ "additionalProperties": false
+ },
+ "customMetrics": {
+ "description": "Custom Metrics profile list bound to a column.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/customMetricProfile"
+ },
+ "default": null
+ },
+ "cardinalityDistribution": {
+ "description": "Cardinality distribution showing top categories with an 'Others' bucket.",
+ "type": "object",
+ "properties": {
+ "categories": {
+ "description": "List of category names including 'Others'.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "counts": {
+ "description": "List of counts corresponding to each category.",
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "percentages": {
+ "description": "List of percentages corresponding to each category.",
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ },
+ "allValuesUnique": {
+ "description": "Flag indicating that all values in the column are unique, so no distribution is calculated.",
+ "type": "boolean"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "required": [
+ "name",
+ "timestamp"
+ ],
+ "additionalProperties": false
+ },
+ "dmlOperationType": {
+ "javaType": "org.openmetadata.schema.type.DmlOperationType",
+ "description": "This schema defines the type of DML operation.",
+ "type": "string",
+ "enum": [
+ "UPDATE",
+ "INSERT",
+ "DELETE",
+ "WRITE"
+ ]
+ },
+ "systemProfile": {
+ "description": "This schema defines the System Profile object holding profile data from system tables.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.SystemProfile",
+ "properties": {
+ "timestamp": {
+ "description": "Timestamp on which profile is taken.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "operation": {
+ "description": "Operation performed.",
+ "$ref": "#/definitions/dmlOperationType"
+ },
+ "rowsAffected": {
+ "description": "Number of rows affected.",
+ "type": "integer"
+ }
+ }
+ },
+ "columnProfilerConfig": {
+ "description": "This schema defines the type for Table profile config include Columns.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.ColumnProfilerConfig",
+ "properties": {
+ "columnName": {
+ "description": "Column Name of the table to be included.",
+ "type": "string"
+ },
+ "metrics": {
+ "description": "Include only following metrics.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "default": null
+ }
+ }
+ },
+ "partitionProfilerConfig": {
+ "description": "This schema defines the partition configuration used by profiler.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.PartitionProfilerConfig",
+ "properties": {
+ "enablePartitioning": {
+ "description": "whether to use partition",
+ "type": "boolean",
+ "default": false
+ },
+ "partitionColumnName": {
+ "description": "name of the column to use for the partition",
+ "type": "string"
+ },
+ "partitionIntervalType": {
+ "$ref": "#/definitions/partitionIntervalTypes"
+ },
+ "partitionInterval": {
+ "description": "The interval to use for the partitioning",
+ "type": "integer"
+ },
+ "partitionIntervalUnit": {
+ "description": "unit used for the partition interval",
+ "type": "string",
+ "enum": [
+ "YEAR",
+ "MONTH",
+ "DAY",
+ "HOUR"
+ ]
+ },
+ "partitionValues": {
+ "description": "unit used for the partition interval",
+ "type": "array"
+ },
+ "partitionIntegerRangeStart": {
+ "description": "start of the integer range for partitioning",
+ "type": "integer",
+ "default": null
+ },
+ "partitionIntegerRangeEnd": {
+ "description": "end of the integer range for partitioning",
+ "type": "integer",
+ "default": null
+ }
+ }
+ },
+ "sparkTableProfilerConfig": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.SparkTableProfilerConfig",
+ "description": "Table Specific configuration for Profiling it with a Spark Engine. It is ignored for other engines.",
+ "properties": {
+ "partitioning": {
+ "type": "object",
+ "description": "When reading big tables from sources, we optimize the reading by partitioning the data. This configuration is responsible for it.",
+ "properties": {
+ "partitionColumn": {
+ "type": "string",
+ "description": "Column to partition on. It should be a date, timestamp or integer column. It is important for the data to be reasonably equally distributed across the partitions.",
+ "default": null
+ },
+ "lowerBound": {
+ "type": "string",
+ "description": "Lower bound of the partition range. If not provided, it will be fetched from the source.",
+ "default": null
+ },
+ "upperBound": {
+ "type": "string",
+ "description": "Upper bound of the partition range. If not provided, it will be fetched from the source.",
+ "default": null
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "partitionColumn"
+ ]
+ }
+ },
+ "additionalProperties": false
+ },
+ "tableProfilerConfig": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.TableProfilerConfig",
+ "description": "This schema defines the type for Table profile config.",
+ "properties": {
+ "sampleDataCount": {
+ "description": "Number of sample rows to ingest when 'Generate Sample Data' is enabled",
+ "type": "integer",
+ "default": 50,
+ "title": "Sample Data Rows Count"
+ },
+ "randomizedSample": {
+ "description": "Whether to randomize the sample data or not.",
+ "type": "boolean",
+ "default": false
+ },
+ "profileQuery": {
+ "description": "Users' raw SQL query to fetch sample data and profile the table",
+ "type": "string",
+ "default": null
+ },
+ "excludeColumns": {
+ "description": "column names to exclude from profiling.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "default": null
+ },
+ "includeColumns": {
+ "description": "Only run profiler on included columns with specific metrics.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/columnProfilerConfig"
+ },
+ "default": null
+ },
+ "partitioning": {
+ "description": "Partitioning configuration",
+ "$ref": "#/definitions/partitionProfilerConfig"
+ },
+ "computeTableMetrics": {
+ "description": "Option to turn on/off table metric computation. If enabled, profiler will compute table level metrics.",
+ "type": "boolean",
+ "default": true,
+ "title": "Compute Table Metrics"
+ },
+ "computeColumnMetrics": {
+ "description": "Option to turn on/off column metric computation. If enabled, profiler will compute column level metrics.",
+ "type": "boolean",
+ "default": true,
+ "title": "Compute Column Metrics"
+ },
+ "sparkTableProfilerConfig": {
+ "description": "Table Specific configuration for Profiling it with a Spark Engine. It is ignored for other engines.",
+ "$ref": "#/definitions/sparkTableProfilerConfig",
+ "default": null
+ },
+ "profileSampleConfig": {
+ "$ref": "#/definitions/profileSampleConfig"
+ }
+ }
+ },
+ "tableProfile": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.TableProfile",
+ "description": "This schema defines the type to capture the table's data profile.",
+ "properties": {
+ "timestamp": {
+ "description": "Timestamp on which profile is taken.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "columnCount": {
+ "description": "No.of columns in the table.",
+ "type": "number"
+ },
+ "rowCount": {
+ "description": "No.of rows in the table. This is always executed on the whole table.",
+ "type": "number"
+ },
+ "sizeInByte": {
+ "description": "Table size in GB",
+ "type": "number"
+ },
+ "createDateTime": {
+ "description": "Table creation time.",
+ "type": "string",
+ "format": "date-time"
+ },
+ "customMetrics": {
+ "description": "Custom Metrics profile list bound to a column.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/customMetricProfile"
+ },
+ "default": null
+ },
+ "profileSample": {
+ "description": "Percentage of data or no. of rows we want to execute the profiler and tests on",
+ "type": "number",
+ "default": null
+ },
+ "profileSampleType": {
+ "$ref": "#/definitions/profileSampleType"
+ }
+ },
+ "required": [
+ "timestamp"
+ ],
+ "additionalProperties": false
+ },
+ "modelType": {
+ "$comment": "Currently only DBT and DDL model type is supported",
+ "enum": [
+ "DBT",
+ "DDL"
+ ],
+ "javaEnums": [
+ {
+ "name": "DBT"
+ },
+ {
+ "name": "DDL"
+ }
+ ]
+ },
+ "dataModel": {
+ "description": "This captures information about how the table is modeled. Currently only DBT and DDL model is supported.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.DataModel",
+ "properties": {
+ "modelType": {
+ "$ref": "#/definitions/modelType"
+ },
+ "resourceType": {
+ "description": "Resource Type of the model.",
+ "type": "string"
+ },
+ "dbtSourceProject": {
+ "description": "The DBT project name that served as the source for ingesting this table's metadata and lineage information.",
+ "type": "string",
+ "default": null
+ },
+ "description": {
+ "description": "Description of the Table from the model.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "path": {
+ "description": "Path to sql definition file.",
+ "type": "string"
+ },
+ "rawSql": {
+ "description": "This corresponds to rws SQL from `.sql` in DBT. This might be null when SQL query need not be compiled as done in DBT.",
+ "$ref": "../../type/basic.json#/definitions/sqlQuery"
+ },
+ "sql": {
+ "description": "This corresponds to compile SQL from `.sql` in DBT. In cases where compilation is not necessary, this corresponds to SQL that created the table.",
+ "$ref": "../../type/basic.json#/definitions/sqlQuery"
+ },
+ "upstream": {
+ "description": "Fully qualified name of Models/tables used for in `sql` for creating this table.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "owners": {
+ "description": "Owners of this Table.",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "tags": {
+ "description": "Tags for this data model.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": []
+ },
+ "columns": {
+ "description": "Columns from the schema defined during modeling. In case of DBT, the metadata here comes from `schema.yaml`.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/column"
+ },
+ "default": null
+ },
+ "generatedAt": {
+ "$ref": "../../type/basic.json#/definitions/dateTime"
+ }
+ },
+ "required": [
+ "modelType"
+ ],
+ "additionalProperties": false
+ },
+ "fileFormat": {
+ "description": "File format in case of file/datalake tables.",
+ "type": "string",
+ "enum": [
+ "csv",
+ "csv.gz",
+ "tsv",
+ "avro",
+ "parquet",
+ "pq",
+ "pqt",
+ "parq",
+ "parquet.snappy",
+ "json",
+ "json.gz",
+ "json.zip",
+ "jsonl",
+ "jsonl.gz",
+ "jsonl.zip",
+ "MF4"
+ ]
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier of this table instance.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name of a table. Expected to be unique within a database.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this table. It could be title or label from the source services.",
+ "type": "string"
+ },
+ "fullyQualifiedName": {
+ "description": "Fully qualified name of a table in the form `serviceName.databaseName.tableName`.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "description": {
+ "description": "Description of a table.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "href": {
+ "description": "Link to this table resource.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "tableType": {
+ "$ref": "#/definitions/tableType"
+ },
+ "columns": {
+ "description": "Columns in this table.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/column"
+ }
+ },
+ "tableConstraints": {
+ "description": "Table constraints.",
+ "type": "array",
+ "items": {
+ "title": "TableConstraint",
+ "$ref": "#/definitions/tableConstraint"
+ },
+ "default": null
+ },
+ "tablePartition": {
+ "$ref": "#/definitions/tablePartition"
+ },
+ "owners": {
+ "description": "Owners of this table.",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "databaseSchema": {
+ "description": "Reference to database schema that contains this table.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "database": {
+ "description": "Reference to Database that contains this table.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "service": {
+ "description": "Link to Database service this table is hosted in.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "serviceType": {
+ "description": "Service type this table is hosted in.",
+ "$ref": "../services/databaseService.json#/definitions/databaseServiceType"
+ },
+ "location": {
+ "description": "Reference to the Location that contains this table.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "locationPath": {
+ "description": "Full storage path in case of external and managed tables.",
+ "type": "string",
+ "default": null
+ },
+ "schemaDefinition": {
+ "description": "DDL for Tables and Views",
+ "$ref": "../../type/basic.json#/definitions/sqlQuery"
+ },
+ "tags": {
+ "description": "Tags for this table.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "usageSummary": {
+ "description": "Latest usage information for this table.",
+ "$ref": "../../type/usageDetails.json",
+ "default": null
+ },
+ "followers": {
+ "description": "Followers of this table.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "joins": {
+ "description": "Details of other tables this table is frequently joined with.",
+ "$ref": "#/definitions/tableJoins",
+ "default": null
+ },
+ "sampleData": {
+ "description": "Sample data for a table.",
+ "$ref": "#/definitions/tableData",
+ "default": null
+ },
+ "tableProfilerConfig": {
+ "description": "Table Profiler Config to include or exclude columns from profiling.",
+ "$ref": "#/definitions/tableProfilerConfig"
+ },
+ "customMetrics": {
+ "description": "List of Custom Metrics registered for a table.",
+ "type": "array",
+ "items": {
+ "$ref": "../../tests/customMetric.json"
+ },
+ "default": null
+ },
+ "profile": {
+ "description": "Latest Data profile for a table.",
+ "$ref": "#/definitions/tableProfile",
+ "default": null
+ },
+ "testSuite": {
+ "description": "Executable test suite associated with this table",
+ "$ref": "../../type/entityReference.json"
+ },
+ "dataModel": {
+ "description": "This captures information about how the table is modeled. Currently only DBT model is supported.",
+ "$ref": "#/definitions/dataModel"
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "retentionPeriod": {
+ "description": "Retention period of the data in the table. Period is expressed as duration in ISO 8601 format in UTC. Example - `P23DT23H`. When not set, the retention period is inherited from the parent database schema, if it exists.",
+ "$ref": "../../type/basic.json#/definitions/duration"
+ },
+ "compressionEnabled": {
+ "description": "Indicates whether compression is enabled on this table. Applicable for databases that support compression like Snowflake, TimescaleDB, ClickHouse, BigQuery, Redshift, etc.",
+ "type": "boolean",
+ "default": null
+ },
+ "compressionCodec": {
+ "description": "Compression algorithm/codec used. Examples: LZ4, ZSTD, Snappy, Gorilla, Delta, etc. Database-specific values allowed.",
+ "type": "string",
+ "default": null
+ },
+ "compressionStrategy": {
+ "description": "Compression strategy configuration including segment/partition/order keys",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.CompressionStrategy",
+ "properties": {
+ "compressionType": {
+ "description": "Type of compression: AUTOMATIC (Snowflake/BigQuery), MANUAL (Redshift), POLICY_BASED (TimescaleDB)",
+ "type": "string",
+ "enum": [
+ "AUTOMATIC",
+ "MANUAL",
+ "POLICY_BASED"
+ ],
+ "default": null
+ },
+ "segmentColumns": {
+ "description": "Columns used for segmenting/partitioning compressed data (TimescaleDB segment-by, ClickHouse partition key)",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "default": null
+ },
+ "orderColumns": {
+ "description": "Columns defining sort order within compressed blocks (TimescaleDB order-by, ClickHouse order by)",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "default": null
+ },
+ "compressionLevel": {
+ "description": "Compression level (1-9) for codecs that support it",
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 9,
+ "default": null
+ }
+ },
+ "additionalProperties": false,
+ "default": null
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ },
+ "sourceUrl": {
+ "description": "Source URL of table.",
+ "$ref": "../../type/basic.json#/definitions/sourceUrl"
+ },
+ "domains": {
+ "description": "Domains the asset belongs to. When not set, the asset inherits the domain from the parent it belongs to.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "dataProducts": {
+ "description": "List of data products this entity is part of.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "dataContract": {
+ "description": "Reference to the data contract for this entity.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "fileFormat": {
+ "description": "File format in case of file/datalake tables.",
+ "$ref": "#/definitions/fileFormat"
+ },
+ "votes": {
+ "description": "Votes on the entity.",
+ "$ref": "../../type/votes.json"
+ },
+ "lifeCycle": {
+ "description": "Life Cycle of the entity",
+ "$ref": "../../type/lifeCycle.json"
+ },
+ "certification": {
+ "$ref": "../../type/assetCertification.json"
+ },
+ "sourceHash": {
+ "description": "Source hash of the entity",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32
+ },
+ "processedLineage": {
+ "description": "Processed lineage for the table",
+ "type": "boolean",
+ "default": false
+ },
+ "queries": {
+ "description": "List of queries that are used to create this table.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/basic.json#/definitions/sqlQuery"
+ },
+ "default": null
+ },
+ "pipelineObservability": {
+ "description": "Pipeline observability information for the table. Multiple pipelines can process the same table.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/pipelineObservability.json"
+ },
+ "default": null
+ },
+ "entityStatus": {
+ "description": "Status of the Table.",
+ "$ref": "../../type/status.json"
+ }
+ },
+ "required": [
+ "id",
+ "name",
+ "columns"
+ ],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/topic.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/topic.json
new file mode 100644
index 000000000000..69124aef5d7e
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/topic.json
@@ -0,0 +1,205 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/data/topic.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Topic",
+ "$comment": "@om-entity-type",
+ "description": "A `Topic` is a feed or an event stream in a `Messaging Service` into which publishers publish messages and consumed by consumers.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.data.Topic",
+ "javaInterfaces": ["org.openmetadata.schema.EntityInterface"],
+ "definitions": {
+ "cleanupPolicy": {
+ "javaType": "org.openmetadata.schema.type.topic.CleanupPolicy",
+ "description": "Topic clean up policy. For Kafka - `cleanup.policy` configuration.",
+ "enum": ["delete", "compact"]
+ },
+ "topicConfig": {
+ "javaType": "org.openmetadata.schema.type.topic.TopicConfig",
+ "description": "Contains key/value pair of topic configuration.",
+ "type": "object"
+ },
+ "topicSampleData": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.topic.TopicSampleData",
+ "description": "This schema defines the type to capture sample data for a topic.",
+ "properties": {
+ "messages": {
+ "description": "List of local sample messages for a topic.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier that identifies this topic instance.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name that identifies the topic.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "fullyQualifiedName": {
+ "description": "Name that uniquely identifies a topic in the format 'messagingServiceName.topicName'.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this topic. It could be title or label from the source services.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the topic instance.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "service": {
+ "description": "Link to the messaging cluster/service where this topic is hosted in.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "serviceType": {
+ "description": "Service type where this topic is hosted in.",
+ "$ref": "../services/messagingService.json#/definitions/messagingServiceType"
+ },
+ "messageSchema": {
+ "$ref": "../../type/schema.json"
+ },
+ "partitions": {
+ "description": "Number of partitions into which the topic is divided.",
+ "type": "integer",
+ "minimum": 1
+ },
+ "cleanupPolicies": {
+ "description": "Topic clean up policies. For Kafka - `cleanup.policy` configuration.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/cleanupPolicy"
+ }
+ },
+ "retentionTime": {
+ "description": "Retention time in milliseconds. For Kafka - `retention.ms` configuration.",
+ "type": "number"
+ },
+ "replicationFactor": {
+ "description": "Replication Factor in integer (more than 1).",
+ "type": "integer"
+ },
+ "maximumMessageSize": {
+ "description": "Maximum message size in bytes. For Kafka - `max.message.bytes` configuration.",
+ "type": "integer"
+ },
+ "minimumInSyncReplicas": {
+ "description": "Minimum number replicas in sync to control durability. For Kafka - `min.insync.replicas` configuration.",
+ "type": "integer"
+ },
+ "retentionSize": {
+ "description": "Maximum size of a partition in bytes before old data is discarded. For Kafka - `retention.bytes` configuration.",
+ "type": "number",
+ "default": "-1"
+ },
+ "topicConfig": {
+ "description": "Contains key/value pair of topic configuration.",
+ "$ref": "#/definitions/topicConfig"
+ },
+ "sampleData": {
+ "description": "Sample data for a topic.",
+ "$ref": "#/definitions/topicSampleData",
+ "default": null
+ },
+ "owners": {
+ "description": "Owners of this topic.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "followers": {
+ "description": "Followers of this table.",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "tags": {
+ "description": "Tags for this table.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": []
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this entity.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ },
+ "sourceUrl": {
+ "description": "Source URL of topic.",
+ "$ref": "../../type/basic.json#/definitions/sourceUrl"
+ },
+ "domains" : {
+ "description": "Domains the Topic belongs to. When not set, the Topic inherits the domain from the messaging service it belongs to.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "dataProducts" : {
+ "description": "List of data products this entity is part of.",
+ "$ref" : "../../type/entityReferenceList.json"
+ },
+ "dataContract": {
+ "description": "Reference to the data contract for this entity.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "votes" : {
+ "description": "Votes on the entity.",
+ "$ref": "../../type/votes.json"
+ },
+ "lifeCycle": {
+ "description": "Life Cycle properties of the entity",
+ "$ref": "../../type/lifeCycle.json"
+ },
+ "certification": {
+ "$ref": "../../type/assetCertification.json"
+ },
+ "sourceHash": {
+ "description": "Source hash of the entity",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32
+ },
+ "entityStatus": {
+ "description": "Status of the Topic.",
+ "$ref": "../../type/status.json"
+ }
+ },
+ "required": ["id", "name", "partitions", "service"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/worksheet.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/worksheet.json
new file mode 100644
index 000000000000..8ee2291d2b18
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/data/worksheet.json
@@ -0,0 +1,176 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/data/worksheet.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Worksheet",
+ "$comment": "@om-entity-type",
+ "description": "This schema defines the Worksheet entity. A Worksheet is a tab or sheet within a spreadsheet file (Google Sheets, Excel) that contains structured data.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.data.Worksheet",
+ "javaInterfaces": [
+ "org.openmetadata.schema.EntityInterface"
+ ],
+ "properties": {
+ "id": {
+ "description": "Unique identifier of this worksheet instance.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name of the worksheet.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "fullyQualifiedName": {
+ "description": "Fully qualified name of the worksheet.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this worksheet.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the worksheet.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "spreadsheet": {
+ "description": "Reference to the parent File entity (with fileType=Spreadsheet)",
+ "$ref": "../../type/entityReference.json"
+ },
+ "service": {
+ "description": "Link to the drive service",
+ "$ref": "../../type/entityReference.json"
+ },
+ "serviceType": {
+ "description": "Type of drive service",
+ "$ref": "../../entity/services/driveService.json#/definitions/driveServiceType"
+ },
+ "worksheetId": {
+ "description": "Native worksheet/tab ID",
+ "type": "string"
+ },
+ "index": {
+ "description": "Position/index of the worksheet in the spreadsheet",
+ "type": "integer"
+ },
+ "rowCount": {
+ "description": "Number of rows in the worksheet",
+ "type": "integer"
+ },
+ "columnCount": {
+ "description": "Number of columns in the worksheet",
+ "type": "integer"
+ },
+ "columns": {
+ "description": "Column definitions if structured data",
+ "type": "array",
+ "items": {
+ "$ref": "../data/table.json#/definitions/column"
+ },
+ "default": []
+ },
+ "sampleData": {
+ "description": "Sample data from the worksheet",
+ "$ref": "../data/table.json#/definitions/tableData"
+ },
+ "isHidden": {
+ "description": "Whether the worksheet is hidden",
+ "type": "boolean",
+ "default": false
+ },
+ "sourceUrl": {
+ "description": "Link to this worksheet in the source system.",
+ "$ref": "../../type/basic.json#/definitions/sourceUrl"
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this worksheet.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "owners": {
+ "description": "Owners of this worksheet.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "followers": {
+ "description": "Followers of this entity.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "tags": {
+ "description": "Tags associated with this worksheet.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "domains" : {
+ "description": "Domains the Worksheet belongs to.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "dataProducts": {
+ "description": "List of data products this entity is part of.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "dataContract": {
+ "description": "Reference to the data contract for this entity.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "lifeCycle": {
+ "description": "Life Cycle of the entity",
+ "$ref": "../../type/lifeCycle.json"
+ },
+ "sourceHash": {
+ "description": "Source hash of the entity",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ },
+ "votes": {
+ "description": "Votes on the entity.",
+ "$ref": "../../type/votes.json"
+ },
+ "certification": {
+ "$ref": "../../type/assetCertification.json"
+ },
+ "usageSummary": {
+ "description": "Latest usage information for this worksheet.",
+ "$ref": "../../type/usageDetails.json",
+ "default": null
+ },
+ "entityStatus": {
+ "description": "Status of the Worksheet.",
+ "$ref": "../../type/status.json"
+ }
+ },
+ "required": ["id", "name", "spreadsheet", "service"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/datacontract/contractValidation.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/datacontract/contractValidation.json
new file mode 100644
index 000000000000..ebcf562ad01d
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/datacontract/contractValidation.json
@@ -0,0 +1,34 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/datacontract/contractValidation.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "ContractValidation",
+ "description": "Comprehensive validation result for data contract import operations.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.datacontract.ContractValidation",
+ "properties": {
+ "valid": {
+ "description": "Whether the contract passes all validation checks.",
+ "type": "boolean",
+ "default": true
+ },
+ "schemaValidation": {
+ "description": "Schema field validation results.",
+ "$ref": "schemaValidation.json"
+ },
+ "entityErrors": {
+ "description": "List of entity-level validation errors (e.g., name too long, invalid pattern).",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "constraintErrors": {
+ "description": "List of entity-specific constraint violations (e.g., unsupported entity type, invalid configuration).",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/datacontract/dataContractResult.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/datacontract/dataContractResult.json
new file mode 100644
index 000000000000..1ed4230ef9ea
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/datacontract/dataContractResult.json
@@ -0,0 +1,61 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/datacontract/dataContractResult.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DataContractResult",
+ "description": "Schema to capture data contract execution results over time.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.datacontract.DataContractResult",
+ "javaInterfaces": ["org.openmetadata.schema.EntityTimeSeriesInterface"],
+ "properties": {
+ "id": {
+ "description": "Unique Data Contract validation execution identifier of this data contract result instance.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "dataContractFQN": {
+ "description": "Fully qualified name of the data contract.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "timestamp": {
+ "description": "Timestamp when the data contract was executed.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "contractExecutionStatus": {
+ "description": "Overall status of the contract execution.",
+ "$ref": "../../type/contractExecutionStatus.json"
+ },
+ "result": {
+ "description": "Detailed result of the data contract execution.",
+ "type": "string"
+ },
+ "schemaValidation": {
+ "description": "Schema validation details.",
+ "$ref": "schemaValidation.json",
+ "default": null
+ },
+ "semanticsValidation": {
+ "description": "Semantics validation details.",
+ "$ref": "semanticsValidation.json",
+ "default": null
+ },
+ "qualityValidation": {
+ "description": "Quality expectations validation details.",
+ "$ref": "qualityValidation.json",
+ "default": null
+ },
+ "slaValidation": {
+ "description": "SLA validation details.",
+ "$ref": "slaValidation.json",
+ "default": null
+ },
+ "incidentId": {
+ "description": "Incident ID if the contract execution failed and an incident was created.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "executionTime": {
+ "description": "Time taken to execute the contract validation in milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ }
+ },
+ "required": ["dataContractFQN", "timestamp", "contractExecutionStatus"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/datacontract/odcs/odcsDataContract.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/datacontract/odcs/odcsDataContract.json
new file mode 100644
index 000000000000..203c7598f221
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/datacontract/odcs/odcsDataContract.json
@@ -0,0 +1,850 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/datacontract/odcs/odcsDataContract.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "ODCSDataContract",
+ "description": "Open Data Contract Standard (ODCS) v3.1.0 data contract representation for import/export.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.datacontract.odcs.ODCSDataContract",
+ "definitions": {
+ "odcsApiVersion": {
+ "description": "ODCS API version.",
+ "type": "string",
+ "enum": ["v3.1.0", "v3.0.2", "v3.0.1", "v3.0.0", "v2.2.2", "v2.2.1", "v2.2.0"],
+ "default": "v3.1.0"
+ },
+ "odcsKind": {
+ "description": "Kind of ODCS document.",
+ "type": "string",
+ "enum": ["DataContract"],
+ "default": "DataContract"
+ },
+ "odcsStatus": {
+ "description": "Status of the ODCS data contract.",
+ "type": "string",
+ "enum": ["proposed", "draft", "active", "deprecated", "retired"]
+ },
+ "odcsDescription": {
+ "description": "ODCS description object.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.datacontract.odcs.ODCSDescription",
+ "properties": {
+ "purpose": {
+ "description": "Purpose of the data contract.",
+ "type": "string"
+ },
+ "limitations": {
+ "description": "Limitations of the data.",
+ "type": "string"
+ },
+ "usage": {
+ "description": "Usage guidelines for the data.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": true
+ },
+ "odcsAuthoritativeDefinition": {
+ "description": "External reference link.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.datacontract.odcs.ODCSAuthoritativeDefinition",
+ "properties": {
+ "url": {
+ "description": "URL to the authoritative definition.",
+ "type": "string",
+ "format": "uri"
+ },
+ "name": {
+ "description": "Name of the authoritative definition.",
+ "type": "string"
+ },
+ "type": {
+ "description": "Type of the reference (e.g., documentation, specification).",
+ "type": "string"
+ }
+ },
+ "additionalProperties": true
+ },
+ "odcsLogicalTypeOptions": {
+ "description": "Type-specific options for schema properties.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.datacontract.odcs.ODCSLogicalTypeOptions",
+ "properties": {
+ "format": {
+ "description": "Format specification (e.g., date format, string pattern).",
+ "type": "string"
+ },
+ "minimum": {
+ "description": "Minimum value for numeric types or minimum date.",
+ "type": "number"
+ },
+ "maximum": {
+ "description": "Maximum value for numeric types or maximum date.",
+ "type": "number"
+ },
+ "exclusiveMinimum": {
+ "description": "Exclusive minimum value.",
+ "type": "number"
+ },
+ "exclusiveMaximum": {
+ "description": "Exclusive maximum value.",
+ "type": "number"
+ },
+ "minLength": {
+ "description": "Minimum string length.",
+ "type": "integer"
+ },
+ "maxLength": {
+ "description": "Maximum string length.",
+ "type": "integer"
+ },
+ "pattern": {
+ "description": "Regex pattern for string validation.",
+ "type": "string"
+ },
+ "minItems": {
+ "description": "Minimum array items.",
+ "type": "integer"
+ },
+ "maxItems": {
+ "description": "Maximum array items.",
+ "type": "integer"
+ },
+ "uniqueItems": {
+ "description": "Whether array items must be unique.",
+ "type": "boolean"
+ },
+ "multipleOf": {
+ "description": "Value must be multiple of this number.",
+ "type": "number"
+ },
+ "minProperties": {
+ "description": "Minimum object properties.",
+ "type": "integer"
+ },
+ "maxProperties": {
+ "description": "Maximum object properties.",
+ "type": "integer"
+ },
+ "timezone": {
+ "description": "Whether the timestamp/time defines the timezone or not.",
+ "type": "boolean"
+ },
+ "defaultTimezone": {
+ "description": "Default timezone for timestamp/time types.",
+ "type": "string",
+ "default": "Etc/UTC"
+ }
+ },
+ "additionalProperties": true
+ },
+ "odcsSchemaElement": {
+ "description": "Schema element (object or property).",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.datacontract.odcs.ODCSSchemaElement",
+ "properties": {
+ "name": {
+ "description": "Element identifier (required).",
+ "type": "string"
+ },
+ "physicalName": {
+ "description": "Physical storage name.",
+ "type": "string"
+ },
+ "physicalType": {
+ "description": "Database-specific type.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Element documentation.",
+ "type": "string"
+ },
+ "businessName": {
+ "description": "Business terminology.",
+ "type": "string"
+ },
+ "tags": {
+ "description": "Categorical assignments.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "authoritativeDefinitions": {
+ "description": "External documentation links.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/odcsAuthoritativeDefinition"
+ }
+ },
+ "customProperties": {
+ "description": "Non-standard attributes.",
+ "type": "object",
+ "additionalProperties": true
+ },
+ "dataGranularityDescription": {
+ "description": "Aggregation level details (for objects).",
+ "type": "string"
+ },
+ "primaryKey": {
+ "description": "Whether this is a primary key (for properties).",
+ "type": "boolean",
+ "default": false
+ },
+ "primaryKeyPosition": {
+ "description": "Position in composite primary key (starts from 1).",
+ "type": "integer",
+ "default": -1
+ },
+ "logicalType": {
+ "description": "Logical data type per ODCS v3.1.0 spec.",
+ "type": "string",
+ "enum": ["string", "text", "date", "timestamp", "time", "number", "integer", "decimal", "float", "double", "long", "object", "array", "boolean", "bytes", "null"]
+ },
+ "logicalTypeOptions": {
+ "description": "Type-specific options.",
+ "$ref": "#/definitions/odcsLogicalTypeOptions"
+ },
+ "required": {
+ "description": "Whether null values are allowed.",
+ "type": "boolean",
+ "default": false
+ },
+ "unique": {
+ "description": "Uniqueness constraint.",
+ "type": "boolean",
+ "default": false
+ },
+ "partitioned": {
+ "description": "Partitioning indicator.",
+ "type": "boolean"
+ },
+ "partitionKeyPosition": {
+ "description": "Partition order.",
+ "type": "integer",
+ "default": -1
+ },
+ "classification": {
+ "description": "Data classification tag (e.g., PII, public, internal, restricted, confidential, sensitive).",
+ "type": "string"
+ },
+ "encryptedName": {
+ "description": "Encrypted column reference.",
+ "type": "string"
+ },
+ "transformSourceObjects": {
+ "description": "Source objects list.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "transformLogic": {
+ "description": "Transformation SQL/logic.",
+ "type": "string"
+ },
+ "transformDescription": {
+ "description": "Business transformation summary.",
+ "type": "string"
+ },
+ "examples": {
+ "description": "Sample values.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "criticalDataElement": {
+ "description": "CDE designation.",
+ "type": "boolean"
+ },
+ "properties": {
+ "description": "Nested properties for object types.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/odcsSchemaElement"
+ }
+ },
+ "items": {
+ "description": "Array element schema.",
+ "$ref": "#/definitions/odcsSchemaElement"
+ },
+ "quality": {
+ "description": "Quality rules for this schema element.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/odcsQualityRule"
+ }
+ }
+ },
+ "required": ["name"],
+ "additionalProperties": true
+ },
+ "odcsQualityRule": {
+ "description": "Data quality rule definition.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.datacontract.odcs.ODCSQualityRule",
+ "properties": {
+ "type": {
+ "description": "Quality rule type.",
+ "type": "string",
+ "enum": ["text", "library", "sql", "custom"],
+ "default": "library"
+ },
+ "name": {
+ "description": "Rule identifier.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Rule documentation.",
+ "type": "string"
+ },
+ "rule": {
+ "description": "Library rule name. For type=library, can be one of the standard quality metrics.",
+ "type": "string"
+ },
+ "metric": {
+ "description": "Standard quality metric from library (ODCS 3.1.0).",
+ "$ref": "#/definitions/odcsQualityMetric"
+ },
+ "column": {
+ "description": "Column to apply the rule to.",
+ "type": "string"
+ },
+ "query": {
+ "description": "SQL for type=sql.",
+ "type": "string"
+ },
+ "engine": {
+ "description": "Vendor name (soda, greatExpectations, etc.).",
+ "type": "string"
+ },
+ "implementation": {
+ "description": "Vendor-specific configuration.",
+ "type": "string"
+ },
+ "dimension": {
+ "description": "KPI classification.",
+ "type": "string",
+ "enum": ["accuracy", "completeness", "conformity", "consistency", "coverage", "timeliness", "uniqueness", "ac", "cp", "cf", "cs", "cv", "tm", "uq"]
+ },
+ "severity": {
+ "description": "Impact level designation.",
+ "type": "string"
+ },
+ "businessImpact": {
+ "description": "Failure consequences.",
+ "type": "string"
+ },
+ "unit": {
+ "description": "Measurement unit (rows, percent).",
+ "type": "string"
+ },
+ "mustBe": {
+ "description": "Value must equal.",
+ "type": "number"
+ },
+ "mustNotBe": {
+ "description": "Value must not equal.",
+ "type": "number"
+ },
+ "mustBeGreaterThan": {
+ "description": "Value must be greater than.",
+ "type": "number"
+ },
+ "mustBeGreaterOrEqualTo": {
+ "description": "Value must be greater than or equal to.",
+ "type": "number"
+ },
+ "mustBeLessThan": {
+ "description": "Value must be less than.",
+ "type": "number"
+ },
+ "mustBeLessOrEqualTo": {
+ "description": "Value must be less than or equal to.",
+ "type": "number"
+ },
+ "mustBeBetween": {
+ "description": "Value must be between [min, max].",
+ "type": "array",
+ "items": {
+ "type": "number"
+ },
+ "minItems": 2,
+ "maxItems": 2,
+ "default": null
+ },
+ "mustNotBeBetween": {
+ "description": "Value must not be between [min, max].",
+ "type": "array",
+ "items": {
+ "type": "number"
+ },
+ "minItems": 2,
+ "maxItems": 2,
+ "default": null
+ },
+ "validValues": {
+ "description": "Static value list.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "scheduler": {
+ "description": "Cron or tool name.",
+ "type": "string"
+ },
+ "schedule": {
+ "description": "Schedule expression.",
+ "type": "string"
+ },
+ "customProperties": {
+ "description": "Additional execution properties.",
+ "type": "object",
+ "additionalProperties": true
+ },
+ "authoritativeDefinitions": {
+ "description": "External rule documentation.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/odcsAuthoritativeDefinition"
+ }
+ },
+ "tags": {
+ "description": "Rule categorization.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "additionalProperties": true
+ },
+ "odcsQualityMetric": {
+ "description": "Standard quality metrics library supported by ODCS 3.1.0.",
+ "type": "string",
+ "enum": [
+ "rowCount",
+ "nullValues",
+ "invalidValues",
+ "duplicateValues",
+ "missingValues",
+ "uniqueValues",
+ "distinctValues",
+ "completeness",
+ "freshness"
+ ]
+ },
+ "odcsSupportChannel": {
+ "description": "Support and communication channel.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.datacontract.odcs.ODCSSupportChannel",
+ "properties": {
+ "channel": {
+ "description": "Channel identifier (required).",
+ "type": "string"
+ },
+ "url": {
+ "description": "Access URL (required).",
+ "type": "string",
+ "format": "uri"
+ },
+ "description": {
+ "description": "Channel purpose.",
+ "type": "string"
+ },
+ "tool": {
+ "description": "Channel tool type.",
+ "type": "string",
+ "enum": ["email", "slack", "teams", "discord", "ticket", "other"]
+ },
+ "scope": {
+ "description": "Channel scope.",
+ "type": "string",
+ "enum": ["interactive", "announcements", "issues"]
+ },
+ "invitationUrl": {
+ "description": "Subscription/request URL.",
+ "type": "string",
+ "format": "uri"
+ }
+ },
+ "required": ["channel", "url"],
+ "additionalProperties": true
+ },
+ "odcsPricing": {
+ "description": "Pricing information.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.datacontract.odcs.ODCSPricing",
+ "properties": {
+ "priceAmount": {
+ "description": "Cost per unit.",
+ "type": "number"
+ },
+ "priceCurrency": {
+ "description": "Currency code.",
+ "type": "string"
+ },
+ "priceUnit": {
+ "description": "Unit of measurement (megabyte, gigabyte, etc.).",
+ "type": "string"
+ }
+ },
+ "additionalProperties": true
+ },
+ "odcsTeamMember": {
+ "description": "Team member information.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.datacontract.odcs.ODCSTeamMember",
+ "properties": {
+ "username": {
+ "description": "User identifier/email.",
+ "type": "string"
+ },
+ "name": {
+ "description": "Full name.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Role context.",
+ "type": "string"
+ },
+ "role": {
+ "description": "Job title.",
+ "type": "string"
+ },
+ "dateIn": {
+ "description": "Join date.",
+ "type": "string",
+ "format": "date"
+ },
+ "dateOut": {
+ "description": "Departure date.",
+ "type": "string",
+ "format": "date"
+ },
+ "replacedByUsername": {
+ "description": "Successor identifier.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": true
+ },
+ "odcsRole": {
+ "description": "IAM role definition.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.datacontract.odcs.ODCSRole",
+ "properties": {
+ "role": {
+ "description": "IAM role name (required).",
+ "type": "string"
+ },
+ "description": {
+ "description": "Permissions summary.",
+ "type": "string"
+ },
+ "access": {
+ "description": "Access type.",
+ "type": "string",
+ "enum": ["read", "write", "readWrite"]
+ },
+ "firstLevelApprovers": {
+ "description": "Initial approval authority.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "secondLevelApprovers": {
+ "description": "Secondary approval authority.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "customProperties": {
+ "description": "Additional role attributes.",
+ "type": "object",
+ "additionalProperties": true
+ }
+ },
+ "required": ["role"],
+ "additionalProperties": true
+ },
+ "odcsSlaProperty": {
+ "description": "SLA property definition.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.datacontract.odcs.ODCSSlaProperty",
+ "properties": {
+ "property": {
+ "description": "SLA attribute name (required).",
+ "type": "string"
+ },
+ "value": {
+ "description": "Agreement specification (required).",
+ "type": "string"
+ },
+ "valueExt": {
+ "description": "Extended value.",
+ "type": "string"
+ },
+ "unit": {
+ "description": "Time unit (d/day/days, y/yr/years).",
+ "type": "string"
+ },
+ "element": {
+ "description": "Target element path.",
+ "type": "string"
+ },
+ "driver": {
+ "description": "SLA driver.",
+ "type": "string",
+ "enum": ["regulatory", "analytics", "operational"]
+ }
+ },
+ "required": ["property", "value"],
+ "additionalProperties": true
+ },
+ "odcsServer": {
+ "description": "Server/infrastructure definition.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.datacontract.odcs.ODCSServer",
+ "properties": {
+ "server": {
+ "description": "Server identifier (required).",
+ "type": "string"
+ },
+ "type": {
+ "description": "Technology platform (required).",
+ "type": "string"
+ },
+ "description": {
+ "description": "Server details.",
+ "type": "string"
+ },
+ "environment": {
+ "description": "Environment type.",
+ "type": "string",
+ "enum": ["prod", "preprod", "dev", "uat"]
+ },
+ "roles": {
+ "description": "Access role list.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "host": {
+ "description": "Server hostname.",
+ "type": "string"
+ },
+ "port": {
+ "description": "Server port.",
+ "type": "integer"
+ },
+ "database": {
+ "description": "Database name.",
+ "type": "string"
+ },
+ "schema": {
+ "description": "Schema name.",
+ "type": "string"
+ },
+ "catalog": {
+ "description": "Catalog name.",
+ "type": "string"
+ },
+ "project": {
+ "description": "Cloud project (BigQuery, etc.).",
+ "type": "string"
+ },
+ "dataset": {
+ "description": "Dataset name.",
+ "type": "string"
+ },
+ "account": {
+ "description": "Account identifier.",
+ "type": "string"
+ },
+ "region": {
+ "description": "Cloud region.",
+ "type": "string"
+ },
+ "warehouse": {
+ "description": "Data warehouse name.",
+ "type": "string"
+ },
+ "topic": {
+ "description": "Kafka/messaging topic.",
+ "type": "string"
+ },
+ "stream": {
+ "description": "Stream name.",
+ "type": "string"
+ },
+ "location": {
+ "description": "File location/path.",
+ "type": "string"
+ },
+ "format": {
+ "description": "Data format.",
+ "type": "string"
+ },
+ "delimiter": {
+ "description": "File delimiter.",
+ "type": "string"
+ },
+ "customProperties": {
+ "description": "Non-standard attributes.",
+ "type": "object",
+ "additionalProperties": true
+ }
+ },
+ "required": ["server", "type"],
+ "additionalProperties": true
+ },
+ "odcsCustomProperty": {
+ "description": "Custom property key-value pair.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.datacontract.odcs.ODCSCustomProperty",
+ "properties": {
+ "property": {
+ "description": "Property name (camelCase).",
+ "type": "string"
+ },
+ "value": {
+ "description": "Property value.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": true
+ }
+ },
+ "properties": {
+ "apiVersion": {
+ "description": "ODCS standard version.",
+ "$ref": "#/definitions/odcsApiVersion"
+ },
+ "kind": {
+ "description": "Document type (always 'DataContract').",
+ "$ref": "#/definitions/odcsKind"
+ },
+ "id": {
+ "description": "Unique identifier (UUID recommended).",
+ "type": "string"
+ },
+ "name": {
+ "description": "Contract name.",
+ "type": "string"
+ },
+ "version": {
+ "description": "Current version number.",
+ "type": "string"
+ },
+ "status": {
+ "description": "Contract status.",
+ "$ref": "#/definitions/odcsStatus"
+ },
+ "tenant": {
+ "description": "Primary property association.",
+ "type": "string"
+ },
+ "domain": {
+ "description": "Logical data domain name.",
+ "type": "string"
+ },
+ "dataProduct": {
+ "description": "Data product name.",
+ "type": "string"
+ },
+ "tags": {
+ "description": "Categorical labels.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "description": {
+ "description": "Purpose, limitations, usage details.",
+ "$ref": "#/definitions/odcsDescription"
+ },
+ "authoritativeDefinitions": {
+ "description": "External reference links.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/odcsAuthoritativeDefinition"
+ }
+ },
+ "schema": {
+ "description": "Schema definition with objects and properties.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/odcsSchemaElement"
+ }
+ },
+ "quality": {
+ "description": "Data quality rules.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/odcsQualityRule"
+ }
+ },
+ "support": {
+ "description": "Support channels.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/odcsSupportChannel"
+ }
+ },
+ "price": {
+ "description": "Pricing information.",
+ "$ref": "#/definitions/odcsPricing"
+ },
+ "team": {
+ "description": "Team members.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/odcsTeamMember"
+ }
+ },
+ "roles": {
+ "description": "IAM roles.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/odcsRole"
+ }
+ },
+ "slaDefaultElement": {
+ "description": "Default element for SLA checks.",
+ "type": "string"
+ },
+ "slaProperties": {
+ "description": "SLA specifications.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/odcsSlaProperty"
+ }
+ },
+ "servers": {
+ "description": "Infrastructure and server definitions.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/odcsServer"
+ }
+ },
+ "customProperties": {
+ "description": "Non-standard key-value pairs.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/odcsCustomProperty"
+ }
+ },
+ "contractCreatedTs": {
+ "description": "ISO 8601 UTC creation timestamp.",
+ "type": "string",
+ "format": "date-time"
+ }
+ },
+ "required": ["apiVersion", "kind", "id", "version", "status"],
+ "additionalProperties": true
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/datacontract/qualityValidation.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/datacontract/qualityValidation.json
new file mode 100644
index 000000000000..ece32e53e666
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/datacontract/qualityValidation.json
@@ -0,0 +1,29 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/datacontract/qualityValidation.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "QualityValidation",
+ "description": "Quality validation details for data contract.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.datacontract.QualityValidation",
+ "properties": {
+ "passed": {
+ "description": "Number of quality checks passed.",
+ "type": "integer"
+ },
+ "failed": {
+ "description": "Number of quality checks failed.",
+ "type": "integer"
+ },
+ "total": {
+ "description": "Total number of quality checks.",
+ "type": "integer"
+ },
+ "qualityScore": {
+ "description": "Overall quality score (0-100).",
+ "type": "number",
+ "minimum": 0,
+ "maximum": 100
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/datacontract/schemaValidation.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/datacontract/schemaValidation.json
new file mode 100644
index 000000000000..694d651f4558
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/datacontract/schemaValidation.json
@@ -0,0 +1,44 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/datacontract/schemaValidation.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SchemaValidation",
+ "description": "Schema validation details for data contract.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.datacontract.SchemaValidation",
+ "properties": {
+ "passed": {
+ "description": "Number of schema checks passed.",
+ "type": "integer"
+ },
+ "failed": {
+ "description": "Number of schema checks failed.",
+ "type": "integer"
+ },
+ "total": {
+ "description": "Total number of schema checks.",
+ "type": "integer"
+ },
+ "failedFields": {
+ "description": "List of fields that do not exist in the entity.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "duplicateFields": {
+ "description": "List of field names that appear more than once in the contract schema.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "typeMismatchFields": {
+ "description": "List of fields with data type mismatches between contract and entity (format: 'fieldName: expected TYPE1, got TYPE2').",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/datacontract/semanticsValidation.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/datacontract/semanticsValidation.json
new file mode 100644
index 000000000000..5d0c588acab3
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/datacontract/semanticsValidation.json
@@ -0,0 +1,39 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/datacontract/semanticsValidation.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SemanticsValidation",
+ "description": "Semantics validation details for data contract.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.datacontract.SemanticsValidation",
+ "properties": {
+ "passed": {
+ "description": "Number of semantics rules passed.",
+ "type": "integer"
+ },
+ "failed": {
+ "description": "Number of semantics rules failed.",
+ "type": "integer"
+ },
+ "total": {
+ "description": "Total number of semantics rules.",
+ "type": "integer"
+ },
+ "failedRules": {
+ "description": "List of rules that failed validation.",
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "ruleName": {
+ "type": "string"
+ },
+ "reason": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ }
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/datacontract/slaValidation.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/datacontract/slaValidation.json
new file mode 100644
index 000000000000..37c38cd4474e
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/datacontract/slaValidation.json
@@ -0,0 +1,27 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/datacontract/slaValidation.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SlaValidation",
+ "description": "SLA validation details for data contract.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.datacontract.SlaValidation",
+ "properties": {
+ "refreshFrequencyMet": {
+ "description": "Whether refresh frequency requirement was met.",
+ "type": "boolean"
+ },
+ "latencyMet": {
+ "description": "Whether latency requirement was met.",
+ "type": "boolean"
+ },
+ "availabilityMet": {
+ "description": "Whether availability requirement was met.",
+ "type": "boolean"
+ },
+ "actualLatency": {
+ "description": "Actual latency in milliseconds.",
+ "type": "integer"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/docStore/document.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/docStore/document.json
new file mode 100644
index 000000000000..a985411fff3a
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/docStore/document.json
@@ -0,0 +1,77 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/docStore/document.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Document",
+ "description": "This schema defines Document. A Generic entity to capture any kind of Json Payload.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entities.docStore.Document",
+ "javaInterfaces": ["org.openmetadata.schema.EntityInterface", "org.openmetadata.schema.DocStoreEntityInterface"],
+ "definitions": {
+ "data": {
+ "javaType": "org.openmetadata.schema.entities.docStore.Data",
+ "type": "object",
+ "additionalProperties": true
+ }
+ },
+ "properties": {
+ "id": {
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name of the DocStore",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this column name.",
+ "type": "string"
+ },
+ "fullyQualifiedName": {
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "description": {
+ "description": "Description of the DocStore Entity.",
+ "type": "string"
+ },
+ "entityType": {
+ "description": "Type of the Entity stored in DocStore.",
+ "type": "string"
+ },
+ "data": {
+ "$ref": "#/definitions/data"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this entity.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "domains" : {
+ "description": "Domains the asset belongs to. When not set, the asset inherits the domain from the parent it belongs to.",
+ "$ref": "../../type/entityReferenceList.json"
+ }
+ },
+ "required": ["name","entityType", "fullyQualifiedName", "data"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/domains/dataProduct.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/domains/dataProduct.json
new file mode 100644
index 000000000000..265551f3eb3b
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/domains/dataProduct.json
@@ -0,0 +1,225 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/domains/dataProduct.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DataProduct",
+ "description": "A `Data Product` or `Data as a Product` is a logical unit that contains all components to process and store data for analytical or data-intensive use cases made available to data consumers.",
+ "$comment": "@om-entity-type",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.domains.DataProduct",
+ "javaInterfaces": ["org.openmetadata.schema.EntityInterface"],
+ "definitions": {
+ "lifecycleStage": {
+ "description": "Lifecycle stage of the data product",
+ "type": "string",
+ "enum": ["IDEATION", "DESIGN", "DEVELOPMENT", "TESTING", "PRODUCTION", "DEPRECATED", "RETIRED"],
+ "default": "DEVELOPMENT"
+ },
+ "portType": {
+ "description": "Type of the data product port",
+ "type": "string",
+ "enum": ["INPUT", "OUTPUT"]
+ },
+ "portProtocol": {
+ "description": "Protocol used by the port for data access",
+ "type": "string",
+ "enum": ["REST", "GRPC", "GRAPHQL", "JDBC", "KAFKA", "FILE", "S3", "AZURE_BLOB", "GCS", "WEBHOOK", "CUSTOM"],
+ "default": "REST"
+ },
+ "portFormat": {
+ "description": "Data format supported by the port",
+ "type": "string",
+ "enum": ["JSON", "CSV", "PARQUET", "AVRO", "ORC", "XML", "PROTOBUF", "DELTA", "ICEBERG", "CUSTOM"],
+ "default": "JSON"
+ },
+ "dataProductPort": {
+ "description": "Port definition for data product input/output",
+ "type": "object",
+ "properties": {
+ "name": {
+ "description": "Name of the port",
+ "type": "string"
+ },
+ "displayName": {
+ "description": "Display name of the port",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the port",
+ "type": "string"
+ },
+ "portType": {
+ "$ref": "#/definitions/portType"
+ },
+ "protocol": {
+ "$ref": "#/definitions/portProtocol"
+ },
+ "format": {
+ "$ref": "#/definitions/portFormat"
+ },
+ "endpoint": {
+ "description": "Endpoint URL or connection string",
+ "type": "string"
+ },
+ "dataAsset": {
+ "description": "Reference to the data asset exposed through this port",
+ "$ref": "../../type/entityReference.json"
+ }
+ },
+ "required": ["name", "portType", "dataAsset"],
+ "additionalProperties": false
+ },
+ "slaDefinition": {
+ "description": "Service Level Agreement definition",
+ "type": "object",
+ "properties": {
+ "tier": {
+ "description": "SLA tier (e.g., GOLD, SILVER, BRONZE)",
+ "type": "string",
+ "enum": ["GOLD", "SILVER", "BRONZE", "CUSTOM"]
+ },
+ "availability": {
+ "description": "Expected availability percentage (e.g., 99.9)",
+ "type": "number",
+ "minimum": 0,
+ "maximum": 100
+ },
+ "responseTime": {
+ "description": "Expected response time in milliseconds",
+ "type": "integer"
+ },
+ "dataFreshness": {
+ "description": "Maximum data staleness in minutes",
+ "type": "integer"
+ },
+ "dataQuality": {
+ "description": "Minimum data quality score",
+ "type": "number",
+ "minimum": 0,
+ "maximum": 100
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique ID of the Data Product",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "A unique name of the Data Product",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "fullyQualifiedName": {
+ "description": "FullyQualifiedName is `domain.dataProductName` or `sub-domain.dataProductName`.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "displayName": {
+ "description": "Name used for display purposes. Example 'Marketing', 'Payments', etc.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the Data Product.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "style": {
+ "$ref": "../../type/basic.json#/definitions/style"
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this entity.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "owners": {
+ "description": "Owners of this Data Product.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "experts": {
+ "description": "List of users who are experts for this Data Product.",
+ "$ref": "../../type/entityReferenceList.json",
+ "default" : null
+ },
+ "reviewers": {
+ "description": "User references of the reviewers for this Data Product.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "domains": {
+ "description": "Domains or sub-domains to which this Data Product belongs to.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "assets": {
+ "description": "Data assets collection that is part of this data product.",
+ "$ref" : "../../type/entityReferenceList.json",
+ "deprecated": true,
+ "$comment": "@deprecated Use GET /v1/dataProducts/{id}/assets API endpoint for paginated access to data product assets"
+ },
+ "lifecycleStage": {
+ "description": "Current lifecycle stage of the data product",
+ "$ref": "#/definitions/lifecycleStage"
+ },
+ "sla": {
+ "description": "Service Level Agreement for this data product",
+ "$ref": "#/definitions/slaDefinition"
+ },
+ "consumesFrom": {
+ "description": "Other data products that this product consumes data from",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "providesTo": {
+ "description": "Other data products that consume data from this product",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "tags": {
+ "description": "Tags associated with the Data Product.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": []
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ },
+ "followers": {
+ "description": "Followers of this entity.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "votes": {
+ "description": "Votes on the entity.",
+ "$ref": "../../type/votes.json"
+ },
+ "certification": {
+ "$ref": "../../type/assetCertification.json"
+ },
+ "entityStatus": {
+ "description": "Status of the Data Product.",
+ "$ref": "../../type/status.json"
+ }
+ },
+ "required": ["id", "name", "description"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/domains/domain.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/domains/domain.json
new file mode 100644
index 000000000000..aef2030e4dcb
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/domains/domain.json
@@ -0,0 +1,134 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/domains/domain.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Domain",
+ "description": "A `Domain` is a bounded context that is aligned with a Business Unit or a function within an organization.",
+ "$comment": "@om-entity-type",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.domains.Domain",
+ "javaInterfaces": ["org.openmetadata.schema.EntityInterface"],
+ "definitions": {
+ "domainType" : {
+ "description" : "Type of a domain",
+ "type" : "string",
+ "enum": [
+ "Source-aligned",
+ "Consumer-aligned",
+ "Aggregate"
+ ]
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique ID of the Domain",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "domainType": {
+ "description": "Domain type",
+ "$ref": "#/definitions/domainType"
+ },
+ "name": {
+ "description": "A unique name of the Domain",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "fullyQualifiedName": {
+ "description": "FullyQualifiedName same as `name`.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "displayName": {
+ "description": "Name used for display purposes. Example 'Marketing', 'Payments', etc.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the Domain.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "style": {
+ "$ref": "../../type/basic.json#/definitions/style"
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this entity.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "parent" : {
+ "description" : "Parent domains. When 'null' or not set, indicates that this is the top level domain.",
+ "$ref" : "../../type/entityReference.json"
+ },
+ "children" : {
+ "description" : "Children domains or sub-domains.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "childrenCount": {
+ "description": "Count of all nested children domains under this domain",
+ "type": "integer"
+ },
+ "owners": {
+ "description": "Owners of this Domain.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "experts": {
+ "description": "List of users who are experts in this Domain.",
+ "$ref": "../../type/entityReferenceList.json",
+ "default" : null
+ },
+ "assets": {
+ "description": "Data assets collection that is part of this domain.",
+ "$ref" : "../../type/entityReferenceList.json",
+ "deprecated": true,
+ "$comment": "@deprecated Use GET /v1/domains/{id}/assets API endpoint for paginated access to domain assets"
+ },
+ "tags": {
+ "description": "Tags associated with the Domain.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": []
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "extension": {
+ "description": "Entity extension data with custom attributes added to the entity.",
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ },
+ "followers": {
+ "description": "Followers of this entity.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "votes": {
+ "description": "Votes on the entity.",
+ "$ref": "../../type/votes.json"
+ },
+ "certification": {
+ "$ref": "../../type/assetCertification.json"
+ },
+ "entityStatus": {
+ "description": "Status of the entity.",
+ "$ref": "../../type/status.json"
+ }
+ },
+ "required": ["id", "name", "description", "domainType"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/events/authentication/webhookBearerAuth.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/events/authentication/webhookBearerAuth.json
new file mode 100644
index 000000000000..c2c401ddb0a2
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/events/authentication/webhookBearerAuth.json
@@ -0,0 +1,21 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/events/authentication/webhookBearerAuth.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "BearerAuth",
+ "description": "Bearer token authentication for webhook endpoints.",
+ "type": "object",
+ "properties": {
+ "type": {
+ "description": "Authentication type discriminator.",
+ "type": "string",
+ "enum": ["bearer"],
+ "default": "bearer"
+ },
+ "secretKey": {
+ "description": "Secret key used for computing HMAC SHA256 signature of webhook payload, sent in the X-OM-Signature header.",
+ "type": "string"
+ }
+ },
+ "required": ["type", "secretKey"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/events/authentication/webhookNoAuth.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/events/authentication/webhookNoAuth.json
new file mode 100644
index 000000000000..54076aaa7955
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/events/authentication/webhookNoAuth.json
@@ -0,0 +1,17 @@
+{
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "$id": "https://open-metadata.org/schema/entity/events/authentication/webhookNoAuth.json",
+ "title": "WebhookNoAuth",
+ "description": "No authentication.",
+ "type": "object",
+ "properties": {
+ "type": {
+ "description": "Authentication type discriminator.",
+ "type": "string",
+ "enum": ["none"],
+ "default": "none"
+ }
+ },
+ "required": ["type"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/events/authentication/webhookOAuth2Config.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/events/authentication/webhookOAuth2Config.json
new file mode 100644
index 000000000000..be3e880f9340
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/events/authentication/webhookOAuth2Config.json
@@ -0,0 +1,34 @@
+{
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "$id": "https://open-metadata.org/schema/entity/events/authentication/webhookOAuth2Config.json",
+ "title": "WebhookOAuth2Config",
+ "description": "OAuth2 Client Credentials configuration for webhook authentication.",
+ "type": "object",
+ "properties": {
+ "type": {
+ "description": "Authentication type discriminator.",
+ "type": "string",
+ "enum": ["oauth2"],
+ "default": "oauth2"
+ },
+ "tokenUrl": {
+ "description": "Token endpoint URL to obtain access tokens.",
+ "type": "string",
+ "format": "uri"
+ },
+ "clientId": {
+ "description": "OAuth2 client identifier. Stored encrypted via Fernet.",
+ "type": "string"
+ },
+ "clientSecret": {
+ "description": "OAuth2 client secret. Stored encrypted via Fernet.",
+ "type": "string"
+ },
+ "scope": {
+ "description": "Optional OAuth2 scopes to request (space-separated).",
+ "type": "string"
+ }
+ },
+ "required": ["type", "tokenUrl", "clientId", "clientSecret"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/events/notificationTemplate.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/events/notificationTemplate.json
new file mode 100644
index 000000000000..2923d513cfed
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/events/notificationTemplate.json
@@ -0,0 +1,95 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/events/notificationTemplate.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "NotificationTemplate",
+ "$comment": "@om-entity-type",
+ "description": "A NotificationTemplate defines the default formatting template for notifications of a specific entity type.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.events.NotificationTemplate",
+ "javaInterfaces": [
+ "org.openmetadata.schema.EntityInterface"
+ ],
+ "properties": {
+ "id": {
+ "description": "Unique identifier of this template instance.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name for the notification template (e.g., 'Default Table Template', 'Custom Pipeline Alerts').",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this template.",
+ "type": "string"
+ },
+ "fullyQualifiedName": {
+ "description": "Fully qualified name for the template.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "description": {
+ "description": "Description of the template purpose and usage.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "version": {
+ "description": "Metadata version of the template.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the template.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "href": {
+ "description": "Link to this template resource.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "templateSubject": {
+ "description": "Handlebars template for the email subject line with placeholders.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "templateBody": {
+ "description": "Handlebars HTML template body with placeholders.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 65536
+ },
+ "provider": {
+ "description": "Provider of the template. System templates are pre-loaded and cannot be deleted. User templates are created by users and can be deleted.",
+ "$ref": "../../type/basic.json#/definitions/providerType"
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the template.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When `true` indicates the template has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "isModifiedFromDefault": {
+ "description": "Indicates if this system template has been modified from its default version. Only applicable to system templates.",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "required": [
+ "id",
+ "name",
+ "templateSubject",
+ "templateBody"
+ ],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/events/webhook.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/events/webhook.json
new file mode 100644
index 000000000000..c1bea9239085
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/events/webhook.json
@@ -0,0 +1,83 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/events/webhook.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Webhook",
+ "description": "This schema defines webhook for receiving events from OpenMetadata.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.Webhook",
+ "javaInterfaces": [
+ "org.openmetadata.schema.SubscriptionAction"
+ ],
+ "definitions": {
+ "entityName" : {
+ "description": "Unique name of the application receiving webhook events.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128,
+ "pattern": "(?U)^[\\w'\\-.]+$"
+ }
+ },
+ "properties": {
+ "receivers": {
+ "description": "List of receivers to send mail to",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "uniqueItems": true
+ },
+ "endpoint": {
+ "description": "Endpoint to receive the webhook events over POST requests.",
+ "type": "string",
+ "format": "uri"
+ },
+ "headers": {
+ "description": "Custom headers to be sent with the webhook request.",
+ "type": "object",
+ "existingJavaType": "java.util.Map"
+ },
+ "queryParams": {
+ "description": "Query parameters to be added to the webhook request URL.",
+ "type": "object",
+ "existingJavaType": "java.util.Map"
+ },
+ "httpMethod": {
+ "description": "HTTP operation to send the webhook request. Supports POST or PUT.",
+ "type": "string",
+ "enum": ["POST", "PUT"],
+ "default": "POST"
+ },
+ "sendToAdmins": {
+ "description": "Send the Event to Admins",
+ "type": "boolean",
+ "default": false
+ },
+ "sendToOwners": {
+ "description": "Send the Event to Owners",
+ "type": "boolean",
+ "default": false
+ },
+ "authType": {
+ "description": "Authentication configuration for the webhook. If not specified, the webhook will be sent without authentication.",
+ "title": "Authentication Configuration Type",
+ "mask": true,
+ "oneOf": [
+ {
+ "$ref": "./authentication/webhookNoAuth.json"
+ },
+ {
+ "$ref": "./authentication/webhookBearerAuth.json"
+ },
+ {
+ "$ref": "./authentication/webhookOAuth2Config.json"
+ }
+ ]
+ },
+ "sendToFollowers": {
+ "description": "Send the Event to Followers",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/feed/announcement.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/feed/announcement.json
new file mode 100644
index 000000000000..36ebb8976fbc
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/feed/announcement.json
@@ -0,0 +1,106 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/feed/announcement.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Announcement",
+ "description": "An Announcement is a time-bound notification associated with a data asset. It has a start and end time and is displayed to users viewing the asset during that period.",
+ "javaInterfaces": ["org.openmetadata.schema.NamedEntityInterface"],
+ "javaType": "org.openmetadata.schema.entity.feed.Announcement",
+ "type": "object",
+ "definitions": {
+ "announcementStatus": {
+ "javaType": "org.openmetadata.schema.type.AnnouncementStatus",
+ "description": "Status of the announcement based on its time window.",
+ "type": "string",
+ "enum": ["Active", "Expired", "Scheduled"],
+ "javaEnums": [
+ {"name": "Active"},
+ {"name": "Expired"},
+ {"name": "Scheduled"}
+ ]
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier (UUID) for this announcement.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "fullyQualifiedName": {
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "displayName": {
+ "description": "Display name for the announcement.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Announcement content in Markdown format.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "entityLink": {
+ "description": "Link to the entity this announcement is about.",
+ "$ref": "../../type/basic.json#/definitions/entityLink"
+ },
+ "startTime": {
+ "description": "Start time from when the announcement should be shown.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "endTime": {
+ "description": "End time when the announcement expires.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "status": {
+ "$ref": "#/definitions/announcementStatus"
+ },
+ "createdBy": {
+ "description": "User who created the announcement.",
+ "type": "string"
+ },
+ "updatedBy": {
+ "description": "User who last updated the announcement.",
+ "type": "string"
+ },
+ "owners": {
+ "description": "Owners of this announcement.",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "domains": {
+ "description": "Domains this announcement belongs to.",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "reactions": {
+ "description": "Reactions to the announcement.",
+ "$ref": "../../type/reaction.json#/definitions/reactionList"
+ },
+ "createdAt": {
+ "description": "Timestamp when the announcement was created.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedAt": {
+ "description": "Last update timestamp.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "href": {
+ "description": "Link to the resource.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the announcement.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When true indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "required": ["id", "name", "description", "startTime", "endTime"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/feed/assets.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/feed/assets.json
new file mode 100644
index 000000000000..e5b04fa0dbae
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/feed/assets.json
@@ -0,0 +1,14 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/feed/assets.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AssetsFeedInfo",
+ "javaType": "org.openmetadata.schema.entity.feed.AssetsFeedInfo",
+ "description": "This schema defines the schema for Assets addition/deletion Updates.",
+ "type": "object",
+ "properties": {
+ "updatedAssets": {
+ "$ref": "../../type/entityReferenceList.json"
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/feed/customProperty.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/feed/customProperty.json
new file mode 100644
index 000000000000..668a06c2b520
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/feed/customProperty.json
@@ -0,0 +1,17 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/feed/customProperty.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CustomPropertyFeedInfo",
+ "javaType": "org.openmetadata.schema.entity.feed.CustomPropertyFeedInfo",
+ "description": "This schema defines the custom properties addition/deltion schema on feed.",
+ "type": "object",
+ "properties": {
+ "previousValue": {
+ "description": "Previous Custom Property."
+ },
+ "updatedValue": {
+ "description": "Updated Custom Property."
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/feed/description.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/feed/description.json
new file mode 100644
index 000000000000..6ca582e07f09
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/feed/description.json
@@ -0,0 +1,23 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/feed/description.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DescriptionFeedInfo",
+ "javaType": "org.openmetadata.schema.entity.feed.DescriptionFeedInfo",
+ "description": "This schema defines the schema for Description Updates.",
+ "type": "object",
+ "properties": {
+ "previousDescription": {
+ "type": "string",
+ "description": "The previous description of the entity."
+ },
+ "newDescription": {
+ "description": "The new description of the entity.",
+ "type": "string"
+ },
+ "diffMessage": {
+ "description": "The difference between the previous and new descriptions.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/feed/domain.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/feed/domain.json
new file mode 100644
index 000000000000..d6ad3306e2fb
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/feed/domain.json
@@ -0,0 +1,19 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/feed/domain.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DomainFeedInfo",
+ "javaType": "org.openmetadata.schema.entity.feed.DomainFeedInfo",
+ "description": "This schema defines the schema for Assets addition/deletion Updates.",
+ "type": "object",
+ "properties": {
+ "previousDomains": {
+ "description": "Previous Domains.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "updatedDomains": {
+ "description": "Updated Domains.",
+ "$ref": "../../type/entityReferenceList.json"
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/feed/entityInfo.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/feed/entityInfo.json
new file mode 100644
index 000000000000..dd8879a27174
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/feed/entityInfo.json
@@ -0,0 +1,14 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/feed/tag.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "EntityInfo",
+ "description": "EntityInfo In case of Entity Created, Updated Or Deleted.",
+ "javaType": "org.openmetadata.schema.entity.feed.EntityInfo",
+ "type": "object",
+ "properties": {
+ "entity": {
+ "description": "Entity Details in case of Creation , Soft Deletion and Deletion."
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/feed/owner.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/feed/owner.json
new file mode 100644
index 000000000000..fd13bdbad81f
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/feed/owner.json
@@ -0,0 +1,19 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/feed/owner.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "OwnerFeedInfo",
+ "description": "This schema defines the schema for Ownership Updates for Feed.",
+ "javaType": "org.openmetadata.schema.entity.feed.OwnerFeedInfo",
+ "type": "object",
+ "properties": {
+ "previousOwner": {
+ "description": "Previous Owners.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "updatedOwner": {
+ "description": "Updated Owners.",
+ "$ref": "../../type/entityReferenceList.json"
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/feed/suggestion.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/feed/suggestion.json
new file mode 100644
index 000000000000..a0edee392eda
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/feed/suggestion.json
@@ -0,0 +1,103 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/feed/thread.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Suggestion",
+ "description": "This schema defines the Suggestion entity. A suggestion can be applied to an asset to give the owner context about possible changes or improvements to descriptions, tags,...",
+ "type": "object",
+ "definitions": {
+ "suggestionType": {
+ "javaType": "org.openmetadata.schema.type.SuggestionType",
+ "description": "Type of a Suggestion.",
+ "type": "string",
+ "enum": [
+ "SuggestDescription",
+ "SuggestTagLabel"
+ ],
+ "javaEnums": [
+ {
+ "name": "SuggestDescription"
+ },
+ {
+ "name": "SuggestTagLabel"
+ }
+ ]
+ },
+ "suggestionStatus": {
+ "javaType": "org.openmetadata.schema.type.SuggestionStatus",
+ "type": "string",
+ "description": "Status of a Suggestion.",
+ "enum": [
+ "Open",
+ "Accepted",
+ "Rejected"
+ ],
+ "javaEnums": [
+ {
+ "name": "Open"
+ },
+ {
+ "name": "Accepted"
+ },
+ {
+ "name": "Rejected"
+ }
+ ],
+ "default": "Open"
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier that identifies an entity instance.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "type": {
+ "$ref": "#/definitions/suggestionType"
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this entity.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "entityLink": {
+ "description": "Data asset about which this thread is created for with format <#E::{entities}::{entityName}::{field}::{fieldValue}.",
+ "$ref": "../../type/basic.json#/definitions/entityLink"
+ },
+ "createdAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "createdBy": {
+ "description": "User or Bot who made the suggestion.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the update version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User or Bot who updated the suggestion.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "status": {
+ "$ref": "#/definitions/suggestionStatus"
+ },
+ "description": {
+ "description": "The main message of the thread in Markdown format.",
+ "type": "string"
+ },
+ "tagLabels": {
+ "description": "Tags or Glossary Terms.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ }
+ },
+ "oneOf": [{"required": ["id", "entityLink", "description", "suggestionType"]},
+ {"required": ["id", "entityLink", "tagLabels", "suggestionType"]}],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/feed/tag.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/feed/tag.json
new file mode 100644
index 000000000000..30b88fe1176b
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/feed/tag.json
@@ -0,0 +1,25 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/feed/tag.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "TagFeedInfo",
+ "description": "This schema defines the schema for Tag Updates for Feed.",
+ "javaType": "org.openmetadata.schema.entity.feed.TagFeedInfo",
+ "type": "object",
+ "properties": {
+ "previousTags": {
+ "description": "List of previous tags.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ }
+ },
+ "updatedTags": {
+ "description": "List of updated tags.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ }
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/feed/taskFormSchema.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/feed/taskFormSchema.json
new file mode 100644
index 000000000000..32cb68e358ad
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/feed/taskFormSchema.json
@@ -0,0 +1,105 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/feed/taskFormSchema.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "TaskFormSchema",
+ "description": "A TaskFormSchema defines the form structure for creating or resolving a specific type of task. It includes a JSON Schema for validation and a UI schema for rendering.",
+ "javaInterfaces": ["org.openmetadata.schema.NamedEntityInterface"],
+ "javaType": "org.openmetadata.schema.entity.feed.TaskFormSchema",
+ "type": "object",
+ "properties": {
+ "id": {
+ "description": "Unique identifier (UUID) for this form schema.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Unique key for this form schema (e.g., 'DescriptionSuggestion').",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "fullyQualifiedName": {
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "displayName": {
+ "description": "Display name for the form schema.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the form schema.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "taskType": {
+ "description": "The task type this form schema applies to.",
+ "type": "string"
+ },
+ "taskCategory": {
+ "description": "The task category this form schema applies to.",
+ "type": "string"
+ },
+ "formSchema": {
+ "description": "JSON Schema object defining the form fields and validation.",
+ "type": "object",
+ "additionalProperties": true
+ },
+ "uiSchema": {
+ "description": "RJSF uiSchema object for customizing form rendering.",
+ "type": "object",
+ "additionalProperties": true
+ },
+ "workflowDefinitionRef": {
+ "description": "Name of the WorkflowDefinition that orchestrates tasks created from this schema.",
+ "type": "string"
+ },
+ "workflowVersion": {
+ "description": "Version of the bound workflow definition when this form schema was last saved.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "createFormSchema": {
+ "description": "Optional JSON Schema override used specifically when creating a task.",
+ "type": "object",
+ "additionalProperties": true
+ },
+ "createUiSchema": {
+ "description": "Optional uiSchema override used specifically when creating a task.",
+ "type": "object",
+ "additionalProperties": true
+ },
+ "transitionForms": {
+ "description": "Per-transition form configuration keyed by transition identifier or formRef.",
+ "type": "object",
+ "additionalProperties": true
+ },
+ "defaultStageMappings": {
+ "description": "Default workflow stage to coarse task status mappings keyed by stage identifier.",
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "../tasks/task.json#/definitions/taskStatus"
+ }
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedBy": {
+ "description": "User who last updated the form schema.",
+ "type": "string"
+ },
+ "updatedAt": {
+ "description": "Last update timestamp.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "href": {
+ "description": "Link to the resource.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When true indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "required": ["id", "name", "taskType", "formSchema"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/feed/testCaseResult.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/feed/testCaseResult.json
new file mode 100644
index 000000000000..55205249df7b
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/feed/testCaseResult.json
@@ -0,0 +1,32 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/feed/testCaseResult.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "TestCaseResultFeedInfo",
+ "description": "This schema defines the schema for Test Case Result Updates for Feed.",
+ "javaType": "org.openmetadata.schema.entity.feed.TestCaseResultFeedInfo",
+ "type": "object",
+ "properties": {
+ "parameterValues": {
+ "description": "Summary of test case execution",
+ "type": "array",
+ "items": {
+ "$ref": "../../tests/testCase.json#/definitions/testCaseParameterValue"
+ }
+ },
+ "entityTestResultSummary": {
+ "description": "Summary of test case execution",
+ "type": "array",
+ "items": {
+ "$ref": "../../tests/testSuite.json#/definitions/testSuiteConnection/resultSummary"
+ }
+ },
+ "testCaseResult": {
+ "description": "Test Case Result for last 7 days.",
+ "type": "array",
+ "items": {
+ "$ref": "../../tests/basic.json#/definitions/testCaseResult"
+ }
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/feed/thread.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/feed/thread.json
new file mode 100644
index 000000000000..fd4398823bfc
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/feed/thread.json
@@ -0,0 +1,372 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/feed/thread.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Thread",
+ "description": "This schema defines the Thread entity. A Thread is a collection of posts made by the users. The first post that starts a thread is **about** a data asset **from** a user. Other users can respond to this post by creating new posts in the thread. Note that bot users can also interact with a thread. A post can contains links that mention Users or other Data Assets.",
+ "type": "object",
+ "definitions": {
+ "taskType": {
+ "javaType": "org.openmetadata.schema.type.TaskType",
+ "description": "Type of a task.",
+ "type": "string",
+ "enum": [
+ "RequestDescription",
+ "UpdateDescription",
+ "RequestTag",
+ "UpdateTag",
+ "RequestApproval",
+ "RequestTestCaseFailureResolution",
+ "RecognizerFeedbackApproval",
+ "Generic"
+ ],
+ "javaEnums": [
+ {
+ "name": "RequestDescription"
+ },
+ {
+ "name": "UpdateDescription"
+ },
+ {
+ "name": "RequestTag"
+ },
+ {
+ "name": "UpdateTag"
+ },
+ {
+ "name": "RequestApproval"
+ },
+ {
+ "name": "RequestTestCaseFailureResolution"
+ },
+ {
+ "name": "RecognizerFeedbackApproval"
+ },
+ {
+ "name": "Generic"
+ }
+ ]
+ },
+ "taskDetails": {
+ "javaType": "org.openmetadata.schema.type.TaskDetails",
+ "description": "Details about the task. This is only applicable if thread is of type task.",
+ "type": "object",
+ "properties": {
+ "id": {
+ "description": "Unique identifier that identifies the task.",
+ "type": "integer"
+ },
+ "type": {
+ "$ref": "#/definitions/taskType"
+ },
+ "assignees": {
+ "description": "List of users or teams the task is assigned to",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "status": {
+ "$ref": "#/definitions/threadTaskStatus"
+ },
+ "closedBy": {
+ "description": "The user that closed the task.",
+ "type": "string"
+ },
+ "closedAt": {
+ "description": "Timestamp when the task was closed in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "oldValue": {
+ "description": "The value of old object for which the task is created.",
+ "type": "string"
+ },
+ "suggestion": {
+ "description": "The suggestion object to replace the old value for which the task is created.",
+ "type": "string"
+ },
+ "newValue": {
+ "description": "The new value object that was accepted to complete the task.",
+ "type": "string"
+ },
+ "testCaseResolutionStatusId": {
+ "description": "The test case resolution status id for which the task is created.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "feedback": {
+ "description": "The recognizer feedback that we're reviewing for the Tag that's supposed to be pointed by this task",
+ "$ref": "../../type/recognizerFeedback.json"
+ },
+ "recognizer": {
+ "description": "Metadata about the recognizer that applied the tag being reviewed",
+ "$ref": "../../type/tagLabelRecognizerMetadata.json"
+ }
+ },
+ "required": ["id", "assignees", "type"],
+ "additionalProperties": false
+ },
+ "threadTaskStatus": {
+ "javaType": "org.openmetadata.schema.type.TaskStatus",
+ "type": "string",
+ "description": "Status of a task.",
+ "enum": ["Open", "Closed"],
+ "javaEnums": [
+ {
+ "name": "Open"
+ },
+ {
+ "name": "Closed"
+ }
+ ],
+ "default": "Open"
+ },
+ "threadType": {
+ "javaType": "org.openmetadata.schema.type.ThreadType",
+ "type": "string",
+ "description": "Type of thread.",
+ "enum": ["Conversation", "Task", "Announcement", "Chatbot"],
+ "javaEnums": [
+ {
+ "name": "Conversation"
+ },
+ {
+ "name": "Task"
+ },
+ {
+ "name": "Announcement"
+ },
+ {
+ "name": "Chatbot"
+ }
+ ],
+ "default": "Conversation"
+ },
+ "announcementDetails": {
+ "javaType": "org.openmetadata.schema.type.AnnouncementDetails",
+ "description": "Details about the announcement. This is only applicable if thread is of type announcement.",
+ "type": "object",
+ "properties": {
+ "description": {
+ "description": "Announcement description in Markdown format. See markdown support for more details.",
+ "type": "string"
+ },
+ "startTime": {
+ "description": "Timestamp of the start time from when the announcement should be shown.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "endTime": {
+ "description": "Timestamp of when the announcement should end",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ }
+ },
+ "required": ["startTime", "endTime"],
+ "additionalProperties": false
+ },
+ "chatbotDetails": {
+ "javaType": "org.openmetadata.schema.type.ChatbotDetails",
+ "description": "Details about the Chatbot conversation. This is only applicable if thread is of type Chatbot.",
+ "type": "object",
+ "properties": {
+ "query": {
+ "description": "The query being discussed with the Chatbot",
+ "type": "string"
+ }
+ }
+ },
+ "post": {
+ "javaType": "org.openmetadata.schema.type.Post",
+ "type": "object",
+ "description": "Post within a feed.",
+ "properties": {
+ "id": {
+ "description": "Unique identifier that identifies the post.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "message": {
+ "description": "Message in Markdown format. See Markdown support for more details.",
+ "type": "string"
+ },
+ "postTs": {
+ "description": "Timestamp of the post in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "from": {
+ "description": "Name of the User posting the message.",
+ "type": "string"
+ },
+ "reactions": {
+ "description": "Reactions for the post.",
+ "$ref": "../../type/reaction.json#/definitions/reactionList"
+ }
+ },
+ "required": ["id", "message", "from"],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier that identifies an entity instance.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "type": {
+ "$ref": "#/definitions/threadType"
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this entity.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "threadTs": {
+ "description": "Timestamp of the first post created the thread in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "about": {
+ "description": "Data asset about which this thread is created for with format <#E::{entities}::{entityName}::{field}::{fieldValue}.",
+ "$ref": "../../type/basic.json#/definitions/entityLink"
+ },
+ "entityRef": {
+ "description": "Reference to the entity in `about` that the thread belongs to.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "entityUrlLink": {
+ "description": "Link to the entity in `about` that the thread belongs to.",
+ "type": "string"
+ },
+ "domains": {
+ "description": "Domain the entity belongs to.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "default": null
+ },
+ "generatedBy": {
+ "description": "User or team that generated the thread.",
+ "type": "string",
+ "enum": ["user", "system"],
+ "default": "user"
+ },
+ "cardStyle": {
+ "description": "Card style for the thread.",
+ "type": "string",
+ "enum": [
+ "default",
+ "logicalTestCaseAdded",
+ "entityCreated",
+ "entityDeleted",
+ "entitySoftDeleted",
+ "description",
+ "tags",
+ "owner",
+ "testCaseResult",
+ "customProperties",
+ "assets",
+ "domain"
+ ],
+ "default": "default"
+ },
+ "fieldOperation": {
+ "description": "Operation on thread, whether the field was added, or updated or deleted.",
+ "type": "string",
+ "enum": ["added", "updated", "deleted", "none"],
+ "default": "updated"
+ },
+ "feedInfo": {
+ "description": "Entity Id of the entity in `about` that the thread belongs to.",
+ "type": "object",
+ "properties": {
+ "headerMessage": {
+ "description": "Header message for the feed.",
+ "type": "string"
+ },
+ "fieldName": {
+ "description": "Field Name message for the feed.",
+ "type": "string"
+ },
+ "entitySpecificInfo": {
+ "oneOf": [
+ {
+ "$ref": "./assets.json"
+ },
+ {
+ "$ref": "./customProperty.json"
+ },
+ {
+ "$ref": "./description.json"
+ },
+ {
+ "$ref": "./domain.json"
+ },
+ {
+ "$ref": "./entityInfo.json"
+ },
+ {
+ "$ref": "./tag.json"
+ },
+ {
+ "$ref": "./testCaseResult.json"
+ }
+ ]
+ }
+ },
+ "additionalProperties": false
+ },
+ "addressedTo": {
+ "description": "User or team this thread is addressed to in format <#E::{entities}::{entityName}::{field}::{fieldValue}.",
+ "$ref": "../../type/basic.json#/definitions/entityLink"
+ },
+ "createdBy": {
+ "description": "User who created the thread.",
+ "type": "string"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "changeDescription": {
+ "description": "Change that led to this version of the Thread.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "resolved": {
+ "description": "When `true` indicates the thread has been resolved.",
+ "type": "boolean",
+ "default": false
+ },
+ "message": {
+ "description": "The main message of the thread in Markdown format.",
+ "type": "string"
+ },
+ "postsCount": {
+ "description": "The total count of posts in the thread.",
+ "type": "integer",
+ "default": 0
+ },
+ "posts": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/post"
+ }
+ },
+ "reactions": {
+ "description": "Reactions for the thread.",
+ "$ref": "../../type/reaction.json#/definitions/reactionList"
+ },
+ "task": {
+ "description": "Details about the task. This is only applicable if thread is of type task.",
+ "$ref": "#/definitions/taskDetails"
+ },
+ "announcement": {
+ "description": "Details about the announcement. This is only applicable if thread is of type announcement.",
+ "$ref": "#/definitions/announcementDetails"
+ },
+ "chatbot": {
+ "description": "Details about the Chatbot conversation. This is only applicable if thread is of type Chatbot.",
+ "$ref": "#/definitions/chatbotDetails"
+ }
+ },
+ "required": ["id", "about", "message"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/learning/learningResource.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/learning/learningResource.json
new file mode 100644
index 000000000000..d4e24d74fbc3
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/learning/learningResource.json
@@ -0,0 +1,195 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/learning/learningResource.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "LearningResource",
+ "description": "A learning resource such as an in-product tutorial, Storylane walkthrough, or expert video contextualized for product surfaces.",
+ "$comment": "@om-entity-type",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.learning.LearningResource",
+ "javaInterfaces": ["org.openmetadata.schema.EntityInterface"],
+ "definitions": {
+ "resourceType": {
+ "description": "Kind of learning asset represented.",
+ "type": "string",
+ "enum": [
+ "Storylane",
+ "Video",
+ "Article"
+ ]
+ },
+ "resourceCategory": {
+ "description": "Primary topic grouping for the resource.",
+ "type": "string",
+ "enum": [
+ "Discovery",
+ "Administration",
+ "DataGovernance",
+ "DataQuality",
+ "Observability",
+ "AI"
+ ]
+ },
+ "resourceDifficulty": {
+ "description": "Suggested proficiency tier for the resource.",
+ "type": "string",
+ "enum": [
+ "Intro",
+ "Intermediate",
+ "Advanced"
+ ]
+ },
+ "resourceSource": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.learning.LearningResourceSource",
+ "description": "Embedding configuration for rendering the resource inline.",
+ "properties": {
+ "provider": {
+ "description": "Origin system that hosts the resource (Storylane, YouTube, etc.).",
+ "type": "string"
+ },
+ "url": {
+ "description": "Canonical URL.",
+ "type": "string",
+ "format": "uri"
+ },
+ "embedConfig": {
+ "description": "Provider-specific configuration passed to the UI.",
+ "type": "object",
+ "additionalProperties": true
+ }
+ },
+ "required": ["url"],
+ "additionalProperties": false
+ },
+ "resourceContext": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.learning.LearningResourceContext",
+ "description": "UI placement hints for scoping the resource.",
+ "properties": {
+ "pageId": {
+ "description": "Stable identifier for the product page (e.g., glossary, domains).",
+ "type": "string"
+ },
+ "componentId": {
+ "description": "Optional component-level anchor within the page.",
+ "type": "string"
+ },
+ "priority": {
+ "description": "Relative ordering weight when multiple resources match a context.",
+ "type": "integer",
+ "minimum": 0
+ }
+ },
+ "required": ["pageId"],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "id": {
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "fullyQualifiedName": {
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "displayName": {
+ "description": "Display label presented to users.",
+ "type": "string",
+ "maxLength": 120
+ },
+ "description": {
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "resourceType": {
+ "$ref": "#/definitions/resourceType"
+ },
+ "categories": {
+ "description": "Topic categories the resource belongs to.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/resourceCategory"
+ },
+ "minItems": 1
+ },
+ "difficulty": {
+ "$ref": "#/definitions/resourceDifficulty"
+ },
+ "source": {
+ "$ref": "#/definitions/resourceSource"
+ },
+ "estimatedDuration": {
+ "description": "Approximate viewing time in seconds.",
+ "type": "integer",
+ "minimum": 0
+ },
+ "contexts": {
+ "description": "List of contexts where this resource should surface.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/resourceContext"
+ },
+ "minItems": 1
+ },
+ "status": {
+ "description": "Lifecycle state for controllable publishing.",
+ "type": "string",
+ "enum": [
+ "Draft",
+ "Active",
+ "Deprecated"
+ ],
+ "default": "Active"
+ },
+ "tags": {
+ "description": "Tags attached to the learning resource.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": []
+ },
+ "owners": {
+ "description": "Owners accountable for maintaining this resource.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "reviewers": {
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "followers": {
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "changeDescription": {
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "Soft delete marker.",
+ "type": "boolean",
+ "default": false
+ },
+ "version": {
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "href": {
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "extension": {
+ "$ref": "../../type/basic.json#/definitions/entityExtension"
+ }
+ },
+ "required": ["id", "name", "resourceType", "source", "contexts", "categories"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/policies/accessControl/resourceDescriptor.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/policies/accessControl/resourceDescriptor.json
new file mode 100644
index 000000000000..a61cafab4fee
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/policies/accessControl/resourceDescriptor.json
@@ -0,0 +1,88 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/policies/accessControl/resourceDescriptor.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "ResourceDescriptor",
+ "description": "Resource descriptor",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.ResourceDescriptor",
+ "definitions": {
+ "operation": {
+ "javaType": "org.openmetadata.schema.type.MetadataOperation",
+ "description": "This schema defines all possible operations on metadata of entities in OpenMetadata.",
+ "type": "string",
+ "enum": [
+ "All",
+ "Create",
+ "BulkCreate",
+ "CreateIngestionPipelineAutomator",
+ "CreateTests",
+ "Delete",
+ "ViewAll",
+ "ViewBasic",
+ "ViewUsage",
+ "ViewTests",
+ "ViewQueries",
+ "ViewDataProfile",
+ "ViewProfilerGlobalConfiguration",
+ "ViewSampleData",
+ "ViewTestCaseFailedRowsSample",
+ "ViewCustomFields",
+ "EditAll",
+ "BulkUpdate",
+ "EditCustomFields",
+ "EditDataProfile",
+ "EditDescription",
+ "EditDisplayName",
+ "EditLineage",
+ "EditEntityRelationship",
+ "EditPolicy",
+ "EditOwners",
+ "EditQueries",
+ "EditReviewers",
+ "EditRole",
+ "EditSampleData",
+ "EditStatus",
+ "EditTags",
+ "EditGlossaryTerms",
+ "EditTeams",
+ "EditTier",
+ "EditCertification",
+ "EditTests",
+ "EditUsage",
+ "EditUsers",
+ "EditLifeCycle",
+ "EditKnowledgePanel",
+ "EditPage",
+ "EditIngestionPipelineStatus",
+ "EditUserNotificationTemplate",
+ "DeleteTestCaseFailedRowsSample",
+ "Deploy",
+ "Trigger",
+ "Kill",
+ "GenerateToken",
+ "EditScim",
+ "CreateScim",
+ "DeleteScim",
+ "ViewScim",
+ "Impersonate",
+ "AuditLogs",
+ "ViewTestDefinitionLibrary",
+ "EditTestDefinitionLibrary"
+ ]
+ }
+ },
+ "properties": {
+ "name": {
+ "description": "Name of the resource. For entity related resources, resource name is same as the entity name. Some resources such as lineage are not entities but are resources.",
+ "type": "string"
+ },
+ "operations": {
+ "description": "List of operations supported by the resource.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/operation"
+ }
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/policies/accessControl/resourcePermission.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/policies/accessControl/resourcePermission.json
new file mode 100644
index 000000000000..f7ff5d7606a1
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/policies/accessControl/resourcePermission.json
@@ -0,0 +1,59 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/policies/accessControl/ResourcePermission.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "ResourcePermission",
+ "description": "A set of permissions for a user that shows what operation is denied, allowed, or not allowed for all the resources.",
+ "javaType": "org.openmetadata.schema.type.ResourcePermission",
+ "type": "object",
+ "definitions": {
+ "permission": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.Permission",
+ "properties": {
+ "operation": {
+ "description": "Operation names related to the `resource`.",
+ "$ref": "resourceDescriptor.json#/definitions/operation"
+ },
+ "access": {
+ "description": "Access decided after evaluating rules in a policy. Note the access is defined in the order of precedence.",
+ "type": "string",
+ "enum": [
+ "deny",
+ "allow",
+ "conditionalDeny",
+ "conditionalAllow",
+ "notAllow"
+ ]
+ },
+ "rule": {
+ "description": "Rule that matches the resource and the operation that decided the `access` as `allow` or `deny`. When no rule matches, the `access` is set to `notAllow`. When access can't be determined because all information required to match the `condition` in the rule, `access` is set to `conditional`.",
+ "$ref": "rule.json"
+ },
+ "policy": {
+ "description": "Name of the policy where the `rule` is from.",
+ "type": "string"
+ },
+ "role": {
+ "description": "Name of the role where the `policy` is from. If this is not role based policy, `role` is set to null",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "resource": {
+ "description": "Name of the resource",
+ "type": "string"
+ },
+ "permissions": {
+ "description": "Permissions for a `resource`.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/permission"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": ["resource", "permissions"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/policies/accessControl/rule.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/policies/accessControl/rule.json
new file mode 100644
index 000000000000..b21becc39991
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/policies/accessControl/rule.json
@@ -0,0 +1,51 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/policies/accessControl/rule.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Rule",
+ "description": "Describes an Access Control Rule for OpenMetadata Metadata Operations. All non-null user (subject) and entity (object) attributes are evaluated with logical AND.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.policies.accessControl.Rule",
+ "properties": {
+ "name": {
+ "description": "Name of this Rule.",
+ "type": "string"
+ },
+ "fullyQualifiedName": {
+ "description": "FullyQualifiedName in the form `policyName.ruleName`.",
+ "$ref": "../../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "description" : {
+ "description": "Description of the rule.",
+ "$ref": "../../../type/basic.json#/definitions/markdown"
+ },
+ "effect" : {
+ "type" : "string",
+ "enum" : [
+ "allow",
+ "deny"
+ ]
+ },
+ "operations" : {
+ "description": "List of operation names related to the `resources`. Use `*` to include all the operations.",
+ "type" : "array",
+ "items" : {
+ "$ref": "resourceDescriptor.json#/definitions/operation"
+ },
+ "default" : null
+ },
+ "resources": {
+ "description": "Resources/objects related to this rule. Resources are typically `entityTypes` such as `table`, `database`, etc. It also includes `non-entityType` resources such as `lineage`. Use `*` to include all the resources.",
+ "type": "array",
+ "items": {
+ "type" : "string"
+ },
+ "default" : null
+ },
+ "condition" : {
+ "description": "Expression in SpEL used for matching of a `Rule` based on entity, resource, and environmental attributes.",
+ "$ref" : "../../../type/basic.json#/definitions/expression"
+ }
+ },
+ "required": ["name", "effect", "operations", "resources"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/policies/filters.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/policies/filters.json
new file mode 100644
index 000000000000..0f2b97c4db99
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/policies/filters.json
@@ -0,0 +1,22 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/policies/filters.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Filters",
+ "definitions": {
+ "prefix": {
+ "description": "Prefix path of the entity.",
+ "type": "string"
+ },
+ "regex": {
+ "description": "Regex that matches the entity.",
+ "type": "string"
+ },
+ "tags": {
+ "description": "Set of tags to match on (OR among all tags).",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/policies/policy.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/policies/policy.json
new file mode 100644
index 000000000000..bab80559df14
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/policies/policy.json
@@ -0,0 +1,121 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/policies/policy.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Policy",
+ "description": "A `Policy` defines control that needs to be applied across different Data Entities.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.policies.Policy",
+ "javaInterfaces": ["org.openmetadata.schema.EntityInterface"],
+ "definitions": {
+ "rules": {
+ "description": "A set of rules associated with the Policy.",
+ "type": "array",
+ "items": {
+ "$ref": "accessControl/rule.json"
+ }
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier that identifies this Policy.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name that uniquely identifies this Policy.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "fullyQualifiedName": {
+ "description": "Name that uniquely identifies a Policy.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display name for this Policy.",
+ "type": "string"
+ },
+ "description": {
+ "description": "A short description of the Policy, comprehensible to regular users.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "owners": {
+ "description": "Owners of this Policy.",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this entity.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "enabled": {
+ "description": "Is the policy enabled.",
+ "type": "boolean",
+ "default": true
+ },
+ "version": {
+ "description": "Metadata version of the Policy.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the Policy in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "changeDescription": {
+ "description": "Change that led to this version of the Policy.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "rules": {
+ "description": "Set of rules that the policy contains.",
+ "$ref": "#/definitions/rules"
+ },
+ "teams" : {
+ "description": "Teams that use this policy directly and not through roles.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "roles" : {
+ "description": "Roles that use this policy.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "location": {
+ "description": "Location to which a policy is applied. This field is relevant only for `lifeCycle` policies.",
+ "$ref": "../../type/entityReference.json",
+ "default": null
+ },
+ "allowDelete" : {
+ "description": "Some system policies can't be deleted",
+ "type" : "boolean"
+ },
+ "allowEdit" : {
+ "description": "Some system roles can't be edited",
+ "type" : "boolean"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "provider" : {
+ "$ref": "../../type/basic.json#/definitions/providerType"
+ },
+ "disabled" : {
+ "description": "System policy can't be deleted. Use this flag to disable them.",
+ "type": "boolean"
+ },
+ "domains" : {
+ "description": "Domains the asset belongs to. When not set, the asset inherits the domain from the parent it belongs to.",
+ "$ref": "../../type/entityReferenceList.json"
+ }
+ },
+ "required": ["id", "name", "rules"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/apiService.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/apiService.json
new file mode 100644
index 000000000000..0e8a72125fd4
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/apiService.json
@@ -0,0 +1,160 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/apiService.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Api Service",
+ "description": "This schema defines the API Service entity, to capture metadata from any REST API Services.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.services.ApiService",
+ "javaInterfaces": [
+ "org.openmetadata.schema.EntityInterface",
+ "org.openmetadata.schema.ServiceEntityInterface"
+ ],
+ "definitions": {
+ "apiServiceType": {
+ "description": "Type of api service such as REST, Webhook,...",
+ "javaInterfaces": [
+ "org.openmetadata.schema.EnumInterface"
+ ],
+ "type": "string",
+ "enum": [
+ "Rest",
+ "WEBHOOK"
+ ],
+ "javaEnums": [
+ {
+ "name": "Rest"
+ },
+ {
+ "name": "WEBHOOK"
+ }
+ ]
+ },
+ "apiConnection": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.ApiConnection",
+ "description": "API Service Connection.",
+ "javaInterfaces": [
+ "org.openmetadata.schema.ServiceConnectionEntityInterface"
+ ],
+ "properties": {
+ "config": {
+ "mask": true,
+ "oneOf": [
+ {
+ "$ref": "./connections/api/restConnection.json"
+ }
+ ]
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier of this API service instance.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name that identifies this API service.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "fullyQualifiedName": {
+ "description": "FullyQualifiedName same as `name`.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this API service.",
+ "type": "string"
+ },
+ "serviceType": {
+ "description": "Type of API service such as REST, WEBHOOK..",
+ "$ref": "#/definitions/apiServiceType"
+ },
+ "description": {
+ "description": "Description of a API service instance.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "connection": {
+ "$ref": "#/definitions/apiConnection"
+ },
+ "pipelines": {
+ "description": "References to pipelines deployed for this API service to extract metadata, usage, lineage etc..",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "testConnectionResult": {
+ "description": "Last test connection results for this service",
+ "$ref": "connections/testConnectionResult.json"
+ },
+ "tags": {
+ "description": "Tags for this API Service.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": []
+ },
+ "followers": {
+ "description": "Followers of this entity.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this API service.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "owners": {
+ "description": "Owners of this API service.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "entityStatus": {
+ "description": "Status of the entity.",
+ "$ref": "../../type/status.json"
+ },
+ "dataProducts" : {
+ "description": "List of data products this entity is part of.",
+ "$ref" : "../../type/entityReferenceList.json"
+ },
+ "dataContract": {
+ "description": "Reference to the data contract for this entity.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "domains" : {
+ "description": "Domains the API service belongs to.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "ingestionRunner" : {
+ "description": "The ingestion agent responsible for executing the ingestion pipeline.",
+ "$ref": "../../type/entityReference.json"
+ }
+ },
+ "required": ["id", "name", "serviceType"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/api/openAPISchemaFilePath.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/api/openAPISchemaFilePath.json
new file mode 100644
index 000000000000..d7553fc88de9
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/api/openAPISchemaFilePath.json
@@ -0,0 +1,18 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/api/openAPISchemaFilePath.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "OpenAPISchemaFilePath",
+ "description": "Open API Schema File Path Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.api.OpenAPISchemaFilePath",
+ "properties": {
+ "openAPISchemaFilePath": {
+ "expose": true,
+ "title": "OpenAPI Schema File Path",
+ "description": "Path to a local OpenAPI schema file.",
+ "type": "string"
+ }
+ },
+ "required": ["openAPISchemaFilePath"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/api/openAPISchemaS3.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/api/openAPISchemaS3.json
new file mode 100644
index 000000000000..d36a7140d138
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/api/openAPISchemaS3.json
@@ -0,0 +1,24 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/api/openAPISchemaS3.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "OpenAPISchemaS3",
+ "description": "Open API Schema S3 Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.api.OpenAPISchemaS3",
+ "properties": {
+ "openAPISchemaS3URL": {
+ "expose": true,
+ "title": "OpenAPI Schema S3 URL",
+ "description": "S3 URL of the OpenAPI schema file (JSON or YAML). Example: https://bucket-name.s3.amazonaws.com/path/to/openapi_schema.json",
+ "type": "string",
+ "format": "uri"
+ },
+ "awsCredentials": {
+ "title": "AWS Credentials",
+ "description": "AWS credentials required to access the S3 file.",
+ "$ref": "../../../../security/credentials/awsCredentials.json"
+ }
+ },
+ "required": ["openAPISchemaS3URL", "awsCredentials"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/api/openAPISchemaURL.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/api/openAPISchemaURL.json
new file mode 100644
index 000000000000..2570cc80de47
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/api/openAPISchemaURL.json
@@ -0,0 +1,19 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/api/openAPISchemaURL.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "OpenAPISchemaURL",
+ "description": "Open API Schema URL Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.api.OpenAPISchemaURL",
+ "properties": {
+ "openAPISchemaURL": {
+ "expose": true,
+ "title": "OpenAPI Schema URL",
+ "description": "Open API Schema URL.",
+ "type": "string",
+ "format": "uri"
+ }
+ },
+ "required": ["openAPISchemaURL"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/api/restConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/api/restConnection.json
new file mode 100644
index 000000000000..5acad1644853
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/api/restConnection.json
@@ -0,0 +1,78 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/api/restConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "RestConnection",
+ "description": "REST Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.api.RestConnection",
+ "definitions": {
+ "restType": {
+ "description": "REST API type",
+ "type": "string",
+ "enum": ["Rest"],
+ "default": "Rest"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "REST API Type",
+ "description": "REST API Type",
+ "$ref": "#/definitions/restType",
+ "default": "Rest"
+ },
+ "openAPISchemaConnection": {
+ "title": "OpenAPI Schema Connection",
+ "description": "OpenAPI Schema source config. Either a URL or a file path must be provided.",
+ "oneOf": [
+ {
+ "$ref": "openAPISchemaURL.json"
+ },
+ {
+ "$ref": "openAPISchemaFilePath.json"
+ },
+ {
+ "$ref": "openAPISchemaS3.json"
+ }
+ ]
+ },
+ "token": {
+ "title": "Token",
+ "description": "Generated Token to connect to OpenAPI Schema.",
+ "type": "string",
+ "format": "password"
+ },
+ "docURL": {
+ "expose": true,
+ "title": "docURL",
+ "description": "Documentation URL for the schema.",
+ "type": "string",
+ "format": "uri"
+ },
+ "apiCollectionFilterPattern": {
+ "description": "Regex to only fetch api collections with names matching the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default API Collection Filter Pattern"
+ },
+ "apiEndpointFilterPattern": {
+ "description": "Regex to only fetch api endpoints with names matching the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default API Endpoint Filter Pattern"
+ },
+ "verifySSL": {
+ "description": "Client SSL verification. Make sure to configure the SSLConfig if enabled.",
+ "$ref": "../../../../security/ssl/verifySSLConfig.json#/definitions/verifySSL",
+ "default": "no-ssl"
+ },
+ "sslConfig": {
+ "$ref": "../../../../security/ssl/verifySSLConfig.json#/definitions/sslConfig"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "description": "Supports Metadata Extraction.",
+ "type": "boolean",
+ "default": true
+ }
+ },
+ "additionalProperties": false,
+ "required": ["openAPISchemaConnection"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/common/sslCertPaths.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/common/sslCertPaths.json
new file mode 100644
index 000000000000..46a7cca99586
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/common/sslCertPaths.json
@@ -0,0 +1,26 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/search/elasticSearch/apiAuth.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SSL Certificates By Path",
+ "description": "SSL Certificates By Path",
+ "javaType": "org.openmetadata.schema.services.common.SSLCertPaths",
+ "type": "object",
+ "properties": {
+ "caCertPath": {
+ "title": "CA Certificate Path",
+ "description": "CA Certificate Path",
+ "type": "string"
+ },
+ "clientCertPath": {
+ "title": "Client Certificate Path",
+ "description": "Client Certificate Path",
+ "type": "string"
+ },
+ "privateKeyPath": {
+ "title": "Private Key Path",
+ "description": "Private Key Path",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/common/sslCertValues.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/common/sslCertValues.json
new file mode 100644
index 000000000000..120ffbba8d2d
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/common/sslCertValues.json
@@ -0,0 +1,35 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/search/elasticSearch/apiAuth.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SSL Certificates By Values",
+ "description": "SSL Certificates By Values",
+ "javaType": "org.openmetadata.schema.services.common.SSLCertValues",
+ "type": "object",
+ "properties": {
+ "caCertValue": {
+ "title": "CA Certificate Value",
+ "description": "CA Certificate Value",
+ "type": "string",
+ "format": "password"
+ },
+ "clientCertValue": {
+ "title": "Client Certificate Value",
+ "description": "Client Certificate Value",
+ "type": "string",
+ "format": "password"
+ },
+ "privateKeyValue": {
+ "title": "Private Key Value",
+ "description": "Private Key Value",
+ "type": "string",
+ "format": "password"
+ },
+ "stagingDir": {
+ "title": "Staging Directory Path",
+ "description": "Staging Directory Path",
+ "type": "string",
+ "default": "/tmp/openmetadata-certs"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/common/sslConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/common/sslConfig.json
new file mode 100644
index 000000000000..ccdabd29c793
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/common/sslConfig.json
@@ -0,0 +1,25 @@
+
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/search/elasticSearch/apiAuth.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SSL Config",
+ "description": "SSL Config",
+ "javaType": "org.openmetadata.schema.services.common.SSLConfig",
+ "type": "object",
+ "properties": {
+ "certificates": {
+ "type":"object",
+ "title": "SSL Certificates",
+ "description": "SSL Certificates",
+ "oneOf": [
+ {
+ "$ref": "./sslCertPaths.json"
+ },
+ {
+ "$ref": "./sslCertValues.json"
+ }
+
+ ]
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/connectionBasicType.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/connectionBasicType.json
new file mode 100644
index 000000000000..538456587f66
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/connectionBasicType.json
@@ -0,0 +1,158 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/connectionBasicType.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "ConnectionType",
+ "description": "This schema defines basic common types that are used by other schemas.",
+ "definitions": {
+ "connectionOptions": {
+ "javaType": "org.openmetadata.schema.services.connections.database.ConnectionOptions",
+ "description": "Additional connection options to build the URL that can be sent to service during the connection.",
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "connectionArguments": {
+ "javaType": "org.openmetadata.schema.services.connections.database.ConnectionArguments",
+ "description": "Additional connection arguments such as security or protocol configs that can be sent to service during connection.",
+ "type": "object",
+ "additionalProperties": {
+ ".{1,}": { "type": "string" }
+ }
+ },
+ "supportsMetadataExtraction": {
+ "description": "Supports Metadata Extraction.",
+ "type": "boolean",
+ "default": true
+ },
+ "supportsIncrementalMetadataExtraction": {
+ "description": "Supports Incremental Metadata Extraction.",
+ "type": "boolean",
+ "default": true
+ },
+ "supportsUsageExtraction": {
+ "description": "Supports Usage Extraction.",
+ "type": "boolean",
+ "default": true
+ },
+ "supportsLineageExtraction": {
+ "description": "Supports Lineage Extraction.",
+ "type": "boolean",
+ "default": true
+ },
+ "supportsViewLineageExtraction": {
+ "description": "Supports View Lineage Extraction.",
+ "type": "boolean",
+ "default": true
+ },
+ "supportsProfiler": {
+ "description": "Supports Profiler",
+ "type": "boolean",
+ "default": true
+ },
+ "supportsStatistics": {
+ "description": "Supports collecting metrics from an aggregated statistics table",
+ "type": "boolean",
+ "default": false
+ },
+ "supportsDatabase": {
+ "description": "The source service supports the database concept in its hierarchy",
+ "type": "boolean",
+ "default": true
+ },
+ "supportsQueryComment": {
+ "description": "For Database Services using SQLAlchemy, True to enable running a comment for all queries run from OpenMetadata.",
+ "type": "boolean",
+ "default": true
+ },
+ "supportsSystemProfile": {
+ "description": "The source database supports system profiles for tables such as last update.",
+ "type": "boolean",
+ "default": false
+ },
+ "supportsDataInsightExtraction": {
+ "description": "Support Metadata To Elastic Search",
+ "type": "boolean",
+ "default": true
+ },
+ "supportsElasticSearchReindexingExtraction": {
+ "description": "Support Elastic Search Reindexing",
+ "type": "boolean",
+ "default": true
+ },
+ "supportsDBTExtraction": {
+ "description": "Supports DBT Extraction.",
+ "type": "boolean",
+ "default": true
+ },
+ "supportsDataDiff": {
+ "description": "Supports the data diff data qualty specification.",
+ "type": "boolean",
+ "default": true
+ },
+ "dataStorageConfig": {
+ "description": "Storage config to store sample data",
+ "type": "object",
+ "properties": {
+ "bucketName": {
+ "title": "Bucket Name",
+ "description": "Bucket Name",
+ "type": "string",
+ "default": ""
+ },
+ "prefix": {
+ "title": "Prefix",
+ "description": "Prefix of the data source.",
+ "type": "string",
+ "default": ""
+ },
+ "filePathPattern": {
+ "title": "File Path Pattern",
+ "description": "Provide the pattern of the path where the generated sample data file needs to be stored.",
+ "type": "string",
+ "default": "{service_name}/{database_name}/{database_schema_name}/{table_name}/sample_data.parquet"
+ },
+ "overwriteData": {
+ "title": "Overwrite Sample Data",
+ "description": "When this field enabled a single parquet file will be created to store sample data, otherwise we will create a new file per day",
+ "type": "boolean",
+ "default": true
+ },
+ "storageConfig": {
+ "oneOf": [
+ {
+ "title": "AWS S3 Storage Config",
+ "$ref": "../../../security/credentials/awsCredentials.json"
+ },
+ {
+ "title": "OpenMetadata Storage",
+ "type": "object",
+ "additionalProperties": false
+ }
+ ]
+ }
+ }
+ },
+ "sampleDataStorageConfig": {
+ "description": "Storage config to store sample data",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.SampleDataStorageConfig",
+ "properties": {
+ "config": {
+ "oneOf": [
+ {
+ "title": "No Sample Data Storage Config",
+ "type": "object",
+ "additionalProperties": false
+ },
+ {
+ "title": "Sample Data Storage Config",
+ "$ref": "#/definitions/dataStorageConfig"
+ }
+ ]
+ }
+ },
+ "additionalProperties": false
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/customDashboardConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/customDashboardConnection.json
new file mode 100644
index 000000000000..8f8ca0aa725f
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/customDashboardConnection.json
@@ -0,0 +1,60 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/dashboard/customDashboardConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CustomDashboardConnection",
+ "description": "Custom Dashboard Service connection to build a source that is not supported by OpenMetadata yet.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.dashboard.CustomDashboardConnection",
+ "definitions": {
+ "customDashboardType": {
+ "title": "Service Type",
+ "description": "Custom dashboard service type",
+ "type": "string",
+ "enum": ["CustomDashboard"],
+ "default": "CustomDashboard"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Custom dashboard service type",
+ "$ref": "#/definitions/customDashboardType",
+ "default": "CustomDashboard"
+ },
+ "sourcePythonClass": {
+ "title": "Source Python Class Name",
+ "description": "Source Python Class Name to instantiated by the ingestion workflow",
+ "type": "string"
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "dashboardFilterPattern": {
+ "description": "Regex to exclude or include dashboards that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Dashboard Filter Pattern"
+ },
+ "chartFilterPattern": {
+ "description": "Regex exclude or include charts that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Chart Filter Pattern"
+ },
+ "dataModelFilterPattern": {
+ "description": "Regex exclude or include data models that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Data Model Filter Pattern"
+ },
+ "projectFilterPattern": {
+ "description": "Regex to exclude or include projects that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Project Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": true,
+ "required": ["type"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/domoDashboardConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/domoDashboardConnection.json
new file mode 100644
index 000000000000..8b2c58dc2188
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/domoDashboardConnection.json
@@ -0,0 +1,81 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/dashboard/domoDashboardConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DomoDashboardConnection",
+ "description": "Domo Dashboard Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.dashboard.DomoDashboardConnection",
+ "definitions": {
+ "domoDashboardType": {
+ "description": " service type",
+ "type": "string",
+ "enum": ["DomoDashboard"],
+ "default": "DomoDashboard"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/domoDashboardType",
+ "default": "DomoDashboard"
+ },
+ "clientId": {
+ "title": "Client ID",
+ "description": "Client ID for DOMO",
+ "type": "string"
+ },
+ "secretToken": {
+ "title": "Secret Token",
+ "description": "Secret Token to connect DOMO",
+ "type": "string",
+ "format": "password"
+ },
+ "accessToken": {
+ "title": "Access Token",
+ "description": "Access token to connect to DOMO",
+ "type": "string"
+ },
+ "apiHost": {
+ "expose": true,
+ "title": "API Host",
+ "description": "API Host to connect to DOMO instance",
+ "default": "api.domo.com",
+ "type": "string",
+ "format": "string"
+ },
+ "instanceDomain": {
+ "title": "Instance Domain",
+ "description": "URL of your Domo instance, e.g., https://openmetadata.domo.com",
+ "type": "string",
+ "format": "uri"
+ },
+ "dashboardFilterPattern": {
+ "description": "Regex to exclude or include dashboards that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Dashboard Filter Pattern"
+ },
+ "chartFilterPattern": {
+ "description": "Regex exclude or include charts that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Chart Filter Pattern"
+ },
+ "dataModelFilterPattern": {
+ "description": "Regex exclude or include data models that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Data Model Filter Pattern"
+ },
+ "projectFilterPattern": {
+ "description": "Regex to exclude or include projects that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Project Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["clientId", "secretToken", "instanceDomain"]
+ }
+
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/grafanaConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/grafanaConnection.json
new file mode 100644
index 000000000000..cc58f7031a62
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/grafanaConnection.json
@@ -0,0 +1,66 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/dashboard/grafanaConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "GrafanaConnection",
+ "description": "Grafana Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.dashboard.GrafanaConnection",
+ "definitions": {
+ "grafanaType": {
+ "description": "Grafana service type",
+ "type": "string",
+ "enum": ["Grafana"],
+ "default": "Grafana"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/grafanaType",
+ "default": "Grafana"
+ },
+ "hostPort": {
+ "title": "Host and Port",
+ "description": "URL to the Grafana instance.",
+ "type": "string",
+ "format": "uri",
+ "expose": true
+ },
+ "apiKey": {
+ "title": "Service Account Token",
+ "description": "Service Account Token to authenticate to the Grafana APIs. Use Service Account Tokens (format: glsa_xxxx) for authentication. Legacy API Keys are no longer supported by Grafana as of January 2025. Both self-hosted and Grafana Cloud are supported. Requires Admin role for full metadata extraction.",
+ "type": "string",
+ "format": "password"
+ },
+ "verifySSL": {
+ "title": "Verify SSL",
+ "description": "Boolean marking if we need to verify the SSL certs for Grafana. Default to True.",
+ "type": "boolean",
+ "default": true
+ },
+ "dashboardFilterPattern": {
+ "description": "Regex to exclude or include dashboards that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Dashboard Filter Pattern"
+ },
+ "chartFilterPattern": {
+ "description": "Regex exclude or include charts that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Chart Filter Pattern"
+ },
+ "pageSize": {
+ "title": "Page Size",
+ "description": "Page size for pagination in API requests. Default is 100.",
+ "type": "integer",
+ "default": 100,
+ "minimum": 1
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["hostPort", "apiKey"]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/hexConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/hexConnection.json
new file mode 100644
index 000000000000..9b888aed0247
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/hexConnection.json
@@ -0,0 +1,61 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/dashboard/hexConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "HexConnection",
+ "description": "Hex Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.dashboard.HexConnection",
+ "definitions": {
+ "hexType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["Hex"],
+ "default": "Hex"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/hexType",
+ "default": "Hex"
+ },
+ "hostPort": {
+ "expose": true,
+ "title": "Host and Port",
+ "description": "Hex API URL. For Hex.tech cloud, use https://app.hex.tech",
+ "type": "string",
+ "format": "uri",
+ "default": "https://app.hex.tech"
+ },
+ "tokenType": {
+ "title": "Token Type",
+ "description": "Type of token to use for authentication",
+ "type": "string",
+ "enum": ["personal", "workspace"],
+ "default": "personal"
+ },
+ "token": {
+ "title": "API Token",
+ "description": "Hex API token for authentication. Can be personal or workspace token.",
+ "type": "string",
+ "format": "password"
+ },
+ "includeTags": {
+ "title": "Include Categories and status as Tags",
+ "description": "Whether to import Hex project categories as OpenMetadata tags",
+ "type": "boolean",
+ "default": true
+ },
+ "dashboardFilterPattern": {
+ "description": "Regex to exclude or include dashboards that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Dashboard Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["hostPort", "token"]
+ }
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/lightdashConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/lightdashConnection.json
new file mode 100644
index 000000000000..d402a0fe58ad
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/lightdashConnection.json
@@ -0,0 +1,80 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/dashboard/lightdashConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "LightdashConnection",
+ "description": "Lightdash Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.dashboard.LightdashConnection",
+ "definitions": {
+ "lightdashType": {
+ "description": "Lightdash service type",
+ "type": "string",
+ "enum": ["Lightdash"],
+ "default": "Lightdash"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/lightdashType",
+ "default": "Lightdash"
+ },
+ "hostPort": {
+ "expose": true,
+ "title": "Host Port",
+ "description": "Address for your running Lightdash instance",
+ "type": "string",
+ "format": "uri",
+ "default": "http://localhost:5000"
+ },
+ "apiKey": {
+ "title": "API Key",
+ "description": "The personal access token you can generate in the Lightdash app under the user settings",
+ "type": "string",
+ "format": "password"
+ },
+ "projectUUID": {
+ "title": "Project UUID",
+ "description": "The Project UUID for your Lightdash instance",
+ "type": "string"
+ },
+ "spaceUUID": {
+ "title": "Space UUID",
+ "description": "The Space UUID for your Lightdash instance",
+ "type": "string"
+ },
+ "proxyAuthentication": {
+ "title": "Proxy Authentication",
+ "description": "Use if your Lightdash instance is behind a proxy like (Cloud IAP)",
+ "type": "string",
+ "format": "password"
+ },
+ "dashboardFilterPattern": {
+ "description": "Regex to exclude or include dashboards that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Dashboard Filter Pattern"
+ },
+ "chartFilterPattern": {
+ "description": "Regex exclude or include charts that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Chart Filter Pattern"
+ },
+ "dataModelFilterPattern": {
+ "description": "Regex exclude or include data models that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Data Model Filter Pattern"
+ },
+ "projectFilterPattern": {
+ "description": "Regex to exclude or include projects that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Project Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["hostPort", "apiKey","projectUUID","spaceUUID"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/lookerConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/lookerConnection.json
new file mode 100644
index 000000000000..45496d39e232
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/lookerConnection.json
@@ -0,0 +1,101 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/dashboard/lookerConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "LookerConnection",
+ "description": "Looker Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.dashboard.LookerConnection",
+ "definitions": {
+ "lookerType": {
+ "description": "Looker service type",
+ "type": "string",
+ "enum": ["Looker"],
+ "default": "Looker"
+ },
+ "noGitCredentials": {
+ "title": "No Git Credentials",
+ "description": "Do not set any credentials. Note that credentials are required to extract .lkml views and their lineage.",
+ "type": "object",
+ "additionalProperties": false
+ },
+ "localRepositoryPath": {
+ "title": "Local Path",
+ "type": "string",
+ "description": "Local path to get the repository from the file system.",
+ "default": null
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/lookerType",
+ "default": "Looker"
+ },
+ "clientId": {
+ "title": "Client ID",
+ "description": "User's Client ID. This user should have privileges to read all the metadata in Looker.",
+ "type": "string"
+ },
+ "clientSecret": {
+ "title": "Client Secret",
+ "description": "User's Client Secret.",
+ "type": "string",
+ "format": "password"
+ },
+ "hostPort": {
+ "expose": true,
+ "title": "Host and Port",
+ "description": "URL to the Looker instance.",
+ "type": "string",
+ "format": "uri"
+ },
+ "gitCredentials": {
+ "title": "GitHub Credentials",
+ "description": "Credentials to extract the .lkml files from a repository. This is required to get all the lineage and definitions.",
+ "oneOf": [
+ {
+ "$ref": "#/definitions/noGitCredentials"
+ },
+ {
+ "$ref": "#/definitions/localRepositoryPath"
+ },
+ {
+ "$ref": "../../../../security/credentials/githubCredentials.json"
+ },
+ {
+ "$ref": "../../../../security/credentials/bitbucketCredentials.json"
+ },
+ {
+ "$ref": "../../../../security/credentials/gitlabCredentials.json"
+ }
+ ]
+ },
+ "dashboardFilterPattern": {
+ "description": "Regex to exclude or include dashboards that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Dashboard Filter Pattern"
+ },
+ "chartFilterPattern": {
+ "description": "Regex exclude or include charts that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Chart Filter Pattern"
+ },
+ "dataModelFilterPattern": {
+ "description": "Regex exclude or include data models that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Data Model Filter Pattern"
+ },
+ "projectFilterPattern": {
+ "description": "Regex to exclude or include projects that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Project Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["hostPort", "clientId", "clientSecret"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/metabaseConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/metabaseConnection.json
new file mode 100644
index 000000000000..74106df12f97
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/metabaseConnection.json
@@ -0,0 +1,74 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/dashboard/metabaseConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "MetabaseConnection",
+ "description": "Metabase Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.dashboard.MetabaseConnection",
+ "definitions": {
+ "metabaseType": {
+ "description": "Metabase service type",
+ "type": "string",
+ "enum": ["Metabase"],
+ "default": "Metabase"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/metabaseType",
+ "default": "Metabase"
+ },
+ "username": {
+ "title": "Username",
+ "description": "Username to connect to Metabase. Required for basic authentication.",
+ "type": "string"
+ },
+ "password": {
+ "title": "Password",
+ "description": "Password to connect to Metabase. Required for basic authentication.",
+ "type": "string",
+ "format": "password"
+ },
+ "apiKey": {
+ "title": "API Token",
+ "description": "API token to connect to Metabase. Use this instead of username/password for token-based authentication.",
+ "type": "string",
+ "format": "password"
+ },
+ "hostPort": {
+ "expose": true,
+ "title": "Host and Port",
+ "description": "Host and Port of the Metabase instance.",
+ "type": "string",
+ "format": "uri"
+ },
+ "dashboardFilterPattern": {
+ "description": "Regex to exclude or include dashboards that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Dashboard Filter Pattern"
+ },
+ "chartFilterPattern": {
+ "description": "Regex exclude or include charts that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Chart Filter Pattern"
+ },
+ "dataModelFilterPattern": {
+ "description": "Regex exclude or include data models that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Data Model Filter Pattern"
+ },
+ "projectFilterPattern": {
+ "description": "Regex to exclude or include projects that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Project Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["hostPort"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/microStrategyConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/microStrategyConnection.json
new file mode 100644
index 000000000000..57bc3685de0c
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/microStrategyConnection.json
@@ -0,0 +1,79 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/dashboard/microStrategyConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "MicroStrategyConnection",
+ "description": "MicroStrategy Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.dashboard.MicroStrategyConnection",
+ "definitions": {
+ "microStrategyType": {
+ "description": "MicroStrategy service type",
+ "type": "string",
+ "enum": ["MicroStrategy"],
+ "default": "MicroStrategy"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/microStrategyType",
+ "default": "MicroStrategy"
+ },
+ "username": {
+ "title": "Username",
+ "description": "Username to connect to MicroStrategy. This user should have privileges to read all the metadata in MicroStrategy.",
+ "type": "string"
+ },
+ "password": {
+ "title": "Password",
+ "description": "Password to connect to MicroStrategy.",
+ "type": "string",
+ "format": "password"
+ },
+ "hostPort": {
+ "expose": true,
+ "title": "Host and Port",
+ "description": "Host and Port of the MicroStrategy instance.",
+ "type": "string",
+ "format": "uri"
+ },
+ "projectName": {
+ "title": "Project Name",
+ "description": "MicroStrategy Project Name",
+ "type": "string"
+ },
+ "loginMode": {
+ "title": "Login Mode",
+ "description": "Login Mode for Microstrategy's REST API connection. You can authenticate with one of the following authentication modes: `Standard (1)`, `Anonymous (8)`. Default will be `Standard (1)`. If you're using demo account for Microstrategy, it will be needed to authenticate through loginMode `8`.",
+ "type": "string",
+ "default": "1"
+ },
+ "dashboardFilterPattern": {
+ "description": "Regex to exclude or include dashboards that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Dashboard Filter Pattern"
+ },
+ "chartFilterPattern": {
+ "description": "Regex exclude or include charts that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Chart Filter Pattern"
+ },
+ "dataModelFilterPattern": {
+ "description": "Regex exclude or include data models that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Data Model Filter Pattern"
+ },
+ "projectFilterPattern": {
+ "description": "Regex to exclude or include projects that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Project Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["hostPort", "username", "password"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/modeConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/modeConnection.json
new file mode 100644
index 000000000000..97fca6aebd25
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/modeConnection.json
@@ -0,0 +1,79 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/dashboard/modeConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "ModeConnection",
+ "description": "Mode Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.dashboard.ModeConnection",
+ "definitions": {
+ "modeType": {
+ "description": "Mode service type",
+ "type": "string",
+ "enum": ["Mode"],
+ "default": "Mode"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/modeType",
+ "default": "Mode"
+ },
+ "hostPort": {
+ "expose": true,
+ "title": "Host and Port",
+ "description": "URL for the mode instance.",
+ "type": "string",
+ "format": "uri",
+ "default": "https://app.mode.com"
+ },
+ "accessToken": {
+ "title": "Access Token",
+ "description": "Access Token for Mode Dashboard",
+ "type": "string"
+ },
+ "accessTokenPassword": {
+ "title": "Access Token Password",
+ "description": "Access Token Password for Mode Dashboard",
+ "type": "string",
+ "format": "password"
+ },
+ "workspaceName": {
+ "title": "Workspace Name",
+ "description": "Mode Workspace Name",
+ "type": "string"
+ },
+ "filterQueryParam": {
+ "title": "Filter Query Param",
+ "description": "Filter query parameter for some of the Mode API calls",
+ "type": "string"
+ },
+ "dashboardFilterPattern": {
+ "description": "Regex to exclude or include dashboards that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Dashboard Filter Pattern"
+ },
+ "chartFilterPattern": {
+ "description": "Regex exclude or include charts that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Chart Filter Pattern"
+ },
+ "dataModelFilterPattern": {
+ "description": "Regex exclude or include data models that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Data Model Filter Pattern"
+ },
+ "projectFilterPattern": {
+ "description": "Regex to exclude or include projects that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Project Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["accessToken", "accessTokenPassword", "workspaceName"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/powerBIConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/powerBIConnection.json
new file mode 100644
index 000000000000..0856c876d2b7
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/powerBIConnection.json
@@ -0,0 +1,156 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/dashboard/powerBIConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "PowerBIConnection",
+ "description": "PowerBI Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.dashboard.PowerBIConnection",
+ "definitions": {
+ "powerBiType": {
+ "description": "PowerBI service type",
+ "type": "string",
+ "enum": ["PowerBI"],
+ "default": "PowerBI"
+ },
+ "localConfig": {
+ "title": "Local Config",
+ "description": "Local config source where no extra information needs to be sent.",
+ "type": "object",
+ "properties": {
+ "pbitFileConfigType": {
+ "description": "pbit File Configuration type",
+ "type": "string",
+ "enum": ["local"],
+ "default": "local"
+ },
+ "path": {
+ "title": "Path",
+ "description": "Directory path for the pbit files",
+ "type": "string"
+ },
+ "pbitFilesExtractDir": {
+ "title": "pbit Files Extraction Directory",
+ "description": "Path of the folder where the .pbit files will be unzipped and datamodel schema will be extracted",
+ "type": "string",
+ "default": "/tmp/pbitFiles"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/powerBiType",
+ "default": "PowerBI"
+ },
+ "clientId": {
+ "title": "Client ID",
+ "description": "client_id for PowerBI.",
+ "type": "string"
+ },
+ "clientSecret": {
+ "title": "Client Secret",
+ "description": "clientSecret for PowerBI.",
+ "type": "string",
+ "format": "password"
+ },
+ "tenantId": {
+ "title": "Tenant ID",
+ "description": "Tenant ID for PowerBI.",
+ "type": "string"
+ },
+ "apiURL": {
+ "title": "PowerBI REST API url",
+ "description": "API URL to call powerbi rest apis to extract metadata. Default to `https://api.powerbi.com`. You can provide youw own in case of different environment",
+ "type": "string",
+ "default": "https://api.powerbi.com"
+ },
+ "authorityURI": {
+ "title": "Authority URI",
+ "description": "Authority URI for the PowerBI service.",
+ "type": "string",
+ "default": "https://login.microsoftonline.com/"
+ },
+ "hostPort": {
+ "expose": true,
+ "title": "Host and Port",
+ "description": "Dashboard URL for PowerBI service.",
+ "type": "string",
+ "format": "uri",
+ "default": "https://app.powerbi.com"
+ },
+ "scope": {
+ "title": "Scope",
+ "description": "PowerBI secrets.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "default": ["https://analysis.windows.net/powerbi/api/.default"]
+ },
+ "pagination_entity_per_page": {
+ "title": "Pagination Entity Per Page",
+ "description": "Entity Limit set here will be used to paginate the PowerBi APIs",
+ "type": "integer",
+ "default": 100
+ },
+ "useAdminApis": {
+ "title": "Use PowerBI Admin APIs",
+ "description": "Fetch the PowerBI metadata using admin APIs",
+ "type": "boolean",
+ "default": true
+ },
+ "displayTableNameFromSource": {
+ "title": "Display Table Name from source",
+ "description": "Display Table Name from source instead of renamed table name for datamodel tables",
+ "type": "boolean",
+ "default": false
+ },
+ "pbitFilesSource": {
+ "title": "PowerBI .pbit Files Source",
+ "description": "Source to get the .pbit files to extract lineage information",
+ "oneOf": [
+ {
+ "$ref": "#/definitions/localConfig"
+ },
+ {
+ "$ref": "powerbi/azureConfig.json"
+ },
+ {
+ "$ref": "powerbi/gcsConfig.json"
+ },
+ {
+ "$ref": "powerbi/s3Config.json"
+ }
+ ]
+ },
+ "dashboardFilterPattern": {
+ "description": "Regex to exclude or include dashboards that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Dashboard Filter Pattern"
+ },
+ "chartFilterPattern": {
+ "description": "Regex exclude or include charts that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Chart Filter Pattern"
+ },
+ "dataModelFilterPattern": {
+ "description": "Regex exclude or include data models that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Data Model Filter Pattern"
+ },
+ "projectFilterPattern": {
+ "description": "Regex to exclude or include projects that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Project Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["clientId", "clientSecret", "tenantId"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/powerBIReportServerConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/powerBIReportServerConnection.json
new file mode 100644
index 000000000000..feb249e225e3
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/powerBIReportServerConnection.json
@@ -0,0 +1,80 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/dashboard/powerBIReportServerConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "PowerBIReportServerConnection",
+ "description": "PowerBIReportServer Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.dashboard.PowerBIReportServerConnection",
+ "definitions": {
+ "powerBIReportServerType": {
+ "description": "PowerBIReportServer service type",
+ "type": "string",
+ "enum": [
+ "PowerBIReportServer"
+ ],
+ "default": "PowerBIReportServer"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/powerBIReportServerType",
+ "default": "PowerBIReportServer"
+ },
+ "hostPort": {
+ "expose": true,
+ "title": "Host and Port",
+ "description": "Dashboard URL for PowerBI Report Server.",
+ "type": "string",
+ "format": "uri"
+ },
+ "username": {
+ "title": "Username",
+ "description": "Username to connect to PowerBI report server.",
+ "type": "string"
+ },
+ "password": {
+ "title": "Password",
+ "description": "Password to connect to PowerBI report server.",
+ "type": "string",
+ "format": "password"
+ },
+ "webPortalVirtualDirectory": {
+ "title": "Web Portal Virtual Directory Name",
+ "description": "Web Portal Virtual Directory Name.",
+ "type": "string",
+ "default": "Reports"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ },
+ "dashboardFilterPattern": {
+ "description": "Regex to exclude or include dashboards that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Dashboard Filter Pattern"
+ },
+ "chartFilterPattern": {
+ "description": "Regex exclude or include charts that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Chart Filter Pattern"
+ },
+ "dataModelFilterPattern": {
+ "description": "Regex exclude or include data models that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Data Model Filter Pattern"
+ },
+ "projectFilterPattern": {
+ "description": "Regex to exclude or include projects that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Project Filter Pattern"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "hostPort",
+ "username",
+ "password"
+ ]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/powerbi/azureConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/powerbi/azureConfig.json
new file mode 100644
index 000000000000..6e66864953ff
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/powerbi/azureConfig.json
@@ -0,0 +1,32 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/dashboard/powerbi/azureConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AzureConfig",
+ "description": "Azure storage config for pbit files",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.dashboard.powerbi.AzureConfig",
+ "properties": {
+ "pbitFileConfigType": {
+ "description": "pbit File Configuration type",
+ "type": "string",
+ "enum": ["azure"],
+ "default": "azure"
+ },
+ "securityConfig": {
+ "title": "Azure Config Source",
+ "$ref": "../../../../../security/credentials/azureCredentials.json"
+ },
+ "prefixConfig": {
+ "title": "Prefix Config",
+ "$ref": "bucketDetails.json"
+ },
+ "pbitFilesExtractDir": {
+ "title": "pbit Files Extraction Directory",
+ "description": "Path of the folder where the .pbit files will be unzipped and datamodel schema will be extracted",
+ "type": "string",
+ "default": "/tmp/pbitFiles"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["securityConfig"]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/powerbi/bucketDetails.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/powerbi/bucketDetails.json
new file mode 100644
index 000000000000..409b4432ce28
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/powerbi/bucketDetails.json
@@ -0,0 +1,21 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/dashboard/powerbi/bucketDetails.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Bucket Details",
+ "description": "Details of the bucket where the .pbit files are stored",
+ "javaType": "org.openmetadata.schema.services.connections.dashboard.powerbi.bucketDetails",
+ "type": "object",
+ "properties": {
+ "bucketName": {
+ "title": "Bucket Name",
+ "description": "Name of the bucket where the .pbit files are stored",
+ "type": "string"
+ },
+ "objectPrefix": {
+ "title": "Object Prefix",
+ "description": "Path of the folder where the .pbit files are stored",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/powerbi/gcsConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/powerbi/gcsConfig.json
new file mode 100644
index 000000000000..e4fac48c3314
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/powerbi/gcsConfig.json
@@ -0,0 +1,32 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/dashboard/powerbi/gcsConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "GCSConfig",
+ "description": "GCS storage config for pbit files",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.dasboard.powerbi.GCSConfig",
+ "properties": {
+ "pbitFileConfigType": {
+ "description": "pbit File Configuration type",
+ "type": "string",
+ "enum": ["gcs"],
+ "default": "gcs"
+ },
+ "securityConfig": {
+ "title": "GCS Security Config",
+ "$ref": "../../../../../security/credentials/gcpCredentials.json"
+ },
+ "prefixConfig": {
+ "title": "Prefix Config",
+ "$ref": "bucketDetails.json"
+ },
+ "pbitFilesExtractDir": {
+ "title": "pbit Files Extraction Directory",
+ "description": "Path of the folder where the .pbit files will be unzipped and datamodel schema will be extracted",
+ "type": "string",
+ "default": "/tmp/pbitFiles"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["securityConfig"]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/powerbi/s3Config.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/powerbi/s3Config.json
new file mode 100644
index 000000000000..ad2ef70fa0c5
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/powerbi/s3Config.json
@@ -0,0 +1,32 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/dashboard/powerbi/s3Config.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "S3Config",
+ "description": "S3 storage config for pbit files",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.dashboard.powerbi.S3Config",
+ "properties": {
+ "pbitFileConfigType": {
+ "description": "pbit File Configuration type",
+ "type": "string",
+ "enum": ["s3"],
+ "default": "s3"
+ },
+ "securityConfig": {
+ "title": "S3 Security Config",
+ "$ref": "../../../../../security/credentials/awsCredentials.json"
+ },
+ "prefixConfig": {
+ "title": "Prefix Config",
+ "$ref": "bucketDetails.json"
+ },
+ "pbitFilesExtractDir": {
+ "title": "pbit Files Extraction Directory",
+ "description": "Path of the folder where the .pbit files will be unzipped and datamodel schema will be extracted",
+ "type": "string",
+ "default": "/tmp/pbitFiles"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["securityConfig"]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/qlikCloudConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/qlikCloudConnection.json
new file mode 100644
index 000000000000..73d095145ebd
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/qlikCloudConnection.json
@@ -0,0 +1,75 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/dashboard/qlikCloudConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "QlikCloudConnection",
+ "description": "Qlik Cloud Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.dashboard.QlikCloudConnection",
+ "definitions": {
+ "qlikCloudType": {
+ "description": "Qlik Cloud service type",
+ "type": "string",
+ "enum": ["QlikCloud"],
+ "default": "QlikCloud"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/qlikCloudType",
+ "default": "QlikCloud"
+ },
+ "token": {
+ "title": "token",
+ "description": "token to connect to Qlik Cloud.",
+ "type": "string",
+ "format": "password"
+ },
+ "hostPort": {
+ "expose": true,
+ "title": "Host and Port",
+ "description": "Host and Port of the Qlik Cloud instance.",
+ "type": "string",
+ "format": "uri"
+ },
+ "spaceTypes": {
+ "title": "Space Types",
+ "description": "Space types of Qlik Cloud to filter the dashboards ingested into the platform.",
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "type": "string",
+ "enum": ["Managed", "Shared", "Personal", "Data"]
+ },
+ "default": ["Managed", "Shared", "Personal", "Data"],
+ "minItems": 1
+ },
+ "dashboardFilterPattern": {
+ "description": "Regex to exclude or include dashboards that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Dashboard Filter Pattern"
+ },
+ "chartFilterPattern": {
+ "description": "Regex exclude or include charts that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Chart Filter Pattern"
+ },
+ "dataModelFilterPattern": {
+ "description": "Regex exclude or include data models that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Data Model Filter Pattern"
+ },
+ "projectFilterPattern": {
+ "description": "Regex to exclude or include projects that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Project Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["hostPort", "token"]
+ }
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/qlikSenseConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/qlikSenseConnection.json
new file mode 100644
index 000000000000..c4c70fa7cbd2
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/qlikSenseConnection.json
@@ -0,0 +1,135 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/dashboard/qlikSenseConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "QlikSenseConnection",
+ "description": "Qlik Sense Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.dashboard.QlikSenseConnection",
+ "definitions": {
+ "qlikSenseType": {
+ "description": "Qlik sense service type",
+ "type": "string",
+ "enum": [
+ "QlikSense"
+ ],
+ "default": "QlikSense"
+ },
+ "qlikCertificatePath": {
+ "description": "Qlik Authentication Certificate File Path",
+ "title": "Qlik Certificates By File Path",
+ "type": "object",
+ "properties": {
+ "clientCertificate": {
+ "title": "Client Certificate Path",
+ "description": "Client Certificate",
+ "type": "string"
+ },
+ "clientKeyCertificate": {
+ "title": "Client Key Certificate",
+ "description": "Client Key Certificate.",
+ "type": "string"
+ },
+ "rootCertificate": {
+ "title": "Root Certificate",
+ "description": "Root Certificate.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "clientCertificate",
+ "clientKeyCertificate",
+ "rootCertificate"
+ ]
+ },
+ "qlikCertificateValues": {
+ "description": "Qlik Authentication Certificate By Values",
+ "title": "Qlik Certificates By Values",
+ "type": "object",
+ "properties": {
+ "sslConfig": {
+ "$ref": "../../../../security/ssl/verifySSLConfig.json#/definitions/sslConfig"
+ }
+ },
+ "required": [
+ "sslConfig"
+ ]
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/qlikSenseType",
+ "default": "QlikSense"
+ },
+ "displayUrl": {
+ "expose": true,
+ "title": "Qlik Sense Base URL",
+ "description": "Qlik Sense Base URL, used for genrating dashboard & chat url",
+ "type": "string",
+ "format": "uri"
+ },
+ "hostPort": {
+ "expose": true,
+ "title": "Qlik Engine JSON API Websocket URL",
+ "description": "URL for the Qlik instance.",
+ "type": "string",
+ "format": "uri"
+ },
+ "certificates": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/qlikCertificateValues"
+ },
+ {
+ "$ref": "#/definitions/qlikCertificatePath"
+ }
+ ]
+ },
+ "validateHostName": {
+ "title": "Validate Host Name",
+ "description": "Validate Host Name",
+ "type": "boolean",
+ "default": false
+ },
+ "userDirectory": {
+ "title": "User Directory",
+ "description": "User Directory.",
+ "type": "string"
+ },
+ "userId": {
+ "title": "User ID",
+ "description": "User ID.",
+ "type": "string"
+ },
+ "dashboardFilterPattern": {
+ "description": "Regex to exclude or include dashboards that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Dashboard Filter Pattern"
+ },
+ "chartFilterPattern": {
+ "description": "Regex exclude or include charts that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Chart Filter Pattern"
+ },
+ "dataModelFilterPattern": {
+ "description": "Regex exclude or include data models that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Data Model Filter Pattern"
+ },
+ "projectFilterPattern": {
+ "description": "Regex to exclude or include projects that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Project Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "hostPort",
+ "certificates"
+ ]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/quickSightConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/quickSightConnection.json
new file mode 100644
index 000000000000..f3633cd9b222
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/quickSightConnection.json
@@ -0,0 +1,79 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/dashboard/quickSightConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "QuickSightConnection",
+ "description": "QuickSight Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.dashboard.QuickSightConnection",
+ "definitions": {
+ "quickSightType": {
+ "description": "QuickSight service type",
+ "type": "string",
+ "enum": [
+ "QuickSight"
+ ],
+ "default": "QuickSight"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/quickSightType",
+ "default": "QuickSight"
+ },
+ "awsConfig": {
+ "title": "AWS Credentials Configuration",
+ "$ref": "../../../../security/credentials/awsCredentials.json"
+ },
+ "awsAccountId": {
+ "title": "AWS Account ID",
+ "description": "AWS Account ID",
+ "type": "string"
+ },
+ "identityType": {
+ "title": "Identity Type",
+ "description": "The authentication method that the user uses to sign in.",
+ "type": "string",
+ "enum": [
+ "IAM",
+ "QUICKSIGHT",
+ "ANONYMOUS"
+ ],
+ "default": "IAM"
+ },
+ "namespace": {
+ "description": "The Amazon QuickSight namespace that contains the dashboard IDs in this request ( To be provided when identityType is `ANONYMOUS` )",
+ "type": "string"
+ },
+ "dashboardFilterPattern": {
+ "description": "Regex to exclude or include dashboards that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Dashboard Filter Pattern"
+ },
+ "chartFilterPattern": {
+ "description": "Regex exclude or include charts that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Chart Filter Pattern"
+ },
+ "dataModelFilterPattern": {
+ "description": "Regex exclude or include data models that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Data Model Filter Pattern"
+ },
+ "projectFilterPattern": {
+ "description": "Regex to exclude or include projects that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Project Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "awsConfig",
+ "awsAccountId"
+ ]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/redashConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/redashConnection.json
new file mode 100644
index 000000000000..83a10b616b8a
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/redashConnection.json
@@ -0,0 +1,75 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/dashboard/redashConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "RedashConnection",
+ "description": "Redash Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.dashboard.RedashConnection",
+ "definitions": {
+ "redashType": {
+ "description": "Redash service type",
+ "type": "string",
+ "enum": ["Redash"],
+ "default": "Redash"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/redashType",
+ "default": "Redash"
+ },
+ "username": {
+ "title": "Username",
+ "description": "Username for Redash",
+ "type": "string"
+ },
+ "hostPort": {
+ "expose": true,
+ "title": "Host and Port",
+ "description": "URL for the Redash instance",
+ "type": "string",
+ "format": "uri",
+ "default": "http://localhost:5000"
+ },
+ "apiKey": {
+ "title": "API Key",
+ "description": "API key of the redash instance to access.",
+ "type": "string",
+ "format": "password"
+ },
+ "redashVersion": {
+ "title": "Redash Version",
+ "description": "Version of the Redash instance",
+ "type": "string",
+ "default": "10.0.0"
+ },
+ "dashboardFilterPattern": {
+ "description": "Regex to exclude or include dashboards that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Dashboard Filter Pattern"
+ },
+ "chartFilterPattern": {
+ "description": "Regex exclude or include charts that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Chart Filter Pattern"
+ },
+ "dataModelFilterPattern": {
+ "description": "Regex exclude or include data models that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Data Model Filter Pattern"
+ },
+ "projectFilterPattern": {
+ "description": "Regex to exclude or include projects that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Project Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["hostPort", "username", "apiKey"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/sapS4HanaConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/sapS4HanaConnection.json
new file mode 100644
index 000000000000..beae25597c82
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/sapS4HanaConnection.json
@@ -0,0 +1,147 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/dashboard/sapS4HanaConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SapS4HanaConnection",
+ "description": "SAP S/4HANA Connection Config for Embedded Analytics",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.dashboard.SapS4HanaConnection",
+ "definitions": {
+ "sapS4HanaType": {
+ "description": "SAP S/4HANA service type",
+ "type": "string",
+ "enum": ["SapS4Hana"],
+ "default": "SapS4Hana"
+ },
+ "sapS4HanaBasicAuthType": {
+ "title": "Basic Auth",
+ "description": "Username and password credentials for SAP S/4HANA.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.dashboard.sapS4Hana.SapS4HanaBasicAuth",
+ "properties": {
+ "authType": {
+ "title": "Auth Type",
+ "description": "Authentication type identifier.",
+ "type": "string",
+ "enum": ["basic"],
+ "default": "basic"
+ },
+ "username": {
+ "title": "Username",
+ "description": "Username to authenticate with SAP S/4HANA.",
+ "type": "string"
+ },
+ "password": {
+ "title": "Password",
+ "description": "Password to authenticate with SAP S/4HANA.",
+ "type": "string",
+ "format": "password"
+ }
+ },
+ "required": ["username", "password"],
+ "additionalProperties": false
+ },
+ "sapS4HanaOAuthType": {
+ "title": "OAuth 2.0 Client Credentials",
+ "description": "OAuth 2.0 client credentials for SAP S/4HANA Cloud.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.dashboard.sapS4Hana.SapS4HanaOAuthCredentials",
+ "properties": {
+ "authType": {
+ "title": "Auth Type",
+ "description": "Authentication type identifier.",
+ "type": "string",
+ "enum": ["oauth2"],
+ "default": "oauth2"
+ },
+ "clientId": {
+ "title": "Client ID",
+ "description": "OAuth 2.0 client ID registered in SAP.",
+ "type": "string"
+ },
+ "clientSecret": {
+ "title": "Client Secret",
+ "description": "OAuth 2.0 client secret.",
+ "type": "string",
+ "format": "password"
+ },
+ "tokenEndpoint": {
+ "title": "Token Endpoint",
+ "description": "OAuth 2.0 token endpoint URL (e.g. /sap/bc/security/oauth2/token).",
+ "type": "string",
+ "format": "uri"
+ }
+ },
+ "required": ["clientId", "clientSecret", "tokenEndpoint"],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/sapS4HanaType",
+ "default": "SapS4Hana"
+ },
+ "hostPort": {
+ "expose": true,
+ "title": "Host and Port",
+ "description": "Base URL of the SAP S/4HANA instance (e.g. https://s4hana.example.com).",
+ "type": "string",
+ "format": "uri"
+ },
+ "authType": {
+ "title": "Authentication Type",
+ "description": "Choose Basic Auth (username/password) for on-premise or OAuth 2.0 Client Credentials for SAP S/4HANA Cloud.",
+ "oneOf": [
+ {
+ "$ref": "#/definitions/sapS4HanaBasicAuthType"
+ },
+ {
+ "$ref": "#/definitions/sapS4HanaOAuthType"
+ }
+ ]
+ },
+ "clientNumber": {
+ "title": "Client Number",
+ "description": "SAP client number (Mandant), typically a 3-digit string (e.g. '100').",
+ "type": "string",
+ "default": "100"
+ },
+ "verifySSL": {
+ "title": "Verify SSL",
+ "description": "Client SSL verification. Use 'no-ssl' for plain HTTP, 'ignore' to skip certificate validation, 'validate' to verify against a CA certificate.",
+ "$ref": "../../../../security/ssl/verifySSLConfig.json#/definitions/verifySSL",
+ "default": "no-ssl"
+ },
+ "sslConfig": {
+ "title": "SSL Config",
+ "description": "CA certificate, client certificate, and private key for SSL validation. Required when verifySSL is 'validate'.",
+ "$ref": "../../../../security/ssl/verifySSLConfig.json#/definitions/sslConfig"
+ },
+ "dashboardFilterPattern": {
+ "description": "Regex to exclude or include dashboards that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Dashboard Filter Pattern"
+ },
+ "chartFilterPattern": {
+ "description": "Regex exclude or include charts that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Chart Filter Pattern"
+ },
+ "dataModelFilterPattern": {
+ "description": "Regex exclude or include data models that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Data Model Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ },
+ "supportsLineageExtraction": {
+ "title": "Supports Lineage Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsLineageExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["hostPort", "authType"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/sigmaConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/sigmaConnection.json
new file mode 100644
index 000000000000..770f1c34f7d6
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/sigmaConnection.json
@@ -0,0 +1,75 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/dashboard/sigmaConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SigmaConnection",
+ "description": "Sigma Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.dashboard.SigmaConnection",
+ "definitions": {
+ "sigmaType": {
+ "description": "Sigma service type",
+ "type": "string",
+ "enum": ["Sigma"],
+ "default": "Sigma"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/sigmaType",
+ "default": "Sigma"
+ },
+ "hostPort": {
+ "expose": true,
+ "title": "Host and Port",
+ "description": "Sigma API url.",
+ "type": "string",
+ "format": "uri",
+ "default": "https://api.sigmacomputing.com"
+ },
+ "clientId": {
+ "title": "Client ID",
+ "description": "client_id for Sigma.",
+ "type": "string"
+ },
+ "clientSecret": {
+ "title": "Client Secret",
+ "description": "clientSecret for Sigma.",
+ "type": "string",
+ "format": "password"
+ },
+ "apiVersion": {
+ "title": "API Version",
+ "description": "Sigma API version.",
+ "type": "string",
+ "default": "v2"
+ },
+ "dashboardFilterPattern": {
+ "description": "Regex to exclude or include dashboards that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Dashboard Filter Pattern"
+ },
+ "chartFilterPattern": {
+ "description": "Regex exclude or include charts that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Chart Filter Pattern"
+ },
+ "dataModelFilterPattern": {
+ "description": "Regex exclude or include data models that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Data Model Filter Pattern"
+ },
+ "projectFilterPattern": {
+ "description": "Regex to exclude or include projects that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Project Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["hostPort", "clientId", "clientSecret"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/ssrsConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/ssrsConnection.json
new file mode 100644
index 000000000000..9c518679c4d7
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/ssrsConnection.json
@@ -0,0 +1,80 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/dashboard/ssrsConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SsrsConnection",
+ "description": "SQL Server Reporting Services (SSRS) provides a set of on-premises tools and services to create, deploy, and manage paginated reports",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.dashboard.SsrsConnection",
+ "definitions": {
+ "ssrsType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": [
+ "Ssrs"
+ ],
+ "default": "Ssrs"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/ssrsType",
+ "default": "Ssrs"
+ },
+ "hostPort": {
+ "expose": true,
+ "title": "Host and Port",
+ "description": "Host and Port of the Ssrs instance.",
+ "type": "string",
+ "format": "uri"
+ },
+ "username": {
+ "title": "Username",
+ "description": "Username to connect to Ssrs.",
+ "type": "string"
+ },
+ "password": {
+ "title": "Password",
+ "description": "Password to connect to Ssrs.",
+ "type": "string",
+ "format": "password"
+ },
+ "dashboardFilterPattern": {
+ "description": "Regex to exclude or include dashboards that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Dashboard Filter Pattern"
+ },
+ "chartFilterPattern": {
+ "description": "Regex to exclude or include charts that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Chart Filter Pattern"
+ },
+ "projectFilterPattern": {
+ "description": "Regex to exclude or include projects that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Project Filter Pattern"
+ },
+ "verifySSL": {
+ "title": "Verify SSL",
+ "description": "Client SSL verification.",
+ "$ref": "../../../../security/ssl/verifySSLConfig.json#/definitions/verifySSL",
+ "default": "no-ssl"
+ },
+ "sslConfig": {
+ "title": "SSL Configuration",
+ "description": "SSL Configuration details.",
+ "$ref": "../../../../security/ssl/verifySSLConfig.json#/definitions/sslConfig"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "hostPort",
+ "username",
+ "password"
+ ]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/supersetConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/supersetConnection.json
new file mode 100644
index 000000000000..c4f33e8f65df
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/supersetConnection.json
@@ -0,0 +1,73 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/dashboard/supersetConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SupersetConnection",
+ "description": "Superset Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.dashboard.SupersetConnection",
+ "definitions": {
+ "supersetType": {
+ "description": "Superset service type",
+ "type": "string",
+ "enum": ["Superset"],
+ "default": "Superset"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/supersetType",
+ "default": "Superset"
+ },
+ "hostPort": {
+ "expose": true,
+ "title": "Host and Port",
+ "description": "URL for the superset instance.",
+ "type": "string",
+ "format": "uri",
+ "default": "http://localhost:8088"
+ },
+ "connection":{
+ "title": "Superset Connection",
+ "description": "Choose between API or database connection fetch metadata from superset.",
+ "oneOf": [
+ {
+ "$ref": "../../../utils/supersetApiConnection.json"
+ },
+ {
+ "$ref": "../database/postgresConnection.json"
+ },
+ {
+ "$ref": "../database/mysqlConnection.json"
+ }
+ ]
+ },
+ "dashboardFilterPattern": {
+ "description": "Regex to exclude or include dashboards that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Dashboard Filter Pattern"
+ },
+ "chartFilterPattern": {
+ "description": "Regex exclude or include charts that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Chart Filter Pattern"
+ },
+ "dataModelFilterPattern": {
+ "description": "Regex exclude or include data models that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Data Model Filter Pattern"
+ },
+ "projectFilterPattern": {
+ "description": "Regex to exclude or include projects that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Project Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["hostPort","connection"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/tableauConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/tableauConnection.json
new file mode 100644
index 000000000000..cd517a241c3a
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/tableauConnection.json
@@ -0,0 +1,103 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/dashboard/tableauConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "TableauConnection",
+ "description": "Tableau Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.dashboard.TableauConnection",
+ "definitions": {
+ "tableauType": {
+ "description": "Tableau service type",
+ "type": "string",
+ "enum": ["Tableau"],
+ "default": "Tableau"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/tableauType",
+ "default": "Tableau"
+ },
+ "hostPort": {
+ "expose": true,
+ "title": "Host and Port",
+ "description": "Tableau Server url.",
+ "type": "string",
+ "format": "uri"
+ },
+ "authType": {
+ "mask": true,
+ "title": "Authentication type for Tableau",
+ "description": "Types of methods used to authenticate to the tableau instance",
+ "oneOf": [
+ {
+ "$ref": "../../../../security/credentials/basicAuth.json"
+ },
+ {
+ "$ref": "../../../../security/credentials/accessTokenAuth.json"
+ }
+ ]
+ },
+ "siteName": {
+ "title": "Site Name",
+ "description": "Tableau Site Name.",
+ "type": "string",
+ "default": null
+ },
+ "paginationLimit": {
+ "title": "Pagination Limit",
+ "description": "Pagination limit used while querying the tableau metadata API for getting data sources",
+ "type": "integer",
+ "default": 10
+ },
+ "apiVersion": {
+ "title": "API Version",
+ "description": "Tableau API version. If not provided, the version will be used from the tableau server.",
+ "type": "string",
+ "default": null
+ },
+ "proxyURL": {
+ "expose": true,
+ "title": "Proxy URL",
+ "description": "Proxy URL for the tableau server. If not provided, the hostPort will be used. This is used to generate the dashboard & Chart URL.",
+ "type": "string",
+ "format": "uri",
+ "default": null
+ },
+ "verifySSL": {
+ "$ref": "../../../../security/ssl/verifySSLConfig.json#/definitions/verifySSL",
+ "default": "no-ssl"
+ },
+ "sslConfig": {
+ "$ref": "../../../../security/ssl/verifySSLConfig.json#/definitions/sslConfig"
+ },
+ "dashboardFilterPattern": {
+ "description": "Regex to exclude or include dashboards that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Dashboard Filter Pattern"
+ },
+ "chartFilterPattern": {
+ "description": "Regex exclude or include charts that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Chart Filter Pattern"
+ },
+ "dataModelFilterPattern": {
+ "description": "Regex exclude or include data models that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Data Model Filter Pattern"
+ },
+ "projectFilterPattern": {
+ "description": "Regex to exclude or include projects that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Project Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["hostPort"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/thoughtSpotConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/thoughtSpotConnection.json
new file mode 100644
index 000000000000..29b5d93323ec
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/dashboard/thoughtSpotConnection.json
@@ -0,0 +1,63 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/dashboard/thoughtSpotConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "ThoughtSpotConnection",
+ "description": "ThoughtSpot Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.dashboard.ThoughtSpotConnection",
+ "definitions": {
+ "thoughtSpotType": {
+ "description": "ThoughtSpot service type",
+ "type": "string",
+ "enum": ["ThoughtSpot"],
+ "default": "ThoughtSpot"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/thoughtSpotType",
+ "default": "ThoughtSpot"
+ },
+ "hostPort": {
+ "expose": true,
+ "title": "Host and Port",
+ "description": "ThoughtSpot instance URL. Example: https://my-company.thoughtspot.cloud",
+ "type": "string",
+ "format": "uri"
+ },
+ "authentication": {
+ "title": "Authentication",
+ "description": "ThoughtSpot authentication configuration",
+ "oneOf": [
+ {
+ "$ref": "../../../../security/credentials/basicAuth.json"
+ },
+ {
+ "$ref": "../../../../security/credentials/apiAccessTokenAuth.json"
+ }
+ ]
+ },
+ "apiVersion": {
+ "title": "API Version",
+ "description": "ThoughtSpot API version to use",
+ "type": "string",
+ "enum": ["v1", "v2"],
+ "default": "v2"
+ },
+ "orgId": {
+ "title": "Organization ID",
+ "description": "Org ID for multi-tenant ThoughtSpot instances. This is applicable for ThoughtSpot Cloud only.",
+ "type": "string",
+ "default": null
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "description": "Supports Metadata Extraction.",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["hostPort", "authentication"]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/athenaConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/athenaConnection.json
new file mode 100644
index 000000000000..3020f0042dc0
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/athenaConnection.json
@@ -0,0 +1,120 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/athenaConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AthenaConnection",
+ "description": "AWS Athena Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.AthenaConnection",
+ "definitions": {
+ "athenaType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["Athena"],
+ "default": "Athena"
+ },
+ "athenaScheme": {
+ "description": "SQLAlchemy driver scheme options.",
+ "type": "string",
+ "enum": ["awsathena+rest"],
+ "default": "awsathena+rest"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/athenaType",
+ "default": "Athena"
+ },
+ "scheme": {
+ "title": "Connection Scheme",
+ "description": "SQLAlchemy driver scheme options.",
+ "$ref": "#/definitions/athenaScheme",
+ "default": "awsathena+rest"
+ },
+
+ "awsConfig": {
+ "title": "AWS Credentials Configuration",
+ "$ref": "../../../../security/credentials/awsCredentials.json"
+ },
+ "s3StagingDir": {
+ "title": "S3 Staging Directory",
+ "description": "S3 Staging Directory. Example: s3://postgres/input/",
+ "type": "string",
+ "format": "uri"
+ },
+ "workgroup": {
+ "title": "Athena Workgroup",
+ "description": "Athena workgroup.",
+ "type": "string"
+ },
+ "catalogId": {
+ "title": "Catalog ID",
+ "description": "Catalog ID for Athena. For S3 Tables, use the format 's3tablescatalog/'. For cross-account Glue catalogs, use the AWS account ID. If not provided, defaults to the caller's AWS account.",
+ "type": "string"
+ },
+ "databaseName": {
+ "title": "Database Name",
+ "description": "Optional name to give to the database in OpenMetadata. If left blank, we will use default as the database name.",
+ "type": "string"
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "schemaFilterPattern":{
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ },
+ "supportsDBTExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsDBTExtraction"
+ },
+ "supportsProfiler": {
+ "title": "Supports Profiler",
+ "$ref": "../connectionBasicType.json#/definitions/supportsProfiler"
+ },
+ "supportsQueryComment": {
+ "title": "Supports Query Comment",
+ "$ref": "../connectionBasicType.json#/definitions/supportsQueryComment"
+ },
+ "supportsUsageExtraction": {
+ "description": "Supports Usage Extraction.",
+ "type": "boolean",
+ "default": true
+ },
+ "supportsLineageExtraction": {
+ "description": "Supports Lineage Extraction.",
+ "type": "boolean",
+ "default": true
+ },
+ "supportsDataDiff": {
+ "title": "Supports Data Diff Extraction.",
+ "$ref": "../connectionBasicType.json#/definitions/supportsDataDiff"
+ },
+ "sampleDataStorageConfig": {
+ "title": "Storage Config for Sample Data",
+ "$ref": "../connectionBasicType.json#/definitions/sampleDataStorageConfig"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["s3StagingDir", "awsConfig", "workgroup"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/azureSQLConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/azureSQLConnection.json
new file mode 100644
index 000000000000..3de61b1937bb
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/azureSQLConnection.json
@@ -0,0 +1,160 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/azureSQLConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AzureSQLConnection",
+ "description": "Azure SQL Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.AzureSQLConnection",
+ "definitions": {
+ "azureSQLType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": [
+ "AzureSQL"
+ ],
+ "default": "AzureSQL"
+ },
+ "azureSQLScheme": {
+ "description": "SQLAlchemy driver scheme options.",
+ "type": "string",
+ "enum": [
+ "mssql+pyodbc"
+ ],
+ "default": "mssql+pyodbc"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/azureSQLType",
+ "default": "AzureSQL"
+ },
+ "scheme": {
+ "title": "Connection Scheme",
+ "description": "SQLAlchemy driver scheme options.",
+ "$ref": "#/definitions/azureSQLScheme",
+ "default": "mssql+pyodbc"
+ },
+ "username": {
+ "title": "Username",
+ "description": "Username to connect to AzureSQL. This user should have privileges to read the metadata.",
+ "type": "string"
+ },
+ "password": {
+ "title": "Password",
+ "description": "Password to connect to AzureSQL.",
+ "type": "string",
+ "format": "password"
+ },
+ "hostPort": {
+ "title": "Host and Port",
+ "description": "Host and port of the AzureSQL service.",
+ "type": "string"
+ },
+ "database": {
+ "title": "Database",
+ "description": "Database of the data source. This is optional parameter, if you would like to restrict the metadata reading to a single database. When left blank, OpenMetadata Ingestion attempts to scan all the databases.",
+ "type": "string"
+ },
+ "driver": {
+ "title": "Driver",
+ "description": "SQLAlchemy driver for AzureSQL.",
+ "type": "string",
+ "default": "ODBC Driver 18 for SQL Server"
+ },
+ "authenticationMode": {
+ "title": "Authentication Mode",
+ "description": "This parameter determines the mode of authentication for connecting to AzureSQL using ODBC. If 'Active Directory Password' is selected, you need to provide the password. If 'Active Directory Integrated' is selected, password is not required as it uses the logged-in user's credentials. This mode is useful for establishing secure and seamless connections with AzureSQL.",
+ "properties": {
+ "authentication": {
+ "title": "Authentication",
+ "description": "Authentication from Connection String for AzureSQL.",
+ "type": "string",
+ "enum": [
+ "ActiveDirectoryIntegrated",
+ "ActiveDirectoryPassword"
+ ]
+ },
+ "encrypt": {
+ "title": "Encrypt",
+ "description": "Encrypt from Connection String for AzureSQL.",
+ "type": "boolean"
+ },
+ "trustServerCertificate": {
+ "title": "Trust Server Certificate",
+ "description": "Trust Server Certificate from Connection String for AzureSQL.",
+ "type": "boolean"
+ },
+ "connectionTimeout": {
+ "title": "Connection Timeout",
+ "description": "Connection Timeout from Connection String for AzureSQL.",
+ "type": "integer",
+ "default": 30
+ }
+ }
+ },
+ "ingestAllDatabases": {
+ "title": "Ingest All Databases",
+ "description": "Ingest data from all databases in Azuresql. You can use databaseFilterPattern on top of this.",
+ "type": "boolean",
+ "default": false
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "schemaFilterPattern":{
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ },
+ "supportsUsageExtraction": {
+ "title": "Supports Usage Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsUsageExtraction"
+ },
+ "supportsLineageExtraction": {
+ "title": "Supports Lineage Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsLineageExtraction"
+ },
+ "supportsDBTExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsDBTExtraction"
+ },
+ "supportsProfiler": {
+ "title": "Supports Profiler",
+ "$ref": "../connectionBasicType.json#/definitions/supportsProfiler"
+ },
+ "supportsDatabase": {
+ "title": "Supports Database",
+ "$ref": "../connectionBasicType.json#/definitions/supportsDatabase"
+ },
+ "sampleDataStorageConfig": {
+ "title": "Storage Config for Sample Data",
+ "$ref": "../connectionBasicType.json#/definitions/sampleDataStorageConfig"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "hostPort",
+ "database",
+ "username"
+ ]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/bigQueryConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/bigQueryConnection.json
new file mode 100644
index 000000000000..347cf33bc2d6
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/bigQueryConnection.json
@@ -0,0 +1,163 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/bigQueryConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "BigQueryConnection",
+ "description": "Google BigQuery Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.BigQueryConnection",
+ "definitions": {
+ "bigqueryType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": [
+ "BigQuery"
+ ],
+ "default": "BigQuery"
+ },
+ "bigqueryScheme": {
+ "description": "SQLAlchemy driver scheme options.",
+ "type": "string",
+ "enum": [
+ "bigquery"
+ ],
+ "default": "bigquery"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/bigqueryType",
+ "default": "BigQuery"
+ },
+ "scheme": {
+ "title": "Connection Scheme",
+ "description": "SQLAlchemy driver scheme options.",
+ "$ref": "#/definitions/bigqueryScheme",
+ "default": "bigquery"
+ },
+ "hostPort": {
+ "title": "Host and Port",
+ "description": "BigQuery APIs URL.",
+ "type": "string",
+ "default": "bigquery.googleapis.com"
+ },
+ "billingProjectId": {
+ "title": "Billing Project ID",
+ "description": "Billing Project ID",
+ "type": "string",
+ "default": null
+ },
+ "credentials": {
+ "title": "GCP Credentials",
+ "description": "GCP Credentials",
+ "$ref": "../../../../security/credentials/gcpCredentials.json"
+ },
+ "includePolicyTags": {
+ "title": "Include Policy Tags",
+ "description": "Option to include policy tags as part of column description.",
+ "type": "boolean",
+ "default": true
+ },
+ "taxonomyProjectID": {
+ "title": "Taxonomy Project IDs",
+ "description": "Project IDs used to fetch policy tags",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "default": null
+ },
+ "taxonomyLocation": {
+ "title": "Taxonomy Location",
+ "description": "Taxonomy location used to fetch policy tags",
+ "type": "string",
+ "default": "us"
+ },
+ "usageLocation": {
+ "title": "Usage Location",
+ "description": "Location used to query INFORMATION_SCHEMA.JOBS_BY_PROJECT to fetch usage data. You can pass multi-regions, such as `us` or `eu`, or you specific region. Australia and Asia multi-regions are not yet in GA.",
+ "type": "string",
+ "default": "us"
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "schemaFilterPattern": {
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "storedProcedureFilterPattern": {
+ "title": "Default Stored Procedure Filter Pattern",
+ "description": "Regex to only include/exclude stored procedures that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ },
+ "supportsIncrementalMetadataExtraction": {
+ "title": "Supports Incremental Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsIncrementalMetadataExtraction"
+ },
+ "supportsUsageExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsUsageExtraction"
+ },
+ "supportsLineageExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsLineageExtraction"
+ },
+ "supportsDBTExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsDBTExtraction"
+ },
+ "supportsProfiler": {
+ "title": "Supports Profiler",
+ "$ref": "../connectionBasicType.json#/definitions/supportsProfiler"
+ },
+ "supportsDatabase": {
+ "title": "Supports Database",
+ "$ref": "../connectionBasicType.json#/definitions/supportsDatabase"
+ },
+ "supportsQueryComment": {
+ "title": "Supports Query Comment",
+ "$ref": "../connectionBasicType.json#/definitions/supportsQueryComment"
+ },
+ "supportsSystemProfile": {
+ "title": "Supports System Profile",
+ "$ref": "../connectionBasicType.json#/definitions/supportsSystemProfile"
+ },
+ "sampleDataStorageConfig": {
+ "title": "Storage Config for Sample Data",
+ "$ref": "../connectionBasicType.json#/definitions/sampleDataStorageConfig"
+ },
+ "supportsDataDiff": {
+ "title": "Supports Data Diff Extraction.",
+ "$ref": "../connectionBasicType.json#/definitions/supportsDataDiff"
+ },
+ "costPerTB": {
+ "title": "Cost Per TiB",
+ "description": "Cost per TiB for BigQuery usage",
+ "type": "number",
+ "default": 6.25
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "credentials"
+ ]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/bigTableConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/bigTableConnection.json
new file mode 100644
index 000000000000..2f329a4042ea
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/bigTableConnection.json
@@ -0,0 +1,66 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/bigTableConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "BigTableConnection",
+ "description": "Google BigTable Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.BigTableConnection",
+ "definitions": {
+ "bigtableType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": [
+ "BigTable"
+ ],
+ "default": "BigTable"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/bigtableType",
+ "default": "BigTable"
+ },
+ "credentials": {
+ "title": "GCP Credentials",
+ "description": "GCP Credentials",
+ "$ref": "../../../../security/credentials/gcpCredentials.json"
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "schemaFilterPattern":{
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ },
+ "supportsDatabase": {
+ "title": "Supports Database",
+ "$ref": "../connectionBasicType.json#/definitions/supportsDatabase"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "credentials"
+ ]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/burstIQConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/burstIQConnection.json
new file mode 100644
index 000000000000..c6bd8faebc49
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/burstIQConnection.json
@@ -0,0 +1,74 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/burstIQConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "BurstIQConnection",
+ "description": "BurstIQ LifeGraph Database Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.BurstIQConnection",
+ "definitions": {
+ "burstIQType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["BurstIQ"],
+ "default": "BurstIQ"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/burstIQType",
+ "default": "BurstIQ"
+ },
+ "username": {
+ "title": "Username",
+ "description": "Username to connect to BurstIQ. This user should have privileges to read all the metadata in BurstIQ LifeGraph.",
+ "type": "string"
+ },
+ "password": {
+ "title": "Password",
+ "description": "Password to connect to BurstIQ.",
+ "type": "string",
+ "format": "password"
+ },
+ "realmName": {
+ "title": "Realm Name",
+ "description": "BurstIQ Keycloak realm name (e.g., 'ems' from https://auth.burstiq.com/realms/ems).",
+ "type": "string"
+ },
+ "biqSdzName": {
+ "title": "BurstIQ SDZ Name",
+ "description": "BurstIQ Secure Data Zone (SDZ) name for API requests.",
+ "type": "string"
+ },
+ "biqCustomerName": {
+ "title": "BurstIQ Customer Name",
+ "description": "BurstIQ customer name for API requests.",
+ "type": "string"
+ },
+ "biqSystemWalletId": {
+ "title": "BurstIQ System Wallet ID",
+ "description": "BurstIQ system wallet ID sent as the biq_system_wallet_id header. Required for profiler data access.",
+ "type": "string"
+ },
+ "tableFilterPattern": {
+ "title": "Table Filter Pattern",
+ "description": "Regex to only include/exclude dictionaries (tables) that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ },
+ "supportsLineageExtraction": {
+ "title": "Supports Lineage Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsLineageExtraction"
+ },
+ "supportsProfiler": {
+ "title": "Supports Profiler",
+ "$ref": "../connectionBasicType.json#/definitions/supportsProfiler"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["username", "password", "realmName", "biqSdzName", "biqCustomerName"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/cassandra/cloudConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/cassandra/cloudConfig.json
new file mode 100644
index 000000000000..a9c7871ea023
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/cassandra/cloudConfig.json
@@ -0,0 +1,38 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/cassandra/cloudConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Cloud Config",
+ "description": "Configuration for connecting to DataStax Astra DB in the cloud.",
+ "javaType": "org.openmetadata.schema.services.connections.database.cassandra.CloudConfig",
+ "type": "object",
+ "properties": {
+ "cloudConfig": {
+ "title": "DataStax Astra DB Configuration",
+ "description": "Configuration for connecting to DataStax Astra DB in the cloud.",
+ "type": "object",
+ "properties": {
+ "connectTimeout": {
+ "title": "Connect Timeout",
+ "description": "Timeout in seconds for establishing new connections to Cassandra.",
+ "type": "integer"
+ },
+ "requestTimeout": {
+ "title": "Request Timeout",
+ "description": "Timeout in seconds for individual Cassandra requests.",
+ "type": "integer"
+ },
+ "token": {
+ "title": "Token",
+ "description": "The Astra DB application token used for authentication.",
+ "type": "string"
+ },
+ "secureConnectBundle": {
+ "title": "Secure Connect Bundle",
+ "description": "File path to the Secure Connect Bundle (.zip) used for a secure connection to DataStax Astra DB.",
+ "type": "string"
+ }
+ }
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/cassandraConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/cassandraConnection.json
new file mode 100644
index 000000000000..a755e7bb4f56
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/cassandraConnection.json
@@ -0,0 +1,85 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/cassandraConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CassandraConnection",
+ "description": "Cassandra Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.CassandraConnection",
+ "definitions": {
+ "cassandraType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": [
+ "Cassandra"
+ ],
+ "default": "Cassandra"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/cassandraType",
+ "default": "Cassandra"
+ },
+ "username": {
+ "title": "Username",
+ "description": "Username to connect to Cassandra. This user should have privileges to read all the metadata in Cassandra.",
+ "type": "string"
+ },
+ "authType": {
+ "title": "Auth Configuration Type",
+ "description": "Choose Auth Config Type.",
+ "oneOf": [
+ {
+ "$ref": "./common/basicAuth.json"
+ },
+ {
+ "$ref": "./cassandra/cloudConfig.json"
+ }
+ ]
+ },
+ "hostPort": {
+ "title": "Host and Port",
+ "description": "Host and port of the Cassandra service when using the `cassandra` connection scheme. Only host when using the `cassandra+srv` scheme.",
+ "type": "string"
+ },
+ "databaseName": {
+ "title": "Database Name",
+ "description": "Optional name to give to the database in OpenMetadata. If left blank, we will use default as the database name.",
+ "type": "string"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "sslMode": {
+ "title": "SSL Mode",
+ "$ref": "../../../../security/ssl/verifySSLConfig.json#/definitions/sslMode"
+ },
+ "sslConfig": {
+ "title": "SSL Configuration",
+ "$ref": "../../../../security/ssl/verifySSLConfig.json#/definitions/sslConfig"
+ },
+ "schemaFilterPattern":{
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/clickhouseConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/clickhouseConnection.json
new file mode 100644
index 000000000000..e478e587bfe4
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/clickhouseConnection.json
@@ -0,0 +1,132 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/clickhouseConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "ClickhouseConnection",
+ "description": "Clickhouse Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.ClickhouseConnection",
+ "definitions": {
+ "clickhouseType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["Clickhouse"],
+ "default": "Clickhouse"
+ },
+ "clickhouseScheme": {
+ "description": "SQLAlchemy driver scheme options.",
+ "type": "string",
+ "enum": ["clickhouse+http", "clickhouse+native"],
+ "default": "clickhouse+http"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/clickhouseType",
+ "default": "Clickhouse"
+ },
+ "scheme": {
+ "title": "Connection Scheme",
+ "description": "SQLAlchemy driver scheme options.",
+ "$ref": "#/definitions/clickhouseScheme",
+ "default": "clickhouse+http"
+ },
+ "username": {
+ "title": "Username",
+ "description": "Username to connect to Clickhouse. This user should have privileges to read all the metadata in Clickhouse.",
+ "type": "string"
+ },
+ "password": {
+ "title": "Password",
+ "description": "Password to connect to Clickhouse.",
+ "type": "string",
+ "format": "password"
+ },
+ "hostPort": {
+ "title": "Host and Port",
+ "description": "Host and port of the Clickhouse service.",
+ "type": "string"
+ },
+ "databaseName": {
+ "title": "Database Name",
+ "description": "Optional name to give to the database in OpenMetadata. If left blank, we will use default as the database name.",
+ "type": "string"
+ },
+ "databaseSchema": {
+ "title": "Database Schema",
+ "description": "Database Schema of the data source. This is optional parameter, if you would like to restrict the metadata reading to a single schema. When left blank, OpenMetadata Ingestion attempts to scan all the schemas.",
+ "type": "string"
+ },
+ "duration": {
+ "title": "Duration",
+ "description": "Clickhouse SQL connection duration.",
+ "type": "integer"
+ },
+ "https": {
+ "title": "Use HTTPS Protocol",
+ "description": "Use HTTPS Protocol for connection with clickhouse",
+ "type": "boolean"
+ },
+ "secure": {
+ "title": "Secure Connection",
+ "description": "Establish secure connection with clickhouse",
+ "type": "boolean"
+ },
+ "keyfile": {
+ "title": "Key File Path",
+ "description": "Path to key file for establishing secure connection",
+ "type": "string"
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "schemaFilterPattern":{
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ },
+ "supportsUsageExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsUsageExtraction"
+ },
+ "supportsLineageExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsLineageExtraction"
+ },
+ "supportsDBTExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsDBTExtraction"
+ },
+ "supportsProfiler": {
+ "title": "Supports Profiler",
+ "$ref": "../connectionBasicType.json#/definitions/supportsProfiler"
+ },
+ "supportsQueryComment": {
+ "title": "Supports Query Comment",
+ "$ref": "../connectionBasicType.json#/definitions/supportsQueryComment"
+ },
+ "sampleDataStorageConfig": {
+ "title": "Storage Config for Sample Data",
+ "$ref": "../connectionBasicType.json#/definitions/sampleDataStorageConfig"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["hostPort"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/cockroachConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/cockroachConnection.json
new file mode 100644
index 000000000000..a9de990e6585
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/cockroachConnection.json
@@ -0,0 +1,112 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/cockroachConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CockroachConnection",
+ "description": "Cockroach Database Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.CockroachConnection",
+ "definitions": {
+ "cockroachType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["Cockroach"],
+ "default": "Cockroach"
+ },
+ "cockroachScheme": {
+ "description": "SQLAlchemy driver scheme options.",
+ "type": "string",
+ "enum": ["cockroachdb+psycopg2"],
+ "default": "cockroachdb+psycopg2"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/cockroachType",
+ "default": "Cockroach"
+ },
+ "scheme": {
+ "title": "Connection Scheme",
+ "description": "SQLAlchemy driver scheme options.",
+ "$ref": "#/definitions/cockroachScheme",
+ "default": "cockroachdb+psycopg2"
+ },
+ "username": {
+ "title": "Username",
+ "description": "Username to connect to Cockroach. This user should have privileges to read all the metadata in Cockroach.",
+ "type": "string"
+ },
+ "authType": {
+ "title": "Auth Configuration Type",
+ "description": "Choose Auth Config Type.",
+ "oneOf": [
+ {
+ "$ref": "./common/basicAuth.json"
+ }
+ ]
+ },
+ "hostPort": {
+ "title": "Host and Port",
+ "description": "Host and port of the Cockrooach service.",
+ "type": "string"
+ },
+ "database": {
+ "title": "Database Name",
+ "description": "Optional name to give to the database in OpenMetadata. If left blank, we will use default as the database name.",
+ "type": "string"
+ },
+ "ingestAllDatabases": {
+ "title": "Ingest All Databases",
+ "description": "Ingest data from all databases in Postgres. You can use databaseFilterPattern on top of this.",
+ "type": "boolean",
+ "default": false
+ },
+ "databaseSchema": {
+ "title": "Database Schema",
+ "description": "Database Schema of the data source. This is optional parameter, if you would like to restrict the metadata reading to a single schema. When left blank, OpenMetadata Ingestion attempts to scan all the schemas.",
+ "type": "string"
+ },
+ "sslConfig": {
+ "title": "SSL",
+ "description": "SSL Configuration details.",
+ "$ref": "../../../../security/ssl/verifySSLConfig.json#/definitions/sslConfig"
+ },
+ "sslMode": {
+ "$ref": "../../../../security/ssl/verifySSLConfig.json#/definitions/sslMode"
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "schemaFilterPattern":{
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ },
+ "supportsProfiler": {
+ "title": "Supports Profiler",
+ "$ref": "../connectionBasicType.json#/definitions/supportsProfiler"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["hostPort", "username", "database"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/common/azureConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/common/azureConfig.json
new file mode 100644
index 000000000000..65f16199af9e
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/common/azureConfig.json
@@ -0,0 +1,15 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/common/azureConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Azure Configuration Source",
+ "description": "Azure Database Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.common.AzureConfig",
+ "properties": {
+ "azureConfig": {
+ "title": "Azure Credentials Configuration",
+ "$ref": "../../../../../security/credentials/azureCredentials.json"
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/common/basicAuth.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/common/basicAuth.json
new file mode 100644
index 000000000000..b1916d3de1d9
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/common/basicAuth.json
@@ -0,0 +1,17 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/common/basicAuth.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Basic Auth",
+ "description": "Common Database Connection Config",
+ "javaType": "org.openmetadata.schema.services.connections.database.common.basicAuth",
+ "type": "object",
+ "properties": {
+ "password": {
+ "title": "Password",
+ "description": "Password to connect to source.",
+ "type": "string",
+ "format": "password"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/common/gcpCloudSqlConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/common/gcpCloudSqlConfig.json
new file mode 100644
index 000000000000..cc308593acd9
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/common/gcpCloudSqlConfig.json
@@ -0,0 +1,28 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/common/gcpCloudSqlConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "GCP CloudSQL Configuration Source",
+ "description": "GCP CloudSQL Database Connection Config. Uses the Google Cloud SQL Python Connector.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.common.GcpCloudSqlConfig",
+ "properties": {
+ "password": {
+ "title": "Database Password",
+ "description": "Database user password. Leave empty if using IAM database authentication.",
+ "type": "string",
+ "format": "password"
+ },
+ "enableIamAuth": {
+ "title": "Enable IAM Authentication",
+ "description": "Use GCP IAM for database authentication instead of a password.",
+ "type": "boolean",
+ "default": false
+ },
+ "gcpConfig": {
+ "title": "GCP Credentials Configuration",
+ "description": "GCP credentials to use. If not provided, Application Default Credentials will be used.",
+ "$ref": "../../../../../security/credentials/gcpCredentials.json"
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/common/iamAuthConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/common/iamAuthConfig.json
new file mode 100644
index 000000000000..8657936fa3e7
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/common/iamAuthConfig.json
@@ -0,0 +1,15 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/common/iamAuthConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "IAM Auth Configuration Source",
+ "description": "IAM Auth Database Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.common.IamAuthConfig",
+ "properties": {
+ "awsConfig": {
+ "title": "AWS Credentials Configuration",
+ "$ref": "../../../../../security/credentials/awsCredentials.json"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/common/jwtAuth.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/common/jwtAuth.json
new file mode 100644
index 000000000000..1b2d15903c4e
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/common/jwtAuth.json
@@ -0,0 +1,17 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/common/jwtAuth.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "JWT Auth",
+ "description": "Common Database Connection Config",
+ "javaType": "org.openmetadata.schema.services.connections.database.common.jwtAuth",
+ "type": "object",
+ "properties": {
+ "jwt": {
+ "title": "JWT",
+ "description": "JWT to connect to source.",
+ "type": "string",
+ "format": "password"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/common/noConfigAuthenticationTypes.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/common/noConfigAuthenticationTypes.json
new file mode 100644
index 000000000000..0b20ce14c18c
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/common/noConfigAuthenticationTypes.json
@@ -0,0 +1,12 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/noConfigAuthenticationTypes.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "No Config Authentication Types",
+ "javaType": "org.openmetadata.schema.services.connections.database.common.NoConfigAuthenticationTypes",
+ "description": "Database Authentication types not requiring config.",
+ "type": "string",
+ "enum": [
+ "OAuth2"
+ ],
+ "default": "OAuth2"
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/couchbaseConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/couchbaseConnection.json
new file mode 100644
index 000000000000..0006902719b2
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/couchbaseConnection.json
@@ -0,0 +1,86 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/couchbaseConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Couchbase Connection",
+ "description": "Couchbase Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.CouchbaseConnection",
+ "definitions": {
+ "couchbaseType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": [
+ "Couchbase"
+ ],
+ "default": "Couchbase"
+ },
+ "couchbaseScheme": {
+ "description": "Couchbase driver scheme options.",
+ "type": "string",
+ "enum": [
+ "couchbase"
+ ],
+ "default": "couchbase"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/couchbaseType",
+ "default": "Couchbase"
+ },
+ "scheme": {
+ "title": "Connection Scheme",
+ "description": "Couchbase driver scheme options.",
+ "$ref": "#/definitions/couchbaseScheme",
+ "default": "couchbase"
+ },
+ "bucket": {
+ "title": "Connection Bucket",
+ "description": "Couchbase connection Bucket options.",
+ "type": "string"
+ },
+ "username": {
+ "title": "Username",
+ "description": "Username to connect to Couchbase. This user should have privileges to read all the metadata in Couchbase.",
+ "type": "string"
+ },
+ "password": {
+ "title": "Password",
+ "description": "Password to connect to Couchbase.",
+ "type": "string",
+ "format": "password"
+ },
+ "hostport": {
+ "title": "Hostport",
+ "description": "Hostname of the Couchbase service.",
+ "type": "string"
+ },
+ "schemaFilterPattern":{
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "hostport",
+ "username",
+ "password"
+ ]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/customDatabaseConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/customDatabaseConnection.json
new file mode 100644
index 000000000000..61d62783340e
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/customDatabaseConnection.json
@@ -0,0 +1,55 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/customDatabaseConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CustomDatabaseConnection",
+ "description": "Custom Database Service connection to build a source that is not supported by OpenMetadata yet.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.CustomDatabaseConnection",
+ "definitions": {
+ "customDatabaseType": {
+ "title": "Service Type",
+ "description": "Custom database service type",
+ "type": "string",
+ "enum": ["CustomDatabase"],
+ "default": "CustomDatabase"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Custom database service type",
+ "$ref": "#/definitions/customDatabaseType",
+ "default": "CustomDatabase"
+ },
+ "sourcePythonClass": {
+ "title": "Source Python Class Name",
+ "description": "Source Python Class Name to instantiated by the ingestion workflow",
+ "type": "string"
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "schemaFilterPattern":{
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": true,
+ "required": ["type"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/databricks/azureAdSetup.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/databricks/azureAdSetup.json
new file mode 100644
index 000000000000..d01e2d455181
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/databricks/azureAdSetup.json
@@ -0,0 +1,32 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/databricks/azureAdSetup.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Azure AD Setup",
+ "description": "Azure Active Directory authentication for Azure Databricks workspaces using Service Principal.",
+ "javaType": "org.openmetadata.schema.services.connections.database.databricks.AzureADSetup",
+ "type": "object",
+ "properties": {
+ "azureClientId": {
+ "title": "Azure Client ID",
+ "description": "Azure Service Principal Application (client) ID registered in your Azure Active Directory.",
+ "type": "string"
+ },
+ "azureClientSecret": {
+ "title": "Azure Client Secret",
+ "description": "Azure Service Principal client secret created in Azure AD for authentication.",
+ "type": "string",
+ "format": "password"
+ },
+ "azureTenantId": {
+ "title": "Azure Tenant ID",
+ "description": "Azure Active Directory Tenant ID where your Service Principal is registered.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "azureClientId",
+ "azureClientSecret",
+ "azureTenantId"
+ ]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/databricks/databricksOAuth.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/databricks/databricksOAuth.json
new file mode 100644
index 000000000000..c304a84e2b6b
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/databricks/databricksOAuth.json
@@ -0,0 +1,26 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/databricks/databricksOAuth.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Databricks OAuth",
+ "description": "OAuth2 Machine-to-Machine authentication using Service Principal credentials for Databricks.",
+ "javaType": "org.openmetadata.schema.services.connections.database.databricks.DatabricksOAuth",
+ "type": "object",
+ "properties": {
+ "clientId": {
+ "title": "Client ID",
+ "description": "Service Principal Application ID created in your Databricks Account Console for OAuth Machine-to-Machine authentication.",
+ "type": "string"
+ },
+ "clientSecret": {
+ "title": "Client Secret",
+ "description": "OAuth Secret generated for the Service Principal in Databricks Account Console. Used for secure OAuth2 authentication.",
+ "type": "string",
+ "format": "password"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "clientId",
+ "clientSecret"
+ ]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/databricks/personalAccessToken.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/databricks/personalAccessToken.json
new file mode 100644
index 000000000000..0380e16c9373
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/databricks/personalAccessToken.json
@@ -0,0 +1,20 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/databricks/personalAccessToken.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Personal Access Token",
+ "description": "Personal Access Token authentication for Databricks.",
+ "javaType": "org.openmetadata.schema.services.connections.database.databricks.PersonalAccessToken",
+ "type": "object",
+ "properties": {
+ "token": {
+ "title": "Token",
+ "description": "Generated Personal Access Token for Databricks workspace authentication. This token is created from User Settings -> Developer -> Access Tokens in your Databricks workspace.",
+ "type": "string",
+ "format": "password"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "token"
+ ]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/databricksConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/databricksConnection.json
new file mode 100644
index 000000000000..6e5f5d36fc5e
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/databricksConnection.json
@@ -0,0 +1,160 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/databricksConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DatabricksConnection",
+ "description": "Databricks Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.DatabricksConnection",
+ "definitions": {
+ "databricksType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": [
+ "Databricks"
+ ],
+ "default": "Databricks"
+ },
+ "databricksScheme": {
+ "description": "SQLAlchemy driver scheme options.",
+ "type": "string",
+ "enum": [
+ "databricks+connector"
+ ],
+ "default": "databricks+connector"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/databricksType",
+ "default": "Databricks"
+ },
+ "scheme": {
+ "title": "Connection Scheme",
+ "description": "SQLAlchemy driver scheme options.",
+ "$ref": "#/definitions/databricksScheme",
+ "default": "databricks+connector"
+ },
+ "hostPort": {
+ "title": "Host and Port",
+ "description": "Host and port of the Databricks service.",
+ "type": "string"
+ },
+ "authType": {
+ "title": "Authentication Type",
+ "description": "Choose between different authentication types for Databricks.",
+ "oneOf": [
+ {
+ "title": "Personal Access Token",
+ "$ref": "./databricks/personalAccessToken.json"
+ },
+ {
+ "title": "Databricks OAuth",
+ "$ref": "./databricks/databricksOAuth.json"
+ },
+ {
+ "title": "Azure AD Setup",
+ "$ref": "./databricks/azureAdSetup.json"
+ }
+ ]
+ },
+ "httpPath": {
+ "title": "Http Path",
+ "description": "Databricks compute resources URL.",
+ "type": "string"
+ },
+ "catalog": {
+ "title": "Catalog",
+ "description": "Catalog of the data source(Example: hive_metastore). This is optional parameter, if you would like to restrict the metadata reading to a single catalog. When left blank, OpenMetadata Ingestion attempts to scan all the catalog.",
+ "type": "string"
+ },
+ "databaseSchema": {
+ "title": "Database Schema",
+ "description": "Database Schema of the data source. This is optional parameter, if you would like to restrict the metadata reading to a single schema. When left blank, OpenMetadata Ingestion attempts to scan all the schemas.",
+ "type": "string"
+ },
+ "connectionTimeout": {
+ "title": "Connection Timeout",
+ "description": "The maximum amount of time (in seconds) to wait for a successful connection to the data source. If the connection attempt takes longer than this timeout period, an error will be returned.",
+ "type": "integer",
+ "default": 120
+ },
+ "queryHistoryTable": {
+ "title": "Query History Table",
+ "description": "Table name to fetch the query history.",
+ "type": "string",
+ "default": "system.query.history"
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "schemaFilterPattern": {
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "default": {
+ "includes": [],
+ "excludes": [
+ "^information_schema$"
+ ]
+ }
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "default": {
+ "includes": [],
+ "excludes": [
+ "^system$"
+ ]
+ }
+ },
+ "supportsUsageExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsUsageExtraction"
+ },
+ "supportsLineageExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsLineageExtraction"
+ },
+ "supportsDBTExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsDBTExtraction"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ },
+ "supportsProfiler": {
+ "title": "Supports Profiler",
+ "$ref": "../connectionBasicType.json#/definitions/supportsProfiler"
+ },
+ "supportsDatabase": {
+ "title": "Supports Database",
+ "$ref": "../connectionBasicType.json#/definitions/supportsDatabase"
+ },
+ "supportsQueryComment": {
+ "title": "Supports Query Comment",
+ "$ref": "../connectionBasicType.json#/definitions/supportsQueryComment"
+ },
+ "sampleDataStorageConfig": {
+ "title": "Storage Config for Sample Data",
+ "$ref": "../connectionBasicType.json#/definitions/sampleDataStorageConfig"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "hostPort",
+ "httpPath",
+ "authType"
+ ]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/datalake/azureConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/datalake/azureConfig.json
new file mode 100644
index 000000000000..fbbfbec70734
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/datalake/azureConfig.json
@@ -0,0 +1,15 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/datalake/azureConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AzureConfig",
+ "description": "Azure Datalake Storage will ingest files in container",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.datalake.AzureConfig",
+ "properties": {
+ "securityConfig": {
+ "title": "Azure Datalake Config Source",
+ "$ref": "../../../../../security/credentials/azureCredentials.json"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/datalake/gcsConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/datalake/gcsConfig.json
new file mode 100644
index 000000000000..fe10c176c6d5
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/datalake/gcsConfig.json
@@ -0,0 +1,15 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/datalake/gcsConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "GCSConfig",
+ "description": "DataLake GCS storage will ingest metadata of files",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.datalake.GCSConfig",
+ "properties": {
+ "securityConfig": {
+ "title": "DataLake GCS Security Config",
+ "$ref": "../../../../../security/credentials/gcpCredentials.json"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/datalake/s3Config.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/datalake/s3Config.json
new file mode 100644
index 000000000000..e507016070a3
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/datalake/s3Config.json
@@ -0,0 +1,15 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/datalake/s3Config.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "S3Config",
+ "description": "DataLake S3 bucket will ingest metadata of files in bucket",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.datalake.S3Config",
+ "properties": {
+ "securityConfig": {
+ "title": "DataLake S3 Security Config",
+ "$ref": "../../../../../security/credentials/awsCredentials.json"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/datalakeConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/datalakeConnection.json
new file mode 100644
index 000000000000..c55177541714
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/datalakeConnection.json
@@ -0,0 +1,112 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/datalakeConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DatalakeConnection",
+ "description": "Datalake Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.DatalakeConnection",
+ "definitions": {
+ "datalakeType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": [
+ "Datalake"
+ ],
+ "default": "Datalake"
+ },
+ "localConfig": {
+ "title": "Local Config",
+ "description": "Local config source where no extra information needs to be sent.",
+ "type": "object",
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/datalakeType",
+ "default": "Datalake"
+ },
+ "configSource": {
+ "title": "DataLake Configuration Source",
+ "description": "Available sources to fetch files.",
+ "oneOf": [
+ {
+ "$ref": "#/definitions/localConfig"
+ },
+ {
+ "$ref": "datalake/azureConfig.json"
+ },
+ {
+ "$ref": "datalake/gcsConfig.json"
+ },
+ {
+ "$ref": "datalake/s3Config.json"
+ }
+ ]
+ },
+ "bucketName": {
+ "title": "Bucket Name",
+ "description": "Bucket Name of the data source.",
+ "type": "string",
+ "default": ""
+ },
+ "prefix": {
+ "title": "Prefix",
+ "description": "Prefix of the data source.",
+ "type": "string",
+ "default": ""
+ },
+ "databaseName": {
+ "title": "Database Name",
+ "description": "Optional name to give to the database in OpenMetadata. If left blank, we will use default as the database name.",
+ "type": "string"
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "schemaFilterPattern":{
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ },
+ "supportsProfiler": {
+ "title": "Supports Profiler",
+ "$ref": "../connectionBasicType.json#/definitions/supportsProfiler"
+ },
+ "sampleDataStorageConfig": {
+ "title": "Storage Config for Sample Data",
+ "$ref": "../connectionBasicType.json#/definitions/sampleDataStorageConfig"
+ },
+ "skipColdStorage": {
+ "title": "Skip Cold Storage",
+ "description": "Skip files in cold storage tiers (e.g., S3 Glacier, Azure Archive/Cool/Cold, GCS Coldline/Archive). When enabled, only files in hot/standard storage tiers will be processed.",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "configSource"
+ ]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/db2Connection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/db2Connection.json
new file mode 100644
index 000000000000..43407637ceb5
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/db2Connection.json
@@ -0,0 +1,131 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/db2Connection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Db2Connection",
+ "description": "Db2 Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.Db2Connection",
+ "definitions": {
+ "db2Type": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["Db2"],
+ "default": "Db2"
+ },
+ "db2Scheme": {
+ "description": "SQLAlchemy driver scheme options.",
+ "type": "string",
+ "enum": ["db2+ibm_db", "ibmi"],
+ "default": "db2+ibm_db"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/db2Type",
+ "default": "Db2"
+ },
+ "scheme": {
+ "title": "Connection Scheme",
+ "description": "SQLAlchemy driver scheme options.",
+ "$ref": "#/definitions/db2Scheme",
+ "default": "db2+ibm_db"
+ },
+ "username": {
+ "title": "Username",
+ "description": "Username to connect to DB2. This user should have privileges to read all the metadata in DB2.",
+ "type": "string"
+ },
+ "password": {
+ "title": "Password",
+ "description": "Password to connect to DB2.",
+ "type": "string",
+ "format": "password"
+ },
+ "hostPort": {
+ "title": "Host and Port",
+ "description": "Host and port of the DB2 service.",
+ "type": "string"
+ },
+ "database": {
+ "title": "database",
+ "description": "Database of the data source.",
+ "type": "string"
+ },
+ "licenseFileName": {
+ "title": "License File Name",
+ "description": "License file name to connect to DB2.",
+ "type": "string"
+ },
+ "license": {
+ "title": "License",
+ "description": "License to connect to DB2.",
+ "type": "string"
+ },
+ "clidriverVersion": {
+ "title": "CLI Driver Version",
+ "description": "CLI Driver version to connect to DB2. If not provided, the latest version will be used.",
+ "type": "string"
+ },
+ "sslMode": {
+ "$ref": "../../../../security/ssl/verifySSLConfig.json#/definitions/sslMode"
+ },
+ "sslConfig": {
+ "title": "SSL Configuration",
+ "description": "SSL Configuration details for DB2 connection. Provide CA certificate for server validation, and optionally client certificate and key for mutual TLS authentication.",
+ "$ref": "../../../../security/ssl/verifySSLConfig.json#/definitions/sslConfig"
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "schemaFilterPattern":{
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ },
+ "supportsDBTExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsDBTExtraction"
+ },
+ "supportsProfiler": {
+ "title": "Supports Profiler",
+ "$ref": "../connectionBasicType.json#/definitions/supportsProfiler"
+ },
+ "supportsDatabase": {
+ "title": "Supports Database",
+ "$ref": "../connectionBasicType.json#/definitions/supportsDatabase"
+ },
+ "supportsQueryComment": {
+ "title": "Supports Query Comment",
+ "$ref": "../connectionBasicType.json#/definitions/supportsQueryComment"
+ },
+ "sampleDataStorageConfig": {
+ "title": "Storage Config for Sample Data",
+ "$ref": "../connectionBasicType.json#/definitions/sampleDataStorageConfig"
+ },
+ "supportsViewLineageExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsViewLineageExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["hostPort", "username", "database"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/deltaLakeConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/deltaLakeConnection.json
new file mode 100644
index 000000000000..68c75e274021
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/deltaLakeConnection.json
@@ -0,0 +1,72 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/deltaLakeConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DeltaLakeConnection",
+ "description": "DeltaLake Database Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.DeltaLakeConnection",
+ "definitions": {
+ "deltaLakeType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["DeltaLake"],
+ "default": "DeltaLake"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/deltaLakeType",
+ "default": "DeltaLake"
+ },
+ "configSource": {
+ "title": "DeltaLake Configuration Source",
+ "description": "Available sources to fetch the metadata.",
+ "oneOf": [
+ {
+ "$ref": "./deltalake/metastoreConfig.json"
+ },
+ {
+ "$ref": "./deltalake/storageConfig.json"
+ }
+ ]
+ },
+ "databaseName": {
+ "title": "Database Name",
+ "description": "Optional name to give to the database in OpenMetadata. If left blank, we will use default as the database name.",
+ "type": "string"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "description": "If using Metastore, Key-Value pairs that will be used to add configs to the SparkSession.",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "schemaFilterPattern":{
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ },
+ "supportsDBTExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsDBTExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "configSource"
+ ]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/deltalake/metastoreConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/deltalake/metastoreConfig.json
new file mode 100644
index 000000000000..f78123af3d5f
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/deltalake/metastoreConfig.json
@@ -0,0 +1,94 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/deltalake/metastoreConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "MetastoreConfig",
+ "description": "Deltalake Metastore configuration.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.deltalake.MetastoreConfig",
+ "definitions": {
+ "metastoreHostPortConnection": {
+ "title": "Hive Metastore Service",
+ "type": "object",
+ "properties": {
+ "metastoreHostPort": {
+ "title": "Hive Metastore Service",
+ "description": "Thrift connection to the metastore service. E.g., localhost:9083",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "metastoreDbConnection": {
+ "title": "Hive Metastore Database",
+ "type":"object",
+ "properties": {
+ "metastoreDb": {
+ "title": "Hive Metastore Database",
+ "description": "JDBC connection to the metastore database. E.g., jdbc:mysql://localhost:3306/demo_hive",
+ "type": "string"
+ },
+ "username": {
+ "title": "Connection UserName",
+ "description": "Username to use against metastore database. The value will be mapped as spark.hadoop.javax.jdo.option.ConnectionUserName sparks property.",
+ "type": "string"
+ },
+ "password": {
+ "title": "Connection Password",
+ "description": "Password to use against metastore database. The value will be mapped as spark.hadoop.javax.jdo.option.ConnectionPassword sparks property.",
+ "type": "string",
+ "format": "password"
+ },
+ "driverName": {
+ "title": "Connection Driver Name",
+ "description": "Driver class name for JDBC metastore. The value will be mapped as spark.hadoop.javax.jdo.option.ConnectionDriverName sparks property. E.g., org.mariadb.jdbc.Driver",
+ "type": "string"
+ },
+ "jdbcDriverClassPath": {
+ "title": "JDBC Driver Class Path",
+ "description": "Class path to JDBC driver required for JDBC connection. The value will be mapped as spark.driver.extraClassPath sparks property.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "metastoreFilePathConnection": {
+ "title": "Hive Metastore File Path",
+ "type":"object",
+ "properties": {
+ "metastoreFilePath": {
+ "title": "Hive Metastore File Path",
+ "description": "Local path for the local file with metastore data. E.g., /tmp/metastore.db",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "connection": {
+ "title": "Connection",
+ "description": "Metastore connection configuration, depending on your metastore type.",
+ "oneOf": [
+ {
+ "$ref": "#/definitions/metastoreHostPortConnection"
+ },
+ {
+ "$ref": "#/definitions/metastoreDbConnection"
+ },
+ {
+ "$ref": "#/definitions/metastoreFilePathConnection"
+ }
+ ]
+ },
+ "appName": {
+ "title": "Application Name",
+ "description": "pySpark App Name.",
+ "type": "string",
+ "default": "OpenMetadata"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "connection"
+ ]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/deltalake/storageConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/deltalake/storageConfig.json
new file mode 100644
index 000000000000..64362e10977b
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/deltalake/storageConfig.json
@@ -0,0 +1,43 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/deltalake/storageConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "StorageConfig",
+ "description": "DeltaLake Storage Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.deltalake.StorageConfig",
+ "definitions": {
+ "localConfig": {
+ "title": "Local Config",
+ "description": "Local config source where no extra information needs to be sent.",
+ "type": "object",
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "connection": {
+ "title": "DeltaLake Storage Configuration Source",
+ "description": "Available sources to fetch files.",
+ "oneOf": [
+ {
+ "$ref": "../datalake/s3Config.json"
+ }
+ ]
+ },
+ "bucketName": {
+ "title": "Bucket Name",
+ "description": "Bucket Name of the data source.",
+ "type": "string",
+ "default": ""
+ },
+ "prefix": {
+ "title": "Prefix",
+ "description": "Prefix of the data source.",
+ "type": "string",
+ "default": ""
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "connection"
+ ]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/domoDatabaseConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/domoDatabaseConnection.json
new file mode 100644
index 000000000000..c31e83a611f6
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/domoDatabaseConnection.json
@@ -0,0 +1,81 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/domoDatabaseConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DomoDatabaseConnection",
+ "description": "Domo Database Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.DomoDatabaseConnection",
+ "definitions": {
+ "domoDatabaseType": {
+ "description": " service type",
+ "type": "string",
+ "enum": ["DomoDatabase"],
+ "default": "DomoDatabase"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/domoDatabaseType",
+ "default": "DomoDatabase"
+ },
+ "clientId": {
+ "title": "Client ID",
+ "description": "Client ID for DOMO",
+ "type": "string"
+ },
+ "secretToken": {
+ "title": "Secret Token",
+ "description": "Secret Token to connect DOMO",
+ "type": "string",
+ "format": "password"
+ },
+ "accessToken": {
+ "title": "Access Token",
+ "description": "Access token to connect to DOMO",
+ "type": "string"
+ },
+ "apiHost": {
+ "expose": true,
+ "title": "API Host",
+ "description": "API Host to connect to DOMO instance",
+ "default": "api.domo.com",
+ "type": "string",
+ "format": "string"
+ },
+ "instanceDomain": {
+ "title": "Instance Domain",
+ "description": "URL of your Domo instance, e.g., https://openmetadata.domo.com",
+ "type": "string",
+ "format": "uri"
+ },
+ "databaseName": {
+ "title": "Database Name",
+ "description": "Optional name to give to the database in OpenMetadata. If left blank, we will use default as the database name.",
+ "type": "string"
+ },
+ "schemaFilterPattern":{
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["clientId", "secretToken", "instanceDomain"]
+ }
+
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/dorisConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/dorisConnection.json
new file mode 100644
index 000000000000..9abebf1835fd
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/dorisConnection.json
@@ -0,0 +1,118 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/dorisConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DorisConnection",
+ "description": "Doris Database Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.DorisConnection",
+ "definitions": {
+ "dorisType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": [
+ "Doris"
+ ],
+ "default": "Doris"
+ },
+ "dorisScheme": {
+ "description": "SQLAlchemy driver scheme options.",
+ "type": "string",
+ "enum": [
+ "doris"
+ ],
+ "default": "doris"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/dorisType",
+ "default": "Doris"
+ },
+ "scheme": {
+ "title": "Connection Scheme",
+ "description": "SQLAlchemy driver scheme options.",
+ "$ref": "#/definitions/dorisScheme",
+ "default": "doris"
+ },
+ "username": {
+ "title": "Username",
+ "description": "Username to connect to Doris. This user should have privileges to read all the metadata in Doris.",
+ "type": "string"
+ },
+ "password": {
+ "title": "Password",
+ "description": "Password to connect to Doris.",
+ "type": "string",
+ "format": "password"
+ },
+ "hostPort": {
+ "title": "Host and Port",
+ "description": "Host and port of the Doris service.",
+ "type": "string"
+ },
+ "databaseName": {
+ "title": "Database Name",
+ "description": "Optional name to give to the database in OpenMetadata. If left blank, we will use default as the database name.",
+ "type": "string"
+ },
+ "databaseSchema": {
+ "title": "Database Schema",
+ "description": "Database Schema of the data source. This is optional parameter, if you would like to restrict the metadata reading to a single schema. When left blank, OpenMetadata Ingestion attempts to scan all the schemas.",
+ "type": "string"
+ },
+ "sslConfig": {
+ "title": "SSL",
+ "description": "SSL Configuration details.",
+ "$ref": "../../../../security/ssl/verifySSLConfig.json#/definitions/sslConfig"
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "schemaFilterPattern":{
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ },
+ "supportsDBTExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsDBTExtraction"
+ },
+ "supportsProfiler": {
+ "title": "Supports Profiler",
+ "$ref": "../connectionBasicType.json#/definitions/supportsProfiler"
+ },
+ "supportsQueryComment": {
+ "title": "Supports Query Comment",
+ "$ref": "../connectionBasicType.json#/definitions/supportsQueryComment"
+ },
+ "supportsViewLineageExtraction": {
+ "title": "Supports View Lineage",
+ "$ref": "../connectionBasicType.json#/definitions/supportsViewLineageExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "hostPort",
+ "username"
+ ]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/dremio/cloudAuth.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/dremio/cloudAuth.json
new file mode 100644
index 000000000000..0ae94329016c
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/dremio/cloudAuth.json
@@ -0,0 +1,30 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/dremio/cloudAuth.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Dremio Cloud Authentication",
+ "description": "Authentication configuration for Dremio Cloud using Personal Access Token (PAT). Dremio Cloud is a fully managed SaaS platform.",
+ "javaType": "org.openmetadata.schema.services.connections.database.dremio.CloudAuth",
+ "type": "object",
+ "properties": {
+ "region": {
+ "title": "Cloud Region",
+ "description": "Dremio Cloud region where your organization is hosted. Choose 'US' for United States region or 'EU' for European region.",
+ "type": "string",
+ "enum": ["US", "EU"],
+ "default": "US"
+ },
+ "personalAccessToken": {
+ "title": "Personal Access Token (PAT)",
+ "description": "Personal Access Token for authenticating with Dremio Cloud. Generate this token from your Dremio Cloud account settings under Settings -> Personal Access Tokens.",
+ "type": "string",
+ "format": "password"
+ },
+ "projectId": {
+ "title": "Project ID",
+ "description": "Dremio Cloud Project ID (required). This unique identifier can be found in your Dremio Cloud project URL or project settings.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["region", "personalAccessToken", "projectId"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/dremio/softwareAuth.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/dremio/softwareAuth.json
new file mode 100644
index 000000000000..b4c616bd45cd
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/dremio/softwareAuth.json
@@ -0,0 +1,28 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/dremio/softwareAuth.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Dremio Software Authentication",
+ "description": "Authentication configuration for self-hosted Dremio Software using username and password. Dremio Software is deployed on-premises or in your own cloud infrastructure.",
+ "javaType": "org.openmetadata.schema.services.connections.database.dremio.SoftwareAuth",
+ "type": "object",
+ "properties": {
+ "hostPort": {
+ "title": "Host and Port",
+ "description": "URL to your self-hosted Dremio Software instance, including protocol and port (e.g., http://localhost:9047 or https://dremio.example.com:9047).",
+ "type": "string"
+ },
+ "username": {
+ "title": "Username",
+ "description": "Username for authenticating with Dremio Software. This user should have appropriate permissions to access metadata.",
+ "type": "string"
+ },
+ "password": {
+ "title": "Password",
+ "description": "Password for the Dremio Software user account.",
+ "type": "string",
+ "format": "password"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["hostPort", "username", "password"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/dremioConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/dremioConnection.json
new file mode 100644
index 000000000000..e8ed1fe85c24
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/dremioConnection.json
@@ -0,0 +1,74 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/dremioConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DremioConnection",
+ "description": "Dremio Connection Config supporting both Dremio Cloud (SaaS) and Dremio Software (self-hosted)",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.DremioConnection",
+ "definitions": {
+ "dremioType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["Dremio"],
+ "default": "Dremio"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/dremioType",
+ "default": "Dremio"
+ },
+ "authType": {
+ "title": "Authentication Type",
+ "description": "Choose between Dremio Cloud (SaaS) or Dremio Software (self-hosted) authentication.",
+ "oneOf": [
+ {
+ "title": "Dremio Cloud",
+ "$ref": "./dremio/cloudAuth.json"
+ },
+ {
+ "title": "Dremio Software",
+ "$ref": "./dremio/softwareAuth.json"
+ }
+ ]
+ },
+ "database": {
+ "title": "Namespace",
+ "description": "Optional: Restrict metadata ingestion to a specific namespace (source/space). When left blank, all namespaces will be ingested.",
+ "type": "string"
+ },
+ "schemaFilterPattern": {
+ "title": "Folder Filter Pattern",
+ "description": "Regex to only include/exclude folders that match the pattern. In Dremio Cloud, folders are mapped as schemas.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "tableFilterPattern": {
+ "title": "Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that match the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Namespace Filter Pattern",
+ "description": "Regex to only include/exclude namespaces (sources/spaces) that match the pattern. In Dremio Cloud, namespaces are mapped as databases.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ },
+ "supportsUsageExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsUsageExtraction"
+ },
+ "supportsLineageExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsLineageExtraction"
+ },
+ "supportsDatabase": {
+ "title": "Supports Database",
+ "$ref": "../connectionBasicType.json#/definitions/supportsDatabase"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["authType"]
+ }
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/druidConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/druidConnection.json
new file mode 100644
index 000000000000..f072540a3406
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/druidConnection.json
@@ -0,0 +1,104 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/druidConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DruidConnection",
+ "description": "Druid Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.DruidConnection",
+ "definitions": {
+ "druidType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["Druid"],
+ "default": "Druid"
+ },
+ "druidScheme": {
+ "description": "SQLAlchemy driver scheme options.",
+ "type": "string",
+ "enum": ["druid"],
+ "default": "druid"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/druidType",
+ "default": "Druid"
+ },
+ "scheme": {
+ "title": "Connection Scheme",
+ "description": "SQLAlchemy driver scheme options.",
+ "$ref": "#/definitions/druidScheme",
+ "default": "druid"
+ },
+ "username": {
+ "title": "Username",
+ "description": "Username to connect to Druid. This user should have privileges to read all the metadata in Druid.",
+ "type": "string"
+ },
+ "password": {
+ "title": "Password",
+ "description": "Password to connect to Druid.",
+ "type": "string",
+ "format": "password"
+ },
+ "hostPort": {
+ "title": "Host and Port",
+ "description": "Host and port of the Druid service.",
+ "type": "string"
+ },
+ "databaseName": {
+ "title": "Database Name",
+ "description": "Optional name to give to the database in OpenMetadata. If left blank, we will use default as the database name.",
+ "type": "string"
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "schemaFilterPattern":{
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ },
+ "supportsProfiler": {
+ "title": "Supports Profiler",
+ "$ref": "../connectionBasicType.json#/definitions/supportsProfiler"
+ },
+ "supportsQueryComment": {
+ "title": "Supports Query Comment",
+ "$ref": "../connectionBasicType.json#/definitions/supportsQueryComment"
+ },
+ "supportsDBTExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsDBTExtraction"
+ },
+ "sampleDataStorageConfig": {
+ "title": "Storage Config for Sample Data",
+ "$ref": "../connectionBasicType.json#/definitions/sampleDataStorageConfig"
+ },
+ "supportsViewLineageExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsViewLineageExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["hostPort"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/dynamoDBConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/dynamoDBConnection.json
new file mode 100644
index 000000000000..567e277610f7
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/dynamoDBConnection.json
@@ -0,0 +1,66 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/dynamoDBConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DynamoDBConnection",
+ "description": "DynamoDB Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.DynamoDBConnection",
+ "definitions": {
+ "dynamoDBType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["DynamoDB"],
+ "default": "DynamoDB"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/dynamoDBType",
+ "default": "DynamoDB"
+ },
+ "awsConfig": {
+ "title": "AWS Credentials Configuration",
+ "$ref": "../../../../security/credentials/awsCredentials.json"
+ },
+ "databaseName": {
+ "title": "Database Name",
+ "description": "Optional name to give to the database in OpenMetadata. If left blank, we will use default as the database name.",
+ "type": "string"
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "schemaFilterPattern":{
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ },
+ "supportsProfiler": {
+ "title": "Supports Profiler",
+ "$ref": "../connectionBasicType.json#/definitions/supportsProfiler"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["awsConfig"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/epicConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/epicConnection.json
new file mode 100644
index 000000000000..2bc2b8b74660
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/epicConnection.json
@@ -0,0 +1,59 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/epicConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "EpicConnection",
+ "description": "Epic FHIR Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.EpicConnection",
+ "definitions": {
+ "epicType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["Epic"],
+ "default": "Epic"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/epicType",
+ "default": "Epic"
+ },
+ "fhirServerUrl": {
+ "title": "FHIR Server URL",
+ "description": "Base URL of the Epic FHIR server",
+ "type": "string",
+ "default": "https://fhir.epic.com/interconnect-fhir-oauth/api/FHIR",
+ "format": "uri"
+ },
+ "fhirVersion": {
+ "title": "FHIR Version",
+ "description": "FHIR specification version (R4, STU3, DSTU2)",
+ "type": "string",
+ "enum": ["R4", "STU3", "DSTU2"],
+ "default": "R4"
+ },
+ "databaseName": {
+ "title": "Database Name",
+ "description": "Optional name to give to the database in OpenMetadata. If left blank, we will use 'epic' as the database name.",
+ "type": "string",
+ "default": "epic"
+ },
+ "schemaFilterPattern": {
+ "title": "Schema Filter Pattern",
+ "description": "Regex to include/exclude FHIR resource categories",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "tableFilterPattern": {
+ "title": "Table Filter Pattern",
+ "description": "Regex to include/exclude FHIR resource types",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false
+ }
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/exasolConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/exasolConnection.json
new file mode 100644
index 000000000000..8c041c690d0c
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/exasolConnection.json
@@ -0,0 +1,104 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/exasolConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "ExasolConnection",
+ "description": "Exasol Database Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.ExasolConnection",
+ "definitions": {
+ "exasolType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": [
+ "Exasol"
+ ],
+ "default": "Exasol"
+ },
+ "exasolScheme": {
+ "description": "SQLAlchemy driver scheme options.",
+ "type": "string",
+ "enum": [
+ "exa+websocket"
+ ],
+ "default": "exa+websocket"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/exasolType",
+ "default": "Exasol"
+ },
+ "scheme": {
+ "title": "Connection Scheme",
+ "description": "SQLAlchemy driver scheme options.",
+ "$ref": "#/definitions/exasolScheme",
+ "default": "exa+websocket"
+ },
+ "username": {
+ "title": "Username",
+ "description": "Username to connect to Exasol. This user should have privileges to read all the metadata in Exasol.",
+ "type": "string"
+ },
+ "password": {
+ "title": "Password",
+ "description": "Password to connect to Exasol.",
+ "type": "string",
+ "format": "password"
+ },
+ "hostPort": {
+ "title": "Host and Port",
+ "description": "Host and port of the source service.",
+ "type": "string",
+ "default": "127.0.0.1:8563"
+ },
+ "tls": {
+ "title": "SSL/TLS Settings",
+ "description": "Client SSL/TLS settings.",
+ "type": "string",
+ "enum": [
+ "disable-tls",
+ "ignore-certificate",
+ "validate-certificate"
+ ],
+ "default": "validate-certificate"
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "schemaFilterPattern":{
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ },
+ "supportsLineageExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsLineageExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "hostPort",
+ "username",
+ "password"
+ ]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/glueConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/glueConnection.json
new file mode 100644
index 000000000000..bb1df6ba1075
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/glueConnection.json
@@ -0,0 +1,65 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/glueConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "GlueConnection",
+ "description": "Glue Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.GlueConnection",
+ "definitions": {
+ "glueType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["Glue"],
+ "default": "Glue"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/glueType",
+ "default": "Glue"
+ },
+ "awsConfig": {
+ "title": "AWS Credentials Configuration",
+ "$ref": "../../../../security/credentials/awsCredentials.json"
+ },
+ "databaseName": {
+ "title": "Database Name",
+ "description": "Optional name to give to the database in OpenMetadata. If left blank, we will use default as the database name.",
+ "type": "string"
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "schemaFilterPattern":{
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ },
+ "supportsDBTExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsDBTExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["awsConfig"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/greenplumConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/greenplumConnection.json
new file mode 100644
index 000000000000..6b952f66e3c4
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/greenplumConnection.json
@@ -0,0 +1,134 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/greenplumConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "GreenplumConnection",
+ "description": "Greenplum Database Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.GreenplumConnection",
+ "definitions": {
+ "greenplumType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": [
+ "Greenplum"
+ ],
+ "default": "Greenplum"
+ },
+ "greenplumScheme": {
+ "description": "SQLAlchemy driver scheme options.",
+ "type": "string",
+ "enum": [
+ "postgresql+psycopg2"
+ ],
+ "default": "postgresql+psycopg2"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/greenplumType",
+ "default": "Greenplum"
+ },
+ "scheme": {
+ "title": "Connection Scheme",
+ "description": "SQLAlchemy driver scheme options.",
+ "$ref": "#/definitions/greenplumScheme",
+ "default": "postgresql+psycopg2"
+ },
+ "username": {
+ "title": "Username",
+ "description": "Username to connect to Greenplum. This user should have privileges to read all the metadata in Greenplum.",
+ "type": "string"
+ },
+ "authType": {
+ "title": "Auth Configuration Type",
+ "description": "Choose Auth Config Type.",
+ "oneOf": [
+ {
+ "$ref": "./common/basicAuth.json"
+ },
+ {
+ "$ref": "./common/iamAuthConfig.json"
+ }
+ ]
+ },
+ "hostPort": {
+ "title": "Host and Port",
+ "description": "Host and port of the source service.",
+ "type": "string"
+ },
+ "database": {
+ "title": "Database",
+ "description": "Database of the data source. This is optional parameter, if you would like to restrict the metadata reading to a single database. When left blank, OpenMetadata Ingestion attempts to scan all the databases.",
+ "type": "string"
+ },
+ "sslMode": {
+ "$ref": "../../../../security/ssl/verifySSLConfig.json#/definitions/sslMode"
+ },
+ "sslConfig": {
+ "$ref": "../../../../security/ssl/verifySSLConfig.json#/definitions/sslConfig"
+ },
+ "ingestAllDatabases": {
+ "title": "Ingest All Databases",
+ "description": "Ingest data from all databases in Greenplum. You can use databaseFilterPattern on top of this.",
+ "type": "boolean",
+ "default": false
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "schemaFilterPattern":{
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ },
+ "supportsDBTExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsDBTExtraction"
+ },
+ "supportsProfiler": {
+ "title": "Supports Profiler",
+ "$ref": "../connectionBasicType.json#/definitions/supportsProfiler"
+ },
+ "supportsDatabase": {
+ "title": "Supports Database",
+ "$ref": "../connectionBasicType.json#/definitions/supportsDatabase"
+ },
+ "supportsQueryComment": {
+ "title": "Supports Query Comment",
+ "$ref": "../connectionBasicType.json#/definitions/supportsQueryComment"
+ },
+ "sampleDataStorageConfig": {
+ "title": "Storage Config for Sample Data",
+ "$ref": "../connectionBasicType.json#/definitions/sampleDataStorageConfig"
+ },
+ "supportsViewLineageExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsViewLineageExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "hostPort",
+ "username",
+ "database"
+ ]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/hiveConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/hiveConnection.json
new file mode 100644
index 000000000000..205905f0cdd1
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/hiveConnection.json
@@ -0,0 +1,150 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/hiveConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "HiveConnection",
+ "description": "Hive SQL Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.HiveConnection",
+ "definitions": {
+ "hiveType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["Hive"],
+ "default": "Hive"
+ },
+ "hiveScheme": {
+ "description": "SQLAlchemy driver scheme options.",
+ "type": "string",
+ "enum": ["hive", "hive+http", "hive+https"],
+ "default": "hive"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/hiveType",
+ "default": "Hive"
+ },
+ "scheme": {
+ "title": "Connection Scheme",
+ "description": "SQLAlchemy driver scheme options.",
+ "$ref": "#/definitions/hiveScheme",
+ "default": "hive"
+ },
+ "username": {
+ "title": "Username",
+ "description": "Username to connect to Hive. This user should have privileges to read all the metadata in Hive.",
+ "type": "string"
+ },
+ "password": {
+ "title": "Password",
+ "description": "Password to connect to Hive.",
+ "type": "string",
+ "format": "password"
+ },
+ "hostPort": {
+ "title": "Host and Port",
+ "description": "Host and port of the Hive service.",
+ "type": "string"
+ },
+ "auth": {
+ "title": "Authentication Mode",
+ "description": "Authentication mode to connect to hive.",
+ "type": "string",
+ "enum": ["NONE", "LDAP", "KERBEROS", "CUSTOM", "NOSASL", "BASIC", "GSSAPI", "JWT", "PLAIN"],
+ "default": "NONE"
+ },
+ "kerberosServiceName": {
+ "title": "Kerberos Service Name",
+ "description": "If authenticating with Kerberos specify the Kerberos service name",
+ "type": "string"
+ },
+ "databaseSchema": {
+ "title": "Database Schema",
+ "description": "Database Schema of the data source. This is optional parameter, if you would like to restrict the metadata reading to a single schema. When left blank, OpenMetadata Ingestion attempts to scan all the schemas.",
+ "type": "string"
+ },
+ "databaseName": {
+ "title": "Database Name",
+ "description": "Optional name to give to the database in OpenMetadata. If left blank, we will use default as the database name.",
+ "type": "string"
+ },
+ "authOptions": {
+ "title": "URL Authentication Options",
+ "description": "Authentication options to pass to Hive connector. These options are based on SQLAlchemy.",
+ "type": "string"
+ },
+ "useSSL": {
+ "title": "Use SSL",
+ "description": "Enable SSL connection to Hive server. When enabled, SSL transport will be used for secure communication.",
+ "type": "boolean",
+ "default": false
+ },
+ "sslConfig": {
+ "title": "SSL Configuration",
+ "description": "SSL Configuration details.",
+ "$ref": "../../../../security/ssl/verifySSLConfig.json#/definitions/sslConfig"
+ },
+ "metastoreConnection":{
+ "title": "Hive Metastore Connection Details",
+ "description": "Hive Metastore Connection Details",
+ "oneOf": [
+ {
+ "$ref": "./postgresConnection.json"
+ },
+ {
+ "$ref": "./mysqlConnection.json"
+ },
+ {
+ "title": "None",
+ "type": "object",
+ "additionalProperties": false
+ }
+ ]
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "schemaFilterPattern":{
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ },
+ "supportsDBTExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsDBTExtraction"
+ },
+ "supportsProfiler": {
+ "title": "Supports Profiler",
+ "$ref": "../connectionBasicType.json#/definitions/supportsProfiler"
+ },
+ "sampleDataStorageConfig": {
+ "title": "Storage Config for Sample Data",
+ "$ref": "../connectionBasicType.json#/definitions/sampleDataStorageConfig"
+ },
+ "supportsViewLineageExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsViewLineageExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["hostPort"]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/impalaConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/impalaConnection.json
new file mode 100644
index 000000000000..0a25fb509a5b
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/impalaConnection.json
@@ -0,0 +1,127 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/impalaConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "ImpalaConnection",
+ "description": "Impala SQL Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.ImpalaConnection",
+ "definitions": {
+ "impalaType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["Impala"],
+ "default": "Impala"
+ },
+ "impalaScheme": {
+ "description": "SQLAlchemy driver scheme options.",
+ "type": "string",
+ "enum": ["impala", "impala4"],
+ "default": "impala"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/impalaType",
+ "default": "Impala"
+ },
+ "scheme": {
+ "title": "Connection Scheme",
+ "description": "SQLAlchemy driver scheme options.",
+ "$ref": "#/definitions/impalaScheme",
+ "default": "impala"
+ },
+ "username": {
+ "title": "Username",
+ "description": "Username to connect to Impala. This user should have privileges to read all the metadata in Impala.",
+ "type": "string"
+ },
+ "password": {
+ "title": "Password",
+ "description": "Password to connect to Impala.",
+ "type": "string",
+ "format": "password"
+ },
+ "hostPort": {
+ "title": "Host and Port",
+ "description": "Host and port of the Impala service.",
+ "type": "string"
+ },
+ "authMechanism": {
+ "title": "Authentication Mode",
+ "description": "Authentication mode to connect to Impala.",
+ "type": "string",
+ "enum": ["NOSASL", "PLAIN", "GSSAPI", "LDAP", "JWT"],
+ "default": "PLAIN"
+ },
+ "kerberosServiceName": {
+ "title": "Kerberos Service Name",
+ "description": "If authenticating with Kerberos specify the Kerberos service name",
+ "type": "string"
+ },
+ "databaseSchema": {
+ "title": "Database Schema",
+ "description": "Database Schema of the data source. This is optional parameter, if you would like to restrict the metadata reading to a single schema. When left blank, OpenMetadata Ingestion attempts to scan all the schemas.",
+ "type": "string"
+ },
+ "databaseName": {
+ "title": "Database Name",
+ "description": "Optional name to give to the database in OpenMetadata. If left blank, we will use default as the database name.",
+ "type": "string"
+ },
+ "useSSL": {
+ "title": "Use SSL",
+ "description": "Establish secure connection with Impala",
+ "type": "boolean"
+ },
+ "authOptions": {
+ "title": "URL Authentication Options",
+ "description": "Authentication options to pass to Impala connector. These options are based on SQLAlchemy.",
+ "type": "string"
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "schemaFilterPattern":{
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ },
+ "supportsDBTExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsDBTExtraction"
+ },
+ "supportsProfiler": {
+ "title": "Supports Profiler",
+ "$ref": "../connectionBasicType.json#/definitions/supportsProfiler"
+ },
+ "sampleDataStorageConfig": {
+ "title": "Storage Config for Sample Data",
+ "$ref": "../connectionBasicType.json#/definitions/sampleDataStorageConfig"
+ },
+ "supportsViewLineageExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsViewLineageExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["hostPort"]
+ }
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/informixConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/informixConnection.json
new file mode 100644
index 000000000000..f23ae8ba3855
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/informixConnection.json
@@ -0,0 +1,162 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/informixConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "InformixConnection",
+ "description": "IBM Informix Database Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.InformixConnection",
+ "definitions": {
+ "informixType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": [
+ "Informix"
+ ],
+ "default": "Informix"
+ },
+ "informixScheme": {
+ "description": "SQLAlchemy driver scheme options.",
+ "type": "string",
+ "enum": [
+ "informix"
+ ],
+ "default": "informix"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/informixType",
+ "default": "Informix"
+ },
+ "scheme": {
+ "title": "Connection Scheme",
+ "description": "SQLAlchemy driver scheme options.",
+ "$ref": "#/definitions/informixScheme",
+ "default": "informix"
+ },
+ "username": {
+ "title": "Username",
+ "description": "Username to connect to Informix. This user should have privileges to read all the metadata in Informix.",
+ "type": "string"
+ },
+ "password": {
+ "title": "Password",
+ "description": "Password to connect to Informix.",
+ "type": "string",
+ "format": "password"
+ },
+ "hostPort": {
+ "title": "Host and Port",
+ "description": "Host and port of the Informix service.",
+ "type": "string",
+ "default": "localhost:9088"
+ },
+ "database": {
+ "title": "Database",
+ "description": "Database of the data source.",
+ "type": "string"
+ },
+ "serverName": {
+ "title": "Server Name (INFORMIXSERVER)",
+ "description": "Informix server name as defined in the sqlhosts file or INFORMIXSERVER environment variable.",
+ "type": "string",
+ "default": "informix"
+ },
+ "ingestAllDatabases": {
+ "title": "Ingest All Databases",
+ "description": "Ingest data from all databases in Informix. You can use databaseFilterPattern on top of this.",
+ "type": "boolean",
+ "default": false
+ },
+ "sslMode": {
+ "title": "SSL Mode",
+ "description": "SSL Mode to connect to Informix. Use 'disable' for no SSL, 'require' for encrypted SSL without certificate verification, or 'verify-ca' to validate the server certificate against the provided CA certificate.",
+ "$ref": "../../../../security/ssl/verifySSLConfig.json#/definitions/sslMode"
+ },
+ "sslConfig": {
+ "title": "SSL Configuration",
+ "description": "SSL Configuration details. Provide the CA certificate to validate the Informix server certificate. Paste the PEM content directly or upload the certificate file.",
+ "$ref": "../../../../security/ssl/verifySSLConfig.json#/definitions/sslConfig"
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "schemaFilterPattern": {
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "default": {
+ "includes": [],
+ "excludes": [
+ "^sysmaster$",
+ "^sysutils$",
+ "^sysuser$",
+ "^sysadmin$"
+ ]
+ }
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "default": {
+ "includes": [],
+ "excludes": [
+ "^sysmaster$",
+ "^sysutils$",
+ "^sysuser$",
+ "^sysadmin$"
+ ]
+ }
+ },
+ "storedProcedureFilterPattern": {
+ "title": "Default Stored Procedure Filter Pattern",
+ "description": "Regex to only include/exclude stored procedures that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ },
+ "supportsProfiler": {
+ "title": "Supports Profiler",
+ "$ref": "../connectionBasicType.json#/definitions/supportsProfiler"
+ },
+ "supportsDatabase": {
+ "title": "Supports Database",
+ "$ref": "../connectionBasicType.json#/definitions/supportsDatabase"
+ },
+ "supportsQueryComment": {
+ "title": "Supports Query Comment",
+ "$ref": "../connectionBasicType.json#/definitions/supportsQueryComment"
+ },
+ "supportsLineageExtraction": {
+ "title": "Supports Lineage Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsLineageExtraction"
+ },
+ "supportsUsageExtraction": {
+ "title": "Supports Usage Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsUsageExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "hostPort",
+ "database",
+ "username",
+ "password",
+ "serverName"
+ ]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/iometeConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/iometeConnection.json
new file mode 100644
index 000000000000..e29dd75ca6a7
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/iometeConnection.json
@@ -0,0 +1,90 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/iometeConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "IometeConnection",
+ "description": "IOMETE Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.IometeConnection",
+ "definitions": {
+ "iometeType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["Iomete"],
+ "default": "Iomete"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/iometeType",
+ "default": "Iomete"
+ },
+ "hostPort": {
+ "title": "Host and Port",
+ "description": "Host and port of the IOMETE service, e.g. dev.iomete.cloud:443",
+ "type": "string"
+ },
+ "username": {
+ "title": "Username",
+ "description": "Username to connect to IOMETE.",
+ "type": "string"
+ },
+ "password": {
+ "title": "Password",
+ "description": "Password to connect to IOMETE.",
+ "type": "string",
+ "format": "password"
+ },
+ "cluster": {
+ "title": "Cluster",
+ "description": "IOMETE lakehouse cluster name to connect to.",
+ "type": "string"
+ },
+ "dataPlane": {
+ "title": "Data Plane",
+ "description": "IOMETE data plane name.",
+ "type": "string"
+ },
+ "catalog": {
+ "title": "Catalog",
+ "description": "Catalog of the data source (e.g. spark_catalog). This is an optional parameter; if left blank, OpenMetadata uses default catalog.",
+ "type": "string"
+ },
+ "databaseSchema": {
+ "title": "Database Schema",
+ "description": "IOMETE database to restrict metadata ingestion to (e.g. default, finance_db). This is an optional parameter; if left blank, OpenMetadata attempts to scan all databases in the catalog.",
+ "type": "string"
+ },
+ "schemaFilterPattern": {
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude IOMETE databases (e.g. 'default', 'finance_db') that match the pattern. In IOMETE, a database corresponds to an OpenMetadata schema.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ },
+ "supportsDBTExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsDBTExtraction"
+ },
+ "supportsProfiler": {
+ "title": "Supports Profiler",
+ "$ref": "../connectionBasicType.json#/definitions/supportsProfiler"
+ },
+ "sampleDataStorageConfig": {
+ "title": "Storage Config for Sample Data",
+ "$ref": "../connectionBasicType.json#/definitions/sampleDataStorageConfig"
+ },
+ "supportsViewLineageExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsViewLineageExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["hostPort", "username", "password", "cluster", "dataPlane"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/mariaDBConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/mariaDBConnection.json
new file mode 100644
index 000000000000..423d167562f2
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/mariaDBConnection.json
@@ -0,0 +1,114 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/mariaDBConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "MariaDBConnection",
+ "description": "MariaDB Database Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.MariaDBConnection",
+ "definitions": {
+ "mariaDBType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["MariaDB"],
+ "default": "MariaDB"
+ },
+ "mariaDBScheme": {
+ "description": "SQLAlchemy driver scheme options.",
+ "type": "string",
+ "enum": ["mysql+pymysql"],
+ "default": "mysql+pymysql"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/mariaDBType",
+ "default": "MariaDB"
+ },
+ "scheme": {
+ "title": "Connection Scheme",
+ "description": "SQLAlchemy driver scheme options.",
+ "$ref": "#/definitions/mariaDBScheme",
+ "default": "mysql+pymysql"
+ },
+ "username": {
+ "title": "Username",
+ "description": "Username to connect to MariaDB. This user should have privileges to read all the metadata in MariaDB.",
+ "type": "string"
+ },
+ "password": {
+ "title": "Password",
+ "description": "Password to connect to MariaDB.",
+ "type": "string",
+ "format": "password"
+ },
+ "hostPort": {
+ "title": "Host and Port",
+ "description": "Host and port of the MariaDB service.",
+ "type": "string"
+ },
+ "databaseName": {
+ "title": "Database Name",
+ "description": "Optional name to give to the database in OpenMetadata. If left blank, we will use default as the database name.",
+ "type": "string"
+ },
+ "databaseSchema": {
+ "title": "Database Schema",
+ "description": "Database Schema of the data source. This is optional parameter, if you would like to restrict the metadata reading to a single schema. When left blank, OpenMetadata Ingestion attempts to scan all the schemas.",
+ "type": "string"
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "schemaFilterPattern":{
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "storedProcedureFilterPattern": {
+ "title": "Default Stored Procedure Filter Pattern",
+ "description": "Regex to only include/exclude stored procedures that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ },
+ "supportsDBTExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsDBTExtraction"
+ },
+ "supportsProfiler": {
+ "title": "Supports Profiler",
+ "$ref": "../connectionBasicType.json#/definitions/supportsProfiler"
+ },
+ "supportsQueryComment": {
+ "title": "Supports Query Comment",
+ "$ref": "../connectionBasicType.json#/definitions/supportsQueryComment"
+ },
+ "sampleDataStorageConfig": {
+ "title": "Storage Config for Sample Data",
+ "$ref": "../connectionBasicType.json#/definitions/sampleDataStorageConfig"
+ },
+ "supportsViewLineageExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsViewLineageExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["hostPort", "username"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/microsoftAccessConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/microsoftAccessConnection.json
new file mode 100644
index 000000000000..b0abac862810
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/microsoftAccessConnection.json
@@ -0,0 +1,65 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/microsoftAccessConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "MicrosoftAccessConnection",
+ "description": "Microsoft Access Database Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.MicrosoftAccessConnection",
+ "definitions": {
+ "microsoftAccessType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["MicrosoftAccess"],
+ "default": "MicrosoftAccess"
+ },
+ "localFilePath": {
+ "title": "Local File Path",
+ "description": "Local filesystem path to a single Access database file or a directory containing Access files.",
+ "type": "object",
+ "properties": {
+ "localFilePath": {
+ "type": "string",
+ "title": "Local File Path",
+ "description": "Absolute path to the .accdb or .mdb file, or a directory. Supports ~ expansion (e.g. ~/data/sales.accdb). All .accdb and .mdb files found recursively in a directory will be ingested."
+ }
+ },
+ "required": ["localFilePath"],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/microsoftAccessType",
+ "default": "MicrosoftAccess"
+ },
+ "connection": {
+ "title": "Access Database Location (Local Path or S3)",
+ "description": "Choose between local file system path (object) or S3 bucket location (object) for Access database files.",
+ "oneOf": [
+ {
+ "$ref": "#/definitions/localFilePath"
+ },
+ {
+ "$ref": "../storage/s3Connection.json"
+ }
+ ]
+ },
+ "tableFilterPattern": {
+ "title": "Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ },
+ "supportsViewLineageExtraction": {
+ "title": "Supports View Lineage Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsViewLineageExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["connection"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/microsoftFabricConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/microsoftFabricConnection.json
new file mode 100644
index 000000000000..4181455baf10
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/microsoftFabricConnection.json
@@ -0,0 +1,124 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/microsoftFabricConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "MicrosoftFabricConnection",
+ "description": "Microsoft Fabric Warehouse and Lakehouse Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.MicrosoftFabricConnection",
+ "definitions": {
+ "microsoftFabricType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["MicrosoftFabric"],
+ "default": "MicrosoftFabric"
+ },
+ "microsoftFabricScheme": {
+ "description": "SQLAlchemy driver scheme options.",
+ "type": "string",
+ "enum": ["mssql+pyodbc"],
+ "default": "mssql+pyodbc"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/microsoftFabricType",
+ "default": "MicrosoftFabric"
+ },
+ "scheme": {
+ "title": "Connection Scheme",
+ "description": "SQLAlchemy driver scheme options.",
+ "$ref": "#/definitions/microsoftFabricScheme",
+ "default": "mssql+pyodbc"
+ },
+ "hostPort": {
+ "title": "Host and Port",
+ "description": "Host and port of the Microsoft Fabric SQL endpoint (e.g., your-workspace.datawarehouse.fabric.microsoft.com:1433).",
+ "type": "string"
+ },
+ "database": {
+ "title": "Database",
+ "description": "Database of the data source. This is the name of your Fabric Warehouse or Lakehouse. This is optional parameter, if you would like to restrict the metadata reading to a single database. When left blank, OpenMetadata Ingestion attempts to scan all the databases.",
+ "type": "string"
+ },
+ "clientId": {
+ "title": "Client ID",
+ "description": "Azure Application (client) ID for Service Principal authentication.",
+ "type": "string"
+ },
+ "clientSecret": {
+ "title": "Client Secret",
+ "description": "Azure Application client secret for Service Principal authentication.",
+ "type": "string",
+ "format": "password"
+ },
+ "tenantId": {
+ "title": "Tenant ID",
+ "description": "Azure Directory (tenant) ID for Service Principal authentication.",
+ "type": "string"
+ },
+ "driver": {
+ "title": "Driver",
+ "description": "ODBC driver version in case of pyodbc connection.",
+ "type": "string",
+ "default": "ODBC Driver 18 for SQL Server"
+ },
+ "ingestAllDatabases": {
+ "title": "Ingest All Databases",
+ "description": "Ingest data from all databases (Warehouses and Lakehouses) in Microsoft Fabric. You can use databaseFilterPattern on top of this.",
+ "type": "boolean",
+ "default": false
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "schemaFilterPattern": {
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "default": {
+ "includes": [],
+ "excludes": ["^db_.*", "^guest$", "^information_schema$", "^sys$"]
+ }
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ },
+ "supportsUsageExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsUsageExtraction"
+ },
+ "supportsLineageExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsLineageExtraction"
+ },
+ "supportsDBTExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsDBTExtraction"
+ },
+ "supportsProfiler": {
+ "title": "Supports Profiler",
+ "$ref": "../connectionBasicType.json#/definitions/supportsProfiler"
+ },
+ "supportsDatabase": {
+ "title": "Supports Database",
+ "$ref": "../connectionBasicType.json#/definitions/supportsDatabase"
+ },
+ "sampleDataStorageConfig": {
+ "title": "Storage Config for Sample Data",
+ "$ref": "../connectionBasicType.json#/definitions/sampleDataStorageConfig"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["hostPort", "clientId", "clientSecret", "tenantId"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/mongoDBConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/mongoDBConnection.json
new file mode 100644
index 000000000000..858c6884c8db
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/mongoDBConnection.json
@@ -0,0 +1,103 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/mongoDBConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "MongoDBConnection",
+ "description": "MongoDB Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.MongoDBConnection",
+ "definitions": {
+ "mongoDBType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": [
+ "MongoDB"
+ ],
+ "default": "MongoDB"
+ },
+ "mongoDBScheme": {
+ "description": "Mongo connection scheme options.",
+ "type": "string",
+ "enum": [
+ "mongodb",
+ "mongodb+srv"
+ ],
+ "default": "mongodb"
+ }
+
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/mongoDBType",
+ "default": "MongoDB"
+ },
+ "scheme": {
+ "title": "Connection Scheme",
+ "description": "Mongo connection scheme options.",
+ "$ref": "#/definitions/mongoDBScheme",
+ "default": "mongodb"
+ },
+ "username": {
+ "title": "Username",
+ "description": "Username to connect to MongoDB. This user should have privileges to read all the metadata in MongoDB.",
+ "type": "string"
+ },
+ "password": {
+ "title": "Password",
+ "description": "Password to connect to MongoDB.",
+ "type": "string",
+ "format": "password"
+ },
+ "hostPort": {
+ "title": "Host and Port",
+ "description": "Host and port of the MongoDB service when using the `mongodb` connection scheme. Only host when using the `mongodb+srv` scheme.",
+ "type": "string"
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "databaseName": {
+ "title": "Database Name",
+ "description": "Optional name to give to the database in OpenMetadata. If left blank, we will use default as the database name.",
+ "type": "string"
+ },
+ "databaseSchema": {
+ "title": "Database Schema",
+ "description": "Database Schema of the data source. This is optional parameter, if you would like to restrict the metadata reading to a single schema. When left blank, OpenMetadata Ingestion attempts to scan all the schemas.",
+ "type": "string"
+ },
+ "schemaFilterPattern":{
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ },
+ "supportsProfiler": {
+ "title": "Supports Profiler",
+ "$ref": "../connectionBasicType.json#/definitions/supportsProfiler"
+ },
+ "sslMode": {
+ "$ref": "../../../../security/ssl/verifySSLConfig.json#/definitions/sslMode"
+ },
+ "sslConfig": {
+ "$ref": "../../../../security/ssl/verifySSLConfig.json#/definitions/sslConfig"
+ }
+ },
+ "required": ["hostPort"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/mssqlConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/mssqlConnection.json
new file mode 100644
index 000000000000..3781194bb6e6
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/mssqlConnection.json
@@ -0,0 +1,174 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/mssqlConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "MssqlConnection",
+ "description": "Mssql Database Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.MssqlConnection",
+ "definitions": {
+ "mssqlType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": [
+ "Mssql"
+ ],
+ "default": "Mssql"
+ },
+ "mssqlScheme": {
+ "description": "SQLAlchemy driver scheme options.",
+ "type": "string",
+ "enum": [
+ "mssql+pyodbc",
+ "mssql+pytds",
+ "mssql+pymssql"
+ ],
+ "default": "mssql+pytds"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/mssqlType",
+ "default": "Mssql"
+ },
+ "scheme": {
+ "title": "Connection Scheme",
+ "description": "SQLAlchemy driver scheme options.",
+ "$ref": "#/definitions/mssqlScheme",
+ "default": "mssql+pytds"
+ },
+ "username": {
+ "title": "Username",
+ "description": "Username to connect to MSSQL. This user should have privileges to read all the metadata in MsSQL.",
+ "type": "string"
+ },
+ "password": {
+ "title": "Password",
+ "description": "Password to connect to MSSQL.",
+ "type": "string",
+ "format": "password"
+ },
+ "hostPort": {
+ "title": "Host and Port",
+ "description": "Host and port of the MSSQL service.",
+ "type": "string"
+ },
+ "database": {
+ "title": "Database",
+ "description": "Database of the data source. This is optional parameter, if you would like to restrict the metadata reading to a single database. When left blank, OpenMetadata Ingestion attempts to scan all the databases.",
+ "type": "string"
+ },
+ "driver": {
+ "title": "Driver",
+ "description": "ODBC driver version in case of pyodbc connection.",
+ "type": "string",
+ "default": "ODBC Driver 18 for SQL Server"
+ },
+ "encrypt": {
+ "title": "Encrypt Connection",
+ "description": "Enable SSL/TLS encryption for the MSSQL connection. When enabled, all data transmitted between the client and server will be encrypted.",
+ "type": "boolean",
+ "default": false
+ },
+ "trustServerCertificate": {
+ "title": "Trust Server Certificate",
+ "description": "Trust the server certificate without validation. Set to false in production to validate server certificates against the certificate authority.",
+ "type": "boolean",
+ "default": false
+ },
+ "sslConfig": {
+ "title": "SSL Configuration",
+ "description": "SSL/TLS certificate configuration for client authentication. Provide CA certificate, client certificate, and private key for mutual TLS authentication.",
+ "$ref": "../../../../security/ssl/verifySSLConfig.json#/definitions/sslConfig"
+ },
+ "ingestAllDatabases": {
+ "title": "Ingest All Databases",
+ "description": "Ingest data from all databases in Mssql. You can use databaseFilterPattern on top of this.",
+ "type": "boolean",
+ "default": false
+ },
+ "schemaFilterPattern": {
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "default": {
+ "includes": [],
+ "excludes": [
+ "^db_.*",
+ "^guest$",
+ "^information_schema$",
+ "^sys$"
+ ]
+ }
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "default": {
+ "includes": [],
+ "excludes": ["^msdb$", "^model$", "^tempdb$"]
+ }
+ },
+ "storedProcedureFilterPattern": {
+ "title": "Default Stored Procedure Filter Pattern",
+ "description": "Regex to only include/exclude stored procedures that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "default": {
+ "includes": [],
+ "excludes": ["^sp_", "^xp_", "^ms_"]
+ }
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ },
+ "supportsDBTExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsDBTExtraction"
+ },
+ "supportsProfiler": {
+ "title": "Supports Profiler",
+ "$ref": "../connectionBasicType.json#/definitions/supportsProfiler"
+ },
+ "supportsDatabase": {
+ "title": "Supports Database",
+ "$ref": "../connectionBasicType.json#/definitions/supportsDatabase"
+ },
+ "supportsUsageExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsUsageExtraction"
+ },
+ "supportsLineageExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsLineageExtraction"
+ },
+ "sampleDataStorageConfig": {
+ "title": "Storage Config for Sample Data",
+ "$ref": "../connectionBasicType.json#/definitions/sampleDataStorageConfig"
+ },
+ "supportsQueryComment": {
+ "title": "Supports Query Comment",
+ "$ref": "../connectionBasicType.json#/definitions/supportsQueryComment"
+ },
+ "supportsDataDiff": {
+ "title": "Supports Data Diff Extraction.",
+ "$ref": "../connectionBasicType.json#/definitions/supportsDataDiff"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "database"
+ ]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/myDbConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/myDbConnection.json
new file mode 100644
index 000000000000..fd4f338f4023
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/myDbConnection.json
@@ -0,0 +1,110 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/myDbConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "MyDbConnection",
+ "description": "MyDb Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.MyDbConnection",
+ "definitions": {
+ "myDbType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": [
+ "MyDb"
+ ],
+ "default": "MyDb"
+ },
+ "myDbScheme": {
+ "description": "SQLAlchemy driver scheme options.",
+ "type": "string",
+ "enum": [
+ "mydb+pymydb"
+ ],
+ "default": "mydb+pymydb"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/myDbType",
+ "default": "MyDb"
+ },
+ "scheme": {
+ "title": "Connection Scheme",
+ "description": "SQLAlchemy driver scheme options.",
+ "$ref": "#/definitions/myDbScheme",
+ "default": "mydb+pymydb"
+ },
+ "username": {
+ "title": "Username",
+ "description": "Username to connect to MyDb.",
+ "type": "string"
+ },
+ "authType": {
+ "title": "Auth Configuration Type",
+ "description": "Choose Auth Config Type.",
+ "mask": true,
+ "oneOf": [
+ {
+ "$ref": "./common/basicAuth.json"
+ }
+ ]
+ },
+ "hostPort": {
+ "title": "Host and Port",
+ "description": "Host and port of the MyDb service.",
+ "type": "string"
+ },
+ "databaseName": {
+ "title": "Database Name",
+ "description": "Optional name to give to the database in OpenMetadata. If left blank, we will use default as the database name.",
+ "type": "string"
+ },
+ "databaseSchema": {
+ "title": "Database Schema",
+ "description": "Database Schema of the data source. This is optional parameter, if you would like to restrict the metadata reading to a single schema.",
+ "type": "string"
+ },
+ "sslConfig": {
+ "title": "SSL",
+ "description": "SSL Configuration details.",
+ "$ref": "../../../../security/ssl/verifySSLConfig.json#/definitions/sslConfig"
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "schemaFilterPattern": {
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ },
+ "supportsDBTExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsDBTExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "username",
+ "hostPort"
+ ]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/mysqlConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/mysqlConnection.json
new file mode 100644
index 000000000000..5fa3794e77be
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/mysqlConnection.json
@@ -0,0 +1,156 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/mysqlConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "MysqlConnection",
+ "description": "Mysql Database Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.MysqlConnection",
+ "definitions": {
+ "mySQLType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": [
+ "Mysql"
+ ],
+ "default": "Mysql"
+ },
+ "mySQLScheme": {
+ "description": "SQLAlchemy driver scheme options.",
+ "type": "string",
+ "enum": [
+ "mysql+pymysql"
+ ],
+ "default": "mysql+pymysql"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/mySQLType",
+ "default": "Mysql"
+ },
+ "scheme": {
+ "title": "Connection Scheme",
+ "description": "SQLAlchemy driver scheme options.",
+ "$ref": "#/definitions/mySQLScheme",
+ "default": "mysql+pymysql"
+ },
+ "username": {
+ "title": "Username",
+ "description": "Username to connect to MySQL. This user should have privileges to read all the metadata in Mysql.",
+ "type": "string"
+ },
+ "authType": {
+ "title": "Auth Configuration Type",
+ "description": "Choose Auth Config Type.",
+ "mask": true,
+ "oneOf": [
+ {
+ "$ref": "./common/basicAuth.json"
+ },
+ {
+ "$ref": "./common/iamAuthConfig.json"
+ },
+ {
+ "$ref": "./common/azureConfig.json"
+ },
+ {
+ "$ref": "./common/gcpCloudSqlConfig.json"
+ }
+ ]
+ },
+ "hostPort": {
+ "title": "Host and Port",
+ "description": "Host and port of the MySQL service. For GCP CloudSQL, use the instance connection name in the format 'project_id:region:instance_name'.",
+ "type": "string"
+ },
+ "databaseName": {
+ "title": "Database Name",
+ "description": "Optional name to give to the database in OpenMetadata. If left blank, we will use default as the database name.",
+ "type": "string"
+ },
+ "databaseSchema": {
+ "title": "Database Schema",
+ "description": "Database Schema of the data source. This is optional parameter, if you would like to restrict the metadata reading to a single schema. When left blank, OpenMetadata Ingestion attempts to scan all the schemas.",
+ "type": "string"
+ },
+ "sslConfig": {
+ "title": "SSL",
+ "description": "SSL Configuration details.",
+ "$ref": "../../../../security/ssl/verifySSLConfig.json#/definitions/sslConfig"
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "schemaFilterPattern":{
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "default": {
+ "includes": [],
+ "excludes": ["^information_schema$", "^performance_schema$"]
+ }
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "storedProcedureFilterPattern": {
+ "title": "Default Stored Procedure Filter Pattern",
+ "description": "Regex to only include/exclude stored procedures that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ },
+ "supportsDBTExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsDBTExtraction"
+ },
+ "supportsProfiler": {
+ "title": "Supports Profiler",
+ "$ref": "../connectionBasicType.json#/definitions/supportsProfiler"
+ },
+ "supportsQueryComment": {
+ "title": "Supports Query Comment",
+ "$ref": "../connectionBasicType.json#/definitions/supportsQueryComment"
+ },
+ "sampleDataStorageConfig": {
+ "title": "Storage Config for Sample Data",
+ "$ref": "../connectionBasicType.json#/definitions/sampleDataStorageConfig"
+ },
+ "supportsDataDiff": {
+ "title": "Supports Data Diff Extraction.",
+ "$ref": "../connectionBasicType.json#/definitions/supportsDataDiff"
+ },
+ "supportsUsageExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsUsageExtraction"
+ },
+ "supportsLineageExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsLineageExtraction"
+ },
+ "useSlowLogs": {
+ "title": "Use Slow Logs for Lineage",
+ "description": "Use slow logs to extract lineage.",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "hostPort",
+ "username"
+ ]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/oracleConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/oracleConnection.json
new file mode 100644
index 000000000000..307b1531be8e
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/oracleConnection.json
@@ -0,0 +1,208 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/oracleConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "OracleConnection",
+ "description": "Oracle Database Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.OracleConnection",
+ "definitions": {
+ "oracleType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": [
+ "Oracle"
+ ],
+ "default": "Oracle"
+ },
+ "oracleScheme": {
+ "description": "SQLAlchemy driver scheme options.",
+ "type": "string",
+ "enum": [
+ "oracle+cx_oracle"
+ ],
+ "default": "oracle+cx_oracle"
+ },
+ "OracleDatabaseSchema": {
+ "title": "Database Schema",
+ "type": "object",
+ "properties": {
+ "databaseSchema": {
+ "title": "DatabaseSchema",
+ "description": "databaseSchema of the data source. This is optional parameter, if you would like to restrict the metadata reading to a single databaseSchema. When left blank, OpenMetadata Ingestion attempts to scan all the databaseSchema.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "databaseSchema"
+ ]
+ },
+ "OracleServiceName": {
+ "title": "Oracle Service Name",
+ "type": "object",
+ "properties": {
+ "oracleServiceName": {
+ "title": "Oracle Service Name",
+ "description": "The Oracle Service name is the TNS alias that you give when you remotely connect to your database.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "oracleServiceName"
+ ]
+ },
+ "OracleTNSConnection": {
+ "title": "Oracle TNS Connection",
+ "type": "object",
+ "properties": {
+ "oracleTNSConnection": {
+ "title": "Oracle TNS Connection String",
+ "description": "Pass the full constructed TNS string, e.g., (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=myhost)(PORT=1530)))(CONNECT_DATA=(SID=MYSERVICENAME))).",
+ "type": "string"
+ }
+ },
+ "required": [
+ "oracleTNSConnection"
+ ]
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/oracleType",
+ "default": "Oracle"
+ },
+ "scheme": {
+ "title": "Connection Scheme",
+ "description": "SQLAlchemy driver scheme options.",
+ "$ref": "#/definitions/oracleScheme",
+ "default": "oracle+cx_oracle"
+ },
+ "username": {
+ "title": "Username",
+ "description": "Username to connect to Oracle. This user should have privileges to read all the metadata in Oracle.",
+ "type": "string"
+ },
+ "password": {
+ "title": "Password",
+ "description": "Password to connect to Oracle.",
+ "type": "string",
+ "format": "password"
+ },
+ "hostPort": {
+ "title": "Host and Port",
+ "description": "Host and port of the Oracle service.",
+ "type": "string"
+ },
+ "oracleConnectionType": {
+ "title": "Oracle Connection Type",
+ "type": "object",
+ "description": "Connect with oracle by either passing service name or database schema name.",
+ "oneOf": [
+ {
+ "$ref": "#/definitions/OracleDatabaseSchema"
+ },
+ {
+ "$ref": "#/definitions/OracleServiceName"
+ },
+ {
+ "$ref": "#/definitions/OracleTNSConnection"
+ }
+ ]
+ },
+ "instantClientDirectory": {
+ "title": "Oracle instant client directory",
+ "type": "string",
+ "description": "This directory will be used to set the LD_LIBRARY_PATH env variable. It is required if you need to enable thick connection mode. By default, we bring instant client 19 and point to /instantclient.",
+ "default": "/instantclient"
+ },
+ "databaseName": {
+ "title": "Database Name",
+ "description": "Optional name to give to the database in OpenMetadata. If left blank, we will use default as the database name.",
+ "type": "string"
+ },
+ "preserveIdentifierCase": {
+ "title": "Preserve Identifier Case",
+ "type": "boolean",
+ "description": "Controls how Oracle identifier names (tables, columns, schemas) are stored in OpenMetadata. When disabled (default), Oracle's UPPERCASE unquoted identifiers (e.g. EMPLOYEES) are not guaranteed to be stored as-is — identifiers with the same letters but different case (e.g. unquoted EMPLOYEES and quoted 'employees') will collide into the same name. When enabled, names are stored exactly as Oracle persists them, which solves same-name collisions between quoted and unquoted identifiers. WARNING: enabling this after data has already been ingested with the default setting will change the stored names of all existing tables, columns, schemas, and constraints — breaking attached tags, descriptions, lineage, data quality tests, and any other metadata associated with those entities. If you must switch, soft-delete all previously ingested entities before re-ingesting.",
+ "default": false
+ },
+ "useDBATable": {
+ "title": "Use DBA Tables",
+ "type": "boolean",
+ "description": "Use Oracle DBA_* tables instead of ALL_* tables for metadata ingestion. Requires DBA privileges.",
+ "default": true
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "schemaFilterPattern": {
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "default": {
+ "includes": [],
+ "excludes": [
+ "^sys$",
+ "^ctxsys$",
+ "^dbsnmp$",
+ "^outln$"
+ ]
+ }
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "storedProcedureFilterPattern": {
+ "title": "Default Stored Procedure Filter Pattern",
+ "description": "Regex to only include/exclude stored procedures that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ },
+ "supportsUsageExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsUsageExtraction"
+ },
+ "supportsLineageExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsLineageExtraction"
+ },
+ "supportsDBTExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsDBTExtraction"
+ },
+ "supportsProfiler": {
+ "title": "Supports Profiler",
+ "$ref": "../connectionBasicType.json#/definitions/supportsProfiler"
+ },
+ "supportsQueryComment": {
+ "title": "Supports Query Comment",
+ "$ref": "../connectionBasicType.json#/definitions/supportsQueryComment"
+ },
+ "supportsDataDiff": {
+ "title": "Supports Data Diff Extraction.",
+ "$ref": "../connectionBasicType.json#/definitions/supportsDataDiff"
+ },
+ "sampleDataStorageConfig": {
+ "title": "Storage Config for Sample Data",
+ "$ref": "../connectionBasicType.json#/definitions/sampleDataStorageConfig"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "username",
+ "oracleConnectionType"
+ ]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/pinotDBConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/pinotDBConnection.json
new file mode 100644
index 000000000000..4a29921751b3
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/pinotDBConnection.json
@@ -0,0 +1,109 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/pinotDBConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "PinotDBConnection",
+ "description": "PinotDB Database Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.PinotDBConnection",
+ "definitions": {
+ "pinotDBType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["PinotDB"],
+ "default": "PinotDB"
+ },
+ "pinotDBScheme": {
+ "description": "SQLAlchemy driver scheme options.",
+ "type": "string",
+ "enum": ["pinot", "pinot+http", "pinot+https"],
+ "default": "pinot"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/pinotDBType",
+ "default": "PinotDB"
+ },
+ "scheme": {
+ "title": "Connection Scheme",
+ "description": "SQLAlchemy driver scheme options.",
+ "$ref": "#/definitions/pinotDBScheme",
+ "default": "pinot"
+ },
+ "username": {
+ "title": "Username",
+ "description": "username to connect to the PinotDB. This user should have privileges to read all the metadata in PinotDB.",
+ "type": "string"
+ },
+ "password": {
+ "title": "Password",
+ "description": "password to connect to the PinotDB.",
+ "type": "string",
+ "format": "password"
+ },
+ "hostPort": {
+ "title": "Pinot Broker Host and Port",
+ "description": "Host and port of the PinotDB Broker service.",
+ "type": "string"
+ },
+ "pinotControllerHost": {
+ "title": "Pinot Controller Host and Port",
+ "description": "Pinot Controller Host and Port of the data source.",
+ "type": "string"
+ },
+ "database": {
+ "title": "Database",
+ "description": "Database of the data source. This is optional parameter, if you would like to restrict the metadata reading to a single database. When left blank, OpenMetadata Ingestion attempts to scan all the databases.",
+ "type": "string"
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "schemaFilterPattern":{
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ },
+ "supportsDBTExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsDBTExtraction"
+ },
+ "supportsProfiler": {
+ "title": "Supports Profiler",
+ "$ref": "../connectionBasicType.json#/definitions/supportsProfiler"
+ },
+ "supportsQueryComment": {
+ "title": "Supports Query Comment",
+ "$ref": "../connectionBasicType.json#/definitions/supportsQueryComment"
+ },
+ "sampleDataStorageConfig": {
+ "title": "Storage Config for Sample Data",
+ "$ref": "../connectionBasicType.json#/definitions/sampleDataStorageConfig"
+ },
+ "supportsViewLineageExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsViewLineageExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["hostPort", "pinotControllerHost"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/postgresConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/postgresConnection.json
new file mode 100644
index 000000000000..2d0403c614ff
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/postgresConnection.json
@@ -0,0 +1,171 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/postgresConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "PostgresConnection",
+ "description": "Postgres Database Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.PostgresConnection",
+ "definitions": {
+ "postgresType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": [
+ "Postgres"
+ ],
+ "default": "Postgres"
+ },
+ "postgresScheme": {
+ "description": "SQLAlchemy driver scheme options.",
+ "type": "string",
+ "enum": [
+ "postgresql+psycopg2",
+ "pgspider+psycopg2"
+ ],
+ "default": "postgresql+psycopg2"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/postgresType",
+ "default": "Postgres"
+ },
+ "scheme": {
+ "title": "Connection Scheme",
+ "description": "SQLAlchemy driver scheme options.",
+ "$ref": "#/definitions/postgresScheme",
+ "default": "postgresql+psycopg2"
+ },
+ "username": {
+ "title": "Username",
+ "description": "Username to connect to Postgres. This user should have privileges to read all the metadata in Postgres.",
+ "type": "string"
+ },
+ "authType": {
+ "title": "Auth Configuration Type",
+ "description": "Choose Auth Config Type.",
+ "mask": true,
+ "oneOf": [
+ {
+ "$ref": "./common/basicAuth.json"
+ },
+ {
+ "$ref": "./common/iamAuthConfig.json"
+ },
+ {
+ "$ref": "./common/azureConfig.json"
+ }
+ ]
+ },
+ "hostPort": {
+ "title": "Host and Port",
+ "description": "Host and port of the source service.",
+ "type": "string"
+ },
+ "database": {
+ "title": "Database",
+ "description": "Database of the data source. This is optional parameter, if you would like to restrict the metadata reading to a single database. When left blank, OpenMetadata Ingestion attempts to scan all the databases.",
+ "type": "string"
+ },
+ "ingestAllDatabases": {
+ "title": "Ingest All Databases",
+ "description": "Ingest data from all databases in Postgres. You can use databaseFilterPattern on top of this.",
+ "type": "boolean",
+ "default": false
+ },
+ "schemaFilterPattern": {
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "default": {
+ "includes": [],
+ "excludes": ["^information_schema$"]
+ }
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "default": {
+ "includes": [],
+ "excludes": ["^template1$", "^template0$"]
+ }
+ },
+ "storedProcedureFilterPattern": {
+ "title": "Default Stored Procedure Filter Pattern",
+ "description": "Regex to only include/exclude stored procedures that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "sslMode": {
+ "$ref": "../../../../security/ssl/verifySSLConfig.json#/definitions/sslMode"
+ },
+ "sslConfig": {
+ "$ref": "../../../../security/ssl/verifySSLConfig.json#/definitions/sslConfig"
+ },
+ "classificationName": {
+ "title": "Classification Name",
+ "description": "Custom OpenMetadata Classification name for Postgres policy tags.",
+ "type": "string",
+ "default": "PostgresPolicyTags"
+ },
+ "queryStatementSource": {
+ "title": "Query Statement Source",
+ "description": "Fully qualified name of the view or table to use for query logs. If not provided, defaults to pg_stat_statements. Use this to configure a custom view (e.g., my_schema.custom_pg_stat_statements) when direct access to pg_stat_statements is restricted.",
+ "type": "string",
+ "default": "pg_stat_statements"
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ },
+ "supportsUsageExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsUsageExtraction"
+ },
+ "supportsLineageExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsLineageExtraction"
+ },
+ "supportsDBTExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsDBTExtraction"
+ },
+ "supportsProfiler": {
+ "title": "Supports Profiler",
+ "$ref": "../connectionBasicType.json#/definitions/supportsProfiler"
+ },
+ "supportsDatabase": {
+ "title": "Supports Database",
+ "$ref": "../connectionBasicType.json#/definitions/supportsDatabase"
+ },
+ "supportsQueryComment": {
+ "title": "Supports Query Comment",
+ "$ref": "../connectionBasicType.json#/definitions/supportsQueryComment"
+ },
+ "sampleDataStorageConfig": {
+ "title": "Storage Config for Sample Data",
+ "$ref": "../connectionBasicType.json#/definitions/sampleDataStorageConfig"
+ },
+ "supportsDataDiff": {
+ "title": "Supports Data Diff Extraction.",
+ "$ref": "../connectionBasicType.json#/definitions/supportsDataDiff"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "hostPort",
+ "username",
+ "database"
+ ]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/prestoConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/prestoConnection.json
new file mode 100644
index 000000000000..396346cac6d8
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/prestoConnection.json
@@ -0,0 +1,127 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/prestoConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "PrestoConnection",
+ "description": "Presto Database Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.PrestoConnection",
+ "definitions": {
+ "prestoType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": [
+ "Presto"
+ ],
+ "default": "Presto"
+ },
+ "prestoScheme": {
+ "description": "SQLAlchemy driver scheme options.",
+ "type": "string",
+ "enum": [
+ "presto"
+ ],
+ "default": "presto"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/prestoType",
+ "default": "Presto"
+ },
+ "scheme": {
+ "title": "Connection Scheme",
+ "description": "SQLAlchemy driver scheme options.",
+ "$ref": "#/definitions/prestoScheme",
+ "default": "presto"
+ },
+ "username": {
+ "title": "Username",
+ "description": "Username to connect to Presto. This user should have privileges to read all the metadata in Postgres.",
+ "type": "string"
+ },
+ "password": {
+ "title": "Password",
+ "description": "Password to connect to Presto.",
+ "type": "string",
+ "format": "password"
+ },
+ "hostPort": {
+ "title": "Host and Port",
+ "description": "Host and port of the Presto service.",
+ "type": "string"
+ },
+ "databaseSchema": {
+ "title": "Database Schema",
+ "description": "Database Schema of the data source. This is optional parameter, if you would like to restrict the metadata reading to a single schema. When left blank, OpenMetadata Ingestion attempts to scan all the schemas.",
+ "type": "string"
+ },
+ "catalog": {
+ "title": "Catalog",
+ "description": "Presto catalog",
+ "type": "string"
+ },
+ "protocol": {
+ "title": "Protocol",
+ "description": "Protocol ( Connection Argument ) to connect to Presto.",
+ "type": "string"
+ },
+ "verify": {
+ "title": "Verify",
+ "description": "Verify ( Connection Argument for SSL ) to connect to Presto.",
+ "type": "string"
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "schemaFilterPattern":{
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ },
+ "supportsDBTExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsDBTExtraction"
+ },
+ "supportsProfiler": {
+ "title": "Supports Profiler",
+ "$ref": "../connectionBasicType.json#/definitions/supportsProfiler"
+ },
+ "supportsDatabase": {
+ "title": "Supports Database",
+ "$ref": "../connectionBasicType.json#/definitions/supportsDatabase"
+ },
+ "supportsQueryComment": {
+ "title": "Supports Query Comment",
+ "$ref": "../connectionBasicType.json#/definitions/supportsQueryComment"
+ },
+ "sampleDataStorageConfig": {
+ "title": "Storage Config for Sample Data",
+ "$ref": "../connectionBasicType.json#/definitions/sampleDataStorageConfig"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "hostPort",
+ "username"
+ ]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/redshiftConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/redshiftConnection.json
new file mode 100644
index 000000000000..1b1b717ad800
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/redshiftConnection.json
@@ -0,0 +1,163 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/redshiftConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "RedshiftConnection",
+ "description": "Redshift Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.RedshiftConnection",
+ "definitions": {
+ "redshiftType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": [
+ "Redshift"
+ ],
+ "default": "Redshift"
+ },
+ "redshiftScheme": {
+ "description": "SQLAlchemy driver scheme options.",
+ "type": "string",
+ "enum": [
+ "redshift+psycopg2"
+ ],
+ "default": "redshift+psycopg2"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/redshiftType",
+ "default": "Redshift"
+ },
+ "scheme": {
+ "title": "Connection Scheme",
+ "description": "SQLAlchemy driver scheme options.",
+ "$ref": "#/definitions/redshiftScheme",
+ "default": "redshift+psycopg2"
+ },
+ "username": {
+ "title": "Username",
+ "description": "Username to connect to Redshift. This user should have privileges to read all the metadata in Redshift.",
+ "type": "string"
+ },
+ "authType": {
+ "title": "Auth Configuration Type",
+ "description": "Choose Auth Configuration Type.",
+ "mask": true,
+ "oneOf": [
+ {
+ "$ref": "./common/basicAuth.json"
+ },
+ {
+ "$ref": "./common/iamAuthConfig.json"
+ }
+ ]
+ },
+ "hostPort": {
+ "title": "Host and Port",
+ "description": "Host and port of the Redshift service.",
+ "type": "string"
+ },
+ "database": {
+ "title": "Database",
+ "description": "Initial Redshift database to connect to. If you want to ingest all databases, set ingestAllDatabases to true.",
+ "type": "string"
+ },
+ "ingestAllDatabases": {
+ "title": "Ingest All Databases",
+ "description": "Ingest data from all databases in Redshift. You can use databaseFilterPattern on top of this.",
+ "type": "boolean",
+ "default": false
+ },
+ "schemaFilterPattern": {
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "default": {
+ "includes": [],
+ "excludes": ["^information_schema$"]
+ }
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "default": {
+ "includes": [],
+ "excludes": ["^template1$"]
+ }
+ },
+ "storedProcedureFilterPattern": {
+ "title": "Default Stored Procedure Filter Pattern",
+ "description": "Regex to only include/exclude stored procedures that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "sslMode": {
+ "$ref": "../../../../security/ssl/verifySSLConfig.json#/definitions/sslMode"
+ },
+ "sslConfig": {
+ "$ref": "../../../../security/ssl/verifySSLConfig.json#/definitions/sslConfig"
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ },
+ "supportsIncrementalMetadataExtraction": {
+ "title": "Supports Incremental Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsIncrementalMetadataExtraction"
+ },
+ "supportsUsageExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsUsageExtraction"
+ },
+ "supportsLineageExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsLineageExtraction"
+ },
+ "supportsDBTExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsDBTExtraction"
+ },
+ "supportsProfiler": {
+ "title": "Supports Profiler",
+ "$ref": "../connectionBasicType.json#/definitions/supportsProfiler"
+ },
+ "supportsDatabase": {
+ "title": "Supports Database",
+ "$ref": "../connectionBasicType.json#/definitions/supportsDatabase"
+ },
+ "supportsQueryComment": {
+ "title": "Supports Query Comment",
+ "$ref": "../connectionBasicType.json#/definitions/supportsQueryComment"
+ },
+ "supportsSystemProfile": {
+ "title": "Supports System Profile",
+ "$ref": "../connectionBasicType.json#/definitions/supportsSystemProfile"
+ },
+ "sampleDataStorageConfig": {
+ "title": "Storage Config for Sample Data",
+ "$ref": "../connectionBasicType.json#/definitions/sampleDataStorageConfig"
+ },
+ "supportsDataDiff": {
+ "title": "Supports Data Diff Extraction.",
+ "$ref": "../connectionBasicType.json#/definitions/supportsDataDiff"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "hostPort",
+ "username",
+ "database"
+ ]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/salesforceConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/salesforceConnection.json
new file mode 100644
index 000000000000..4b374b193f40
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/salesforceConnection.json
@@ -0,0 +1,118 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/salesforceConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SalesforceConnection",
+ "description": "Salesforce Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.SalesforceConnection",
+ "definitions": {
+ "salesforceType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": [
+ "Salesforce"
+ ],
+ "default": "Salesforce"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/salesforceType",
+ "default": "Salesforce"
+ },
+ "username": {
+ "title": "Username",
+ "description": "Username to connect to Salesforce. This user should have privileges to read all the metadata in Salesforce.",
+ "type": "string"
+ },
+ "password": {
+ "title": "Password",
+ "description": "Password to connect to Salesforce.",
+ "type": "string",
+ "format": "password"
+ },
+ "securityToken": {
+ "title": "Security Token",
+ "description": "Salesforce Security Token for username/password authentication.",
+ "type": "string",
+ "format": "password"
+ },
+ "consumerKey": {
+ "title": "Consumer Key",
+ "description": "Salesforce Consumer Key (Client ID) for OAuth 2.0 authentication. This is obtained from your Salesforce Connected App configuration. Required along with Consumer Secret for OAuth authentication.",
+ "type": "string"
+ },
+ "consumerSecret": {
+ "title": "Consumer Secret",
+ "description": "Salesforce Consumer Secret (Client Secret) for OAuth 2.0 authentication. This is obtained from your Salesforce Connected App configuration. Required along with Consumer Key for OAuth authentication.",
+ "type": "string",
+ "format": "password"
+ },
+ "organizationId": {
+ "title": "Salesforce Organization ID",
+ "description": "Salesforce Organization ID is the unique identifier for your Salesforce identity",
+ "type": "string"
+ },
+ "sobjectNames": {
+ "title": "Object Names",
+ "description": "List of Salesforce Object Names to ingest. If specified, only these objects will be fetched. Leave empty to fetch all objects (subject to tableFilterPattern).",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "default": null
+ },
+ "databaseName": {
+ "title": "Database Name",
+ "description": "Optional name to give to the database in OpenMetadata. If left blank, we will use default as the database name.",
+ "type": "string"
+ },
+ "salesforceApiVersion": {
+ "title": "Salesforce API Version",
+ "description": "API version of the Salesforce instance",
+ "type": "string",
+ "default": "42.0"
+ },
+ "salesforceDomain": {
+ "title": "Salesforce Domain",
+ "description": "Domain of Salesforce instance",
+ "type": "string",
+ "default": "login"
+ },
+ "sslConfig": {
+ "title": "SSL Configuration",
+ "description": "SSL Configuration details.",
+ "$ref": "../../../../security/ssl/verifySSLConfig.json#/definitions/sslConfig"
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "schemaFilterPattern": {
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/sapErpConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/sapErpConnection.json
new file mode 100644
index 000000000000..b45efdfdb1d8
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/sapErpConnection.json
@@ -0,0 +1,88 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/sapErpConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SapErpConnection",
+ "description": "Sap ERP Database Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.SapErpConnection",
+ "definitions": {
+ "sapErpType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["SapErp"],
+ "default": "SapErp"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/sapErpType",
+ "default": "SapErp"
+ },
+ "hostPort": {
+ "expose": true,
+ "title": "Host and Port",
+ "description": "Host and Port of the SAP ERP instance.",
+ "type": "string",
+ "format": "uri"
+ },
+ "apiKey": {
+ "title": "API Key",
+ "description": "API key to authenticate with the SAP ERP APIs.",
+ "type": "string",
+ "format": "password"
+ },
+ "databaseName": {
+ "title": "Database Name",
+ "description": "Optional name to give to the database in OpenMetadata. If left blank, we will use default as the database name.",
+ "type": "string"
+ },
+ "databaseSchema": {
+ "title": "Database Schema",
+ "description": "Optional name to give to the schema in OpenMetadata. If left blank, we will use default as the schema name",
+ "type": "string"
+ },
+ "paginationLimit": {
+ "title": "Pagination Limit",
+ "description": "Pagination limit used while querying the SAP ERP API for fetching the entities",
+ "type": "integer",
+ "default": 10
+ },
+ "verifySSL": {
+ "$ref": "../../../../security/ssl/verifySSLConfig.json#/definitions/verifySSL",
+ "default": "no-ssl"
+ },
+ "sslConfig": {
+ "$ref": "../../../../security/ssl/verifySSLConfig.json#/definitions/sslConfig"
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "schemaFilterPattern":{
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/sapHana/sapHanaHDBConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/sapHana/sapHanaHDBConnection.json
new file mode 100644
index 000000000000..bbd240879a68
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/sapHana/sapHanaHDBConnection.json
@@ -0,0 +1,16 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/sapHana/sapHanaHDBConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SapHanaHDBConnection",
+ "description": "Sap Hana Database HDB User Store Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.sapHana.SapHanaHDBConnection",
+ "properties": {
+ "userKey": {
+ "title": "User Key",
+ "description": "HDB Store User Key generated from the command `hdbuserstore SET `",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/sapHana/sapHanaSQLConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/sapHana/sapHanaSQLConnection.json
new file mode 100644
index 000000000000..8b79e256ce8b
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/sapHana/sapHanaSQLConnection.json
@@ -0,0 +1,38 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/sapHana/sapHanaConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SapHanaSQLConnection",
+ "description": "Sap Hana Database SQL Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.sapHana.SapHanaSQLConnection",
+ "properties": {
+ "hostPort": {
+ "title": "Host and Port",
+ "description": "Host and port of the Hana service.",
+ "type": "string"
+ },
+ "username": {
+ "title": "Username",
+ "description": "Username to connect to Hana. This user should have privileges to read all the metadata.",
+ "type": "string"
+ },
+ "password": {
+ "title": "Password",
+ "description": "Password to connect to Hana.",
+ "type": "string",
+ "format": "password"
+ },
+ "databaseSchema": {
+ "title": "Database Schema",
+ "description": "Database Schema of the data source. This is an optional parameter, if you would like to restrict the metadata reading to a single schema. When left blank, OpenMetadata Ingestion attempts to scan all the schemas.",
+ "type": "string"
+ },
+ "database": {
+ "title": "Database",
+ "description": "Database of the data source.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["username", "password", "hostPort"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/sapHanaConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/sapHanaConnection.json
new file mode 100644
index 000000000000..c8751b589b99
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/sapHanaConnection.json
@@ -0,0 +1,100 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/sapHanaConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SapHanaConnection",
+ "description": "Sap Hana Database Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.SapHanaConnection",
+ "definitions": {
+ "sapHanaType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["SapHana"],
+ "default": "SapHana"
+ },
+ "sapHanaScheme": {
+ "description": "SQLAlchemy driver scheme options.",
+ "type": "string",
+ "enum": ["hana"],
+ "default": "hana"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/sapHanaType",
+ "default": "SapHana"
+ },
+ "scheme": {
+ "title": "Connection Scheme",
+ "description": "SQLAlchemy driver scheme options.",
+ "$ref": "#/definitions/sapHanaScheme",
+ "default": "hana"
+ },
+ "connection": {
+ "mask": true,
+ "title": "SAP Hana Connection",
+ "description": "Choose between Database connection or HDB User Store connection.",
+ "oneOf": [
+ {
+ "$ref": "sapHana/sapHanaSQLConnection.json"
+ },
+ {
+ "$ref": "sapHana/sapHanaHDBConnection.json"
+ }
+ ]
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "schemaFilterPattern":{
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ },
+ "supportsDBTExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsDBTExtraction"
+ },
+ "supportsProfiler": {
+ "title": "Supports Profiler",
+ "$ref": "../connectionBasicType.json#/definitions/supportsProfiler"
+ },
+ "supportsLineageExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsLineageExtraction"
+ },
+ "supportsQueryComment": {
+ "title": "Supports Query Comment",
+ "$ref": "../connectionBasicType.json#/definitions/supportsQueryComment"
+ },
+ "sampleDataStorageConfig": {
+ "title": "Storage Config for Sample Data",
+ "$ref": "../connectionBasicType.json#/definitions/sampleDataStorageConfig"
+ },
+ "supportsDataDiff": {
+ "title": "Supports Data Diff Extraction.",
+ "$ref": "../connectionBasicType.json#/definitions/supportsDataDiff"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["connection"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/sasConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/sasConnection.json
new file mode 100644
index 000000000000..d256996d8e69
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/sasConnection.json
@@ -0,0 +1,121 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/sasConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SASConnection",
+ "description": "SAS Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.SASConnection",
+ "definitions": {
+ "sasType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["SAS"],
+ "default": "SAS"
+ }
+ },
+ "properties": {
+ "type": {
+ "description": "Service Type",
+ "$ref": "#/definitions/sasType",
+ "default": "SAS"
+ },
+ "username": {
+ "description": "Username to connect to SAS Viya.",
+ "type": "string"
+ },
+ "password": {
+ "description": "Password to connect to SAS Viya",
+ "type": "string",
+ "format": "password"
+ },
+ "serverHost": {
+ "description": "Hostname of SAS Viya deployment.",
+ "type": "string",
+ "format": "uri"
+ },
+ "datatables": {
+ "description": "Enable datatables for ingestion",
+ "type": "boolean",
+ "default": true
+ },
+ "dataTablesCustomFilter": {
+ "title": "Custom Filter for datatables",
+ "description": "Custom filter for datatables",
+ "oneOf": [
+ {
+ "title": "No Custom Filter",
+ "description": "Don't include custom filter when ingesting metadata for datatables",
+ "type": "object"
+ },
+ {
+ "title": "Custom Filter",
+ "description": "Include custom filter when ingesting metadata for datatables",
+ "type": "string"
+ }
+ ]
+ },
+ "reports": {
+ "description": "Enable report for ingestion",
+ "type": "boolean",
+ "default": false
+ },
+ "reportsCustomFilter": {
+ "title": "Custom Filter for reports",
+ "description": "Custom filter for reports",
+ "oneOf": [
+ {
+ "title": "No Custom Filter",
+ "description": "Don't include custom filter when ingesting metadata for reports",
+ "type": "object"
+ },
+ {
+ "title": "Custom Filter",
+ "description": "Include custom filter when ingesting metadata for reports",
+ "type": "string"
+ }
+ ]
+ },
+ "dataflows": {
+ "description": "Enable dataflow for ingestion",
+ "type": "boolean",
+ "default": false
+ },
+ "dataflowsCustomFilter": {
+ "title": "Custom Filter for dataflows",
+ "description": "Custom filter for dataflows",
+ "oneOf": [
+ {
+ "title": "No Custom Filter",
+ "description": "Don't include custom filter when ingesting metadata for dataflows",
+ "type": "object"
+ },
+ {
+ "title": "Custom Filter",
+ "description": "Include custom filter when ingesting metadata for dataflows",
+ "type": "string"
+ }
+ ]
+ },
+ "schemaFilterPattern":{
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "required": ["username", "password", "serverHost"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/serviceNowConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/serviceNowConnection.json
new file mode 100644
index 000000000000..0a50dd9b2cde
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/serviceNowConnection.json
@@ -0,0 +1,76 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/serviceNowConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "ServiceNowConnection",
+ "description": "ServiceNow Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.ServiceNowConnection",
+ "definitions": {
+ "serviceNowType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["ServiceNow"],
+ "default": "ServiceNow"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/serviceNowType",
+ "default": "ServiceNow"
+ },
+ "hostPort": {
+ "title": "ServiceNow Instance URL",
+ "description": "ServiceNow instance URL (e.g., https://your-instance.service-now.com)",
+ "type": "string",
+ "format": "uri"
+ },
+ "username": {
+ "title": "Username",
+ "description": "Username to connect to ServiceNow. This user should have read access to sys_db_object and sys_dictionary tables.",
+ "type": "string"
+ },
+ "password": {
+ "title": "Password",
+ "description": "Password to connect to ServiceNow.",
+ "type": "string",
+ "format": "password"
+ },
+ "includeScopes": {
+ "title": "Include Scopes as Schemas",
+ "description": "If true, ServiceNow application scopes will be imported as database schemas. Otherwise, a single default schema will be used.",
+ "type": "boolean",
+ "default": false
+ },
+ "includeSystemTables": {
+ "title": "Include System Tables",
+ "description": "If true, both admin and system tables (sys_* tables) will be fetched. If false, only admin tables will be fetched.",
+ "type": "boolean",
+ "default": false
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ },
+ "supportsLineageExtraction": {
+ "title": "Supports Lineage Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsLineageExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["hostPort", "username", "password"]
+ }
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/singleStoreConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/singleStoreConnection.json
new file mode 100644
index 000000000000..f264ffa28356
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/singleStoreConnection.json
@@ -0,0 +1,109 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/singleStoreConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SingleStoreConnection",
+ "description": "SingleStore Database Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.SingleStoreConnection",
+ "definitions": {
+ "singleStoreType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["SingleStore"],
+ "default": "SingleStore"
+ },
+ "singleStoreScheme": {
+ "description": "SQLAlchemy driver scheme options.",
+ "type": "string",
+ "enum": ["mysql+pymysql"],
+ "default": "mysql+pymysql"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/singleStoreType",
+ "default": "SingleStore"
+ },
+ "scheme": {
+ "title": "Connection Scheme",
+ "description": "SQLAlchemy driver scheme options.",
+ "$ref": "#/definitions/singleStoreScheme",
+ "default": "mysql+pymysql"
+ },
+ "username": {
+ "title": "Username",
+ "description": "Username to connect to SingleStore. This user should have privileges to read all the metadata in MySQL.",
+ "type": "string"
+ },
+ "password": {
+ "title": "Password",
+ "description": "Password to connect to SingleStore.",
+ "type": "string",
+ "format": "password"
+ },
+ "hostPort": {
+ "title": "Host and Port",
+ "description": "Host and port of the SingleStore service.",
+ "type": "string"
+ },
+ "databaseName": {
+ "title": "Database Name",
+ "description": "Optional name to give to the database in OpenMetadata. If left blank, we will use default as the database name.",
+ "type": "string"
+ },
+ "databaseSchema": {
+ "title": "Database Schema",
+ "description": "Database Schema of the data source. This is optional parameter, if you would like to restrict the metadata reading to a single schema. When left blank, OpenMetadata Ingestion attempts to scan all the schemas.",
+ "type": "string"
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "schemaFilterPattern":{
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ },
+ "supportsDBTExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsDBTExtraction"
+ },
+ "supportsProfiler": {
+ "title": "Supports Profiler",
+ "$ref": "../connectionBasicType.json#/definitions/supportsProfiler"
+ },
+ "supportsQueryComment": {
+ "title": "Supports Query Comment",
+ "$ref": "../connectionBasicType.json#/definitions/supportsQueryComment"
+ },
+ "sampleDataStorageConfig": {
+ "title": "Storage Config for Sample Data",
+ "$ref": "../connectionBasicType.json#/definitions/sampleDataStorageConfig"
+ },
+ "supportsViewLineageExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsViewLineageExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["hostPort", "username"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/snowflakeConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/snowflakeConnection.json
new file mode 100644
index 000000000000..482fab92b758
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/snowflakeConnection.json
@@ -0,0 +1,205 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/snowflakeConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SnowflakeConnection",
+ "description": "Snowflake Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.SnowflakeConnection",
+ "definitions": {
+ "snowflakeType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["Snowflake"],
+ "default": "Snowflake"
+ },
+ "snowflakeScheme": {
+ "description": "SQLAlchemy driver scheme options.",
+ "type": "string",
+ "enum": ["snowflake"],
+ "default": "snowflake"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/snowflakeType",
+ "default": "Snowflake"
+ },
+ "scheme": {
+ "title": "Connection Scheme",
+ "description": "SQLAlchemy driver scheme options.",
+ "$ref": "#/definitions/snowflakeScheme",
+ "default": "snowflake"
+ },
+ "username": {
+ "title": "Username",
+ "description": "Username to connect to Snowflake. This user should have privileges to read all the metadata in Snowflake.",
+ "type": "string"
+ },
+ "password": {
+ "title": "Password",
+ "description": "Password to connect to Snowflake.",
+ "type": "string",
+ "format": "password"
+ },
+ "account": {
+ "title": "Account",
+ "description": "If the Snowflake URL is https://xyz1234.us-east-1.gcp.snowflakecomputing.com, then the account is xyz1234.us-east-1.gcp",
+ "type": "string"
+ },
+ "role": {
+ "title": "Role",
+ "description": "Snowflake Role.",
+ "type": "string"
+ },
+ "database": {
+ "title": "Database",
+ "description": "Database of the data source. This is optional parameter, if you would like to restrict the metadata reading to a single database. When left blank, OpenMetadata Ingestion attempts to scan all the databases.",
+ "type": "string"
+ },
+ "warehouse": {
+ "title": "Warehouse",
+ "description": "Snowflake warehouse.",
+ "type": "string"
+ },
+ "queryTag": {
+ "title": "Query Tag",
+ "description": "Session query tag used to monitor usage on snowflake. To use a query tag snowflake user should have enough privileges to alter the session.",
+ "type": "string"
+ },
+ "accountUsageSchema": {
+ "title": "Account Usage Schema Name",
+ "description": "Full name of the schema where the account usage data is stored.",
+ "type": "string",
+ "default": "SNOWFLAKE.ACCOUNT_USAGE"
+ },
+ "privateKey": {
+ "title": "Private Key",
+ "description": "Connection to Snowflake instance via Private Key",
+ "type": "string",
+ "format": "password"
+ },
+ "snowflakePrivatekeyPassphrase": {
+ "title": "Snowflake Passphrase Key",
+ "description": "Snowflake Passphrase Key used with Private Key",
+ "type": "string",
+ "format": "password"
+ },
+ "includeTransientTables": {
+ "title": "Include Transient Tables",
+ "description": "Optional configuration for ingestion of TRANSIENT tables, By default, it will skip the TRANSIENT tables.",
+ "type": "boolean",
+ "default": true
+ },
+ "includeStreams": {
+ "title": "Include Streams",
+ "description": "Optional configuration for ingestion of streams, By default, it will skip the streams.",
+ "type": "boolean",
+ "default": false
+ },
+ "includeStages": {
+ "title": "Include Stages",
+ "description": "Optional configuration for ingestion of Snowflake stages (internal and external). By default, stages are not ingested.",
+ "type": "boolean",
+ "default": false
+ },
+ "clientSessionKeepAlive": {
+ "title": "Client Session Keep Alive",
+ "description": "Optional configuration for ingestion to keep the client session active in case the ingestion process runs for longer durations.",
+ "type": "boolean",
+ "default": false
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "schemaFilterPattern": {
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "default": {
+ "includes": [],
+ "excludes": ["^information_schema$"]
+ }
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "default": {
+ "includes": [],
+ "excludes": ["^snowflake$"]
+ }
+ },
+ "storedProcedureFilterPattern": {
+ "title": "Default Stored Procedure Filter Pattern",
+ "description": "Regex to only include/exclude stored procedures that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ },
+ "supportsIncrementalMetadataExtraction": {
+ "title": "Supports Incremental Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsIncrementalMetadataExtraction"
+ },
+ "supportsUsageExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsUsageExtraction"
+ },
+ "supportsLineageExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsLineageExtraction"
+ },
+ "supportsDBTExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsDBTExtraction"
+ },
+ "supportsProfiler": {
+ "title": "Supports Profiler",
+ "$ref": "../connectionBasicType.json#/definitions/supportsProfiler"
+ },
+ "supportsDatabase": {
+ "title": "Supports Database",
+ "$ref": "../connectionBasicType.json#/definitions/supportsDatabase"
+ },
+ "supportsQueryComment": {
+ "title": "Supports Query Comment",
+ "$ref": "../connectionBasicType.json#/definitions/supportsQueryComment"
+ },
+ "supportsSystemProfile": {
+ "title": "Supports System Profile",
+ "$ref": "../connectionBasicType.json#/definitions/supportsSystemProfile"
+ },
+ "sampleDataStorageConfig": {
+ "title": "Storage Config for Sample Data",
+ "$ref": "../connectionBasicType.json#/definitions/sampleDataStorageConfig"
+ },
+ "supportsDataDiff": {
+ "title": "Supports Data Diff Extraction.",
+ "$ref": "../connectionBasicType.json#/definitions/supportsDataDiff"
+ },
+ "creditCost": {
+ "title": "Cost of Credit",
+ "description": "Cost of credit for the Snowflake account.",
+ "type": "number",
+ "default": 3.3
+ },
+ "snowflakeSourceHost": {
+ "title": "Snowflake Source Host",
+ "description": "Snowflake source host for the Snowflake account.",
+ "type": "string",
+ "default": "app.snowflake.com"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["username", "account", "warehouse"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/sqliteConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/sqliteConnection.json
new file mode 100644
index 000000000000..7455a2a2c1d0
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/sqliteConnection.json
@@ -0,0 +1,109 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/sqliteConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SQLiteConnection",
+ "description": "SQLite Database Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.SQLiteConnection",
+ "definitions": {
+ "SQLiteType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["SQLite"],
+ "default": "SQLite"
+ },
+ "SQLiteScheme": {
+ "description": "SQLAlchemy driver scheme options.",
+ "type": "string",
+ "enum": ["sqlite+pysqlite"],
+ "default": "sqlite+pysqlite"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/SQLiteType",
+ "default": "SQLite"
+ },
+ "scheme": {
+ "title": "Connection Scheme",
+ "description": "SQLAlchemy driver scheme options.",
+ "$ref": "#/definitions/SQLiteScheme",
+ "default": "sqlite+pysqlite"
+ },
+ "username": {
+ "title": "Username",
+ "description": "Username to connect to SQLite. Blank for in-memory database.",
+ "type": "string"
+ },
+ "password": {
+ "title": "Password",
+ "description": "Password to connect to SQLite. Blank for in-memory database.",
+ "type": "string",
+ "format": "password"
+ },
+ "hostPort": {
+ "title": "Host and Port",
+ "description": "Host and port of the SQLite service. Blank for in-memory database.",
+ "type": "string"
+ },
+ "database": {
+ "title": "Database",
+ "description": "Database of the data source. This is optional parameter, if you would like to restrict the metadata reading to a single database. When left blank, OpenMetadata Ingestion attempts to scan all the databases.",
+ "type": "string"
+ },
+ "databaseMode": {
+ "title": "Database Mode",
+ "description": "How to run the SQLite database. :memory: by default.",
+ "type": "string",
+ "default": ":memory:"
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "schemaFilterPattern":{
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ },
+ "supportsDBTExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsDBTExtraction"
+ },
+ "supportsProfiler": {
+ "title": "Supports Profiler",
+ "$ref": "../connectionBasicType.json#/definitions/supportsProfiler"
+ },
+ "supportsQueryComment": {
+ "title": "Supports Query Comment",
+ "$ref": "../connectionBasicType.json#/definitions/supportsQueryComment"
+ },
+ "sampleDataStorageConfig": {
+ "title": "Storage Config for Sample Data",
+ "$ref": "../connectionBasicType.json#/definitions/sampleDataStorageConfig"
+ },
+ "supportsViewLineageExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsViewLineageExtraction"
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/ssasConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/ssasConnection.json
new file mode 100644
index 000000000000..03240b4632be
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/ssasConnection.json
@@ -0,0 +1,51 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/ssasConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SSASConnection",
+ "description": "SSAS Metadata Database Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.SSASConnection",
+ "definitions": {
+ "SSASType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["SSAS"],
+ "default": "SSAS"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/SSASType",
+ "default": "SSAS"
+ },
+ "httpConnection": {
+ "title": "HTTP Link for SSAS ACCESS",
+ "description": "HTTP Link for SSAS ACCESS",
+ "type": "string"
+ },
+ "username": {
+ "title": "Username",
+ "description": "Username",
+ "type": "string"
+ },
+ "password": {
+ "title": "Password",
+ "description": "Password",
+ "type": "string",
+ "format": "password"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ },
+ "supportsLineageExtraction": {
+ "title": "Supports Lineage Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsLineageExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["httpConnection", "username", "password"]
+ }
+
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/starrocksConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/starrocksConnection.json
new file mode 100644
index 000000000000..6b5c49ffc9ab
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/starrocksConnection.json
@@ -0,0 +1,124 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/starrocksConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "StarRocksConnection",
+ "description": "StarRocks Database Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.StarRocksConnection",
+ "definitions": {
+ "starrocksType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": [
+ "StarRocks"
+ ],
+ "default": "StarRocks"
+ },
+ "starrocksScheme": {
+ "description": "SQLAlchemy driver scheme options.",
+ "type": "string",
+ "enum": [
+ "mysql+pymysql"
+ ],
+ "default": "mysql+pymysql"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/starrocksType",
+ "default": "StarRocks"
+ },
+ "scheme": {
+ "title": "Connection Scheme",
+ "description": "SQLAlchemy driver scheme options.",
+ "$ref": "#/definitions/starrocksScheme",
+ "default": "mysql+pymysql"
+ },
+ "username": {
+ "title": "Username",
+ "description": "Username to connect to StarRocks. This user should have privileges to read all the metadata in StarRocks.",
+ "type": "string"
+ },
+ "password": {
+ "title": "Password",
+ "description": "Password to connect to StarRocks.",
+ "type": "string",
+ "format": "password"
+ },
+ "hostPort": {
+ "title": "Host and Port",
+ "description": "Host and port of the StarRocks service.",
+ "type": "string"
+ },
+ "databaseName": {
+ "title": "Database Name",
+ "description": "Optional name to give to the database in OpenMetadata. If left blank, we will use default as the database name.",
+ "type": "string"
+ },
+ "databaseSchema": {
+ "title": "Database Schema",
+ "description": "Database Schema of the data source. This is optional parameter, if you would like to restrict the metadata reading to a single schema. When left blank, OpenMetadata Ingestion attempts to scan all the schemas.",
+ "type": "string"
+ },
+ "sslConfig": {
+ "title": "SSL",
+ "description": "SSL Configuration details.",
+ "$ref": "../../../../security/ssl/verifySSLConfig.json#/definitions/sslConfig"
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "schemaFilterPattern":{
+ "title": "Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern. System schemas (information_schema, _statistics_, sys) are excluded by default.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ },
+ "supportsDBTExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsDBTExtraction"
+ },
+ "supportsProfiler": {
+ "title": "Supports Profiler",
+ "$ref": "../connectionBasicType.json#/definitions/supportsProfiler"
+ },
+ "supportsQueryComment": {
+ "title": "Supports Query Comment",
+ "$ref": "../connectionBasicType.json#/definitions/supportsQueryComment"
+ },
+ "supportsUsageExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsUsageExtraction"
+ },
+ "supportsLineageExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsLineageExtraction"
+ },
+ "supportsViewLineageExtraction": {
+ "title": "Supports View Lineage",
+ "$ref": "../connectionBasicType.json#/definitions/supportsViewLineageExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "hostPort",
+ "username"
+ ]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/synapseConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/synapseConnection.json
new file mode 100644
index 000000000000..da3ea496a0d5
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/synapseConnection.json
@@ -0,0 +1,176 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/synapseConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SynapseConnection",
+ "description": "Synapse Database Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.SynapseConnection",
+ "definitions": {
+ "synapseType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["Synapse"],
+ "default": "Synapse"
+ },
+ "synapseScheme": {
+ "description": "SQLAlchemy driver scheme options.",
+ "type": "string",
+ "enum": ["mssql+pyodbc"],
+ "default": "mssql+pyodbc"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/synapseType",
+ "default": "Synapse"
+ },
+ "scheme": {
+ "title": "Connection Scheme",
+ "description": "SQLAlchemy driver scheme options.",
+ "$ref": "#/definitions/synapseScheme",
+ "default": "mssql+pyodbc"
+ },
+ "username": {
+ "title": "Username",
+ "description": "Username to connect to Azure Synapse. This user should have privileges to read all the metadata in Azure Synapse.",
+ "type": "string"
+ },
+ "password": {
+ "title": "Password",
+ "description": "Password to connect to Azure Synapse.",
+ "type": "string",
+ "format": "password"
+ },
+ "hostPort": {
+ "title": "Host and Port",
+ "description": "Host and port of the Azure Synapse service.",
+ "type": "string"
+ },
+ "database": {
+ "title": "Database",
+ "description": "Database of the data source. This is optional parameter, if you would like to restrict the metadata reading to a single database. When left blank, OpenMetadata Ingestion attempts to scan all the databases.",
+ "type": "string"
+ },
+ "driver": {
+ "title": "Driver",
+ "description": "ODBC driver version in case of pyodbc connection.",
+ "type": "string",
+ "default": "ODBC Driver 18 for SQL Server"
+ },
+ "clientId": {
+ "title": "Client ID",
+ "description": "Azure Application (client) ID for service principal authentication.",
+ "type": "string"
+ },
+ "clientSecret": {
+ "title": "Client Secret",
+ "description": "Azure Application client secret for service principal authentication.",
+ "type": "string",
+ "format": "password"
+ },
+ "tenantId": {
+ "title": "Tenant ID",
+ "description": "Azure Directory (tenant) ID for service principal authentication.",
+ "type": "string"
+ },
+ "authenticationMode": {
+ "title": "Authentication Mode",
+ "description": "This parameter determines the mode of authentication for connecting to Azure Synapse using ODBC. If 'Active Directory Password' is selected, you need to provide the password. If 'Active Directory Integrated' is selected, password is not required as it uses the logged-in user's credentials. If 'Active Directory Service Principal' is selected, you need to provide clientId, clientSecret and tenantId. This mode is useful for establishing secure and seamless connections with Azure Synapse.",
+ "properties": {
+ "authentication": {
+ "title": "Authentication",
+ "description": "Authentication from Connection String for Azure Synapse.",
+ "type": "string",
+ "enum": [
+ "ActiveDirectoryIntegrated",
+ "ActiveDirectoryPassword",
+ "ActiveDirectoryServicePrincipal"
+ ]
+ },
+ "encrypt": {
+ "title": "Encrypt",
+ "description": "Encrypt from Connection String for Azure Synapse.",
+ "type": "boolean"
+ },
+ "trustServerCertificate": {
+ "title": "Trust Server Certificate",
+ "description": "Trust Server Certificate from Connection String for Azure Synapse.",
+ "type": "boolean"
+ },
+ "connectionTimeout": {
+ "title": "Connection Timeout",
+ "description": "Connection Timeout from Connection String for Azure Synapse.",
+ "type": "integer",
+ "default": 30
+ }
+ }
+ },
+ "ingestAllDatabases": {
+ "title": "Ingest All Databases",
+ "description": "Ingest data from all databases in Azure Synapse. You can use databaseFilterPattern on top of this.",
+ "type": "boolean",
+ "default": false
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "schemaFilterPattern":{
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "storedProcedureFilterPattern": {
+ "title": "Default Stored Procedure Filter Pattern",
+ "description": "Regex to only include/exclude stored procedures that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ },
+ "supportsDBTExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsDBTExtraction"
+ },
+ "supportsProfiler": {
+ "title": "Supports Profiler",
+ "$ref": "../connectionBasicType.json#/definitions/supportsProfiler"
+ },
+ "supportsDatabase": {
+ "title": "Supports Database",
+ "$ref": "../connectionBasicType.json#/definitions/supportsDatabase"
+ },
+ "supportsUsageExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsUsageExtraction"
+ },
+ "supportsLineageExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsLineageExtraction"
+ },
+ "sampleDataStorageConfig": {
+ "title": "Storage Config for Sample Data",
+ "$ref": "../connectionBasicType.json#/definitions/sampleDataStorageConfig"
+ },
+ "supportsQueryComment": {
+ "title": "Supports Query Comment",
+ "$ref": "../connectionBasicType.json#/definitions/supportsQueryComment"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["hostPort", "database"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/teradataConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/teradataConnection.json
new file mode 100644
index 000000000000..70b4ce3d2a60
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/teradataConnection.json
@@ -0,0 +1,132 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/teradataConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "TeradataConnection",
+ "description": "Teradata Database Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.TeradataConnection",
+ "definitions": {
+ "teradataType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": [
+ "Teradata"
+ ],
+ "default": "Teradata"
+ },
+ "teradataScheme": {
+ "description": "SQLAlchemy driver scheme options.",
+ "type": "string",
+ "enum": [
+ "teradatasql"
+ ],
+ "default": "teradatasql"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/teradataType",
+ "default": "Teradata"
+ },
+ "scheme": {
+ "title": "Connection Scheme",
+ "description": "SQLAlchemy driver scheme options.",
+ "$ref": "#/definitions/teradataScheme",
+ "default": "teradatasql"
+ },
+ "username": {
+ "title": "Username",
+ "description": "Username to connect to Teradata. This user should have privileges to read all the metadata in Teradata.",
+ "type": "string"
+ },
+ "password": {
+ "title": "Password",
+ "description": "Password to connect to Teradata.",
+ "type": "string",
+ "format": "password"
+ },
+ "logmech": {
+ "title": "LOGMECH",
+ "description": "Specifies the logon authentication method. Possible values are TD2 (the default), JWT, LDAP, KRB5 for Kerberos, or TDNEGO",
+ "type": "string",
+ "enum": ["TD2", "LDAP", "JWT", "KRB5", "CUSTOM", "TDNEGO"],
+ "default": "TD2"
+ },
+ "logdata": {
+ "title": "Extra data for the chosen logon authentication method (LOGDATA)",
+ "description": "Specifies additional data needed by a logon mechanism, such as a secure token, Distinguished Name, or a domain/realm name. LOGDATA values are specific to each logon mechanism.",
+ "type": "string"
+ },
+ "hostPort": {
+ "title": "Host and Port",
+ "description": "Host and port of the Teradata service.",
+ "type": "string"
+ },
+ "tmode": {
+ "title": "Transaction mode",
+ "description": "Specifies the transaction mode for the connection",
+ "type": "string",
+ "enum": ["ANSI", "TERA", "DEFAULT"],
+ "default": "DEFAULT"
+ },
+ "account": {
+ "title": "Teradata Database account",
+ "description": "Specifies an account string to override the default account string defined for the database user. Accounts are used by the database for workload management and resource usage monitoring.",
+ "type": "string"
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "schemaFilterPattern":{
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "storedProcedureFilterPattern": {
+ "title": "Default Stored Procedure Filter Pattern",
+ "description": "Regex to only include/exclude stored procedures that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ },
+ "supportsProfiler": {
+ "title": "Supports Profiler",
+ "$ref": "../connectionBasicType.json#/definitions/supportsProfiler"
+ },
+ "supportsQueryComment": {
+ "title": "Supports Query Comment",
+ "$ref": "../connectionBasicType.json#/definitions/supportsQueryComment"
+ },
+ "sampleDataStorageConfig": {
+ "title": "Storage Config for Sample Data",
+ "$ref": "../connectionBasicType.json#/definitions/sampleDataStorageConfig"
+ },
+ "supportsViewLineageExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsViewLineageExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "hostPort",
+ "username"
+ ]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/timescaleConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/timescaleConnection.json
new file mode 100644
index 000000000000..675b93710273
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/timescaleConnection.json
@@ -0,0 +1,165 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/timescaleConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "TimescaleConnection",
+ "description": "TimescaleDB Database Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.TimescaleConnection",
+ "definitions": {
+ "timescaleType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": [
+ "Timescale"
+ ],
+ "default": "Timescale"
+ },
+ "timescaleScheme": {
+ "description": "SQLAlchemy driver scheme options.",
+ "type": "string",
+ "enum": [
+ "postgresql+psycopg2"
+ ],
+ "default": "postgresql+psycopg2"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/timescaleType",
+ "default": "Timescale"
+ },
+ "scheme": {
+ "title": "Connection Scheme",
+ "description": "SQLAlchemy driver scheme options.",
+ "$ref": "#/definitions/timescaleScheme",
+ "default": "postgresql+psycopg2"
+ },
+ "username": {
+ "title": "Username",
+ "description": "Username to connect to TimescaleDB. This user should have privileges to read all the metadata in TimescaleDB.",
+ "type": "string"
+ },
+ "authType": {
+ "title": "Auth Configuration Type",
+ "description": "Choose Auth Config Type.",
+ "mask": true,
+ "oneOf": [
+ {
+ "$ref": "./common/basicAuth.json"
+ },
+ {
+ "$ref": "./common/iamAuthConfig.json"
+ },
+ {
+ "$ref": "./common/azureConfig.json"
+ }
+ ]
+ },
+ "hostPort": {
+ "title": "Host and Port",
+ "description": "Host and port of the TimescaleDB service.",
+ "type": "string"
+ },
+ "database": {
+ "title": "Database",
+ "description": "Database of the data source. This is optional parameter, if you would like to restrict the metadata reading to a single database. When left blank, OpenMetadata Ingestion attempts to scan all the databases.",
+ "type": "string"
+ },
+ "ingestAllDatabases": {
+ "title": "Ingest All Databases",
+ "description": "Ingest data from all databases in TimescaleDB. You can use databaseFilterPattern on top of this.",
+ "type": "boolean",
+ "default": false
+ },
+ "schemaFilterPattern": {
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "default": {
+ "includes": [],
+ "excludes": ["^information_schema$", "^_timescaledb_.*$"]
+ }
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "default": {
+ "includes": [],
+ "excludes": ["^template1$", "^template0$"]
+ }
+ },
+ "sslMode": {
+ "$ref": "../../../../security/ssl/verifySSLConfig.json#/definitions/sslMode"
+ },
+ "sslConfig": {
+ "$ref": "../../../../security/ssl/verifySSLConfig.json#/definitions/sslConfig"
+ },
+ "classificationName": {
+ "title": "Classification Name",
+ "description": "Custom OpenMetadata Classification name for TimescaleDB policy tags.",
+ "type": "string",
+ "default": "TimescalePolicyTags"
+ },
+ "queryStatementSource": {
+ "title": "Query Statement Source",
+ "description": "Fully qualified name of the view or table to use for query logs. If not provided, defaults to pg_stat_statements. Use this to configure a custom view (e.g., my_schema.custom_pg_stat_statements) when direct access to pg_stat_statements is restricted.",
+ "type": "string",
+ "default": "pg_stat_statements"
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ },
+ "supportsUsageExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsUsageExtraction"
+ },
+ "supportsLineageExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsLineageExtraction"
+ },
+ "supportsDBTExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsDBTExtraction"
+ },
+ "supportsProfiler": {
+ "title": "Supports Profiler",
+ "$ref": "../connectionBasicType.json#/definitions/supportsProfiler"
+ },
+ "supportsDatabase": {
+ "title": "Supports Database",
+ "$ref": "../connectionBasicType.json#/definitions/supportsDatabase"
+ },
+ "supportsQueryComment": {
+ "title": "Supports Query Comment",
+ "$ref": "../connectionBasicType.json#/definitions/supportsQueryComment"
+ },
+ "sampleDataStorageConfig": {
+ "title": "Storage Config for Sample Data",
+ "$ref": "../connectionBasicType.json#/definitions/sampleDataStorageConfig"
+ },
+ "supportsDataDiff": {
+ "title": "Supports Data Diff Extraction.",
+ "$ref": "../connectionBasicType.json#/definitions/supportsDataDiff"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "hostPort",
+ "username",
+ "database"
+ ]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/trinoConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/trinoConnection.json
new file mode 100644
index 000000000000..872a729f9f13
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/trinoConnection.json
@@ -0,0 +1,153 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/trinoConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "TrinoConnection",
+ "description": "Trino Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.TrinoConnection",
+ "definitions": {
+ "trinoType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["Trino"],
+ "default": "Trino"
+ },
+ "trinoScheme": {
+ "description": "SQLAlchemy driver scheme options.",
+ "type": "string",
+ "enum": ["trino"],
+ "default": "trino"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/trinoType",
+ "default": "Trino"
+ },
+ "scheme": {
+ "title": "Connection Scheme",
+ "description": "SQLAlchemy driver scheme options.",
+ "$ref": "#/definitions/trinoScheme",
+ "default": "trino"
+ },
+ "username": {
+ "title": "Username",
+ "description": "Username to connect to Trino. This user should have privileges to read all the metadata in Trino.",
+ "type": "string"
+ },
+ "authType": {
+ "title": "Auth Configuration Type",
+ "description": "Choose Auth Config Type.",
+ "oneOf": [
+ {
+ "$ref": "./common/basicAuth.json"
+ },
+ {
+ "$ref": "./common/jwtAuth.json"
+ },
+ {
+ "$ref": "./common/azureConfig.json"
+ },
+ {
+ "$ref": "./common/noConfigAuthenticationTypes.json"
+ }
+ ]
+ },
+ "hostPort": {
+ "title": "Host and Port",
+ "description": "Host and port of the Trino service.",
+ "type": "string"
+ },
+ "catalog": {
+ "title": "Catalog",
+ "description": "Catalog of the data source.",
+ "type": "string"
+ },
+ "databaseSchema": {
+ "title": "databaseSchema",
+ "description": "databaseSchema of the data source. This is optional parameter, if you would like to restrict the metadata reading to a single databaseSchema. When left blank, OpenMetadata Ingestion attempts to scan all the databaseSchema.",
+ "type": "string"
+ },
+ "proxies": {
+ "title": "Proxies",
+ "description": "Proxies for the connection to Trino data source",
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "verify": {
+ "title": "Verify",
+ "description": "Verify ( Connection Argument for SSL ) to connect to Trino.",
+ "type": "string"
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "schemaFilterPattern":{
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ },
+ "supportsUsageExtraction": {
+ "title": "Supports Usage Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsUsageExtraction"
+ },
+ "supportsLineageExtraction": {
+ "title": "Supports Lineage Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsLineageExtraction"
+ },
+ "supportsDBTExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsDBTExtraction"
+ },
+ "supportsProfiler": {
+ "title": "Supports Profiler",
+ "$ref": "../connectionBasicType.json#/definitions/supportsProfiler"
+ },
+ "supportsDatabase": {
+ "title": "Supports Database",
+ "$ref": "../connectionBasicType.json#/definitions/supportsDatabase"
+ },
+ "supportsQueryComment": {
+ "title": "Supports Query Comment",
+ "$ref": "../connectionBasicType.json#/definitions/supportsQueryComment"
+ },
+ "sampleDataStorageConfig": {
+ "title": "Storage Config for Sample Data",
+ "$ref": "../connectionBasicType.json#/definitions/sampleDataStorageConfig"
+ },
+ "supportsDataDiff": {
+ "title": "Supports Data Diff Extraction.",
+ "$ref": "../connectionBasicType.json#/definitions/supportsDataDiff"
+ },
+ "queryHistoryTable": {
+ "title": "Query History Table",
+ "description": "Table name to fetch the query history.",
+ "type": "string",
+ "default": "\"system\".\"runtime\".\"queries\""
+ }
+ },
+ "additionalProperties": false,
+ "required": ["hostPort", "username"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/unityCatalogConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/unityCatalogConnection.json
new file mode 100644
index 000000000000..29e48ccb2057
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/unityCatalogConnection.json
@@ -0,0 +1,153 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/unityCatalogConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "UnityCatalogConnection",
+ "description": "UnityCatalog Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.UnityCatalogConnection",
+ "definitions": {
+ "databricksType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": [
+ "UnityCatalog"
+ ],
+ "default": "UnityCatalog"
+ },
+ "databricksScheme": {
+ "description": "SQLAlchemy driver scheme options.",
+ "type": "string",
+ "enum": [
+ "databricks+connector"
+ ],
+ "default": "databricks+connector"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/databricksType",
+ "default": "UnityCatalog"
+ },
+ "scheme": {
+ "title": "Connection Scheme",
+ "description": "SQLAlchemy driver scheme options.",
+ "$ref": "#/definitions/databricksScheme",
+ "default": "databricks+connector"
+ },
+ "hostPort": {
+ "title": "Host and Port",
+ "description": "Host and port of the Databricks service.",
+ "type": "string"
+ },
+ "authType": {
+ "title": "Authentication Type",
+ "description": "Choose between different authentication types for Databricks.",
+ "oneOf": [
+ {
+ "title": "Personal Access Token",
+ "$ref": "./databricks/personalAccessToken.json"
+ },
+ {
+ "title": "Databricks OAuth",
+ "$ref": "./databricks/databricksOAuth.json"
+ },
+ {
+ "title": "Azure AD Setup",
+ "$ref": "./databricks/azureAdSetup.json"
+ }
+ ]
+ },
+ "httpPath": {
+ "title": "Http Path",
+ "description": "Databricks compute resources URL.",
+ "type": "string"
+ },
+ "catalog": {
+ "title": "Catalog",
+ "description": "Catalog of the data source(Example: hive_metastore). This is optional parameter, if you would like to restrict the metadata reading to a single catalog. When left blank, OpenMetadata Ingestion attempts to scan all the catalog.",
+ "type": "string"
+ },
+ "databaseSchema": {
+ "title": "Database Schema",
+ "description": "Database Schema of the data source. This is optional parameter, if you would like to restrict the metadata reading to a single schema. When left blank, OpenMetadata Ingestion attempts to scan all the schemas.",
+ "type": "string"
+ },
+ "connectionTimeout": {
+ "title": "Connection Timeout",
+ "description": "The maximum amount of time (in seconds) to wait for a successful connection to the data source. If the connection attempt takes longer than this timeout period, an error will be returned.",
+ "type": "integer",
+ "default": 120
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "schemaFilterPattern": {
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "default": {
+ "includes": [],
+ "excludes": [
+ "^information_schema$"
+ ]
+ }
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "default": {
+ "includes": [],
+ "excludes": [
+ "^system$"
+ ]
+ }
+ },
+ "supportsUsageExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsUsageExtraction"
+ },
+ "supportsLineageExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsLineageExtraction"
+ },
+ "supportsDBTExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsDBTExtraction"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ },
+ "supportsProfiler": {
+ "title": "Supports Profiler",
+ "$ref": "../connectionBasicType.json#/definitions/supportsProfiler"
+ },
+ "supportsDatabase": {
+ "title": "Supports Database",
+ "$ref": "../connectionBasicType.json#/definitions/supportsDatabase"
+ },
+ "supportsQueryComment": {
+ "title": "Supports Query Comment",
+ "$ref": "../connectionBasicType.json#/definitions/supportsQueryComment"
+ },
+ "sampleDataStorageConfig": {
+ "title": "Storage Config for Sample Data",
+ "$ref": "../connectionBasicType.json#/definitions/sampleDataStorageConfig"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "hostPort",
+ "authType"
+ ]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/verticaConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/verticaConnection.json
new file mode 100644
index 000000000000..ba6a41221416
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/database/verticaConnection.json
@@ -0,0 +1,111 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/database/verticaConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "VerticaConnection",
+ "description": "Vertica Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.database.VerticaConnection",
+ "definitions": {
+ "verticaType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["Vertica"],
+ "default": "Vertica"
+ },
+ "verticaScheme": {
+ "description": "SQLAlchemy driver scheme options.",
+ "type": "string",
+ "enum": ["vertica+vertica_python"],
+ "default": "vertica+vertica_python"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/verticaType",
+ "default": "Vertica"
+ },
+ "scheme": {
+ "title": "Connection Scheme",
+ "description": "SQLAlchemy driver scheme options.",
+ "$ref": "#/definitions/verticaScheme",
+ "default": "vertica+vertica_python"
+ },
+ "username": {
+ "title": "Username",
+ "description": "Username to connect to Vertica. This user should have privileges to read all the metadata in Vertica.",
+ "type": "string"
+ },
+ "password": {
+ "title": "Password",
+ "description": "Password to connect to Vertica.",
+ "type": "string",
+ "format": "password"
+ },
+ "hostPort": {
+ "title": "Host and Port",
+ "description": "Host and port of the Vertica service.",
+ "type": "string"
+ },
+ "database": {
+ "title": "Database",
+ "description": "Database of the data source. This is optional parameter, if you would like to restrict the metadata reading to a single database. When left blank, OpenMetadata Ingestion attempts to scan all the databases.",
+ "type": "string"
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "schemaFilterPattern":{
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ },
+ "supportsUsageExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsUsageExtraction"
+ },
+ "supportsLineageExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsLineageExtraction"
+ },
+ "supportsDBTExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsDBTExtraction"
+ },
+ "supportsProfiler": {
+ "title": "Supports Profiler",
+ "$ref": "../connectionBasicType.json#/definitions/supportsProfiler"
+ },
+ "supportsDatabase": {
+ "title": "Supports Database",
+ "$ref": "../connectionBasicType.json#/definitions/supportsDatabase"
+ },
+ "supportsQueryComment": {
+ "title": "Supports Query Comment",
+ "$ref": "../connectionBasicType.json#/definitions/supportsQueryComment"
+ },
+ "sampleDataStorageConfig": {
+ "title": "Storage Config for Sample Data",
+ "$ref": "../connectionBasicType.json#/definitions/sampleDataStorageConfig"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["hostPort", "username"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/drive/customDriveConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/drive/customDriveConnection.json
new file mode 100644
index 000000000000..6bce12b92125
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/drive/customDriveConnection.json
@@ -0,0 +1,57 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/drive/customDriveConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CustomDriveConnection",
+ "description": "Custom Drive Connection to build a source that is not supported.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.drive.CustomDriveConnection",
+ "definitions": {
+ "customDriveType": {
+ "description": "Custom Drive service type",
+ "type": "string",
+ "enum": ["CustomDrive"],
+ "default": "CustomDrive"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/customDriveType",
+ "default": "CustomDrive"
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "directoryFilterPattern": {
+ "title": "Default Directory Filter Pattern",
+ "description": "Regex to only include/exclude directories that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "fileFilterPattern": {
+ "title": "Default File Filter Pattern",
+ "description": "Regex to only include/exclude files that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "spreadsheetFilterPattern": {
+ "title": "Default Spreadsheet Filter Pattern",
+ "description": "Regex to only include/exclude spreadsheets that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "worksheetFilterPattern": {
+ "title": "Default Worksheet Filter Pattern",
+ "description": "Regex to only include/exclude worksheets that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": true
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/drive/googleDriveConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/drive/googleDriveConnection.json
new file mode 100644
index 000000000000..6a453569acda
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/drive/googleDriveConnection.json
@@ -0,0 +1,85 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/drive/googleDriveConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "GoogleDriveConnection",
+ "description": "Google Drive Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.drive.GoogleDriveConnection",
+ "definitions": {
+ "googleDriveType": {
+ "description": "Google Drive service type",
+ "type": "string",
+ "enum": ["GoogleDrive"],
+ "default": "GoogleDrive"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/googleDriveType",
+ "default": "GoogleDrive"
+ },
+ "credentials": {
+ "title": "GCP Credentials",
+ "description": "GCP Credentials for Google Drive API",
+ "$ref": "../../../../security/credentials/gcpCredentials.json"
+ },
+ "delegatedEmail": {
+ "title": "Delegated Email",
+ "description": "Email to impersonate using domain-wide delegation",
+ "type": "string"
+ },
+ "driveId": {
+ "title": "Drive ID",
+ "description": "Specific shared drive ID to connect to",
+ "type": "string"
+ },
+ "includeTeamDrives": {
+ "title": "Include Team Drives",
+ "description": "Include shared/team drives in metadata extraction",
+ "type": "boolean",
+ "default": true
+ },
+ "includeGoogleSheets": {
+ "title": "Include Google Sheets",
+ "description": "Extract metadata only for Google Sheets files",
+ "type": "boolean",
+ "default": false
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "directoryFilterPattern": {
+ "title": "Default Directory Filter Pattern",
+ "description": "Regex to only include/exclude directories that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "fileFilterPattern": {
+ "title": "Default File Filter Pattern",
+ "description": "Regex to only include/exclude files that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "spreadsheetFilterPattern": {
+ "title": "Default Spreadsheet Filter Pattern",
+ "description": "Regex to only include/exclude spreadsheets that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "worksheetFilterPattern": {
+ "title": "Default Worksheet Filter Pattern",
+ "description": "Regex to only include/exclude worksheets that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["credentials"]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/drive/sftpConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/drive/sftpConnection.json
new file mode 100644
index 000000000000..f47935a3c730
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/drive/sftpConnection.json
@@ -0,0 +1,138 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/drive/sftpConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SftpConnection",
+ "description": "SFTP Connection Config for secure file transfer protocol servers.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.drive.SftpConnection",
+ "definitions": {
+ "sftpType": {
+ "description": "SFTP service type",
+ "type": "string",
+ "enum": ["Sftp"],
+ "default": "Sftp"
+ },
+ "basicAuth": {
+ "title": "Username/Password Authentication",
+ "description": "Username and password authentication for SFTP",
+ "type": "object",
+ "properties": {
+ "username": {
+ "title": "Username",
+ "description": "SFTP username",
+ "type": "string"
+ },
+ "password": {
+ "title": "Password",
+ "description": "SFTP password",
+ "type": "string",
+ "format": "password"
+ }
+ },
+ "required": ["username", "password"],
+ "additionalProperties": false
+ },
+ "keyAuth": {
+ "title": "Private Key Authentication",
+ "description": "SSH private key authentication for SFTP",
+ "type": "object",
+ "properties": {
+ "username": {
+ "title": "Username",
+ "description": "SFTP username",
+ "type": "string"
+ },
+ "privateKey": {
+ "title": "Private Key",
+ "description": "SSH private key content in PEM format. Supports RSA, Ed25519, ECDSA, and DSS keys.",
+ "type": "string",
+ "format": "password"
+ },
+ "privateKeyPassphrase": {
+ "title": "Private Key Passphrase",
+ "description": "Passphrase for the private key (if encrypted)",
+ "type": "string",
+ "format": "password"
+ }
+ },
+ "required": ["username", "privateKey"],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/sftpType",
+ "default": "Sftp"
+ },
+ "host": {
+ "title": "Host",
+ "description": "SFTP server hostname or IP address",
+ "type": "string"
+ },
+ "port": {
+ "title": "Port",
+ "description": "SFTP server port number",
+ "type": "integer",
+ "default": 22
+ },
+ "authType": {
+ "title": "Authentication Type",
+ "description": "Authentication method: username/password or SSH private key",
+ "oneOf": [
+ {
+ "$ref": "#/definitions/basicAuth"
+ },
+ {
+ "$ref": "#/definitions/keyAuth"
+ }
+ ]
+ },
+ "rootDirectories": {
+ "title": "Root Directories",
+ "description": "List of root directories to scan for files and subdirectories. If not specified, defaults to the user's home directory.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "default": ["/"]
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "directoryFilterPattern": {
+ "title": "Directory Filter Pattern",
+ "description": "Regex to only include/exclude directories that match the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "fileFilterPattern": {
+ "title": "File Filter Pattern",
+ "description": "Regex to only include/exclude files that match the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "structuredDataFilesOnly": {
+ "title": "Structured Data Files Only",
+ "description": "When enabled, only catalog structured data files (CSV, TSV) that can have schema extracted. Non-structured files like images, PDFs, videos, etc. will be skipped.",
+ "type": "boolean",
+ "default": false
+ },
+ "extractSampleData": {
+ "title": "Extract Sample Data",
+ "description": "When enabled, extract sample data from structured files (CSV, TSV). This is disabled by default to avoid performance overhead.",
+ "type": "boolean",
+ "default": false
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "required": ["host", "authType"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/drive/sharePointConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/drive/sharePointConnection.json
new file mode 100644
index 000000000000..4758b1696c82
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/drive/sharePointConnection.json
@@ -0,0 +1,91 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/drive/sharePointConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SharePointConnection",
+ "description": "SharePoint Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.drive.SharePointConnection",
+ "definitions": {
+ "sharePointType": {
+ "description": "SharePoint service type",
+ "type": "string",
+ "enum": ["SharePoint"],
+ "default": "SharePoint"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/sharePointType",
+ "default": "SharePoint"
+ },
+ "clientId": {
+ "title": "Client ID",
+ "description": "Application (client) ID from Azure Active Directory",
+ "type": "string"
+ },
+ "clientSecret": {
+ "title": "Client Secret",
+ "description": "Application (client) secret from Azure Active Directory",
+ "type": "string",
+ "format": "password"
+ },
+ "tenantId": {
+ "title": "Tenant ID",
+ "description": "Directory (tenant) ID from Azure Active Directory",
+ "type": "string"
+ },
+ "siteUrl": {
+ "title": "Site URL",
+ "description": "SharePoint site URL",
+ "type": "string",
+ "format": "uri",
+ "default": "https://yourorg.sharepoint.com/sites/yoursite"
+ },
+ "siteName": {
+ "title": "Site Name",
+ "description": "SharePoint site name",
+ "type": "string"
+ },
+ "driveId": {
+ "title": "Drive ID",
+ "description": "SharePoint drive ID. If not provided, default document library will be used",
+ "type": "string"
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "directoryFilterPattern": {
+ "title": "Default Directory Filter Pattern",
+ "description": "Regex to only include/exclude directories that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "fileFilterPattern": {
+ "title": "Default File Filter Pattern",
+ "description": "Regex to only include/exclude files that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "spreadsheetFilterPattern": {
+ "title": "Default Spreadsheet Filter Pattern",
+ "description": "Regex to only include/exclude spreadsheets that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "worksheetFilterPattern": {
+ "title": "Default Worksheet Filter Pattern",
+ "description": "Regex to only include/exclude worksheets that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "required": ["clientId", "clientSecret", "tenantId", "siteUrl"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/llm/anthropicConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/llm/anthropicConnection.json
new file mode 100644
index 000000000000..3800d2a8144a
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/llm/anthropicConnection.json
@@ -0,0 +1,59 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/llm/anthropicConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AnthropicConnection",
+ "description": "Anthropic (Claude) LLM Service Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.llm.AnthropicConnection",
+ "definitions": {
+ "anthropicType": {
+ "description": "Service type",
+ "type": "string",
+ "enum": ["Anthropic"],
+ "default": "Anthropic"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/anthropicType",
+ "default": "Anthropic"
+ },
+ "apiKey": {
+ "title": "API Key",
+ "description": "Anthropic API Key",
+ "type": "string",
+ "format": "password"
+ },
+ "baseURL": {
+ "title": "Base URL",
+ "description": "Optional custom base URL for Anthropic API",
+ "type": "string",
+ "default": "https://api.anthropic.com"
+ },
+ "timeout": {
+ "title": "Timeout",
+ "description": "Request timeout in seconds",
+ "type": "integer",
+ "default": 60
+ },
+ "maxRetries": {
+ "title": "Max Retries",
+ "description": "Maximum number of retries for failed requests",
+ "type": "integer",
+ "default": 3
+ },
+ "modelFilterPattern": {
+ "description": "Regex to only fetch models with names matching the pattern",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Model Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["apiKey"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/llm/azureOpenAIConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/llm/azureOpenAIConnection.json
new file mode 100644
index 000000000000..a845e7d008c1
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/llm/azureOpenAIConnection.json
@@ -0,0 +1,69 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/llm/azureOpenAIConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AzureOpenAIConnection",
+ "description": "Azure OpenAI Service Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.llm.AzureOpenAIConnection",
+ "definitions": {
+ "azureOpenAIType": {
+ "description": "Service type",
+ "type": "string",
+ "enum": ["AzureOpenAI"],
+ "default": "AzureOpenAI"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/azureOpenAIType",
+ "default": "AzureOpenAI"
+ },
+ "apiKey": {
+ "title": "API Key",
+ "description": "Azure OpenAI API Key",
+ "type": "string",
+ "format": "password"
+ },
+ "endpoint": {
+ "title": "Endpoint",
+ "description": "Azure OpenAI endpoint URL (e.g., https://your-resource-name.openai.azure.com/)",
+ "type": "string"
+ },
+ "apiVersion": {
+ "title": "API Version",
+ "description": "Azure OpenAI API version",
+ "type": "string",
+ "default": "2024-02-15-preview"
+ },
+ "deployment": {
+ "title": "Deployment Name",
+ "description": "Default deployment name to use",
+ "type": "string"
+ },
+ "timeout": {
+ "title": "Timeout",
+ "description": "Request timeout in seconds",
+ "type": "integer",
+ "default": 60
+ },
+ "maxRetries": {
+ "title": "Max Retries",
+ "description": "Maximum number of retries for failed requests",
+ "type": "integer",
+ "default": 3
+ },
+ "modelFilterPattern": {
+ "description": "Regex to only fetch models with names matching the pattern",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Model Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["apiKey", "endpoint"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/llm/bedrockConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/llm/bedrockConnection.json
new file mode 100644
index 000000000000..3b7cd99f34df
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/llm/bedrockConnection.json
@@ -0,0 +1,75 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/llm/bedrockConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "BedrockConnection",
+ "description": "AWS Bedrock LLM Service Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.llm.BedrockConnection",
+ "definitions": {
+ "bedrockType": {
+ "description": "Service type",
+ "type": "string",
+ "enum": ["Bedrock"],
+ "default": "Bedrock"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/bedrockType",
+ "default": "Bedrock"
+ },
+ "awsAccessKeyId": {
+ "title": "AWS Access Key ID",
+ "description": "AWS Access Key ID for authentication",
+ "type": "string",
+ "format": "password"
+ },
+ "awsSecretAccessKey": {
+ "title": "AWS Secret Access Key",
+ "description": "AWS Secret Access Key for authentication",
+ "type": "string",
+ "format": "password"
+ },
+ "awsSessionToken": {
+ "title": "AWS Session Token",
+ "description": "Optional AWS Session Token for temporary credentials",
+ "type": "string",
+ "format": "password"
+ },
+ "region": {
+ "title": "AWS Region",
+ "description": "AWS region where Bedrock is deployed (e.g., us-east-1)",
+ "type": "string"
+ },
+ "assumeRoleArn": {
+ "title": "Assume Role ARN",
+ "description": "Optional ARN of IAM role to assume",
+ "type": "string"
+ },
+ "timeout": {
+ "title": "Timeout",
+ "description": "Request timeout in seconds",
+ "type": "integer",
+ "default": 60
+ },
+ "maxRetries": {
+ "title": "Max Retries",
+ "description": "Maximum number of retries for failed requests",
+ "type": "integer",
+ "default": 3
+ },
+ "modelFilterPattern": {
+ "description": "Regex to only fetch models with names matching the pattern",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Model Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["region"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/llm/customLLMConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/llm/customLLMConnection.json
new file mode 100644
index 000000000000..1d0fb52ead56
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/llm/customLLMConnection.json
@@ -0,0 +1,77 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/llm/customLLMConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CustomLLMConnection",
+ "description": "Custom LLM Service Connection Config for self-hosted or custom LLM providers",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.llm.CustomLLMConnection",
+ "definitions": {
+ "customLLMType": {
+ "description": "Service type",
+ "type": "string",
+ "enum": ["CustomLLM"],
+ "default": "CustomLLM"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/customLLMType",
+ "default": "CustomLLM"
+ },
+ "baseURL": {
+ "title": "Base URL",
+ "description": "Base URL for the custom LLM API endpoint",
+ "type": "string"
+ },
+ "apiKey": {
+ "title": "API Key",
+ "description": "Optional API Key for authentication",
+ "type": "string",
+ "format": "password"
+ },
+ "authType": {
+ "title": "Authentication Type",
+ "description": "Type of authentication",
+ "type": "string",
+ "enum": ["None", "APIKey", "Bearer", "BasicAuth", "Custom"],
+ "default": "APIKey"
+ },
+ "headers": {
+ "title": "Custom Headers",
+ "description": "Additional custom headers for API requests",
+ "type": "object",
+ "additionalProperties": {"type": "string"}
+ },
+ "timeout": {
+ "title": "Timeout",
+ "description": "Request timeout in seconds",
+ "type": "integer",
+ "default": 60
+ },
+ "maxRetries": {
+ "title": "Max Retries",
+ "description": "Maximum number of retries for failed requests",
+ "type": "integer",
+ "default": 3
+ },
+ "verifySsl": {
+ "title": "Verify SSL",
+ "description": "Whether to verify SSL certificates",
+ "type": "boolean",
+ "default": true
+ },
+ "modelFilterPattern": {
+ "description": "Regex to only fetch models with names matching the pattern",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Model Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["baseURL"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/llm/huggingFaceConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/llm/huggingFaceConnection.json
new file mode 100644
index 000000000000..1901f191d582
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/llm/huggingFaceConnection.json
@@ -0,0 +1,59 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/llm/huggingFaceConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "HuggingFaceConnection",
+ "description": "HuggingFace LLM Service Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.llm.HuggingFaceConnection",
+ "definitions": {
+ "huggingFaceType": {
+ "description": "Service type",
+ "type": "string",
+ "enum": ["HuggingFace"],
+ "default": "HuggingFace"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/huggingFaceType",
+ "default": "HuggingFace"
+ },
+ "apiKey": {
+ "title": "API Token",
+ "description": "HuggingFace API Token",
+ "type": "string",
+ "format": "password"
+ },
+ "baseURL": {
+ "title": "Base URL",
+ "description": "Optional custom base URL (for HuggingFace Inference Endpoints)",
+ "type": "string",
+ "default": "https://api-inference.huggingface.co"
+ },
+ "timeout": {
+ "title": "Timeout",
+ "description": "Request timeout in seconds",
+ "type": "integer",
+ "default": 60
+ },
+ "maxRetries": {
+ "title": "Max Retries",
+ "description": "Maximum number of retries for failed requests",
+ "type": "integer",
+ "default": 3
+ },
+ "modelFilterPattern": {
+ "description": "Regex to only fetch models with names matching the pattern",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Model Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["apiKey"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/llm/ollamaConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/llm/ollamaConnection.json
new file mode 100644
index 000000000000..7905cd0cf3f4
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/llm/ollamaConnection.json
@@ -0,0 +1,53 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/llm/ollamaConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "OllamaConnection",
+ "description": "Ollama (Local LLM) Service Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.llm.OllamaConnection",
+ "definitions": {
+ "ollamaType": {
+ "description": "Service type",
+ "type": "string",
+ "enum": ["Ollama"],
+ "default": "Ollama"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/ollamaType",
+ "default": "Ollama"
+ },
+ "baseURL": {
+ "title": "Base URL",
+ "description": "Ollama server URL (e.g., http://localhost:11434)",
+ "type": "string",
+ "default": "http://localhost:11434"
+ },
+ "timeout": {
+ "title": "Timeout",
+ "description": "Request timeout in seconds",
+ "type": "integer",
+ "default": 60
+ },
+ "maxRetries": {
+ "title": "Max Retries",
+ "description": "Maximum number of retries for failed requests",
+ "type": "integer",
+ "default": 3
+ },
+ "modelFilterPattern": {
+ "description": "Regex to only fetch models with names matching the pattern",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Model Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["baseURL"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/llm/openAIConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/llm/openAIConnection.json
new file mode 100644
index 000000000000..961d7af754e6
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/llm/openAIConnection.json
@@ -0,0 +1,64 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/llm/openAIConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "OpenAIConnection",
+ "description": "OpenAI LLM Service Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.llm.OpenAIConnection",
+ "definitions": {
+ "openAIType": {
+ "description": "Service type",
+ "type": "string",
+ "enum": ["OpenAI"],
+ "default": "OpenAI"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/openAIType",
+ "default": "OpenAI"
+ },
+ "apiKey": {
+ "title": "API Key",
+ "description": "OpenAI API Key",
+ "type": "string",
+ "format": "password"
+ },
+ "organization": {
+ "title": "Organization ID",
+ "description": "Optional OpenAI Organization ID",
+ "type": "string"
+ },
+ "baseURL": {
+ "title": "Base URL",
+ "description": "Optional custom base URL for OpenAI API (for compatible services)",
+ "type": "string",
+ "default": "https://api.openai.com/v1"
+ },
+ "timeout": {
+ "title": "Timeout",
+ "description": "Request timeout in seconds",
+ "type": "integer",
+ "default": 60
+ },
+ "maxRetries": {
+ "title": "Max Retries",
+ "description": "Maximum number of retries for failed requests",
+ "type": "integer",
+ "default": 3
+ },
+ "modelFilterPattern": {
+ "description": "Regex to only fetch models with names matching the pattern",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Model Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["apiKey"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/llm/vertexAIConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/llm/vertexAIConnection.json
new file mode 100644
index 000000000000..a7e5c18d3175
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/llm/vertexAIConnection.json
@@ -0,0 +1,64 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/llm/vertexAIConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "VertexAIConnection",
+ "description": "Google Cloud Vertex AI LLM Service Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.llm.VertexAIConnection",
+ "definitions": {
+ "vertexAIType": {
+ "description": "Service type",
+ "type": "string",
+ "enum": ["VertexAI"],
+ "default": "VertexAI"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/vertexAIType",
+ "default": "VertexAI"
+ },
+ "projectId": {
+ "title": "Project ID",
+ "description": "GCP Project ID",
+ "type": "string"
+ },
+ "location": {
+ "title": "Location",
+ "description": "GCP region/location (e.g., us-central1)",
+ "type": "string",
+ "default": "us-central1"
+ },
+ "credentials": {
+ "title": "GCP Credentials",
+ "description": "GCP service account credentials JSON",
+ "type": "string",
+ "format": "password"
+ },
+ "timeout": {
+ "title": "Timeout",
+ "description": "Request timeout in seconds",
+ "type": "integer",
+ "default": 60
+ },
+ "maxRetries": {
+ "title": "Max Retries",
+ "description": "Maximum number of retries for failed requests",
+ "type": "integer",
+ "default": 3
+ },
+ "modelFilterPattern": {
+ "description": "Regex to only fetch models with names matching the pattern",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Model Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["projectId", "credentials"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/mcp/mcpConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/mcp/mcpConnection.json
new file mode 100644
index 000000000000..0c2e4d13882c
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/mcp/mcpConnection.json
@@ -0,0 +1,147 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/mcp/mcpConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "McpConnection",
+ "description": "MCP (Model Context Protocol) Service Connection for discovering and cataloging MCP servers, their tools, resources, and prompts.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.mcp.McpConnection",
+ "definitions": {
+ "mcpType": {
+ "description": "Service type",
+ "type": "string",
+ "enum": ["Mcp"],
+ "default": "Mcp"
+ },
+ "discoveryMethod": {
+ "description": "Method to discover MCP servers",
+ "type": "string",
+ "enum": ["ConfigFile", "DirectConnection", "Registry"],
+ "javaEnums": [
+ {"name": "ConfigFile", "description": "Discover servers from configuration files (e.g., claude_desktop_config.json)"},
+ {"name": "DirectConnection", "description": "Connect directly to a specific MCP server"},
+ {"name": "Registry", "description": "Discover servers from an MCP registry"}
+ ]
+ },
+ "transportType": {
+ "description": "MCP transport protocol type",
+ "type": "string",
+ "enum": ["Stdio", "SSE", "StreamableHTTP"],
+ "javaEnums": [
+ {"name": "Stdio", "description": "Standard input/output transport - spawns a subprocess"},
+ {"name": "SSE", "description": "Server-Sent Events transport over HTTP"},
+ {"name": "StreamableHTTP", "description": "Streamable HTTP transport"}
+ ]
+ },
+ "mcpServerConfig": {
+ "type": "object",
+ "description": "Configuration for a single MCP server to connect to directly",
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "Name to assign to this MCP server"
+ },
+ "transport": {
+ "$ref": "#/definitions/transportType",
+ "default": "Stdio"
+ },
+ "command": {
+ "type": "string",
+ "description": "Command to execute for Stdio transport (e.g., 'npx', 'uvx', 'python')"
+ },
+ "args": {
+ "type": "array",
+ "items": {"type": "string"},
+ "description": "Arguments to pass to the command"
+ },
+ "env": {
+ "type": "object",
+ "additionalProperties": {"type": "string"},
+ "description": "Environment variables for the server process"
+ },
+ "url": {
+ "type": "string",
+ "description": "URL for SSE or StreamableHTTP transport"
+ },
+ "apiKey": {
+ "type": "string",
+ "format": "password",
+ "description": "API key for authenticated MCP servers"
+ }
+ },
+ "required": ["name"]
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/mcpType",
+ "default": "Mcp"
+ },
+ "discoveryMethod": {
+ "title": "Discovery Method",
+ "description": "How to discover MCP servers",
+ "$ref": "#/definitions/discoveryMethod",
+ "default": "ConfigFile"
+ },
+ "configFilePaths": {
+ "title": "Config File Paths",
+ "description": "Paths to MCP configuration files to scan for server definitions. Supports Claude Desktop config, VS Code settings, etc.",
+ "type": "array",
+ "items": {"type": "string"},
+ "default": []
+ },
+ "servers": {
+ "title": "Direct Server Connections",
+ "description": "List of MCP servers to connect to directly (when discoveryMethod is DirectConnection)",
+ "type": "array",
+ "items": {"$ref": "#/definitions/mcpServerConfig"},
+ "default": []
+ },
+ "registryUrl": {
+ "title": "Registry URL",
+ "description": "URL of MCP registry to query for server discovery (when discoveryMethod is Registry)",
+ "type": "string"
+ },
+ "connectionTimeout": {
+ "title": "Connection Timeout",
+ "description": "Timeout in seconds for connecting to MCP servers",
+ "type": "integer",
+ "default": 30
+ },
+ "initializationTimeout": {
+ "title": "Initialization Timeout",
+ "description": "Timeout in seconds for MCP server initialization handshake",
+ "type": "integer",
+ "default": 60
+ },
+ "fetchTools": {
+ "title": "Fetch Tools",
+ "description": "Whether to fetch and catalog tools from MCP servers",
+ "type": "boolean",
+ "default": true
+ },
+ "fetchResources": {
+ "title": "Fetch Resources",
+ "description": "Whether to fetch and catalog resources from MCP servers",
+ "type": "boolean",
+ "default": true
+ },
+ "fetchPrompts": {
+ "title": "Fetch Prompts",
+ "description": "Whether to fetch and catalog prompts from MCP servers",
+ "type": "boolean",
+ "default": true
+ },
+ "serverFilterPattern": {
+ "description": "Regex to only fetch servers with names matching the pattern",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Server Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/messaging/customMessagingConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/messaging/customMessagingConnection.json
new file mode 100644
index 000000000000..ec0942de9ba0
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/messaging/customMessagingConnection.json
@@ -0,0 +1,45 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/messaging/customMessagingConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CustomMessagingConnection",
+ "description": "Custom Messaging Service Connection to build a source that is not supported by OpenMetadata yet.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.messaging.CustomMessagingConnection",
+ "definitions": {
+ "customMessagingType": {
+ "title": "Service Type",
+ "description": "Custom messaging service type",
+ "type": "string",
+ "enum": ["CustomMessaging"],
+ "default": "CustomMessaging"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Custom messaging service type",
+ "$ref": "#/definitions/customMessagingType",
+ "default": "CustomMessaging"
+ },
+ "sourcePythonClass": {
+ "title": "Source Python Class Name",
+ "description": "Source Python Class Name to instantiated by the ingestion workflow",
+ "type": "string"
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "topicFilterPattern": {
+ "description": "Regex to only fetch topics that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Topic Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": true,
+ "required": ["type"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/messaging/kafkaConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/messaging/kafkaConnection.json
new file mode 100644
index 000000000000..9bf788de2aeb
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/messaging/kafkaConnection.json
@@ -0,0 +1,115 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/messaging/kafkaConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "KafkaConnection",
+ "description": "Kafka Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.messaging.KafkaConnection",
+ "definitions": {
+ "kafkaType": {
+ "description": "Kafka service type",
+ "type": "string",
+ "enum": [
+ "Kafka"
+ ],
+ "default": "Kafka"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/kafkaType",
+ "default": "Kafka"
+ },
+ "bootstrapServers": {
+ "title": "Bootstrap Servers",
+ "description": "Kafka bootstrap servers. add them in comma separated values ex: host1:9092,host2:9092",
+ "type": "string"
+ },
+ "schemaRegistryURL": {
+ "title": "Schema Registry URL",
+ "description": "Confluent Kafka Schema Registry URL.",
+ "type": "string",
+ "format": "uri"
+ },
+ "saslUsername": {
+ "title": "SASL Username",
+ "description": "sasl.username consumer config property",
+ "type": "string"
+ },
+ "saslPassword": {
+ "title": "SASL Password",
+ "description": "sasl.password consumer config property",
+ "type": "string",
+ "format": "password"
+ },
+ "securityProtocol": {
+ "title": "Security Protocol",
+ "description": "security.protocol consumer config property",
+ "type": "string",
+ "enum": [
+ "PLAINTEXT",
+ "SASL_PLAINTEXT",
+ "SASL_SSL",
+ "SSL"
+ ],
+ "default": "PLAINTEXT"
+ },
+ "saslMechanism": {
+ "title": "SASL Mechanism",
+ "description": "sasl.mechanism Consumer Config property",
+ "$ref": "saslMechanismType.json",
+ "default": "PLAIN"
+ },
+ "basicAuthUserInfo": {
+ "title": "Schema Registry Basic Auth User Info",
+ "description": "basic.auth.user.info schema registry config property, Client HTTP credentials in the form of username:password.",
+ "type": "string",
+ "format": "password"
+ },
+ "consumerConfig": {
+ "title": "Consumer Config",
+ "description": "Confluent Kafka Consumer Config. From https://github.com/edenhill/librdkafka/blob/master/CONFIGURATION.md",
+ "type": "object",
+ "default": {},
+ "additionalProperties": true
+ },
+ "schemaRegistryConfig": {
+ "title": "Schema Registry Config",
+ "description": "Confluent Kafka Schema Registry Config. From https://docs.confluent.io/5.5.1/clients/confluent-kafka-python/index.html#confluent_kafka.schema_registry.SchemaRegistryClient",
+ "type": "object",
+ "default": {},
+ "additionalProperties": true
+ },
+ "schemaRegistryTopicSuffixName": {
+ "title": "Schema Registry Topic Suffix Name",
+ "description": "Schema Registry Topic Suffix Name. The suffix to be appended to the topic name to get topic schema from registry.",
+ "type": "string",
+ "default": "-value"
+ },
+ "consumerConfigSSL": {
+ "title": "Consumer Config SSL",
+ "description": "Consumer Config SSL Config. Configuration for enabling SSL for the Consumer Config connection.",
+ "$ref": "../../../../security/ssl/verifySSLConfig.json#/definitions/sslConfig"
+ },
+ "schemaRegistrySSL": {
+ "title": "Schema Registry SSL",
+ "description": "Schema Registry SSL Config. Configuration for enabling SSL for the Schema Registry connection.",
+ "$ref": "../../../../security/ssl/verifySSLConfig.json#/definitions/sslConfig"
+ },
+ "topicFilterPattern": {
+ "description": "Regex to only fetch topics that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Topic Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "bootstrapServers"
+ ]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/messaging/kinesisConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/messaging/kinesisConnection.json
new file mode 100644
index 000000000000..0b33601e4405
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/messaging/kinesisConnection.json
@@ -0,0 +1,39 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/messaging/kinesisConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "KinesisConnection",
+ "description": "Kinesis Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.messaging.KinesisConnection",
+ "definitions": {
+ "kinesisType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["Kinesis"],
+ "default": "Kinesis"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/kinesisType",
+ "default": "Kinesis"
+ },
+ "awsConfig": {
+ "title": "AWS Credentials Configuration",
+ "$ref": "../../../../security/credentials/awsCredentials.json"
+ },
+ "topicFilterPattern": {
+ "description": "Regex to only fetch topics that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Topic Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["awsConfig"]
+ }
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/messaging/pubSubConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/messaging/pubSubConnection.json
new file mode 100644
index 000000000000..0c8191262667
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/messaging/pubSubConnection.json
@@ -0,0 +1,74 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/messaging/pubSubConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "PubSubConnection",
+ "description": "Google Cloud Pub/Sub Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.messaging.PubSubConnection",
+ "definitions": {
+ "pubSubType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["PubSub"],
+ "default": "PubSub"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/pubSubType",
+ "default": "PubSub"
+ },
+ "gcpConfig": {
+ "title": "GCP Credentials Configuration",
+ "description": "GCP credentials configuration for authenticating with Pub/Sub.",
+ "$ref": "../../../../security/credentials/gcpCredentials.json"
+ },
+ "projectId": {
+ "title": "GCP Project ID",
+ "description": "GCP Project ID where Pub/Sub topics are located. If not specified, will be read from credentials.",
+ "type": "string"
+ },
+ "hostPort": {
+ "title": "Host and Port",
+ "description": "Pub/Sub APIs URL. For local testing with the emulator, use http://localhost:8085.",
+ "type": "string",
+ "default": "pubsub.googleapis.com"
+ },
+ "useEmulator": {
+ "title": "Use Emulator",
+ "description": "Connect to a Pub/Sub emulator rather than the production service.",
+ "type": "boolean",
+ "default": false
+ },
+ "schemaRegistryEnabled": {
+ "title": "Enable Schema Registry",
+ "description": "Enable fetching schemas from Pub/Sub Schema Registry.",
+ "type": "boolean",
+ "default": true
+ },
+ "includeSubscriptions": {
+ "title": "Include Subscriptions",
+ "description": "Include subscription metadata for each topic.",
+ "type": "boolean",
+ "default": true
+ },
+ "includeDeadLetterTopics": {
+ "title": "Include Dead Letter Topics",
+ "description": "Include dead letter topics in metadata extraction.",
+ "type": "boolean",
+ "default": false
+ },
+ "topicFilterPattern": {
+ "description": "Regex to only fetch topics that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Topic Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/messaging/pulsarConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/messaging/pulsarConnection.json
new file mode 100644
index 000000000000..5e53bae7d027
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/messaging/pulsarConnection.json
@@ -0,0 +1,34 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/messaging/pulsarConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "PulsarConnection",
+ "description": "Pulsar Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.messaging.PulsarConnection",
+ "definitions": {
+ "pulsarType": {
+ "description": "Pulsar service type",
+ "type": "string",
+ "enum": ["Pulsar"],
+ "default": "Pulsar"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/pulsarType",
+ "default": "Pulsar"
+ },
+ "topicFilterPattern": {
+ "description": "Regex to only fetch topics that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Topic Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/messaging/redpandaConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/messaging/redpandaConnection.json
new file mode 100644
index 000000000000..912d65772ae0
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/messaging/redpandaConnection.json
@@ -0,0 +1,96 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/messaging/RedpandaConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "RedpandaConnection",
+ "description": "Redpanda Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.messaging.RedpandaConnection",
+ "definitions": {
+ "RedpandaType": {
+ "description": "Redpanda service type",
+ "type": "string",
+ "enum": ["Redpanda"],
+ "default": "Redpanda"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/RedpandaType",
+ "default": "Redpanda"
+ },
+ "bootstrapServers": {
+ "title": "Bootstrap Servers",
+ "description": "Redpanda bootstrap servers. add them in comma separated values ex: host1:9092,host2:9092",
+ "type": "string"
+ },
+ "schemaRegistryURL": {
+ "title": "Schema Registry URL",
+ "description": "Confluent Redpanda Schema Registry URL.",
+ "type": "string",
+ "format": "uri"
+ },
+ "saslUsername": {
+ "title": "SASL Username",
+ "description": "sasl.username consumer config property",
+ "type": "string"
+ },
+ "saslPassword": {
+ "title": "SASL Password",
+ "description": "sasl.password consumer config property",
+ "type": "string",
+ "format": "password"
+ },
+ "schemaRegistryTopicSuffixName": {
+ "title": "Schema Registry Topic Suffix Name",
+ "description": "Schema Registry Topic Suffix Name. The suffix to be appended to the topic name to get topic schema from registry.",
+ "type": "string",
+ "default": "-value"
+ },
+ "securityProtocol": {
+ "title": "Security Protocol",
+ "description": "security.protocol consumer config property",
+ "type": "string",
+ "enum": ["PLAINTEXT","SASL_PLAINTEXT","SASL_SSL","SSL"],
+ "default": "PLAINTEXT"
+ },
+ "saslMechanism": {
+ "title": "SASL Mechanism",
+ "description": "sasl.mechanism Consumer Config property",
+ "$ref": "saslMechanismType.json",
+ "default": "PLAIN"
+ },
+ "basicAuthUserInfo": {
+ "title": "Schema Registry Basic Auth User Info",
+ "description": "basic.auth.user.info schema registry config property, Client HTTP credentials in the form of username:password.",
+ "type": "string",
+ "format": "password"
+ },
+ "consumerConfig": {
+ "title": "Consumer Config",
+ "description": "Confluent Redpanda Consumer Config",
+ "type": "object",
+ "default": {},
+ "additionalProperties": true
+ },
+ "schemaRegistryConfig": {
+ "title": "Schema Registry Config",
+ "description": "Confluent Redpanda Schema Registry Config.",
+ "type": "object",
+ "default": {},
+ "additionalProperties": true
+ },
+ "topicFilterPattern": {
+ "description": "Regex to only fetch topics that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Topic Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["bootstrapServers"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/messaging/saslMechanismType.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/messaging/saslMechanismType.json
new file mode 100644
index 000000000000..d17bdca4dbde
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/messaging/saslMechanismType.json
@@ -0,0 +1,12 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/messaging/saslMechanismType.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SaslMechanismType",
+ "javaType": "org.openmetadata.schema.services.connections.messaging.SaslMechanismType",
+ "description": "SASL Mechanism consumer config property",
+ "type": "string",
+ "enum": ["PLAIN", "GSSAPI", "SCRAM-SHA-256", "SCRAM-SHA-512", "OAUTHBEARER"],
+ "default": "PLAIN"
+}
+
+
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/metadata/alationConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/metadata/alationConnection.json
new file mode 100644
index 000000000000..8a2264c93077
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/metadata/alationConnection.json
@@ -0,0 +1,146 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/metadata/AlationConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AlationConnection",
+ "description": "Alation Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.metadata.AlationConnection",
+ "definitions": {
+ "alationType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["Alation"],
+ "default": "Alation"
+ }
+ },
+ "properties": {
+ "type": {
+ "description": "Service Type",
+ "$ref": "#/definitions/alationType",
+ "default": "Alation"
+ },
+ "hostPort": {
+ "description": "Host and port of the Alation service.",
+ "title": "Host and Port",
+ "type": "string",
+ "format": "uri",
+ "expose": true
+ },
+ "authType": {
+ "mask": true,
+ "title": "Authentication type for Alation",
+ "description": "Types of methods used to authenticate to the alation instance",
+ "oneOf": [
+ {
+ "$ref": "../../../../security/credentials/basicAuth.json"
+ },
+ {
+ "$ref": "../../../../security/credentials/apiAccessTokenAuth.json"
+ }
+ ]
+ },
+ "connection":{
+ "title": "Alation Database Connection",
+ "description": "Choose between mysql and postgres connection for alation database",
+ "oneOf": [
+ {
+ "$ref": "../database/postgresConnection.json"
+ },
+ {
+ "$ref": "../database/mysqlConnection.json"
+ },
+ {
+ "title": "None",
+ "type": "object",
+ "additionalProperties": false
+ }
+ ]
+ },
+ "projectName": {
+ "title": "Project Name",
+ "description": "Project name to create the refreshToken. Can be anything",
+ "type": "string",
+ "default": "AlationAPI"
+ },
+ "paginationLimit": {
+ "title": "Pagination Limit",
+ "description": "Pagination limit used for Alation APIs pagination",
+ "type": "integer",
+ "default": 10
+ },
+ "includeUndeployedDatasources": {
+ "title": "Include Undeployed Datasources",
+ "description": "Specifies if undeployed datasources should be included while ingesting.",
+ "type": "boolean",
+ "default": false
+ },
+ "includeHiddenDatasources": {
+ "title": "Include Hidden Datasources",
+ "description": "Specifies if hidden datasources should be included while ingesting.",
+ "type": "boolean",
+ "default": false
+ },
+ "ingestDatasources": {
+ "title": "Ingest Datasources",
+ "description": "Specifies if Datasources are to be ingested while running the ingestion job.",
+ "type": "boolean",
+ "default": true
+ },
+ "ingestUsersAndGroups": {
+ "title": "Ingest Users and Groups",
+ "description": "Specifies if Users and Groups are to be ingested while running the ingestion job.",
+ "type": "boolean",
+ "default": true
+ },
+ "ingestDomains": {
+ "title": "Ingest Domains",
+ "description": "Specifies if Domains are to be ingested while running the ingestion job.",
+ "type": "boolean",
+ "default": true
+ },
+ "ingestKnowledgeArticles": {
+ "title": "Ingest Knowledge Articles",
+ "description": "Specifies if Knowledge Articles are to be ingested while running the ingestion job.",
+ "type": "boolean",
+ "default": true
+ },
+ "ingestDashboards": {
+ "title": "Ingest Dashboards",
+ "description": "Specifies if Dashboards are to be ingested while running the ingestion job.",
+ "type": "boolean",
+ "default": true
+ },
+ "alationTagClassificationName": {
+ "title": "Alation Tags Classification Name",
+ "description": "Custom OpenMetadata Classification name for alation tags.",
+ "type": "string",
+ "default": "alationTags"
+ },
+ "connectionOptions": {
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "schemaFilterPattern":{
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "required": ["hostPort", "authType"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/metadata/alationSinkConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/metadata/alationSinkConnection.json
new file mode 100644
index 000000000000..bdadf48b4bc0
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/metadata/alationSinkConnection.json
@@ -0,0 +1,99 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/metadata/AlationSinkConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AlationSinkConnection",
+ "description": "Alation Sink Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.metadata.AlationSinkConnection",
+ "definitions": {
+ "alationSinkType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["AlationSink"],
+ "default": "AlationSink"
+ },
+ "datasourceLinks": {
+ "title": "Datasource Links",
+ "description": "Add the links between alation datasources and OpenMetadata Database services",
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ }
+ },
+ "properties": {
+ "type": {
+ "description": "Service Type",
+ "$ref": "#/definitions/alationSinkType",
+ "default": "AlationSink"
+ },
+ "hostPort": {
+ "description": "Host and port of the Alation service.",
+ "title": "Host and Port",
+ "type": "string",
+ "format": "uri",
+ "expose": true
+ },
+ "authType": {
+ "mask": true,
+ "title": "Authentication type for Alation",
+ "description": "Types of methods used to authenticate to the alation instance",
+ "oneOf": [
+ {
+ "$ref": "../../../../security/credentials/basicAuth.json"
+ },
+ {
+ "$ref": "../../../../security/credentials/apiAccessTokenAuth.json"
+ }
+ ]
+ },
+ "projectName": {
+ "title": "Project Name",
+ "description": "Project name to create the refreshToken. Can be anything",
+ "type": "string",
+ "default": "AlationAPI"
+ },
+ "paginationLimit": {
+ "title": "Pagination Limit",
+ "description": "Pagination limit used for Alation APIs pagination",
+ "type": "integer",
+ "default": 10
+ },
+ "datasourceLinks": {
+ "$ref": "#/definitions/datasourceLinks"
+ },
+ "verifySSL": {
+ "$ref": "../../../../security/ssl/verifySSLConfig.json#/definitions/verifySSL",
+ "default": "no-ssl"
+ },
+ "sslConfig": {
+ "$ref": "../../../../security/ssl/verifySSLConfig.json#/definitions/sslConfig"
+ },
+ "connectionOptions": {
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "schemaFilterPattern":{
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "required": ["hostPort", "authType"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/metadata/amundsenConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/metadata/amundsenConnection.json
new file mode 100644
index 000000000000..781ef5cfedc3
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/metadata/amundsenConnection.json
@@ -0,0 +1,74 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/metadata/amundsenConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AmundsenConnection",
+ "description": "Amundsen Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.metadata.AmundsenConnection",
+ "definitions": {
+ "amundsenType": {
+ "description": "Amundsen service type",
+ "type": "string",
+ "enum": ["Amundsen"],
+ "default": "Amundsen"
+ }
+ },
+ "properties": {
+ "type": {
+ "description": "Service Type",
+ "$ref": "#/definitions/amundsenType",
+ "default": "Amundsen"
+ },
+ "username": {
+ "description": "username to connect to the Amundsen Neo4j Connection.",
+ "type": "string"
+ },
+ "password": {
+ "description": "password to connect to the Amundsen Neo4j Connection.",
+ "type": "string",
+ "format": "password"
+ },
+ "hostPort": {
+ "expose": true,
+ "title": "Host and Port",
+ "description": "Host and port of the Amundsen Neo4j Connection. This expect a URI format like: bolt://localhost:7687.",
+ "type": "string",
+ "format": "uri"
+ },
+ "maxConnectionLifeTime": {
+ "description": "Maximum connection lifetime for the Amundsen Neo4j Connection.",
+ "type": "integer",
+ "default": 50
+ },
+ "validateSSL": {
+ "description": "Enable SSL validation for the Amundsen Neo4j Connection.",
+ "type": "boolean",
+ "default": false
+ },
+ "encrypted": {
+ "description": "Enable encryption for the Amundsen Neo4j Connection.",
+ "type": "boolean",
+ "default": false
+ },
+ "schemaFilterPattern":{
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "required": ["username", "password", "hostPort"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/metadata/atlasConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/metadata/atlasConnection.json
new file mode 100644
index 000000000000..8ead18f08a96
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/metadata/atlasConnection.json
@@ -0,0 +1,84 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/metadata/atlasConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AtlasConnection",
+ "description": "Atlas Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.metadata.AtlasConnection",
+ "definitions": {
+ "atlasType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["Atlas"],
+ "default": "Atlas"
+ }
+ },
+ "properties": {
+ "type": {
+ "description": "Service Type",
+ "$ref": "#/definitions/atlasType",
+ "default": "Atlas"
+ },
+ "username": {
+ "description": "username to connect to the Atlas. This user should have privileges to read all the metadata in Atlas.",
+ "type": "string"
+ },
+ "password": {
+ "description": "password to connect to the Atlas.",
+ "type": "string",
+ "format": "password"
+ },
+ "hostPort": {
+ "description": "Host and port of the Atlas service.",
+ "title": "Host and Port",
+ "type": "string",
+ "format": "uri",
+ "expose": true
+ },
+ "databaseServiceName": {
+ "description": "service type of the data source.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "messagingServiceName": {
+ "description": "service type of the messaging source",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "entity_type": {
+ "title": "Entity Type",
+ "description": "Name of the Entity Type available in Atlas.",
+ "type": "string"
+ },
+ "connectionOptions": {
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "schemaFilterPattern":{
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "required": ["entity_type", "username", "password"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/metadata/collibraConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/metadata/collibraConnection.json
new file mode 100644
index 000000000000..da38dc8ad1e0
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/metadata/collibraConnection.json
@@ -0,0 +1,66 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/metadata/collibraConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CollibraConnection",
+ "description": "Collibra Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.metadata.CollibraConnection",
+ "definitions": {
+ "collibraType": {
+ "description": "Collibra service type",
+ "type": "string",
+ "enum": ["Collibra"],
+ "default": "Collibra"
+ }
+ },
+ "properties": {
+ "type": {
+ "description": "Service Type",
+ "$ref": "#/definitions/collibraType",
+ "default": "Collibra"
+ },
+ "username": {
+ "description": "Username to connect to the Collibra. This user should have privileges to read all the metadata in Collibra.",
+ "type": "string"
+ },
+ "password": {
+ "description": "Password to connect to the Collibra.",
+ "type": "string",
+ "format": "password"
+ },
+ "hostPort": {
+ "expose": true,
+ "title": "Host and Port",
+ "description": "Host and port of the Collibra service.",
+ "type": "string",
+ "format": "uri"
+ },
+ "glossaryFilterPattern": {
+ "title": "Glossary Filter Pattern",
+ "description": "Regex to only include/exclude glossaries that match the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "domainFilterPattern": {
+ "title": "Domain Filter Pattern",
+ "description": "Regex to only include/exclude domains that match the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "enableEnrichment": {
+ "title": "Enable Asset Enrichment",
+ "description": "Enable enrichment of existing OpenMetadata assets with Collibra metadata (descriptions, tags, owners). When enabled, the connector will match Collibra assets to OpenMetadata entities and apply metadata without creating new assets.",
+ "type": "boolean",
+ "default": false
+ },
+ "connectionOptions": {
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "supportsMetadataExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "required": ["username", "password", "hostPort"],
+ "additionalProperties": false
+ }
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/metadata/metadataESConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/metadata/metadataESConnection.json
new file mode 100644
index 000000000000..d0737b03ef5a
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/metadata/metadataESConnection.json
@@ -0,0 +1,87 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/metadata/metadataESConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "MetadataESConnection",
+ "description": "Metadata to ElasticSearch Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.metadata.MetadataESConnection",
+ "definitions": {
+ "metadataESType": {
+ "description": "Metadata to Elastic Search type",
+ "type": "string",
+ "enum": [
+ "MetadataES"
+ ],
+ "default": "MetadataES"
+ }
+ },
+ "properties": {
+ "type": {
+ "description": "Service Type",
+ "$ref": "#/definitions/metadataESType",
+ "default": "MetadataES"
+ },
+ "entities": {
+ "title": "Entities",
+ "description": "List of entities that you need to reindex",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "default": [
+ "table",
+ "topic",
+ "dashboard",
+ "pipeline",
+ "mlmodel",
+ "user",
+ "team",
+ "glossaryTerm",
+ "tag",
+ "entityReportData",
+ "webAnalyticEntityViewReportData",
+ "webAnalyticUserActivityReportData",
+ "container",
+ "query"
+ ],
+ "uniqueItems": true
+ },
+ "recreateIndex": {
+ "title": "Recreate Indexes",
+ "type": "boolean",
+ "default": true
+ },
+ "runMode": {
+ "$ref": "../../../../system/eventPublisherJob.json#/definitions/runMode"
+ },
+ "searchIndexMappingLanguage": {
+ "description": "Recreate Indexes with updated Language",
+ "$ref": "../../../../configuration/elasticSearchConfiguration.json#/definitions/searchIndexMappingLanguage"
+ },
+ "batchSize": {
+ "title": "Batch Size",
+ "description": "Maximum number of events sent in a batch (Default 100).",
+ "type": "integer",
+ "default": 100
+ },
+ "schemaFilterPattern":{
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/metadata/openMetadataConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/metadata/openMetadataConnection.json
new file mode 100644
index 000000000000..a59e3cb9ea2d
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/metadata/openMetadataConnection.json
@@ -0,0 +1,220 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/metadata/openMetadataConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "OpenMetadataConnection",
+ "description": "OpenMetadata Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.metadata.OpenMetadataConnection",
+ "definitions": {
+ "openmetadataType": {
+ "description": "OpenMetadata service type",
+ "type": "string",
+ "enum": ["OpenMetadata"],
+ "default": "OpenMetadata"
+ },
+ "extraHeaders": {
+ "description": "Additional headers to be sent to the API endpoint.",
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "authProvider": {
+ "javaType": "org.openmetadata.schema.services.connections.metadata.AuthProvider",
+ "description": "OpenMetadata Server Authentication Provider. Make sure configure same auth providers as the one configured on OpenMetadata server.",
+ "type": "string",
+ "enum": [
+ "basic",
+ "azure",
+ "google",
+ "okta",
+ "auth0",
+ "aws-cognito",
+ "custom-oidc",
+ "ldap",
+ "saml",
+ "openmetadata"
+ ],
+ "default": "basic"
+ }
+ },
+ "properties": {
+ "clusterName": {
+ "description": "Cluster name to differentiate OpenMetadata Server instance",
+ "type": "string",
+ "default": "openmetadata"
+ },
+ "type": {
+ "description": "Service Type",
+ "$ref": "#/definitions/openmetadataType",
+ "default": "OpenMetadata"
+ },
+ "hostPort": {
+ "description": "OpenMetadata Server Config. Must include API end point ex: http://localhost:8585/api",
+ "type": "string",
+ "default": "http://localhost:8585/api"
+ },
+ "authProvider": {
+ "description": "OpenMetadata Server Authentication Provider.",
+ "$ref": "#/definitions/authProvider"
+ },
+ "verifySSL": {
+ "description": "Flag to verify SSL Certificate for OpenMetadata Server.",
+ "$ref": "../../../../security/ssl/verifySSLConfig.json#/definitions/verifySSL",
+ "default": "no-ssl"
+ },
+ "sslConfig": {
+ "description": "SSL Configuration for OpenMetadata Server",
+ "$ref": "../../../../security/ssl/verifySSLConfig.json#/definitions/sslConfig"
+ },
+ "securityConfig": {
+ "mask": true,
+ "description": "OpenMetadata Client security configuration.",
+ "$ref": "../../../../security/client/openMetadataJWTClientConfig.json"
+ },
+ "secretsManagerProvider": {
+ "description": "Secrets Manager Provider for OpenMetadata Server.",
+ "$ref": "./../../../../security/secrets/secretsManagerProvider.json",
+ "default": "db"
+ },
+ "secretsManagerLoader": {
+ "description": "Secrets Manager Loader for the Pipeline Service Client.",
+ "$ref": "./../../../../security/secrets/secretsManagerClientLoader.json",
+ "default": "noop"
+ },
+ "apiVersion": {
+ "description": "OpenMetadata server API version to use.",
+ "type": "string",
+ "default": "v1"
+ },
+ "includeTopics": {
+ "description": "Include Topics for Indexing",
+ "type": "boolean",
+ "default": true
+ },
+ "includeTables": {
+ "description": "Include Tables for Indexing",
+ "type": "boolean",
+ "default": true
+ },
+ "includeDashboards": {
+ "description": "Include Dashboards for Indexing",
+ "type": "boolean",
+ "default": true
+ },
+ "includePipelines": {
+ "description": "Include Pipelines for Indexing",
+ "type": "boolean",
+ "default": true
+ },
+ "includeMlModels": {
+ "description": "Include MlModels for Indexing",
+ "type": "boolean",
+ "default": true
+ },
+ "includeUsers": {
+ "description": "Include Users for Indexing",
+ "type": "boolean",
+ "default": true
+ },
+ "includeTeams": {
+ "description": "Include Teams for Indexing",
+ "type": "boolean",
+ "default": true
+ },
+ "includeGlossaryTerms": {
+ "description": "Include Glossary Terms for Indexing",
+ "type": "boolean",
+ "default": true
+ },
+ "includeTags": {
+ "description": "Include Tags for Indexing",
+ "type": "boolean",
+ "default": true
+ },
+ "includePolicy": {
+ "description": "Include Tags for Policy",
+ "type": "boolean",
+ "default": true
+ },
+ "includeMessagingServices": {
+ "description": "Include Messaging Services for Indexing",
+ "type": "boolean",
+ "default": true
+ },
+ "enableVersionValidation": {
+ "description": "Validate Openmetadata Server & Client Version.",
+ "type": "boolean",
+ "default": true
+ },
+ "includeDatabaseServices": {
+ "description": "Include Database Services for Indexing",
+ "type": "boolean",
+ "default": true
+ },
+ "includePipelineServices": {
+ "description": "Include Pipeline Services for Indexing",
+ "type": "boolean",
+ "default": true
+ },
+ "limitRecords": {
+ "description": "Limit the number of records for Indexing.",
+ "type": "integer",
+ "default": 1000
+ },
+ "forceEntityOverwriting": {
+ "description": "Force the overwriting of any entity during the ingestion.",
+ "type": "boolean",
+ "default": false
+ },
+ "storeServiceConnection": {
+ "description": "If set to true, when creating a service during the ingestion we will store its Service Connection. Otherwise, the ingestion will create a bare service without connection details.",
+ "type": "boolean",
+ "default": true
+ },
+ "elasticsSearch": {
+ "description": "Configuration for Sink Component in the OpenMetadata Ingestion Framework.",
+ "type": "object",
+ "properties": {
+ "type": {
+ "description": "Type of sink component ex: metadata",
+ "type": "string"
+ },
+ "config": {
+ "$ref": "../../../../type/basic.json#/definitions/componentConfig"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["type"]
+ },
+ "schemaFilterPattern":{
+ "title": "Default Schema Filter Pattern",
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "tableFilterPattern": {
+ "title": "Default Table Filter Pattern",
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "databaseFilterPattern": {
+ "title": "Default Database Filter Pattern",
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsDataInsightExtraction": {
+ "description": "Flag to enable Data Insight Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsDataInsightExtraction"
+ },
+ "supportsElasticSearchReindexingExtraction": {
+ "description": "Flag to enable ElasticSearch Reindexing Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsElasticSearchReindexingExtraction"
+ },
+ "extraHeaders": {
+ "title": "Extra Headers",
+ "$ref": "#/definitions/extraHeaders"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["hostPort"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/mlmodel/customMlModelConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/mlmodel/customMlModelConnection.json
new file mode 100644
index 000000000000..b49ba4f4f2b2
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/mlmodel/customMlModelConnection.json
@@ -0,0 +1,45 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/mlmodel/customMlModelConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CustomMlModelConnection",
+ "description": "Custom MlModel Service connection to build a source that is not supported by OpenMetadata yet.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.mlmodel.CustomMlModelConnection",
+ "definitions": {
+ "customMlModelType": {
+ "title": "Service Type",
+ "description": "Custom Ml model service type",
+ "type": "string",
+ "enum": ["CustomMlModel"],
+ "default": "CustomMlModel"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Custom Ml model service type",
+ "$ref": "#/definitions/customMlModelType",
+ "default": "CustomMlModel"
+ },
+ "sourcePythonClass": {
+ "title": "Source Python Class Name",
+ "description": "Source Python Class Name to instantiated by the ingestion workflow",
+ "type": "string"
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "mlModelFilterPattern": {
+ "description": "Regex to only fetch MlModels with names matching the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default ML Model Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": true,
+ "required": ["type"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/mlmodel/mlflowConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/mlmodel/mlflowConnection.json
new file mode 100644
index 000000000000..2ae8e7c8941e
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/mlmodel/mlflowConnection.json
@@ -0,0 +1,45 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/mlmodel/mlflowConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "MlflowConnection",
+ "description": "MlFlow Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.mlmodel.MlflowConnection",
+ "definitions": {
+ "mlflowType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["Mlflow"],
+ "default": "Mlflow"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/mlflowType",
+ "default": "Mlflow"
+ },
+ "trackingUri": {
+ "title": "Tracking URI",
+ "description": "Mlflow Experiment tracking URI. E.g., http://localhost:5000",
+ "type": "string"
+ },
+ "registryUri": {
+ "title": "Registry URI",
+ "description": "Mlflow Model registry backend. E.g., mysql+pymysql://mlflow:password@localhost:3307/experiments",
+ "type": "string"
+ },
+ "mlModelFilterPattern": {
+ "description": "Regex to only fetch MlModels with names matching the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default ML Model Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["trackingUri", "registryUri"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/mlmodel/sageMakerConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/mlmodel/sageMakerConnection.json
new file mode 100644
index 000000000000..ecac9aab7ec8
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/mlmodel/sageMakerConnection.json
@@ -0,0 +1,39 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/mlmodel/sageMakerConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SageMakerConnection",
+ "description": "SageMaker Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.mlmodel.SageMakerConnection",
+ "definitions": {
+ "sageMakerType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["SageMaker"],
+ "default": "SageMaker"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/sageMakerType",
+ "default": "SageMaker"
+ },
+ "awsConfig": {
+ "title": "AWS Credentials Configuration",
+ "$ref": "../../../../security/credentials/awsCredentials.json"
+ },
+ "mlModelFilterPattern": {
+ "description": "Regex to only fetch MlModels with names matching the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default ML Model Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["awsConfig"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/mlmodel/sklearnConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/mlmodel/sklearnConnection.json
new file mode 100644
index 000000000000..5e726265581c
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/mlmodel/sklearnConnection.json
@@ -0,0 +1,34 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/mlmodel/sklearnConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SklearnConnection",
+ "description": "Sklearn Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.mlmodel.SklearnConnection",
+ "definitions": {
+ "sklearnType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["Sklearn"],
+ "default": "Sklearn"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/sklearnType",
+ "default": "Sklearn"
+ },
+ "mlModelFilterPattern": {
+ "description": "Regex to only fetch MlModels with names matching the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default ML Model Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/mlmodel/vertexaiConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/mlmodel/vertexaiConnection.json
new file mode 100644
index 000000000000..4838ce33b7f5
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/mlmodel/vertexaiConnection.json
@@ -0,0 +1,47 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/mlmodel/vertexaiConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "VertexAIConnection",
+ "description": "Google VertexAI Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.mlmodel.VertexAIConnection",
+ "definitions": {
+ "vertexAIType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["VertexAI"],
+ "default": "VertexAI"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/vertexAIType",
+ "default": "VertexAI"
+ },
+ "credentials": {
+ "title": "GCP Credentials",
+ "description": "GCP Credentials",
+ "$ref": "../../../../security/credentials/gcpCredentials.json"
+ },
+ "location": {
+ "title": "Project location",
+ "description": "location/region of google cloud project",
+ "type": "string"
+ },
+ "mlModelFilterPattern": {
+ "description": "Regex to only fetch MlModels with names matching the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default ML Model Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "credentials", "location"
+ ]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/airbyte/basicAuth.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/airbyte/basicAuth.json
new file mode 100644
index 000000000000..26bcccae03dd
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/airbyte/basicAuth.json
@@ -0,0 +1,22 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/pipeline/airbyte/basicAuth.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Basic Authentication",
+ "description": "Username and password authentication",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.pipeline.airbyte.BasicAuth",
+ "properties": {
+ "username": {
+ "title": "Username",
+ "description": "Username to connect to Airbyte.",
+ "type": "string"
+ },
+ "password": {
+ "title": "Password",
+ "description": "Password to connect to Airbyte.",
+ "type": "string",
+ "format": "password"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/airbyte/oauthClientAuth.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/airbyte/oauthClientAuth.json
new file mode 100644
index 000000000000..7324572d2b52
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/airbyte/oauthClientAuth.json
@@ -0,0 +1,23 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/pipeline/airbyte/oauthClientAuth.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "OAuth 2.0 Client Credentials Authentication",
+ "description": "OAuth 2.0 client credentials authentication for Airbyte Cloud",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.pipeline.airbyte.OAuthClientAuth",
+ "properties": {
+ "clientId": {
+ "title": "Client ID",
+ "description": "Client ID for the application registered in Airbyte.",
+ "type": "string"
+ },
+ "clientSecret": {
+ "title": "Client Secret",
+ "description": "Client Secret for the application registered in Airbyte.",
+ "type": "string",
+ "format": "password"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["clientId", "clientSecret"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/airbyteConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/airbyteConnection.json
new file mode 100644
index 000000000000..4af61ced2310
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/airbyteConnection.json
@@ -0,0 +1,65 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/pipeline/airbyteConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AirbyteConnection",
+ "description": "Airbyte Metadata Database Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.pipeline.AirbyteConnection",
+ "definitions": {
+ "AirbyteType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": [
+ "Airbyte"
+ ],
+ "default": "Airbyte"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/AirbyteType",
+ "default": "Airbyte"
+ },
+ "hostPort": {
+ "expose": true,
+ "description": "Pipeline Service Management/UI URL.",
+ "type": "string",
+ "format": "uri"
+ },
+ "auth": {
+ "title": "Authentication",
+ "description": "Choose between Basic authentication (for self-hosted) or OAuth 2.0 client credentials (for Airbyte Cloud)",
+ "oneOf": [
+ {
+ "title": "Basic Authentication",
+ "$ref": "./airbyte/basicAuth.json"
+ },
+ {
+ "title": "OAuth 2.0 Client Credentials Authentication",
+ "$ref": "./airbyte/oauthClientAuth.json"
+ }
+ ]
+ },
+ "apiVersion": {
+ "title": "API Version",
+ "description": "Airbyte API version.",
+ "type": "string",
+ "default": "api/v1"
+ },
+ "pipelineFilterPattern": {
+ "description": "Regex exclude pipelines.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Pipeline Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "hostPort"
+ ]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/airflowConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/airflowConnection.json
new file mode 100644
index 000000000000..6f72f1eeb367
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/airflowConnection.json
@@ -0,0 +1,68 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/pipeline/airflowConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AirflowConnection",
+ "description": "Airflow Metadata Database Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.pipeline.AirflowConnection",
+ "definitions": {
+ "AirflowType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["Airflow"],
+ "default": "Airflow"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/AirflowType",
+ "default": "Airflow"
+ },
+ "hostPort": {
+ "expose": true,
+ "title": "Host And Port",
+ "description": "Pipeline Service Management/UI URI.",
+ "type": "string",
+ "format": "uri"
+ },
+ "numberOfStatus": {
+ "description": "Pipeline Service Number Of Status",
+ "type": "integer",
+ "default": "10"
+ },
+ "connection": {
+ "title": "Airflow Connection",
+ "description": "Choose between database connection or REST API connection to fetch metadata from Airflow.",
+ "oneOf": [
+ {
+ "$ref": "../../../utils/airflowRestApiConnection.json"
+ },
+ {
+ "$ref": "backendConnection.json"
+ },
+ {
+ "$ref": "../database/mysqlConnection.json"
+ },
+ {
+ "$ref": "../database/postgresConnection.json"
+ },
+ {
+ "$ref": "../database/sqliteConnection.json"
+ }
+ ]
+ },
+ "pipelineFilterPattern": {
+ "description": "Regex exclude pipelines.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Pipeline Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["hostPort", "connection"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/backendConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/backendConnection.json
new file mode 100644
index 000000000000..7afd479bade9
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/backendConnection.json
@@ -0,0 +1,30 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/pipeline/backendConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "BackendConnection",
+ "description": "Lineage Backend Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.pipeline.BackendConnection",
+ "definitions": {
+ "BackendType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["Backend"],
+ "default": "Backend"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/BackendType",
+ "default": "Backend"
+ },
+ "pipelineFilterPattern": {
+ "description": "Regex exclude pipelines.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Pipeline Filter Pattern"
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/customPipelineConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/customPipelineConnection.json
new file mode 100644
index 000000000000..e59439f9ef81
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/customPipelineConnection.json
@@ -0,0 +1,45 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/pipeline/customPipelineConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CustomPipelineConnection",
+ "description": "Custom Pipeline Service connection to build a source that is not supported by OpenMetadata yet.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.pipeline.CustomPipelineConnection",
+ "definitions": {
+ "customPipelineType": {
+ "title": "Service Type",
+ "description": "Custom pipeline service type",
+ "type": "string",
+ "enum": ["CustomPipeline"],
+ "default": "CustomPipeline"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Custom pipeline service type",
+ "$ref": "#/definitions/customPipelineType",
+ "default": "CustomPipeline"
+ },
+ "sourcePythonClass": {
+ "title": "Source Python Class Name",
+ "description": "Source Python Class Name to instantiated by the ingestion workflow",
+ "type": "string"
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "pipelineFilterPattern": {
+ "description": "Regex exclude pipelines.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Pipeline Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": true,
+ "required": ["type"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/dagsterConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/dagsterConnection.json
new file mode 100644
index 000000000000..fe8d2f1ad784
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/dagsterConnection.json
@@ -0,0 +1,60 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/pipeline/dagsterConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DagsterConnection",
+ "description": "Dagster Metadata Database Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.pipeline.DagsterConnection",
+ "definitions": {
+ "DagsterType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["Dagster"],
+ "default": "Dagster"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/DagsterType",
+ "default": "Dagster"
+ },
+ "host": {
+ "title": "Host",
+ "description": "URL to the Dagster instance",
+ "type": "string",
+ "format": "uri"
+ },
+ "token": {
+ "title": "Token",
+ "description": "To Connect to Dagster Cloud",
+ "type": "string",
+ "format": "password"
+ },
+ "timeout": {
+ "title": "Time Out",
+ "description": "Connection Time Limit Between OM and Dagster Graphql API in second",
+ "type": "integer",
+ "default": "1000"
+ },
+ "stripAssetKeyPrefixLength": {
+ "title": "Strip Asset Key Prefix Length",
+ "description": "Number of leading segments to remove from asset key paths before resolving to tables. For example, if your asset keys follow the pattern 'project/environment/schema/table' but you only need 'schema/table', set this to 2.",
+ "type": "integer",
+ "default": 0,
+ "minimum": 0
+ },
+ "pipelineFilterPattern": {
+ "description": "Regex exclude pipelines.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Pipeline Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["host"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/databricksPipelineConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/databricksPipelineConnection.json
new file mode 100644
index 000000000000..223e1b3d7059
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/databricksPipelineConnection.json
@@ -0,0 +1,74 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/pipeline/DatabricksPipelineConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DatabricksPipelineConnection",
+ "description": "Databricks Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.pipeline.DatabricksPipelineConnection",
+ "definitions": {
+ "databricksType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": [
+ "DatabricksPipeline"
+ ],
+ "default": "DatabricksPipeline"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/databricksType",
+ "default": "DatabricksPipeline"
+ },
+ "hostPort": {
+ "title": "Host and Port",
+ "description": "Host and port of the Databricks service.",
+ "type": "string"
+ },
+ "token": {
+ "title": "Token",
+ "description": "Generated Token to connect to Databricks.",
+ "type": "string",
+ "format": "password"
+ },
+ "connectionTimeout": {
+ "title": "Connection Timeout",
+ "description": "Connection timeout in seconds.",
+ "type": "number",
+ "default": 120
+ },
+ "httpPath": {
+ "title": "Http Path",
+ "description": "Databricks compute resources URL.",
+ "type": "string"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "pipelineFilterPattern": {
+ "description": "Regex exclude pipelines.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Pipeline Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ },
+ "lineageLookBackDays": {
+ "title": "Lineage Look Back Days",
+ "description": "Number of days to look back when fetching lineage data from Databricks system tables (system.access.table_lineage and system.access.column_lineage). Default is 90 days.",
+ "type": "integer",
+ "default": 90,
+ "minimum": 1,
+ "maximum": 365
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "hostPort",
+ "token"
+ ]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/datafactoryConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/datafactoryConnection.json
new file mode 100644
index 000000000000..8e9df91f1dec
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/datafactoryConnection.json
@@ -0,0 +1,62 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/pipeline/datafactoryConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DataFactoryConnection",
+ "description": "Azure Data Factory Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.pipeline.DataFactoryConnection",
+ "definitions": {
+ "DataFactoryType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["DataFactory"],
+ "default": "DataFactory"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/DataFactoryType",
+ "default": "DataFactory"
+ },
+ "subscription_id": {
+ "title": "Subscription ID",
+ "description": "The azure subscription identifier.",
+ "type": "string"
+ },
+ "resource_group_name": {
+ "title": "Resource Group name",
+ "description": "The name of your resource group the data factory is associated with.",
+ "type": "string"
+ },
+ "factory_name": {
+ "title": "Azure Data Factory name",
+ "description": "The name of your azure data factory.",
+ "type": "string"
+ },
+ "run_filter_days": {
+ "title": "Azure Data Factory pipeline runs day filter",
+ "description": "Number of days in the past to filter pipeline runs.",
+ "type": "integer",
+ "default": 7
+ },
+ "configSource": {
+ "title": "Azure Data Factory Configuration",
+ "description": "Available sources to fetch metadata.",
+ "$ref": "../../../../security/credentials/azureCredentials.json"
+ },
+ "pipelineFilterPattern": {
+ "description": "Regex exclude pipelines.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Pipeline Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["subscription_id", "resource_group_name", "factory_name"]
+ }
+
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/dbtCloudConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/dbtCloudConnection.json
new file mode 100644
index 000000000000..5fbf7dcb8d1e
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/dbtCloudConnection.json
@@ -0,0 +1,90 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/pipeline/dbtCloudConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DBTCloudConnection",
+ "description": "DBTCloud Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.pipeline.DBTCloudConnection",
+ "definitions": {
+ "DBTCloudType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["DBTCloud"],
+ "default": "DBTCloud"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/DBTCloudType",
+ "default": "DBTCloud"
+ },
+ "host": {
+ "expose": true,
+ "title": "Host",
+ "description": "DBT cloud Access URL.",
+ "type": "string",
+ "format": "uri"
+ },
+ "discoveryAPI": {
+ "expose": true,
+ "title": "Discovery API URL",
+ "description": "DBT cloud Metadata API URL.",
+ "type": "string",
+ "format": "uri"
+ },
+ "accountId": {
+ "title": "Account Id",
+ "description": "ID of your DBT cloud account",
+ "type": "string"
+ },
+ "jobIds": {
+ "title": "Job Ids",
+ "description": "List of IDs of your DBT cloud jobs seperated by comma `,`",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "projectIds": {
+ "title": "Project Ids",
+ "description": "List of IDs of your DBT cloud projects seperated by comma `,`",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "environmentIds": {
+ "title": "Environment Ids",
+ "description": "List of IDs of your DBT cloud environments separated by comma `,`",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "numberOfRuns": {
+ "title": "Number of Runs",
+ "description": "Number of runs to fetch from DBT cloud",
+ "type": "integer",
+ "default": 100
+ },
+ "token": {
+ "title": "Token",
+ "description": "Generated Token to connect to DBTCloud.",
+ "type": "string",
+ "format": "password"
+ },
+ "pipelineFilterPattern": {
+ "description": "Regex exclude pipelines.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Pipeline Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["host", "discoveryAPI", "accountId", "token"]
+ }
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/domoPipelineConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/domoPipelineConnection.json
new file mode 100644
index 000000000000..e0113a2c957c
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/domoPipelineConnection.json
@@ -0,0 +1,66 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/pipeline/domoPipelineConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DomoPipelineConnection",
+ "description": "Domo Pipeline Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.pipeline.DomoPipelineConnection",
+ "definitions": {
+ "DomoPipelineType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["DomoPipeline"],
+ "default": "DomoPipeline"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/DomoPipelineType",
+ "default": "DomoPipeline"
+ },
+ "clientId": {
+ "title": "Client ID",
+ "description": "Client ID for DOMO",
+ "type": "string"
+ },
+ "secretToken": {
+ "title": "Secret Token",
+ "description": "Secret token to connect to DOMO",
+ "type": "string",
+ "format": "password"
+ },
+ "accessToken": {
+ "title": "Access Token",
+ "description": "Access token to connect to DOMO",
+ "type": "string"
+ },
+ "apiHost": {
+ "expose": true,
+ "title": "API Host",
+ "description": "API Host to connect to DOMO instance",
+ "default": "api.domo.com",
+ "type": "string",
+ "format": "string"
+ },
+ "instanceDomain": {
+ "title": "Instance Domain",
+ "description": "URL of your Domo instance, e.g., https://openmetadata.domo.com",
+ "type": "string",
+ "format": "uri"
+ },
+ "pipelineFilterPattern": {
+ "description": "Regex exclude pipelines.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Pipeline Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["clientId","secretToken","instanceDomain"]
+ }
+
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/fivetranConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/fivetranConnection.json
new file mode 100644
index 000000000000..4d129a0266b3
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/fivetranConnection.json
@@ -0,0 +1,60 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/pipeline/fivetranConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "FivetranConnection",
+ "description": "Fivetran Metadata Database Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.pipeline.FivetranConnection",
+ "definitions": {
+ "FivetranType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["Fivetran"],
+ "default": "Fivetran"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/FivetranType",
+ "default": "Fivetran"
+ },
+ "apiKey": {
+ "title": "Fivetran API Key",
+ "description": "Fivetran API Key.",
+ "type": "string"
+ },
+ "hostPort": {
+ "expose": true,
+ "title": "Host And Port",
+ "description": "Pipeline Service Management/UI URI.",
+ "type": "string",
+ "format": "uri",
+ "default": "https://api.fivetran.com"
+ },
+ "apiSecret": {
+ "title": "Fivetran API Secret",
+ "description": "Fivetran API Secret.",
+ "type": "string",
+ "format": "password"
+ },
+ "limit": {
+ "title": "Fivetran API Limit",
+ "description": "Fivetran API Limit For Pagination.",
+ "type": "integer",
+ "default": 1000
+ },
+ "pipelineFilterPattern": {
+ "description": "Regex exclude pipelines.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Pipeline Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["apiKey", "apiSecret"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/flinkConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/flinkConnection.json
new file mode 100644
index 000000000000..e2852a8d5080
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/flinkConnection.json
@@ -0,0 +1,51 @@
+{
+
+ "$id": "https://open-metadata.org/schema/entity/services/connections/pipeline/flinkConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "FlinkConnection",
+ "description": "Flink Metadata Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.pipeline.FlinkConnection",
+ "definitions": {
+ "FlinkType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["Flink"],
+ "default": "Flink"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/FlinkType",
+ "default": "Flink"
+ },
+ "hostPort": {
+ "expose": true,
+ "title": "Host And Port",
+ "description": "Pipeline Service Management/UI URI.",
+ "type": "string",
+ "format": "uri",
+ "default": "https://api.flink.com"
+ },
+ "verifySSL": {
+ "$ref": "../../../../security/ssl/verifySSLConfig.json#/definitions/verifySSL",
+ "default": "no-ssl"
+ },
+ "sslConfig": {
+ "$ref": "../../../../security/ssl/verifySSLConfig.json#/definitions/sslConfig"
+ },
+ "pipelineFilterPattern": {
+ "description": "Regex exclude pipelines.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Pipeline Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["hostPort"]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/gluePipelineConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/gluePipelineConnection.json
new file mode 100644
index 000000000000..44d399478dcf
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/gluePipelineConnection.json
@@ -0,0 +1,39 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/pipeline/glueConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "GluePipelineConnection",
+ "description": "Glue Pipeline Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.pipeline.GluePipelineConnection",
+ "definitions": {
+ "glueType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["GluePipeline"],
+ "default": "GluePipeline"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/glueType",
+ "default": "GluePipeline"
+ },
+ "awsConfig": {
+ "title": "AWS Credentials Configuration",
+ "$ref": "../../../../security/credentials/awsCredentials.json"
+ },
+ "pipelineFilterPattern": {
+ "description": "Regex exclude pipelines.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Pipeline Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["awsConfig"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/kafkaConnectConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/kafkaConnectConnection.json
new file mode 100644
index 000000000000..bd69fe534bb6
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/kafkaConnectConnection.json
@@ -0,0 +1,78 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/pipeline/kafkaConnectConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "KafkaConnectConnection",
+ "description": "KafkaConnect Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.pipeline.KafkaConnectConnection",
+ "definitions": {
+ "KafkaConnectType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["KafkaConnect"],
+ "default": "KafkaConnect"
+ },
+ "basicAuthentication": {
+ "title": "Username/Password Authentication",
+ "description": "username/password auth",
+ "type":"object",
+ "properties": {
+ "username": {
+ "title": "Username",
+ "description": "KafkaConnect user to authenticate to the API.",
+ "type": "string"
+ },
+ "password": {
+ "title": "Password",
+ "description": "KafkaConnect password to authenticate to the API.",
+ "type": "string",
+ "format": "password"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/KafkaConnectType",
+ "default": "KafkaConnect"
+ },
+ "hostPort": {
+ "expose": true,
+ "title": "Host And Port",
+ "description": "KafkaConnect Service Management/UI URI.",
+ "type": "string",
+ "format": "uri"
+ },
+ "KafkaConnectConfig": {
+ "title": "KafkaConnect Credentials Configuration",
+ "description": "We support username/password or No Authentication",
+ "$ref": "#/definitions/basicAuthentication"
+ },
+ "verifySSL": {
+ "title": "Verify SSL",
+ "description": "Boolean marking if we need to verify the SSL certs for KafkaConnect REST API. True by default.",
+ "type": "boolean",
+ "default": true
+ },
+ "messagingServiceName": {
+ "title": "Kafka Service Name",
+ "description": "Name of the Kafka Messaging Service associated with this KafkaConnect Pipeline Service. e.g. local_kafka",
+ "type": "string"
+ },
+ "pipelineFilterPattern": {
+ "description": "Regex exclude pipelines.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Pipeline Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["hostPort"]
+ }
+
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/kinesisFirehoseConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/kinesisFirehoseConnection.json
new file mode 100644
index 000000000000..9c8dc3ad4265
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/kinesisFirehoseConnection.json
@@ -0,0 +1,44 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/pipeline/kinesisFirehoseConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "KinesisFirehoseConnection",
+ "description": "AWS Kinesis Firehose Pipeline Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.pipeline.KinesisFirehoseConnection",
+ "definitions": {
+ "kinesisFirehoseType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["KinesisFirehose"],
+ "default": "KinesisFirehose"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/kinesisFirehoseType",
+ "default": "KinesisFirehose"
+ },
+ "awsConfig": {
+ "title": "AWS Credentials Configuration",
+ "$ref": "../../../../security/credentials/awsCredentials.json"
+ },
+ "messagingServiceName": {
+ "title": "Kafka Service Name",
+ "description": "Name of the Kafka Messaging Service associated with this Firehose Pipeline Service. e.g. local_kafka",
+ "type": "string"
+ },
+ "pipelineFilterPattern": {
+ "description": "Regex exclude pipelines.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Pipeline Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["awsConfig"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/matillion/matillionDPC.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/matillion/matillionDPC.json
new file mode 100644
index 000000000000..1a2f64086bee
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/matillion/matillionDPC.json
@@ -0,0 +1,46 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/pipeline/matillion/matillionDPC.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Matillion DPC Auth Config",
+ "description": "Matillion Data Productivity Cloud Auth Config.",
+ "javaType": "org.openmetadata.schema.services.connections.pipeline.matillion.MatillionDPCAuth",
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "MatillionDPC"
+ ],
+ "default": "MatillionDPC"
+ },
+ "clientId": {
+ "title": "Client ID",
+ "description": "OAuth2 Client ID for Matillion DPC authentication.",
+ "type": "string"
+ },
+ "clientSecret": {
+ "title": "Client Secret",
+ "description": "OAuth2 Client Secret for Matillion DPC authentication.",
+ "type": "string",
+ "format": "password"
+ },
+ "region": {
+ "title": "Region",
+ "description": "Matillion DPC region. Determines the API base URL.",
+ "type": "string",
+ "enum": [
+ "us1",
+ "eu1"
+ ],
+ "default": "us1"
+ },
+ "personalAccessToken": {
+ "title": "Personal Access Token",
+ "description": "Personal Access Token for Matillion DPC. Alternative to OAuth2 Client Credentials.",
+ "type": "string",
+ "format": "password"
+ }
+ },
+ "required": [],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/matillion/matillionETL.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/matillion/matillionETL.json
new file mode 100644
index 000000000000..183cbb45013e
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/matillion/matillionETL.json
@@ -0,0 +1,43 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/pipeline/matillion/matillionETL.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Matillion ETL Auth Config",
+ "description": "Matillion ETL Auth Config.",
+ "javaType": "org.openmetadata.schema.services.connections.pipeline.matillion.MatillionETLAuth",
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "MatillionETL"
+ ],
+ "default": "MatillionETL"
+ },
+ "hostPort": {
+ "type": "string",
+ "title": "Host",
+ "description": "Matillion Host",
+ "default": "localhost"
+ },
+ "username": {
+ "title": "Username",
+ "description": "Username to connect to the Matillion. This user should have privileges to read all the metadata in Matillion.",
+ "type": "string"
+ },
+ "password": {
+ "title": "Password",
+ "description": "Password to connect to the Matillion.",
+ "type": "string",
+ "format": "password"
+ },
+ "sslConfig": {
+ "$ref": "../../../../../security/ssl/verifySSLConfig.json#/definitions/sslConfig"
+ }
+ },
+ "required": [
+ "hostPort",
+ "username",
+ "password"
+ ],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/matillionConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/matillionConnection.json
new file mode 100644
index 000000000000..c283df8b9470
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/matillionConnection.json
@@ -0,0 +1,56 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/pipeline/matillionConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "MatillionConnection",
+ "description": "Matillion Connection",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.pipeline.MatillionConnection",
+ "definitions": {
+ "matillionType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": [
+ "Matillion"
+ ],
+ "default": "Matillion"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/matillionType",
+ "default": "Matillion"
+ },
+ "connection": {
+ "title": "Matillion Connection",
+ "description": "Matillion Auth Configuration",
+ "oneOf": [
+ {
+ "$ref": "matillion/matillionETL.json"
+ },
+ {
+ "$ref": "matillion/matillionDPC.json"
+ }
+ ]
+ },
+ "pipelineFilterPattern": {
+ "description": "Regex exclude pipelines.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Pipeline Filter Pattern"
+ },
+ "lineageLookbackDays": {
+ "title": "Lineage Lookback Days",
+ "description": "Number of days to look back when fetching lineage events from Matillion DPC OpenLineage API.",
+ "type": "integer",
+ "default": 30,
+ "minimum": 1,
+ "maximum": 365
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/microsoftFabricPipelineConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/microsoftFabricPipelineConnection.json
new file mode 100644
index 000000000000..84a2fb681471
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/microsoftFabricPipelineConnection.json
@@ -0,0 +1,62 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/pipeline/microsoftFabricPipelineConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "MicrosoftFabricPipelineConnection",
+ "description": "Microsoft Fabric Data Factory Pipeline Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.pipeline.MicrosoftFabricPipelineConnection",
+ "definitions": {
+ "MicrosoftFabricPipelineType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["MicrosoftFabricPipeline"],
+ "default": "MicrosoftFabricPipeline"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/MicrosoftFabricPipelineType",
+ "default": "MicrosoftFabricPipeline"
+ },
+ "workspaceId": {
+ "title": "Workspace ID",
+ "description": "The Microsoft Fabric workspace ID where the pipelines are located.",
+ "type": "string"
+ },
+ "clientId": {
+ "title": "Client ID",
+ "description": "Azure Application (client) ID for Service Principal authentication.",
+ "type": "string"
+ },
+ "clientSecret": {
+ "title": "Client Secret",
+ "description": "Azure Application client secret for Service Principal authentication.",
+ "type": "string",
+ "format": "password"
+ },
+ "tenantId": {
+ "title": "Tenant ID",
+ "description": "Azure Directory (tenant) ID for Service Principal authentication.",
+ "type": "string"
+ },
+ "authorityUri": {
+ "title": "Authority URI",
+ "description": "Azure Active Directory authority URI. Defaults to https://login.microsoftonline.com/",
+ "type": "string",
+ "default": "https://login.microsoftonline.com/"
+ },
+ "pipelineFilterPattern": {
+ "description": "Regex to only include/exclude pipelines that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Pipeline Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["workspaceId", "clientId", "clientSecret", "tenantId"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/mulesoftConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/mulesoftConnection.json
new file mode 100644
index 000000000000..ed8ff91f0f23
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/mulesoftConnection.json
@@ -0,0 +1,67 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/pipeline/mulesoftConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "MulesoftConnection",
+ "description": "MuleSoft Anypoint Platform Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.pipeline.MulesoftConnection",
+ "definitions": {
+ "MulesoftType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["Mulesoft"],
+ "default": "Mulesoft"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/MulesoftType",
+ "default": "Mulesoft"
+ },
+ "hostPort": {
+ "expose": true,
+ "title": "Host And Port",
+ "description": "MuleSoft Anypoint Platform URL. Use https://anypoint.mulesoft.com for US cloud, https://eu1.anypoint.mulesoft.com for EU cloud, or your on-premises URL.",
+ "type": "string",
+ "format": "uri",
+ "default": "https://anypoint.mulesoft.com"
+ },
+ "authentication": {
+ "title": "Authentication",
+ "description": "Choose between Connected App (OAuth 2.0) or Basic Authentication.",
+ "oneOf": [
+ {
+ "title": "Basic Authentication",
+ "$ref": "../../../../security/credentials/basicAuth.json"
+ },
+ {
+ "title": "OAuth 2.0 Client Credentials (Connected App)",
+ "$ref": "./airbyte/oauthClientAuth.json"
+ }
+ ]
+ },
+ "organizationId": {
+ "title": "Organization ID",
+ "description": "Anypoint Platform Organization ID. If not provided, the connector will use the user's default organization.",
+ "type": "string"
+ },
+ "environmentId": {
+ "title": "Environment ID",
+ "description": "Anypoint Platform Environment ID. If not provided, the connector will discover all accessible environments.",
+ "type": "string"
+ },
+ "pipelineFilterPattern": {
+ "description": "Regex to filter MuleSoft applications by name.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Application Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["authentication"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/nifi/basicAuth.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/nifi/basicAuth.json
new file mode 100644
index 000000000000..63512a45f828
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/nifi/basicAuth.json
@@ -0,0 +1,28 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/pipeline/nifi/basicAuth.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Nifi Basic Auth",
+ "description": "Configuration for connecting to Nifi Basic Auth.",
+ "javaType": "org.openmetadata.schema.services.connections.pipeline.nifi.BasicAuth",
+ "type": "object",
+ "properties": {
+ "username": {
+ "title": "Username",
+ "description": "Nifi user to authenticate to the API.",
+ "type": "string"
+ },
+ "password": {
+ "title": "Password",
+ "description": "Nifi password to authenticate to the API.",
+ "type": "string",
+ "format": "password"
+ },
+ "verifySSL": {
+ "title": "Verify SSL",
+ "description": "Boolean marking if we need to verify the SSL certs for Nifi. False by default.",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/nifi/clientCertificateAuth.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/nifi/clientCertificateAuth.json
new file mode 100644
index 000000000000..f8223b1a4e6a
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/nifi/clientCertificateAuth.json
@@ -0,0 +1,26 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/pipeline/nifi/clientCertificateAuth.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Nifi Client Certificate Auth",
+ "description": "Configuration for connecting to Nifi Client Certificate Auth.",
+ "javaType": "org.openmetadata.schema.services.connections.pipeline.nifi.ClientCertificateAuth",
+ "type": "object",
+ "properties": {
+ "certificateAuthorityPath": {
+ "title": "Certificate Authority Path",
+ "description": "Path to the root CA certificate",
+ "type": "string"
+ },
+ "clientCertificatePath": {
+ "title": "Client Certificate",
+ "description": "Path to the client certificate",
+ "type": "string"
+ },
+ "clientkeyPath": {
+ "title": "Client Key",
+ "description": "Path to the client key",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/nifiConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/nifiConnection.json
new file mode 100644
index 000000000000..1e18db281f38
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/nifiConnection.json
@@ -0,0 +1,104 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/pipeline/nifiConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "NifiConnection",
+ "description": "Nifi Metadata Pipeline Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.pipeline.NifiConnection",
+ "definitions": {
+ "NifiType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["Nifi"],
+ "default": "Nifi"
+ },
+ "basicAuthentication": {
+ "title": "Username/Password Authentication",
+ "description": "username/password auth",
+ "javaType": "org.openmetadata.schema.services.connections.pipeline.NifiBasicAuth",
+ "type":"object",
+ "properties": {
+ "username": {
+ "title": "Username",
+ "description": "Nifi user to authenticate to the API.",
+ "type": "string"
+ },
+ "password": {
+ "title": "Password",
+ "description": "Nifi password to authenticate to the API.",
+ "type": "string",
+ "format": "password"
+ },
+ "verifySSL": {
+ "title": "Verify SSL",
+ "description": "Boolean marking if we need to verify the SSL certs for Nifi. False by default.",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "additionalProperties": false
+ },
+ "clientCertificateAuthentication": {
+ "title": "Client Certificate Authentication",
+ "description": "client certificate auth",
+ "type":"object",
+ "javaType": "org.openmetadata.schema.services.connections.pipeline.NifiClientAuth",
+ "properties": {
+ "certificateAuthorityPath":{
+ "title":"Certificate Authority Path",
+ "description": "Path to the root CA certificate",
+ "type": "string"
+ },
+ "clientCertificatePath":{
+ "title":"Client Certificate",
+ "description": "Path to the client certificate",
+ "type": "string"
+ },
+ "clientkeyPath":{
+ "title":"Client Key",
+ "description": "Path to the client key",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/NifiType",
+ "default": "Nifi"
+ },
+ "hostPort": {
+ "expose": true,
+ "title": "Host And Port",
+ "description": "Pipeline Service Management/UI URI.",
+ "type": "string",
+ "format": "uri"
+ },
+ "nifiConfig": {
+ "title": "Nifi Credentials Configuration",
+ "description": "We support username/password or client certificate authentication",
+ "oneOf": [
+ {
+ "$ref": "nifi/basicAuth.json"
+ },
+ {
+ "$ref": "nifi/clientCertificateAuth.json"
+ }
+ ]
+ },
+ "pipelineFilterPattern": {
+ "description": "Regex exclude pipelines.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Pipeline Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["hostPort", "nifiConfig"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/openLineageConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/openLineageConnection.json
new file mode 100644
index 000000000000..e9bf9bacbb00
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/openLineageConnection.json
@@ -0,0 +1,200 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/pipeline/openLineageConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "OpenLineageConnection",
+ "description": "OpenLineage Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.pipeline.OpenLineageConnection",
+ "definitions": {
+ "OpenLineageType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": [
+ "OpenLineage"
+ ],
+ "default": "OpenLineage"
+ },
+ "kafkaBrokerConfig": {
+ "title": "Kafka",
+ "description": "Kafka broker configuration for OpenLineage events.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "brokersUrl": {
+ "title": "Kafka Brokers List",
+ "description": "Kafka bootstrap servers URL.",
+ "type": "string"
+ },
+ "topicName": {
+ "title": "Topic Name",
+ "description": "Topic from where OpenLineage events will be pulled.",
+ "type": "string"
+ },
+ "consumerGroupName": {
+ "title": "Consumer Group",
+ "description": "Kafka consumer group name.",
+ "type": "string"
+ },
+ "consumerOffsets": {
+ "title": "Initial Consumer Offsets",
+ "description": "Initial Kafka consumer offset.",
+ "default": "earliest",
+ "type": "string",
+ "enum": [
+ "earliest",
+ "latest"
+ ],
+ "javaEnums": [
+ {
+ "name": "earliest"
+ },
+ {
+ "name": "latest"
+ }
+ ]
+ },
+ "poolTimeout": {
+ "title": "Single Pool Call Timeout",
+ "description": "Max allowed wait time.",
+ "type": "number",
+ "default": 1.0
+ },
+ "sessionTimeout": {
+ "title": "Broker Inactive Session Timeout",
+ "description": "Max allowed inactivity time.",
+ "type": "integer",
+ "default": 30
+ },
+ "securityProtocol": {
+ "title": "Kafka Security Protocol",
+ "description": "Kafka security protocol config.",
+ "default": "PLAINTEXT",
+ "type": "string",
+ "enum": [
+ "PLAINTEXT",
+ "SASL_PLAINTEXT",
+ "SSL",
+ "SASL_SSL"
+ ],
+ "javaEnums": [
+ {
+ "name": "PLAINTEXT"
+ },
+ {
+ "name": "SASL_PLAINTEXT"
+ },
+ {
+ "name": "SSL"
+ },
+ {
+ "name": "SASL_SSL"
+ }
+ ]
+ },
+ "sslConfig": {
+ "title": "SSL",
+ "description": "SSL Configuration details.",
+ "$ref": "../../../../security/ssl/verifySSLConfig.json#/definitions/sslConfig"
+ },
+ "saslConfig": {
+ "title": "SASL",
+ "description": "SASL Configuration details.",
+ "$ref": "../../../../security/sasl/saslClientConfig.json"
+ }
+ },
+ "required": [
+ "brokersUrl",
+ "topicName"
+ ]
+ },
+ "kinesisBrokerConfig": {
+ "title": "Kinesis",
+ "description": "AWS Kinesis Data Streams configuration for OpenLineage events.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "streamName": {
+ "title": "Stream Name",
+ "description": "Kinesis Data Stream name.",
+ "type": "string"
+ },
+ "awsConfig": {
+ "title": "AWS Credentials Configuration",
+ "description": "AWS credentials configuration.",
+ "$ref": "../../../../security/credentials/awsCredentials.json"
+ },
+ "consumerOffsets": {
+ "title": "Initial Consumer Offsets",
+ "description": "Initial Kinesis shard iterator type.",
+ "default": "TRIM_HORIZON",
+ "type": "string",
+ "enum": [
+ "TRIM_HORIZON",
+ "LATEST"
+ ],
+ "javaEnums": [
+ {
+ "name": "TRIM_HORIZON"
+ },
+ {
+ "name": "LATEST"
+ }
+ ]
+ },
+ "poolTimeout": {
+ "title": "Poll Interval",
+ "description": "Poll interval in seconds.",
+ "type": "number",
+ "default": 1.0
+ },
+ "sessionTimeout": {
+ "title": "Session Timeout",
+ "description": "Max inactivity timeout in seconds.",
+ "type": "integer",
+ "default": 30
+ }
+ },
+ "required": [
+ "streamName",
+ "awsConfig"
+ ]
+ }
+ },
+ "properties": {
+ "type": {
+ "description": "Service Type",
+ "$ref": "#/definitions/OpenLineageType",
+ "default": "OpenLineage"
+ },
+ "brokerConfig": {
+ "title": "Broker Configuration",
+ "description": "Event broker configuration. Choose between Kafka and Kinesis.",
+ "oneOf": [
+ {
+ "$ref": "#/definitions/kafkaBrokerConfig"
+ },
+ {
+ "$ref": "#/definitions/kinesisBrokerConfig"
+ }
+ ]
+ },
+ "namespaceToServiceMapping": {
+ "title": "Namespace to Service Mapping",
+ "description": "Map OpenLineage dataset namespaces (or prefixes) to OpenMetadata database service names. Used when multiple services of the same type exist. Example: 'mysql://cluster-a:3306' -> 'mysql-cluster-a'.",
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "pipelineFilterPattern": {
+ "description": "Regex exclude pipelines.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Pipeline Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "required": ["brokerConfig"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/snowplowConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/snowplowConnection.json
new file mode 100644
index 000000000000..939639b16946
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/snowplowConnection.json
@@ -0,0 +1,103 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/pipeline/snowplowConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SnowplowConnection",
+ "description": "Snowplow Pipeline Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.pipeline.SnowplowConnection",
+ "definitions": {
+ "SnowplowType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["Snowplow"],
+ "default": "Snowplow"
+ },
+ "SnowplowDeployment": {
+ "description": "Snowplow deployment type",
+ "type": "string",
+ "enum": ["BDP", "Community"],
+ "default": "BDP"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/SnowplowType",
+ "default": "Snowplow"
+ },
+ "deployment": {
+ "title": "Deployment Type",
+ "description": "Snowplow deployment type (BDP for managed or Community for self-hosted)",
+ "$ref": "#/definitions/SnowplowDeployment",
+ "default": "BDP"
+ },
+ "consoleUrl": {
+ "expose": true,
+ "title": "Console URL",
+ "description": "Snowplow Console URL for BDP deployment",
+ "type": "string",
+ "format": "uri"
+ },
+ "apiKey": {
+ "title": "API Key",
+ "description": "API Key for Snowplow Console API",
+ "type": "string",
+ "format": "password"
+ },
+ "organizationId": {
+ "title": "Organization ID",
+ "description": "Snowplow BDP Organization ID",
+ "type": "string"
+ },
+ "configPath": {
+ "title": "Configuration Path",
+ "description": "Path to pipeline configuration files for Community deployment",
+ "type": "string"
+ },
+ "cloudProvider": {
+ "title": "Cloud Provider",
+ "description": "Cloud provider where Snowplow is deployed",
+ "type": "string",
+ "enum": ["AWS", "GCP", "Azure"],
+ "default": "AWS"
+ },
+ "pipelineFilterPattern": {
+ "description": "Regex exclude pipelines.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Pipeline Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["type", "deployment"],
+ "allOf": [
+ {
+ "if": {
+ "properties": {
+ "deployment": {
+ "const": "BDP"
+ }
+ }
+ },
+ "then": {
+ "required": ["consoleUrl", "apiKey", "organizationId"]
+ }
+ },
+ {
+ "if": {
+ "properties": {
+ "deployment": {
+ "const": "Community"
+ }
+ }
+ },
+ "then": {
+ "required": ["configPath"]
+ }
+ }
+ ]
+ }
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/sparkConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/sparkConnection.json
new file mode 100644
index 000000000000..2f1990210f47
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/sparkConnection.json
@@ -0,0 +1,34 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/pipeline/sparkConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SparkConnection",
+ "description": "Spark Metadata Pipeline Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.pipeline.SparkConnection",
+ "definitions": {
+ "SparkType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["Spark"],
+ "default": "Spark"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/SparkType",
+ "default": "Spark"
+ },
+ "pipelineFilterPattern": {
+ "description": "Regex exclude pipelines.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Pipeline Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false
+ }
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/splineConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/splineConnection.json
new file mode 100644
index 000000000000..7804fdc2e1b0
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/splineConnection.json
@@ -0,0 +1,50 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/pipeline/splineConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SplineConnection",
+ "description": "Spline Metadata Database Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.pipeline.SplineConnection",
+ "definitions": {
+ "SplineType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["Spline"],
+ "default": "Spline"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/SplineType",
+ "default": "Spline"
+ },
+ "hostPort": {
+ "title": "Spline REST Server Host & Port",
+ "expose": true,
+ "description": "Spline REST Server Host & Port.",
+ "type": "string",
+ "format": "uri"
+ },
+ "uiHostPort": {
+ "title": "Spline UI Host & Port",
+ "expose": true,
+ "description": "Spline UI Host & Port.",
+ "type": "string",
+ "format": "uri"
+ },
+ "pipelineFilterPattern": {
+ "description": "Regex exclude pipelines.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Pipeline Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["hostPort"]
+ }
+
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/ssisConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/ssisConnection.json
new file mode 100644
index 000000000000..4d886c2228d3
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/ssisConnection.json
@@ -0,0 +1,53 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/pipeline/ssisConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SSISConnection",
+ "description": "SSIS Metadata Database Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.pipeline.SSISConnection",
+ "definitions": {
+ "SSISType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["SSIS"],
+ "default": "SSIS"
+ },
+ "localProjectsPath": {
+ "title": "Local Projects Path",
+ "description": "Path leading to your projects",
+ "type": "string"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/SSISType",
+ "default": "SSIS"
+ },
+ "databaseConnection": {
+ "title": "Metadata Database Connection",
+ "description": "Underlying database connection",
+ "$ref": "../database/mssqlConnection.json"
+ },
+ "packageConnection": {
+ "title": "SSIS Projects Location (Local Path or S3 Bucket)",
+ "description": "Underlying storage connection",
+ "oneOf": [
+ {
+ "$ref": "../storage/s3Connection.json"
+ },
+ {
+ "$ref": "#/definitions/localProjectsPath"
+ }
+ ]
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["databaseConnection", "packageConnection"]
+ }
+
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/stitchConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/stitchConnection.json
new file mode 100644
index 000000000000..6e8ce2cf8ad3
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/stitchConnection.json
@@ -0,0 +1,47 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/pipeline/stitchConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "StitchConnection",
+ "description": "Stitch Connection",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.pipeline.StitchConnection",
+ "definitions": {
+ "stitchType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["Stitch"],
+ "default": "Stitch"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/stitchType",
+ "default": "Stitch"
+ },
+ "hostPort": {
+ "title": "Host and Port",
+ "description": "Host and port of the Stitch API host",
+ "type": "string",
+ "default": "https://api.stitchdata.com/v4"
+ },
+ "token": {
+ "title": "JWT Token",
+ "description": "Token to connect to Stitch api doc",
+ "type": "string",
+ "format": "password"
+ },
+ "pipelineFilterPattern": {
+ "description": "Regex exclude pipelines.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Pipeline Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["hostPort", "token"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/wherescapeConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/wherescapeConnection.json
new file mode 100644
index 000000000000..621649dc10d4
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/pipeline/wherescapeConnection.json
@@ -0,0 +1,47 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/pipeline/wherescapeConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "WherescapeConnection",
+ "description": "Wherescape Metadata Database Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.pipeline.WherescapeConnection",
+ "definitions": {
+ "WherescapeType": {
+ "description": "Service type.",
+ "type": "string",
+ "enum": ["Wherescape"],
+ "default": "Wherescape"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/WherescapeType",
+ "default": "Wherescape"
+ },
+ "hostPort": {
+ "expose": true,
+ "title": "Host And Port",
+ "description": "Pipeline Service Management/UI URI.",
+ "type": "string",
+ "format": "uri"
+ },
+ "databaseConnection": {
+ "title": "Metadata Database Connection",
+ "description": "Underlying database connection",
+ "oneOf": [
+ {
+ "$ref": "../database/mssqlConnection.json"
+ }
+ ]
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["databaseConnection"]
+ }
+
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/search/customSearchConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/search/customSearchConnection.json
new file mode 100644
index 000000000000..b67e11bc2f80
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/search/customSearchConnection.json
@@ -0,0 +1,45 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/search/customSearchConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CustomSearchConnection",
+ "description": "Custom Search Service connection to build a source that is not supported by OpenMetadata yet.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.search.CustomSearchConnection",
+ "definitions": {
+ "customSearchType": {
+ "title": "Service Type",
+ "description": "Custom search service type",
+ "type": "string",
+ "enum": ["CustomSearch"],
+ "default": "CustomSearch"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Custom search service type",
+ "$ref": "#/definitions/customSearchType",
+ "default": "CustomSearch"
+ },
+ "sourcePythonClass": {
+ "title": "Source Python Class Name",
+ "description": "Source Python Class Name to instantiated by the ingestion workflow",
+ "type": "string"
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "searchIndexFilterPattern": {
+ "title": "Default Search Index Filter Pattern",
+ "description": "Regex to only fetch search indexes that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": true,
+ "required": ["type"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/search/elasticSearch/apiAuth.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/search/elasticSearch/apiAuth.json
new file mode 100644
index 000000000000..7b07c205ca31
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/search/elasticSearch/apiAuth.json
@@ -0,0 +1,22 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/search/elasticSearch/apiAuth.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "API Key Authentication",
+ "description": "API Key Authentication for ElasticSearch",
+ "javaType": "org.openmetadata.schema.services.connections.search.elasticSearch.ESAPIAuth",
+ "type": "object",
+ "properties": {
+ "apiKey": {
+ "title": "API Key",
+ "description": "Elastic Search API Key for API Authentication",
+ "type": "string",
+ "format": "password"
+ },
+ "apiKeyId": {
+ "title": "API Key ID",
+ "description": "Elastic Search API Key ID for API Authentication",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/search/elasticSearch/basicAuth.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/search/elasticSearch/basicAuth.json
new file mode 100644
index 000000000000..3c6c2d8fa6da
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/search/elasticSearch/basicAuth.json
@@ -0,0 +1,22 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/search/elasticSearch/basicAuth.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Basic Authentication",
+ "description": "Basic Auth Configuration for ElasticSearch",
+ "javaType": "org.openmetadata.schema.services.connections.search.elasticSearch.ESBasicAuth",
+ "type": "object",
+ "properties": {
+ "username": {
+ "title": "Username",
+ "description": "Elastic Search Username for Login",
+ "type": "string"
+ },
+ "password": {
+ "title": "Password",
+ "description": "Elastic Search Password for Login",
+ "type": "string",
+ "format": "password"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/search/elasticSearchConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/search/elasticSearchConnection.json
new file mode 100644
index 000000000000..ef58725d0887
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/search/elasticSearchConnection.json
@@ -0,0 +1,66 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/search/elasticSearchConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "ElasticSearch Connection",
+ "description": "ElasticSearch Connection.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.search.ElasticSearchConnection",
+ "definitions": {
+ "elasticSearchType": {
+ "description": "ElasticSearch service type",
+ "type": "string",
+ "enum": ["ElasticSearch"],
+ "default": "ElasticSearch"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "ElasticSearch Type",
+ "description": "ElasticSearch Type",
+ "$ref": "#/definitions/elasticSearchType",
+ "default": "ElasticSearch"
+ },
+ "hostPort": {
+ "title": "Host and Port",
+ "description": "Host and port of the ElasticSearch service.",
+ "type": "string",
+ "format": "uri"
+ },
+ "authType": {
+ "title": "Auth Configuration Type",
+ "description": "Choose Auth Config Type.",
+ "oneOf": [
+ {
+ "$ref": "./elasticSearch/basicAuth.json"
+ },
+ {
+ "$ref": "./elasticSearch/apiAuth.json"
+ }
+ ]
+ },
+ "sslConfig": {
+ "title": "SSL Config",
+ "$ref": "../common/sslConfig.json"
+ },
+ "connectionTimeoutSecs": {
+ "title": "Connection Timeout in Seconds",
+ "description": "Connection Timeout in Seconds",
+ "type": "integer",
+ "default": 30
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "searchIndexFilterPattern": {
+ "title": "Default Search Index Filter Pattern",
+ "description": "Regex to only fetch search indexes that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/search/openSearchConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/search/openSearchConnection.json
new file mode 100644
index 000000000000..9f4f4444f6a2
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/search/openSearchConnection.json
@@ -0,0 +1,70 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/search/openSearchConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "OpenSearchConnection",
+ "description": "OpenSearch Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.search.OpenSearchConnection",
+ "definitions": {
+ "openSearchType": {
+ "description": "OpenSearch service type",
+ "type": "string",
+ "enum": ["OpenSearch"],
+ "default": "OpenSearch"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "OpenSearch Type",
+ "description": "OpenSearch Type",
+ "$ref": "#/definitions/openSearchType",
+ "default": "OpenSearch"
+ },
+ "hostPort": {
+ "title": "Host and Port",
+ "description": "Host and port of the OpenSearch service.",
+ "type": "string",
+ "format": "uri"
+ },
+ "authType": {
+ "title": "Auth Configuration Type",
+ "description": "Choose Auth Config Type.",
+ "oneOf": [
+ {
+ "$ref": "./elasticSearch/basicAuth.json"
+ },
+ {
+ "$ref": "../../../../security/credentials/awsCredentials.json"
+ }
+ ]
+ },
+ "verifySSL": {
+ "$ref": "../../../../security/ssl/verifySSLConfig.json#/definitions/verifySSL",
+ "default": "no-ssl"
+ },
+ "sslConfig": {
+ "title": "SSL Config",
+ "$ref": "../common/sslConfig.json"
+ },
+ "connectionTimeoutSecs": {
+ "title": "Connection Timeout in Seconds",
+ "description": "Connection Timeout in Seconds",
+ "type": "integer",
+ "default": 30
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "searchIndexFilterPattern": {
+ "title": "Default Search Index Filter Pattern",
+ "description": "Regex to only fetch search indexes that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/security/ranger/basicAuth.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/security/ranger/basicAuth.json
new file mode 100644
index 000000000000..3ec960e0c8cc
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/security/ranger/basicAuth.json
@@ -0,0 +1,26 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/security/ranger/basicAuth.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Ranger Basic Auth",
+ "description": "Configuration for connecting to Ranger Basic Auth.",
+ "javaType": "org.openmetadata.schema.services.connections.security.ranger.RangerBasicAuth",
+ "type": "object",
+ "properties": {
+ "username": {
+ "title": "Username",
+ "description": "Ranger user to authenticate to the API.",
+ "type": "string"
+ },
+ "password": {
+ "title": "Password",
+ "description": "Ranger password to authenticate to the API.",
+ "type": "string",
+ "format": "password"
+ }
+ },
+ "required": [
+ "username",
+ "password"
+ ],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/security/rangerConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/security/rangerConnection.json
new file mode 100644
index 000000000000..805722b0ef3f
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/security/rangerConnection.json
@@ -0,0 +1,48 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/security/rangerConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "RangerConnection",
+ "description": "Apache Ranger Connection Config",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.security.RangerConnection",
+ "definitions": {
+ "rangerType": {
+ "title": "Ranger Type",
+ "description": "Apache Ranger service type",
+ "type": "string",
+ "enum": [
+ "Ranger"
+ ],
+ "default": "Ranger"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/rangerType",
+ "default": "Ranger"
+ },
+ "hostPort": {
+ "expose": true,
+ "title": "Host and Port",
+ "description": "Apache Ranger Admin URL.",
+ "type": "string",
+ "format": "uri"
+ },
+ "authType": {
+ "title": "Authentication Type",
+ "description": "Authentication type to connect to Apache Ranger.",
+ "oneOf": [
+ {
+ "$ref": "ranger/basicAuth.json"
+ }
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "hostPort",
+ "authType"
+ ]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/serviceConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/serviceConnection.json
new file mode 100644
index 000000000000..0197982526f9
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/serviceConnection.json
@@ -0,0 +1,56 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/serviceConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Service Connection",
+ "description": "Groups source connection configurations.",
+ "type": "object",
+ "definitions": {
+ "serviceConnection": {
+ "description": "Supported services",
+ "oneOf": [
+ {
+ "$ref": "../apiService.json#/definitions/apiConnection"
+ },
+ {
+ "$ref": "../dashboardService.json#/definitions/dashboardConnection"
+ },
+ {
+ "$ref": "../databaseService.json#/definitions/databaseConnection"
+ },
+ {
+ "$ref": "../messagingService.json#/definitions/messagingConnection"
+ },
+ {
+ "$ref": "../metadataService.json#/definitions/metadataConnection"
+ },
+ {
+ "$ref": "../pipelineService.json#/definitions/pipelineConnection"
+ },
+ {
+ "$ref": "../mlmodelService.json#/definitions/mlModelConnection"
+ },
+ {
+ "$ref": "../storageService.json#/definitions/storageConnection"
+ },
+ {
+ "$ref": "../searchService.json#/definitions/searchConnection"
+ },
+ {
+ "$ref": "../securityService.json#/definitions/securityConnection"
+ },
+ {
+ "$ref": "../driveService.json#/definitions/driveConnection"
+ },
+ {
+ "$ref": "../mcpService.json#/definitions/mcpConnection"
+ }
+ ]
+ }
+ },
+ "properties": {
+ "serviceConnection": {
+ "description": "Service Connection.",
+ "$ref": "#/definitions/serviceConnection"
+ }
+ }
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/storage/adlsConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/storage/adlsConnection.json
new file mode 100644
index 000000000000..cf4bdfe25016
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/storage/adlsConnection.json
@@ -0,0 +1,50 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/storage/adlsConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "ADLS Connection",
+ "description": "ADLS Connection.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.storage.ADLSConnection",
+ "definitions": {
+ "azureType": {
+ "description": "ADLS service type",
+ "type": "string",
+ "enum": ["ADLS"],
+ "default": "ADLS"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/azureType",
+ "default": "ADLS"
+ },
+ "credentials": {
+ "title": "Azure Credentials",
+ "description": "Azure Credentials",
+ "$ref": "../../../../security/credentials/azureCredentials.json"
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "containerFilterPattern": {
+ "description": "Regex to only fetch containers that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Storage container Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "credentials"
+ ]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/storage/customStorageConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/storage/customStorageConnection.json
new file mode 100644
index 000000000000..19ac005e7dca
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/storage/customStorageConnection.json
@@ -0,0 +1,45 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/storage/customStorageConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CustomStorageConnection",
+ "description": "Custom Storage Service connection to build a source that is not supported by OpenMetadata yet.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.storage.CustomStorageConnection",
+ "definitions": {
+ "customStorageType": {
+ "title": "Service Type",
+ "description": "Custom storage service type",
+ "type": "string",
+ "enum": ["CustomStorage"],
+ "default": "CustomStorage"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Custom storage service type",
+ "$ref": "#/definitions/customStorageType",
+ "default": "CustomStorage"
+ },
+ "sourcePythonClass": {
+ "title": "Source Python Class Name",
+ "description": "Source Python Class Name to instantiated by the ingestion workflow",
+ "type": "string"
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "containerFilterPattern": {
+ "description": "Regex to only fetch containers that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Storage container Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": true,
+ "required": ["type"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/storage/gcsConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/storage/gcsConnection.json
new file mode 100644
index 000000000000..81d20d95e330
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/storage/gcsConnection.json
@@ -0,0 +1,59 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/storage/gcsConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "GCS Connection",
+ "description": "GCS Connection.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.storage.GCSConnection",
+ "definitions": {
+ "gcsType": {
+ "description": "Gcs service type",
+ "type": "string",
+ "enum": ["GCS"],
+ "default": "GCS"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/gcsType",
+ "default": "GCS"
+ },
+ "credentials": {
+ "title": "GCP Credentials",
+ "description": "GCP Credentials",
+ "$ref": "../../../../security/credentials/gcpCredentials.json"
+ },
+ "bucketNames": {
+ "title": "Bucket Names",
+ "description": "Bucket Names of the data source.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "default": null
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "containerFilterPattern": {
+ "description": "Regex to only fetch containers that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Storage container Filter Pattern"
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "credentials"
+ ]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/storage/s3Connection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/storage/s3Connection.json
new file mode 100644
index 000000000000..c4300dea420a
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/storage/s3Connection.json
@@ -0,0 +1,68 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/storage/s3Connection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "S3 Connection",
+ "description": "S3 Connection.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.storage.S3Connection",
+ "definitions": {
+ "s3Type": {
+ "description": "S3 service type",
+ "type": "string",
+ "enum": ["S3"],
+ "default": "S3"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "$ref": "#/definitions/s3Type",
+ "default": "S3"
+ },
+ "awsConfig": {
+ "title": "AWS Credentials Configuration",
+ "$ref": "../../../../security/credentials/awsCredentials.json"
+ },
+ "bucketNames": {
+ "title": "Bucket Names",
+ "description": "Bucket Names of the data source.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "default": null
+ },
+ "connectionOptions": {
+ "title": "Connection Options",
+ "$ref": "../connectionBasicType.json#/definitions/connectionOptions"
+ },
+ "connectionArguments": {
+ "title": "Connection Arguments",
+ "$ref": "../connectionBasicType.json#/definitions/connectionArguments"
+ },
+ "containerFilterPattern": {
+ "description": "Regex to only fetch containers that matches the pattern.",
+ "$ref": "../../../../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Default Storage container Filter Pattern",
+ "default": {
+ "includes": [],
+ "excludes": ["_SUCCESS"]
+ }
+ },
+ "supportsMetadataExtraction": {
+ "title": "Supports Metadata Extraction",
+ "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
+ },
+ "consoleEndpointURL": {
+ "title": "Console Endpoint URL",
+ "description": "Console EndPoint URL for S3-compatible services",
+ "type": "string",
+ "format": "uri"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "awsConfig"
+ ]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/testConnectionDefinition.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/testConnectionDefinition.json
new file mode 100644
index 000000000000..c280f94ddbf3
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/testConnectionDefinition.json
@@ -0,0 +1,115 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/testConnectionDefinition.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "TestConnectionDefinition",
+ "description": "TestConnection is the definition that will encapsulate the steps required to test a connection to a specific service.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.services.connections.TestConnectionDefinition",
+ "javaInterfaces": ["org.openmetadata.schema.EntityInterface"],
+ "definitions": {
+ "testConnectionStep": {
+ "description": "Function that tests one specific element of the service. E.g., listing schemas, lineage, or tags.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.services.connections.TestConnectionStep",
+ "properties": {
+ "name": {
+ "description": "Name of the step being tested",
+ "type": "string"
+ },
+ "description": {
+ "description": "What is the goal of the step",
+ "type": "string"
+ },
+ "errorMessage": {
+ "description": "In case of error this message should be displayed on UI, We define this message manually on test connection definition",
+ "type": "string"
+ },
+ "mandatory": {
+ "description": "Is this step mandatory to be passed?",
+ "type": "boolean",
+ "default": true
+ },
+ "shortCircuit": {
+ "description": "This field if set to true, indicates that the step is important enough to break the process in case of failure.",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "additionalProperties": false,
+ "required": ["name", "mandatory", "description"]
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier of this test case definition instance.",
+ "$ref": "../../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name of the Test Connection Definition. It should be the `type` of the service being tested, e.g., Mysql, or Snowflake.",
+ "$ref": "../../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this test definition.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the test connection def.",
+ "$ref": "../../../type/basic.json#/definitions/markdown"
+ },
+ "fullyQualifiedName": {
+ "description": "FullyQualifiedName same as `name`.",
+ "$ref": "../../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "steps": {
+ "description": "Steps to test the connection. Order matters.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/testConnectionStep"
+ }
+ },
+ "owners": {
+ "description": "Owner of this TestConnection definition.",
+ "$ref": "../../../type/entityReferenceList.json",
+ "default": null
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this entity.",
+ "$ref": "../../../type/basic.json#/definitions/href"
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "domains" : {
+ "description": "Domains the asset belongs to. When not set, the asset inherits the domain from the parent it belongs to.",
+ "$ref": "../../../type/entityReferenceList.json"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["name", "steps"]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/testConnectionResult.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/testConnectionResult.json
new file mode 100644
index 000000000000..49b72093fdb7
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/connections/testConnectionResult.json
@@ -0,0 +1,67 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/testConnectionResult.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "TestConnectionResult",
+ "description": "TestConnectionResult is the definition that will encapsulate result of running the test connection steps.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.services.connections.TestConnectionResult",
+ "definitions": {
+ "testConnectionStepResult": {
+ "description": "Function that tests one specific element of the service. E.g., listing schemas, lineage, or tags.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.services.connections.TestConnectionStepResult",
+ "properties": {
+ "name": {
+ "description": "Name of the step being tested",
+ "type": "string"
+ },
+ "mandatory": {
+ "description": "Is this step mandatory to be passed?",
+ "type": "boolean",
+ "default": true
+ },
+ "passed": {
+ "description": "Did the step pass successfully?",
+ "type": "boolean"
+ },
+ "message": {
+ "description": "Results or exceptions to be shared after running the test. This message comes from the test connection definition",
+ "type": "string",
+ "default": null
+ },
+ "errorLog": {
+ "description": "In case of failed step, this field would contain the actual error faced during the step.",
+ "type": "string",
+ "default": null
+ }
+ },
+ "additionalProperties": false,
+ "required": ["name", "mandatory", "passed"]
+ },
+ "statusType": {
+ "javaType": "org.openmetadata.schema.entity.services.connections.TestConnectionResultStatus",
+ "description": "Enum defining possible Test Connection Result status",
+ "type": "string",
+ "enum": ["Successful", "Failed", "Running"]
+ }
+ },
+ "properties": {
+ "lastUpdatedAt": {
+ "description": "Last time that the test connection was executed",
+ "$ref": "../../../type/basic.json#/definitions/timestamp"
+ },
+ "status": {
+ "description": "Test Connection Result computation status.",
+ "$ref": "#/definitions/statusType"
+ },
+ "steps": {
+ "description": "Steps to test the connection. Order matters.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/testConnectionStepResult"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": ["steps"]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/dashboardService.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/dashboardService.json
new file mode 100644
index 000000000000..451d3977f07b
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/dashboardService.json
@@ -0,0 +1,294 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/dashboardService.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Dashboard Service",
+ "description": "This schema defines the Dashboard Service entity, such as Looker and Superset.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.services.DashboardService",
+ "javaInterfaces": [
+ "org.openmetadata.schema.EntityInterface",
+ "org.openmetadata.schema.ServiceEntityInterface"
+ ],
+ "definitions": {
+ "dashboardServiceType": {
+ "description": "Type of Dashboard service - Superset, Looker, Redash, Tableau, Metabase, PowerBi, Mode, or Lightdash",
+ "type": "string",
+ "javaInterfaces": ["org.openmetadata.schema.EnumInterface"],
+ "enum": [
+ "Superset",
+ "Looker",
+ "Tableau",
+ "Redash",
+ "Metabase",
+ "PowerBI",
+ "PowerBIReportServer",
+ "Mode",
+ "CustomDashboard",
+ "DomoDashboard",
+ "QuickSight",
+ "QlikSense",
+ "Lightdash",
+ "MicroStrategy",
+ "QlikCloud",
+ "Sigma",
+ "ThoughtSpot",
+ "Grafana",
+ "Hex",
+ "Ssrs",
+ "SapS4Hana"
+ ],
+ "javaEnums": [
+ {
+ "name": "Superset"
+ },
+ {
+ "name": "Looker"
+ },
+ {
+ "name": "Tableau"
+ },
+ {
+ "name": "Redash"
+ },
+ {
+ "name": "Metabase"
+ },
+ {
+ "name": "PowerBI"
+ },
+ {
+ "name": "PowerBIReportServer"
+ },
+ {
+ "name": "Mode"
+ },
+ {
+ "name": "CustomDashboard"
+ },
+ {
+ "name": "DomoDashboard"
+ },
+ {
+ "name": "QuickSight"
+ },
+ {
+ "name": "QlikSense"
+ },
+ {
+ "name": "Lightdash"
+ },
+ {
+ "name": "MicroStrategy"
+ },
+ {
+ "name": "QlikCloud"
+ },
+ {
+ "name": "Sigma"
+ },
+ {
+ "name": "ThoughtSpot"
+ },
+ {
+ "name": "Grafana"
+ },
+ {
+ "name": "Hex"
+ },
+ {
+ "name": "Ssrs"
+ },
+ {
+ "name": "SapS4Hana"
+ }
+ ]
+ },
+ "dashboardConnection": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.DashboardConnection",
+ "description": "Dashboard Connection.",
+ "javaInterfaces": [
+ "org.openmetadata.schema.ServiceConnectionEntityInterface"
+ ],
+ "properties": {
+ "config": {
+ "mask": true,
+ "oneOf": [
+ {
+ "$ref": "./connections/dashboard/lookerConnection.json"
+ },
+ {
+ "$ref": "./connections/dashboard/metabaseConnection.json"
+ },
+ {
+ "$ref": "./connections/dashboard/powerBIConnection.json"
+ },
+ {
+ "$ref": "./connections/dashboard/powerBIReportServerConnection.json"
+ },
+ {
+ "$ref": "./connections/dashboard/redashConnection.json"
+ },
+ {
+ "$ref": "./connections/dashboard/supersetConnection.json"
+ },
+ {
+ "$ref": "./connections/dashboard/tableauConnection.json"
+ },
+ {
+ "$ref": "./connections/dashboard/modeConnection.json"
+ },
+ {
+ "$ref": "./connections/dashboard/customDashboardConnection.json"
+ },
+ {
+ "$ref": "./connections/dashboard/domoDashboardConnection.json"
+ },
+ {
+ "$ref": "./connections/dashboard/quickSightConnection.json"
+ },
+ {
+ "$ref": "./connections/dashboard/qlikSenseConnection.json"
+ },
+ {
+ "$ref": "./connections/dashboard/lightdashConnection.json"
+ },
+ {
+ "$ref": "./connections/dashboard/microStrategyConnection.json"
+ },
+ {
+ "$ref": "./connections/dashboard/qlikCloudConnection.json"
+ },
+ {
+ "$ref": "./connections/dashboard/sigmaConnection.json"
+ },
+ {
+ "$ref": "./connections/dashboard/thoughtSpotConnection.json"
+ },
+ {
+ "$ref": "./connections/dashboard/grafanaConnection.json"
+ },
+ {
+ "$ref": "./connections/dashboard/hexConnection.json"
+ },
+ {
+ "$ref": "./connections/dashboard/ssrsConnection.json"
+ },
+ {
+ "$ref": "./connections/dashboard/sapS4HanaConnection.json"
+ }
+ ]
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier of this dashboard service instance.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name that identifies this dashboard service.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "fullyQualifiedName": {
+ "description": "FullyQualifiedName same as `name`.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this dashboard service.",
+ "type": "string"
+ },
+ "serviceType": {
+ "description": "Type of dashboard service such as Looker or Superset...",
+ "$ref": "#/definitions/dashboardServiceType"
+ },
+ "description": {
+ "description": "Description of a dashboard service instance.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "connection": {
+ "$ref": "#/definitions/dashboardConnection"
+ },
+ "pipelines": {
+ "description": "References to pipelines deployed for this dashboard service.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "testConnectionResult": {
+ "description": "Last test connection results for this service",
+ "$ref": "connections/testConnectionResult.json"
+ },
+ "tags": {
+ "description": "Tags for this Dashboard Service.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": []
+ },
+ "owners": {
+ "description": "Owners of this dashboard service.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this dashboard service.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "entityStatus": {
+ "description": "Status of the entity.",
+ "$ref": "../../type/status.json"
+ },
+ "dataProducts" : {
+ "description": "List of data products this entity is part of.",
+ "$ref" : "../../type/entityReferenceList.json"
+ },
+ "dataContract": {
+ "description": "Reference to the data contract for this entity.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "domains" : {
+ "description": "Domains the Dashboard service belongs to.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "followers": {
+ "description": "Followers of this entity.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "ingestionRunner" : {
+ "description": "The ingestion agent responsible for executing the ingestion pipeline.",
+ "$ref": "../../type/entityReference.json"
+ }
+ },
+ "required": ["id", "name", "serviceType"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/databaseService.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/databaseService.json
new file mode 100644
index 000000000000..8cef874bd934
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/databaseService.json
@@ -0,0 +1,532 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/databaseService.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Database Service",
+ "description": "This schema defines the `Database Service` is a service such as MySQL, BigQuery, Redshift, Postgres, or Snowflake. Alternative terms such as Database Cluster, Database Server instance are also used for database service.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.services.DatabaseService",
+ "javaInterfaces": [
+ "org.openmetadata.schema.EntityInterface",
+ "org.openmetadata.schema.ServiceEntityInterface"
+ ],
+ "definitions": {
+ "databaseServiceType": {
+ "description": "Type of database service such as MySQL, BigQuery, Snowflake, Redshift, Postgres...",
+ "javaInterfaces": ["org.openmetadata.schema.EnumInterface"],
+ "type": "string",
+ "enum": [
+ "BigQuery",
+ "BigTable",
+ "Mysql",
+ "Redshift",
+ "Snowflake",
+ "Postgres",
+ "Timescale",
+ "Mssql",
+ "MicrosoftAccess",
+ "Oracle",
+ "Athena",
+ "Hive",
+ "Impala",
+ "Presto",
+ "Trino",
+ "Vertica",
+ "Glue",
+ "MariaDB",
+ "Druid",
+ "Db2",
+ "Clickhouse",
+ "Databricks",
+ "AzureSQL",
+ "DynamoDB",
+ "SingleStore",
+ "SQLite",
+ "DeltaLake",
+ "Salesforce",
+ "PinotDB",
+ "Datalake",
+ "DomoDatabase",
+ "QueryLog",
+ "CustomDatabase",
+ "Dbt",
+ "SapHana",
+ "MongoDB",
+ "Cassandra",
+ "Couchbase",
+ "Greenplum",
+ "Doris",
+ "StarRocks",
+ "UnityCatalog",
+ "SAS",
+ "Teradata",
+ "SapErp",
+ "Synapse",
+ "Exasol",
+ "Cockroach",
+ "SSAS",
+ "Epic",
+ "ServiceNow",
+ "Dremio",
+ "MicrosoftFabric",
+ "BurstIQ",
+ "Informix",
+ "Iomete"
+ ],
+ "javaEnums": [
+ {
+ "name": "BigQuery"
+ },
+ {
+ "name": "BigTable"
+ },
+ {
+ "name": "Mysql"
+ },
+ {
+ "name": "Redshift"
+ },
+ {
+ "name": "Snowflake"
+ },
+ {
+ "name": "Postgres"
+ },
+ {
+ "name": "Timescale"
+ },
+ {
+ "name": "Mssql"
+ },
+ {
+ "name": "MicrosoftAccess"
+ },
+ {
+ "name": "Oracle"
+ },
+ {
+ "name": "Athena"
+ },
+ {
+ "name": "Hive"
+ },
+ {
+ "name": "Impala"
+ },
+ {
+ "name": "Presto"
+ },
+ {
+ "name": "Trino"
+ },
+ {
+ "name": "Vertica"
+ },
+ {
+ "name": "Glue"
+ },
+ {
+ "name": "MariaDB"
+ },
+ {
+ "name": "Druid"
+ },
+ {
+ "name": "Db2"
+ },
+ {
+ "name": "Clickhouse"
+ },
+ {
+ "name": "Databricks"
+ },
+ {
+ "name": "AzureSQL"
+ },
+ {
+ "name": "DynamoDB"
+ },
+ {
+ "name": "SingleStore"
+ },
+ {
+ "name": "SQLite"
+ },
+ {
+ "name": "DeltaLake"
+ },
+ {
+ "name": "Salesforce"
+ },
+ {
+ "name": "PinotDB"
+ },
+ {
+ "name": "Datalake"
+ },
+ {
+ "name": "DomoDatabase"
+ },
+ {
+ "name": "QueryLog"
+ },
+ {
+ "name": "CustomDatabase"
+ },
+ {
+ "name": "Dbt"
+ },
+ {
+ "name": "SapHana"
+ },
+ {
+ "name": "MongoDB"
+ },
+ {
+ "name": "Cassandra"
+ },
+ {
+ "name": "Couchbase"
+ },
+ {
+ "name": "Greenplum"
+ },
+ {
+ "name": "Doris"
+ },
+ {
+ "name": "StarRocks"
+ },
+ {
+ "name": "UnityCatalog"
+ },
+ {
+ "name": "SAS"
+ },
+ {
+ "name": "Teradata"
+ },
+ {
+ "name": "SapErp"
+ },
+ {
+ "name": "Synapse"
+ },
+ {
+ "name": "Exasol"
+ },
+ {
+ "name": "Cockroach"
+ },
+ {
+ "name": "SSAS"
+ },
+ {
+ "name": "Epic"
+ },
+ {
+ "name": "ServiceNow"
+ },
+ {
+ "name": "Dremio"
+ },
+ {
+ "name": "MicrosoftFabric"
+ },
+ {
+ "name": "BurstIQ"
+ },
+ {
+ "name": "Informix"
+ },
+ {
+ "name": "Iomete"
+ }
+ ]
+ },
+ "databaseConnection": {
+ "type": "object",
+ "description": "Database Connection.",
+ "javaInterfaces": [
+ "org.openmetadata.schema.ServiceConnectionEntityInterface"
+ ],
+ "properties": {
+ "config": {
+ "mask": true,
+ "oneOf": [
+ {
+ "$ref": "./connections/database/bigQueryConnection.json"
+ },
+ {
+ "$ref": "./connections/database/bigTableConnection.json"
+ },
+ {
+ "$ref": "./connections/database/athenaConnection.json"
+ },
+ {
+ "$ref": "./connections/database/azureSQLConnection.json"
+ },
+ {
+ "$ref": "./connections/database/clickhouseConnection.json"
+ },
+ {
+ "$ref": "./connections/database/databricksConnection.json"
+ },
+ {
+ "$ref": "./connections/database/db2Connection.json"
+ },
+ {
+ "$ref": "./connections/database/deltaLakeConnection.json"
+ },
+ {
+ "$ref": "./connections/database/druidConnection.json"
+ },
+ {
+ "$ref": "./connections/database/dynamoDBConnection.json"
+ },
+ {
+ "$ref": "./connections/database/glueConnection.json"
+ },
+ {
+ "$ref": "./connections/database/hiveConnection.json"
+ },
+ {
+ "$ref": "./connections/database/impalaConnection.json"
+ },
+ {
+ "$ref": "./connections/database/mariaDBConnection.json"
+ },
+ {
+ "$ref": "./connections/database/mssqlConnection.json"
+ },
+ {
+ "$ref": "./connections/database/microsoftAccessConnection.json"
+ },
+ {
+ "$ref": "./connections/database/mysqlConnection.json"
+ },
+ {
+ "$ref": "./connections/database/sqliteConnection.json"
+ },
+ {
+ "$ref": "./connections/database/oracleConnection.json"
+ },
+ {
+ "$ref": "./connections/database/postgresConnection.json"
+ },
+ {
+ "$ref": "./connections/database/timescaleConnection.json"
+ },
+ {
+ "$ref": "./connections/database/prestoConnection.json"
+ },
+ {
+ "$ref": "./connections/database/redshiftConnection.json"
+ },
+ {
+ "$ref": "./connections/database/salesforceConnection.json"
+ },
+ {
+ "$ref": "./connections/database/singleStoreConnection.json"
+ },
+ {
+ "$ref": "./connections/database/snowflakeConnection.json"
+ },
+ {
+ "$ref": "./connections/database/trinoConnection.json"
+ },
+ {
+ "$ref": "./connections/database/verticaConnection.json"
+ },
+ {
+ "$ref": "./connections/database/pinotDBConnection.json"
+ },
+ {
+ "$ref": "./connections/database/datalakeConnection.json"
+ },
+ {
+ "$ref": "./connections/database/domoDatabaseConnection.json"
+ },
+ {
+ "$ref": "./connections/database/customDatabaseConnection.json"
+ },
+ {
+ "$ref": "./connections/database/sapHanaConnection.json"
+ },
+ {
+ "$ref": "./connections/database/mongoDBConnection.json"
+ },
+ {
+ "$ref": "./connections/database/cassandraConnection.json"
+ },
+ {
+ "$ref": "./connections/database/couchbaseConnection.json"
+ },
+ {
+ "$ref": "./connections/database/greenplumConnection.json"
+ },
+ {
+ "$ref": "./connections/database/dorisConnection.json"
+ },
+ {
+ "$ref": "./connections/database/starrocksConnection.json"
+ },
+ {
+ "$ref": "./connections/database/unityCatalogConnection.json"
+ },
+ {
+ "$ref": "./connections/database/sasConnection.json"
+ },
+ {
+ "$ref": "./connections/database/teradataConnection.json"
+ },
+ {
+ "$ref": "./connections/database/sapErpConnection.json"
+ },
+ {
+ "$ref": "./connections/database/synapseConnection.json"
+ },
+ {
+ "$ref": "./connections/database/exasolConnection.json"
+ },
+ {
+ "$ref": "./connections/database/cockroachConnection.json"
+ },
+ {
+ "$ref": "./connections/database/ssasConnection.json"
+ },
+ {
+ "$ref": "./connections/database/epicConnection.json"
+ },
+ {
+ "$ref": "./connections/database/serviceNowConnection.json"
+ },
+ {
+ "$ref": "./connections/database/dremioConnection.json"
+ },
+ {
+ "$ref": "./connections/database/microsoftFabricConnection.json"
+ },
+ {
+ "$ref": "./connections/database/burstIQConnection.json"
+ },
+ {
+ "$ref": "./connections/database/informixConnection.json"
+ },
+ {
+ "$ref": "./connections/database/iometeConnection.json"
+ }
+ ]
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier of this database service instance.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name that identifies this database service.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "fullyQualifiedName": {
+ "description": "FullyQualifiedName same as `name`.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this database service.",
+ "type": "string"
+ },
+ "serviceType": {
+ "description": "Type of database service such as MySQL, BigQuery, Snowflake, Redshift, Postgres...",
+ "$ref": "#/definitions/databaseServiceType"
+ },
+ "description": {
+ "description": "Description of a database service instance.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "connection": {
+ "$ref": "#/definitions/databaseConnection"
+ },
+ "pipelines": {
+ "description": "References to pipelines deployed for this database service to extract metadata, usage, lineage etc..",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "testConnectionResult": {
+ "description": "Last test connection results for this service",
+ "$ref": "connections/testConnectionResult.json"
+ },
+ "tags": {
+ "description": "Tags for this Database Service.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": []
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "owners": {
+ "description": "Owners of this database service.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this database service.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "followers": {
+ "description": "Followers of this entity.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "entityStatus": {
+ "description": "Status of the entity.",
+ "$ref": "../../type/status.json"
+ },
+ "dataProducts" : {
+ "description": "List of data products this entity is part of.",
+ "$ref" : "../../type/entityReferenceList.json"
+ },
+ "dataContract": {
+ "description": "Reference to the data contract for this entity.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "domains" : {
+ "description": "Domains the Database service belongs to.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "ingestionRunner" : {
+ "description": "The ingestion agent responsible for executing the ingestion pipeline.",
+ "$ref": "../../type/entityReference.json"
+ }
+ },
+ "required": ["id", "name", "serviceType"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/driveService.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/driveService.json
new file mode 100644
index 000000000000..cca785b4fd55
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/driveService.json
@@ -0,0 +1,173 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/driveService.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Drive Service",
+ "description": "This schema defines the Drive Service entity, such as Google Drive.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.services.DriveService",
+ "javaInterfaces": [
+ "org.openmetadata.schema.EntityInterface",
+ "org.openmetadata.schema.ServiceEntityInterface"
+ ],
+ "definitions": {
+ "driveServiceType": {
+ "description": "Type of drive service such as Google Drive...",
+ "javaInterfaces": [
+ "org.openmetadata.schema.EnumInterface"
+ ],
+ "type": "string",
+ "enum": [
+ "GoogleDrive",
+ "SharePoint",
+ "Sftp",
+ "CustomDrive"
+ ],
+ "javaEnums": [
+ {
+ "name": "GoogleDrive"
+ },
+ {
+ "name": "SharePoint"
+ },
+ {
+ "name": "Sftp"
+ },
+ {
+ "name": "CustomDrive"
+ }
+ ]
+ },
+ "driveConnection": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.DriveConnection",
+ "description": "Drive Connection.",
+ "javaInterfaces": [
+ "org.openmetadata.schema.ServiceConnectionEntityInterface"
+ ],
+ "properties": {
+ "config": {
+ "mask": true,
+ "oneOf": [
+ {
+ "$ref": "connections/drive/googleDriveConnection.json"
+ },
+ {
+ "$ref": "connections/drive/sharePointConnection.json"
+ },
+ {
+ "$ref": "connections/drive/sftpConnection.json"
+ },
+ {
+ "$ref": "connections/drive/customDriveConnection.json"
+ }
+ ]
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier of this drive service instance.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name that identifies this drive service.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "fullyQualifiedName": {
+ "description": "FullyQualifiedName same as `name`.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this drive service.",
+ "type": "string"
+ },
+ "serviceType": {
+ "description": "Type of drive service such as Google Drive...",
+ "$ref": "#/definitions/driveServiceType"
+ },
+ "description": {
+ "description": "Description of a drive service instance.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "connection": {
+ "$ref": "#/definitions/driveConnection"
+ },
+ "pipelines": {
+ "description": "References to pipelines deployed for this drive service to extract metadata, usage, lineage etc..",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "testConnectionResult": {
+ "description": "Last test connection results for this service",
+ "$ref": "connections/testConnectionResult.json"
+ },
+ "tags": {
+ "description": "Tags for this drive Service.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": []
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this drive service.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "owners": {
+ "description": "Owners of this drive service.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "dataProducts": {
+ "description": "List of data products this entity is part of.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "dataContract": {
+ "description": "Reference to the data contract for this entity.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "followers": {
+ "description": "Followers of this entity.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "domains" : {
+ "description": "Domains the Drive service belongs to.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "ingestionRunner": {
+ "description": "The ingestion agent responsible for executing the ingestion pipeline.",
+ "$ref": "../../type/entityReference.json"
+ }
+ },
+ "required": ["id", "name", "serviceType"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/ingestionPipelines/ingestionPipeline.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/ingestionPipelines/ingestionPipeline.json
new file mode 100644
index 000000000000..6008e2856ca2
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/ingestionPipelines/ingestionPipeline.json
@@ -0,0 +1,267 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/ingestionPipelines/ingestionPipeline.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "IngestionPipeline",
+ "description": "Ingestion Pipeline Config is used to set up a DAG and deploy. This entity is used to setup metadata/quality pipelines on Apache Airflow.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.services.ingestionPipelines.IngestionPipeline",
+ "javaInterfaces": ["org.openmetadata.schema.EntityInterface"],
+ "definitions": {
+ "pipelineType": {
+ "description": "Type of Pipeline - metadata, usage",
+ "type": "string",
+ "javaType": "org.openmetadata.schema.entity.services.ingestionPipelines.PipelineType",
+ "enum": ["metadata", "usage", "lineage", "profiler", "autoClassification", "TestSuite", "dataInsight", "elasticSearchReindex", "dbt", "application"]
+ },
+ "pipelineStatus": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.services.ingestionPipelines.PipelineStatus",
+ "description": "This defines runtime status of Pipeline.",
+ "properties": {
+ "runId": {
+ "description": "Pipeline unique run ID.",
+ "type": "string"
+ },
+ "pipelineState": {
+ "description": "Pipeline status denotes if its failed or succeeded.",
+ "type": "string",
+ "javaType": "org.openmetadata.schema.entity.services.ingestionPipelines.PipelineStatusType",
+ "enum": ["queued","success","failed","running","partialSuccess","stopped"]
+ },
+ "startDate": {
+ "description": "startDate of the pipeline run for this particular execution.",
+ "$ref": "../../../type/basic.json#/definitions/timestamp"
+ },
+ "timestamp": {
+ "description": "executionDate of the pipeline run for this particular execution.",
+ "$ref": "../../../type/basic.json#/definitions/timestamp"
+ },
+ "endDate": {
+ "description": "endDate of the pipeline run for this particular execution.",
+ "$ref": "../../../type/basic.json#/definitions/timestamp"
+ },
+ "status": {
+ "description": "Ingestion Pipeline summary status. Informed at the end of the execution.",
+ "$ref": "status.json#/definitions/ingestionStatus"
+ },
+ "config": {
+ "description": "Pipeline configuration for this particular execution.",
+ "$ref": "../../../type/basic.json#/definitions/map"
+ },
+ "metadata": {
+ "description": "Metadata for the pipeline status.",
+ "$ref": "../../../type/basic.json#/definitions/map"
+ }
+ },
+ "additionalProperties": false
+ },
+ "airflowConfig": {
+ "description": "Properties to configure the Airflow pipeline that will run the workflow.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.services.ingestionPipelines.AirflowConfig",
+ "properties": {
+ "pausePipeline": {
+ "description": "pause the pipeline from running once the deploy is finished successfully.",
+ "type": "boolean",
+ "default": false
+ },
+ "concurrency": {
+ "description": "Concurrency of the Pipeline.",
+ "type": "integer",
+ "default": 1
+ },
+ "startDate": {
+ "description": "Start date of the pipeline.",
+ "$ref": "../../../type/basic.json#/definitions/dateTime"
+ },
+ "endDate": {
+ "description": "End Date of the pipeline.",
+ "$ref": "../../../type/basic.json#/definitions/dateTime"
+ },
+ "pipelineTimezone": {
+ "description": "Timezone in which pipeline going to be scheduled.",
+ "type": "string",
+ "default": "UTC"
+ },
+ "retries": {
+ "description": "Retry pipeline in case of failure.",
+ "type": "integer",
+ "default": 0
+ },
+ "retryDelay": {
+ "description": "Delay between retries in seconds.",
+ "type": "integer",
+ "default": 300
+ },
+ "pipelineCatchup": {
+ "description": "Run past executions if the start date is in the past.",
+ "type": "boolean",
+ "default": false
+ },
+ "scheduleInterval": {
+ "description": "Scheduler Interval for the pipeline in cron format.",
+ "type": "string"
+ },
+ "maxActiveRuns": {
+ "description": "Maximum Number of active runs.",
+ "type": "integer",
+ "default": 1
+ },
+ "workflowTimeout": {
+ "description": "Timeout for the workflow in seconds.",
+ "type": "integer",
+ "default": null
+ },
+ "workflowDefaultView": {
+ "description": "Default view in Airflow.",
+ "type": "string",
+ "default": "tree"
+ },
+ "workflowDefaultViewOrientation": {
+ "description": "Default view Orientation in Airflow.",
+ "type": "string",
+ "default": "LR"
+ },
+ "email": {
+ "description": "Email to notify workflow status.",
+ "$ref": "../../../type/basic.json#/definitions/email"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier that identifies this pipeline.",
+ "$ref": "../../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name that identifies this pipeline instance uniquely.",
+ "$ref": "../../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this Pipeline.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the Pipeline.",
+ "$ref": "../../../type/basic.json#/definitions/markdown"
+ },
+ "pipelineType": {
+ "$ref": "#/definitions/pipelineType"
+ },
+ "owners": {
+ "description": "Owners of this Pipeline.",
+ "$ref": "../../../type/entityReferenceList.json",
+ "default": null
+ },
+ "fullyQualifiedName": {
+ "description": "Name that uniquely identifies a Pipeline.",
+ "$ref": "../../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "sourceConfig": {
+ "$ref": "../../../metadataIngestion/workflow.json#/definitions/sourceConfig"
+ },
+ "openMetadataServerConnection": {
+ "$ref": "../connections/metadata/openMetadataConnection.json"
+ },
+ "airflowConfig": {
+ "$ref": "#/definitions/airflowConfig"
+ },
+ "service": {
+ "description": "Link to the service (such as database, messaging, storage services, etc. for which this ingestion pipeline ingests the metadata from.",
+ "$ref": "../../../type/entityReference.json"
+ },
+ "pipelineStatuses": {
+ "description": "Last of executions and status for the Pipeline.",
+ "$ref": "#/definitions/pipelineStatus"
+ },
+ "loggerLevel": {
+ "description": "Set the logging level for the workflow.",
+ "$ref": "../../../metadataIngestion/workflow.json#/definitions/logLevels"
+ },
+ "raiseOnError": {
+ "description": "Control if we want to flag the workflow as failed if we encounter any processing errors.",
+ "type": "boolean",
+ "default": true
+ },
+ "deployed": {
+ "description": "Indicates if the workflow has been successfully deployed to Airflow.",
+ "type": "boolean",
+ "default": false
+ },
+ "enabled": {
+ "description": "True if the pipeline is ready to be run in the next schedule. False if it is paused.",
+ "type": "boolean",
+ "default": true
+ },
+ "enableStreamableLogs": {
+ "description": "Enable real-time log streaming to the OpenMetadata server. When enabled, ingestion logs will be automatically shipped to the server's configured log storage backend (S3 or compatible).",
+ "type": "boolean",
+ "default": false
+ },
+ "href": {
+ "description": "Link to this ingestion pipeline resource.",
+ "$ref": "../../../type/basic.json#/definitions/href"
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "changeDescription": {
+ "description": "Change that led to this version of the entity.",
+ "$ref": "../../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "followers": {
+ "description": "Followers of this entity.",
+ "$ref": "../../../type/entityReferenceList.json"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "provider" : {
+ "$ref": "../../../type/basic.json#/definitions/providerType"
+ },
+ "domains" : {
+ "description": "Domains the asset belongs to. When not set, the asset inherits the domain from the parent it belongs to.",
+ "$ref": "../../../type/entityReferenceList.json"
+ },
+ "applicationType": {
+ "description": "Type of the application when pipelineType is 'application'.",
+ "type": "string"
+ },
+ "ingestionRunner" : {
+ "description": "The ingestion agent responsible for executing the ingestion pipeline.",
+ "$ref": "../../../type/entityReference.json"
+ },
+ "processingEngine": {
+ "description": "The processing engine responsible for executing the ingestion pipeline logic.",
+ "$ref": "../../../type/entityReference.json"
+ }
+ },
+ "required": [
+ "name",
+ "pipelineType",
+ "sourceConfig",
+ "airflowConfig"
+ ],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/ingestionPipelines/operationMetrics.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/ingestionPipelines/operationMetrics.json
new file mode 100644
index 000000000000..0cb5ac17b4b4
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/ingestionPipelines/operationMetrics.json
@@ -0,0 +1,162 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/ingestionPipelines/operationMetrics.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "OperationMetrics",
+ "description": "Unified schema for tracking operation metrics during ingestion pipelines. Uses free-form strings for flexible categorization across all connector types.",
+ "definitions": {
+ "operationSummary": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.services.ingestionPipelines.OperationSummary",
+ "description": "Aggregated summary of operations",
+ "properties": {
+ "count": {
+ "description": "Total number of operations",
+ "type": "integer",
+ "default": 0
+ },
+ "totalTimeMs": {
+ "description": "Total time spent on operations in milliseconds",
+ "type": "number"
+ },
+ "avgTimeMs": {
+ "description": "Average time per operation in milliseconds",
+ "type": "number"
+ },
+ "minTimeMs": {
+ "description": "Minimum operation time in milliseconds",
+ "type": "number"
+ },
+ "maxTimeMs": {
+ "description": "Maximum operation time in milliseconds",
+ "type": "number"
+ }
+ },
+ "additionalProperties": false
+ },
+ "operationMetric": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.services.ingestionPipelines.OperationMetric",
+ "description": "Single operation metric with flexible categorization",
+ "properties": {
+ "category": {
+ "description": "High-level category: db_queries, api_calls, entity_operations",
+ "type": "string"
+ },
+ "operation": {
+ "description": "Operation name - free form string like 'SELECT', 'GET:/dashboards', 'yield_columns'",
+ "type": "string"
+ },
+ "entityType": {
+ "description": "Entity type being operated on (Table, Dashboard, Pipeline, etc.) - free form string",
+ "type": "string"
+ },
+ "entityFqn": {
+ "description": "Fully qualified name of the entity if applicable",
+ "type": "string"
+ },
+ "timestamp": {
+ "description": "When the operation occurred",
+ "$ref": "../../../type/basic.json#/definitions/timestamp"
+ },
+ "durationMs": {
+ "description": "Duration of the operation in milliseconds",
+ "type": "integer"
+ },
+ "success": {
+ "description": "Whether the operation succeeded",
+ "type": "boolean",
+ "default": true
+ },
+ "errorMessage": {
+ "description": "Error message if operation failed",
+ "type": "string"
+ },
+ "metadata": {
+ "description": "Additional context (query text snippet, response size, etc.)",
+ "$ref": "../../../type/basic.json#/definitions/map"
+ }
+ },
+ "required": ["category", "operation", "timestamp"],
+ "additionalProperties": false
+ },
+ "operationMetricsBatch": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.services.ingestionPipelines.OperationMetricsBatch",
+ "description": "Batch of operation metrics for efficient transmission",
+ "properties": {
+ "runId": {
+ "description": "Pipeline run ID",
+ "type": "string"
+ },
+ "stepName": {
+ "description": "Name of the ingestion step",
+ "type": "string"
+ },
+ "batchTimestamp": {
+ "description": "When this batch was created",
+ "$ref": "../../../type/basic.json#/definitions/timestamp"
+ },
+ "metrics": {
+ "description": "List of operation metrics",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/operationMetric"
+ }
+ }
+ },
+ "required": ["runId", "stepName", "metrics"],
+ "additionalProperties": false
+ },
+ "operationMetricsAggregation": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.services.ingestionPipelines.OperationMetricsAggregation",
+ "description": "Aggregated operation metrics stored at pipeline completion",
+ "properties": {
+ "runId": {
+ "description": "Pipeline run ID",
+ "type": "string"
+ },
+ "timestamp": {
+ "description": "When this aggregation was created",
+ "$ref": "../../../type/basic.json#/definitions/timestamp"
+ },
+ "byCategory": {
+ "description": "Metrics aggregated by category -> operation -> entityType",
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/operationSummary"
+ }
+ }
+ }
+ },
+ "totalOperations": {
+ "description": "Total number of operations across all categories",
+ "type": "integer"
+ },
+ "totalSuccessful": {
+ "description": "Total successful operations",
+ "type": "integer"
+ },
+ "totalFailed": {
+ "description": "Total failed operations",
+ "type": "integer"
+ },
+ "sourceTimeMs": {
+ "description": "Total time spent fetching data from source systems (milliseconds)",
+ "type": "number"
+ },
+ "sinkTimeMs": {
+ "description": "Total time spent processing and sinking data to OpenMetadata (milliseconds)",
+ "type": "number"
+ }
+ },
+ "required": ["runId", "timestamp"],
+ "additionalProperties": false
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/ingestionPipelines/operationMetricsBatch.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/ingestionPipelines/operationMetricsBatch.json
new file mode 100644
index 000000000000..b5737a7a6a11
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/ingestionPipelines/operationMetricsBatch.json
@@ -0,0 +1,108 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/ingestionPipelines/operationMetricsBatch.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "OperationMetricsBatch",
+ "description": "Batch of operation metrics for efficient transmission during ingestion pipeline execution",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.services.ingestionPipelines.OperationMetricsBatch",
+ "definitions": {
+ "operationSummary": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.services.ingestionPipelines.OperationSummary",
+ "description": "Aggregated summary of operations",
+ "properties": {
+ "count": {
+ "description": "Total number of operations",
+ "type": "integer",
+ "default": 0
+ },
+ "totalTimeMs": {
+ "description": "Total time spent on operations in milliseconds",
+ "type": "number"
+ },
+ "avgTimeMs": {
+ "description": "Average time per operation in milliseconds",
+ "type": "number"
+ },
+ "minTimeMs": {
+ "description": "Minimum operation time in milliseconds",
+ "type": "number"
+ },
+ "maxTimeMs": {
+ "description": "Maximum operation time in milliseconds",
+ "type": "number"
+ }
+ },
+ "additionalProperties": false
+ },
+ "operationMetric": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.services.ingestionPipelines.OperationMetric",
+ "description": "Single operation metric with flexible categorization",
+ "properties": {
+ "category": {
+ "description": "High-level category: db_queries, api_calls, entity_operations",
+ "type": "string"
+ },
+ "operation": {
+ "description": "Operation name - free form string like 'SELECT', 'GET:/dashboards', 'yield_columns'",
+ "type": "string"
+ },
+ "entityType": {
+ "description": "Entity type being operated on (Table, Dashboard, Pipeline, etc.) - free form string",
+ "type": "string"
+ },
+ "entityFqn": {
+ "description": "Fully qualified name of the entity if applicable",
+ "type": "string"
+ },
+ "timestamp": {
+ "description": "When the operation occurred",
+ "$ref": "../../../type/basic.json#/definitions/timestamp"
+ },
+ "durationMs": {
+ "description": "Duration of the operation in milliseconds",
+ "type": "integer"
+ },
+ "success": {
+ "description": "Whether the operation succeeded",
+ "type": "boolean",
+ "default": true
+ },
+ "errorMessage": {
+ "description": "Error message if operation failed",
+ "type": "string"
+ },
+ "metadata": {
+ "description": "Additional context (query text snippet, response size, etc.)",
+ "$ref": "../../../type/basic.json#/definitions/map"
+ }
+ },
+ "required": ["category", "operation", "timestamp"],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "runId": {
+ "description": "Pipeline run ID",
+ "type": "string"
+ },
+ "stepName": {
+ "description": "Name of the ingestion step",
+ "type": "string"
+ },
+ "batchTimestamp": {
+ "description": "When this batch was created",
+ "$ref": "../../../type/basic.json#/definitions/timestamp"
+ },
+ "metrics": {
+ "description": "List of operation metrics",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/operationMetric"
+ }
+ }
+ },
+ "required": ["runId", "stepName", "metrics"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/ingestionPipelines/pipelineServiceClientResponse.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/ingestionPipelines/pipelineServiceClientResponse.json
new file mode 100644
index 000000000000..dc4f9a18e920
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/ingestionPipelines/pipelineServiceClientResponse.json
@@ -0,0 +1,28 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/ingestionPipelines/pipelineServiceClientResponse.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "PipelineServiceClientResponse",
+ "description": "Object to send Status responses about your Ingestion Pipelines ops.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.services.ingestionPipelines.PipelineServiceClientResponse",
+ "properties": {
+ "code": {
+ "description": "Status code",
+ "type": "integer"
+ },
+ "reason": {
+ "description": "Extra information to be sent back to the client, such as error traces.",
+ "type": "string"
+ },
+ "platform": {
+ "description": "Orchestration platform used by the Pipeline Service Client.",
+ "type": "string"
+ },
+ "version": {
+ "description": "Ingestion version being used.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["code", "platform"]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/ingestionPipelines/progressUpdate.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/ingestionPipelines/progressUpdate.json
new file mode 100644
index 000000000000..dfabaa2d1dc1
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/ingestionPipelines/progressUpdate.json
@@ -0,0 +1,48 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/ingestionPipelines/progressUpdate.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "ProgressUpdate",
+ "description": "Real-time progress update for SSE streaming during ingestion pipeline execution",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.services.ingestionPipelines.ProgressUpdate",
+ "definitions": {
+ "progressUpdateType": {
+ "type": "string",
+ "javaType": "org.openmetadata.schema.entity.services.ingestionPipelines.ProgressUpdateType",
+ "description": "Type of progress update",
+ "enum": ["DISCOVERY", "PROCESSING", "STEP_COMPLETE", "PIPELINE_COMPLETE", "ERROR"]
+ }
+ },
+ "properties": {
+ "runId": {
+ "description": "Pipeline run ID",
+ "type": "string"
+ },
+ "timestamp": {
+ "description": "When this update was created",
+ "$ref": "../../../type/basic.json#/definitions/timestamp"
+ },
+ "updateType": {
+ "description": "Type of progress update",
+ "$ref": "#/definitions/progressUpdateType"
+ },
+ "stepName": {
+ "description": "Name of the current step",
+ "type": "string"
+ },
+ "progress": {
+ "description": "Progress by entity type (e.g., Database, DatabaseSchema, Table). Keys are entity types, values contain total, processed, and estimatedRemainingSeconds.",
+ "existingJavaType": "java.util.Map"
+ },
+ "currentEntity": {
+ "description": "FQN of the entity currently being processed",
+ "type": "string"
+ },
+ "message": {
+ "description": "Human-readable status message",
+ "type": "string"
+ }
+ },
+ "required": ["runId", "timestamp", "updateType"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/ingestionPipelines/reverseIngestionResponse.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/ingestionPipelines/reverseIngestionResponse.json
new file mode 100644
index 000000000000..e37851d27adf
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/ingestionPipelines/reverseIngestionResponse.json
@@ -0,0 +1,58 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/applications/reverseMetadata/reverseIngestionResponse.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "ReverseIngestionResponse",
+ "javaType": "org.openmetadata.schema.entity.services.ingestionPipelines.ReverseIngestionResponse",
+ "description": "Apply a set of operations on a service",
+ "type": "object",
+ "definitions": {
+ "reverseIngestionOperationResult": {
+ "javaType": "org.openmetadata.schema.entity.services.ingestionPipelines.reverseIngestionOperationResult",
+ "type": "object",
+ "properties": {
+ "id": {
+ "description": "The id of the operation",
+ "$ref": "../../../type/basic.json#/definitions/uuid"
+ },
+ "success": {
+ "description": "Whether the specific operation was successful",
+ "type": "boolean"
+ },
+ "message": {
+ "description": "Error message in case of failure",
+ "type": "string"
+ }
+ },
+ "required": [
+ "id",
+ "success"
+ ]
+ }
+ },
+ "properties": {
+ "serviceId": {
+ "description": "The id of the service to be modified",
+ "$ref": "../../../type/basic.json#/definitions/uuid"
+ },
+ "success": {
+ "description": "Whether the workflow was successful. Failure indicates a critical failure such as connection issues.",
+ "type": "boolean"
+ },
+ "message": {
+ "description": "Error message in case of failure",
+ "type": "string"
+ },
+ "results": {
+ "description": "List of operations to be performed on the service",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/reverseIngestionOperationResult"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "serviceId",
+ "results"
+ ]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/ingestionPipelines/status.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/ingestionPipelines/status.json
new file mode 100644
index 000000000000..e26b5464e15d
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/ingestionPipelines/status.json
@@ -0,0 +1,150 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/ingestionPipelines/status.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "IngestionStatusModel",
+ "description": "Ingestion detailed status",
+ "definitions": {
+ "stackTraceError": {
+ "title": "StackTraceError",
+ "type": "object",
+ "description": "Represents a failure status",
+ "properties": {
+ "name": {
+ "description": "Name of the asset with the error",
+ "type": "string"
+ },
+ "error": {
+ "description": "Error being handled",
+ "type": "string"
+ },
+ "stackTrace": {
+ "description": "Exception stack trace",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["name", "error"]
+ },
+ "stepSummary": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.services.ingestionPipelines.StepSummary",
+ "description": "Defines the summary status of each step executed in an Ingestion Pipeline.",
+ "properties": {
+ "name": {
+ "description": "Step name",
+ "type": "string"
+ },
+ "records": {
+ "description": "Number of successfully processed records.",
+ "type": "integer",
+ "default": 0
+ },
+ "updated_records": {
+ "description": "Number of successfully updated records.",
+ "type": "integer",
+ "default": 0
+ },
+ "warnings": {
+ "description": "Number of records raising warnings.",
+ "type": "integer",
+ "default": 0
+ },
+ "errors": {
+ "description": "Number of records with errors.",
+ "type": "integer",
+ "default": 0
+ },
+ "filtered": {
+ "description": "Number of filtered records.",
+ "type": "integer",
+ "default": 0
+ },
+ "failures": {
+ "description": "Sample of errors encountered in the step",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/stackTraceError"
+ }
+ },
+ "progress": {
+ "description": "Detailed progress tracking by entity type (databases, schemas, tables, stored procedures)",
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "properties": {
+ "total": {
+ "description": "Total number of entities discovered",
+ "type": "integer",
+ "default": 0
+ },
+ "processed": {
+ "description": "Number of entities processed",
+ "type": "integer",
+ "default": 0
+ },
+ "estimatedRemainingSeconds": {
+ "description": "Estimated remaining time in seconds for this entity type",
+ "type": "integer"
+ }
+ }
+ }
+ },
+ "operationMetrics": {
+ "description": "Operation metrics by category (db_queries, api_calls) -> operation -> entityType -> summary",
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "properties": {
+ "count": {
+ "description": "Total number of operations",
+ "type": "integer",
+ "default": 0
+ },
+ "totalTimeMs": {
+ "description": "Total time spent in milliseconds",
+ "type": "number"
+ },
+ "avgTimeMs": {
+ "description": "Average time per operation in milliseconds",
+ "type": "number"
+ },
+ "minTimeMs": {
+ "description": "Minimum operation time in milliseconds",
+ "type": "number"
+ },
+ "maxTimeMs": {
+ "description": "Maximum operation time in milliseconds",
+ "type": "number"
+ }
+ }
+ }
+ }
+ }
+ },
+ "sourceTimeMs": {
+ "description": "Total time spent fetching data from source systems (milliseconds)",
+ "type": "number"
+ },
+ "sinkTimeMs": {
+ "description": "Total time spent processing and sinking data to OpenMetadata (milliseconds)",
+ "type": "number"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["name"]
+ },
+ "ingestionStatus": {
+ "title": "IngestionStatus",
+ "description": "Summary for each step of the ingestion pipeline",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/stepSummary"
+ }
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/llmService.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/llmService.json
new file mode 100644
index 000000000000..07fbd7995e4a
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/llmService.json
@@ -0,0 +1,174 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/llmService.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "LLMService",
+ "description": "LLM Service Entity for managing Large Language Model providers such as OpenAI, Anthropic, Azure OpenAI, AWS Bedrock, etc.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.services.LLMService",
+ "javaInterfaces": [
+ "org.openmetadata.schema.EntityInterface",
+ "org.openmetadata.schema.ServiceEntityInterface"
+ ],
+ "definitions": {
+ "llmServiceType": {
+ "description": "Type of LLM service provider",
+ "type": "string",
+ "javaInterfaces": ["org.openmetadata.schema.EnumInterface"],
+ "enum": ["OpenAI", "Anthropic", "AzureOpenAI", "Bedrock", "VertexAI", "Ollama", "HuggingFace", "CustomLLM"],
+ "javaEnums": [
+ {"name": "OpenAI"},
+ {"name": "Anthropic"},
+ {"name": "AzureOpenAI"},
+ {"name": "Bedrock"},
+ {"name": "VertexAI"},
+ {"name": "Ollama"},
+ {"name": "HuggingFace"},
+ {"name": "CustomLLM"}
+ ]
+ },
+ "llmConnection": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.LLMConnection",
+ "description": "LLM Service Connection.",
+ "javaInterfaces": [
+ "org.openmetadata.schema.ServiceConnectionEntityInterface"
+ ],
+ "properties": {
+ "config": {
+ "mask": true,
+ "oneOf": [
+ {
+ "$ref": "./connections/llm/openAIConnection.json"
+ },
+ {
+ "$ref": "./connections/llm/anthropicConnection.json"
+ },
+ {
+ "$ref": "./connections/llm/azureOpenAIConnection.json"
+ },
+ {
+ "$ref": "./connections/llm/bedrockConnection.json"
+ },
+ {
+ "$ref": "./connections/llm/vertexAIConnection.json"
+ },
+ {
+ "$ref": "./connections/llm/ollamaConnection.json"
+ },
+ {
+ "$ref": "./connections/llm/huggingFaceConnection.json"
+ },
+ {
+ "$ref": "./connections/llm/customLLMConnection.json"
+ }
+ ]
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier of this LLM service instance",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name that identifies this LLM service",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "fullyQualifiedName": {
+ "description": "FullyQualifiedName same as `name`",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "serviceType": {
+ "description": "Type of LLM service provider",
+ "$ref": "#/definitions/llmServiceType"
+ },
+ "description": {
+ "description": "Description of this LLM service instance",
+ "type": "string"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this LLM service",
+ "type": "string"
+ },
+ "version": {
+ "description": "Metadata version of the entity",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time in Unix epoch milliseconds",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update",
+ "type": "string"
+ },
+ "models": {
+ "description": "LLM Models registered with this service",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "pipelines": {
+ "description": "References to pipelines deployed for this LLM service",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "connection": {
+ "$ref": "#/definitions/llmConnection"
+ },
+ "testConnectionResult": {
+ "description": "Last test connection results for this service",
+ "$ref": "connections/testConnectionResult.json"
+ },
+ "tags": {
+ "description": "Tags for this LLM Service",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": []
+ },
+ "owners": {
+ "description": "Owners of this LLM service",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this LLM service",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "changeDescription": {
+ "description": "Change that led to this version of the entity",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that led to this version of the entity",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted",
+ "type": "boolean",
+ "default": false
+ },
+ "dataProducts": {
+ "description": "List of data products this entity is part of",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "dataContract": {
+ "description": "Reference to the data contract for this entity.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "followers": {
+ "description": "Followers of this entity",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "domains": {
+ "description": "Domains the LLM service belongs to",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "ingestionRunner": {
+ "description": "The ingestion agent responsible for executing the ingestion pipeline",
+ "$ref": "../../type/entityReference.json"
+ }
+ },
+ "required": ["id", "name", "serviceType"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/mcpService.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/mcpService.json
new file mode 100644
index 000000000000..a3803c183a66
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/mcpService.json
@@ -0,0 +1,138 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/mcpService.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "McpService",
+ "description": "MCP (Model Context Protocol) Service for discovering and managing MCP servers. This service connects to MCP server configurations, registries, or individual servers to catalog tools, resources, and prompts for AI governance.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.services.McpService",
+ "javaInterfaces": [
+ "org.openmetadata.schema.EntityInterface",
+ "org.openmetadata.schema.ServiceEntityInterface"
+ ],
+ "definitions": {
+ "mcpServiceType": {
+ "description": "Type of MCP service - currently only Mcp is supported",
+ "type": "string",
+ "javaInterfaces": ["org.openmetadata.schema.EnumInterface"],
+ "enum": ["Mcp"],
+ "javaEnums": [
+ {"name": "Mcp"}
+ ]
+ },
+ "mcpConnection": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.McpConnection",
+ "description": "MCP Service Connection.",
+ "javaInterfaces": [
+ "org.openmetadata.schema.ServiceConnectionEntityInterface"
+ ],
+ "properties": {
+ "config": {
+ "mask": true,
+ "oneOf": [
+ {
+ "$ref": "./connections/mcp/mcpConnection.json"
+ }
+ ]
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier of this MCP service instance",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name that identifies this MCP service",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "fullyQualifiedName": {
+ "description": "FullyQualifiedName same as `name`",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "serviceType": {
+ "description": "Type of MCP service",
+ "$ref": "#/definitions/mcpServiceType"
+ },
+ "description": {
+ "description": "Description of the MCP service",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this MCP service",
+ "type": "string"
+ },
+ "version": {
+ "description": "Metadata version of the entity",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update",
+ "type": "string"
+ },
+ "pipelines": {
+ "description": "References to pipelines deployed for this MCP service to extract metadata",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "connection": {
+ "$ref": "#/definitions/mcpConnection"
+ },
+ "testConnectionResult": {
+ "description": "Result of the last test connection performed on this service",
+ "$ref": "connections/testConnectionResult.json"
+ },
+ "tags": {
+ "description": "Tags for this MCP Service.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": null
+ },
+ "owners": {
+ "description": "Owners of this MCP service",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this entity",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that led to this version of the entity",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted",
+ "type": "boolean",
+ "default": false
+ },
+ "dataProducts": {
+ "description": "List of data products this entity is part of",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "followers": {
+ "description": "Followers of this entity",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "domains": {
+ "description": "Domains the MCP service belongs to",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "ingestionRunner": {
+ "description": "The ingestion agent responsible for executing the ingestion pipeline",
+ "$ref": "../../type/entityReference.json"
+ }
+ },
+ "required": ["id", "name", "serviceType"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/messagingService.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/messagingService.json
new file mode 100644
index 000000000000..1100a85a3813
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/messagingService.json
@@ -0,0 +1,184 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/messagingService.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Messaging Service",
+ "description": "This schema defines the Messaging Service entity, such as Kafka and Pulsar.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.services.MessagingService",
+ "javaInterfaces": [
+ "org.openmetadata.schema.EntityInterface",
+ "org.openmetadata.schema.ServiceEntityInterface"
+ ],
+ "definitions": {
+ "messagingServiceType": {
+ "description": "Type of messaging service - Kafka or Pulsar.",
+ "type": "string",
+ "javaInterfaces": ["org.openmetadata.schema.EnumInterface"],
+ "enum": ["Kafka", "Redpanda", "Kinesis", "PubSub", "CustomMessaging"],
+ "javaEnums": [
+ {
+ "name": "Kafka"
+ },
+ {
+ "name": "Redpanda"
+ },
+ {
+ "name": "Kinesis"
+ },
+ {
+ "name": "PubSub"
+ },
+ {
+ "name": "CustomMessaging"
+ }
+ ]
+ },
+ "brokers": {
+ "description": "Multiple bootstrap addresses for Kafka. Single proxy address for Pulsar.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "default": null
+ },
+ "messagingConnection": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.MessagingConnection",
+ "description": "Dashboard Connection.",
+ "javaInterfaces": [
+ "org.openmetadata.schema.ServiceConnectionEntityInterface"
+ ],
+ "properties": {
+ "config": {
+ "mask": true,
+ "oneOf": [
+ {
+ "$ref": "./connections/messaging/kafkaConnection.json"
+ },
+ {
+ "$ref": "./connections/messaging/redpandaConnection.json"
+ },
+ {
+ "$ref": "./connections/messaging/kinesisConnection.json"
+ },
+ {
+ "$ref": "./connections/messaging/pubSubConnection.json"
+ },
+ {
+ "$ref": "connections/messaging/customMessagingConnection.json"
+ }
+ ]
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier of this messaging service instance.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name that identifies this messaging service.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "fullyQualifiedName": {
+ "description": "FullyQualifiedName same as `name`.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "serviceType": {
+ "description": "Type of messaging service such as Kafka or Pulsar...",
+ "$ref": "#/definitions/messagingServiceType"
+ },
+ "description": {
+ "description": "Description of a messaging service instance.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this messaging service. It could be title or label from the source services.",
+ "type": "string"
+ },
+ "connection": {
+ "$ref": "#/definitions/messagingConnection"
+ },
+ "pipelines": {
+ "description": "References to pipelines deployed for this messaging service to extract topic configs and schemas.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "testConnectionResult": {
+ "description": "Last test connection results for this service",
+ "$ref": "connections/testConnectionResult.json"
+ },
+ "tags": {
+ "description": "Tags for this Message Service.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": []
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "owners": {
+ "description": "Owners of this messaging service.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this messaging service.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "entityStatus": {
+ "description": "Status of the entity.",
+ "$ref": "../../type/status.json"
+ },
+ "dataProducts" : {
+ "description": "List of data products this entity is part of.",
+ "$ref" : "../../type/entityReferenceList.json"
+ },
+ "dataContract": {
+ "description": "Reference to the data contract for this entity.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "domains" : {
+ "description": "Domains the Messaging service belongs to.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "followers": {
+ "description": "Followers of this entity.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "ingestionRunner" : {
+ "description": "The ingestion agent responsible for executing the ingestion pipeline.",
+ "$ref": "../../type/entityReference.json"
+ }
+ },
+ "required": ["id", "name", "serviceType"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/metadataService.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/metadataService.json
new file mode 100644
index 000000000000..77daad3453f2
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/metadataService.json
@@ -0,0 +1,183 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/metadataService.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Metadata Service",
+ "description": "This schema defines the Metadata Service entity, such as Amundsen, Atlas etc.",
+ "javaType": "org.openmetadata.schema.entity.services.MetadataService",
+ "javaInterfaces": [
+ "org.openmetadata.schema.EntityInterface",
+ "org.openmetadata.schema.ServiceEntityInterface"
+ ],
+ "type": "object",
+ "definitions": {
+ "metadataServiceType": {
+ "description": "Type of database service such as Amundsen, Atlas...",
+ "javaInterfaces": ["org.openmetadata.schema.EnumInterface"],
+ "type": "string",
+ "enum": ["Amundsen", "MetadataES", "OpenMetadata", "Atlas", "Alation", "AlationSink", "Collibra"],
+ "javaEnums": [
+ {
+ "name": "Amundsen"
+ },
+ {
+ "name": "MetadataES"
+ },
+ {
+ "name": "OpenMetadataServer"
+ },
+ {
+ "name": "Atlas"
+ },
+ {
+ "name": "Alation"
+ },
+ {
+ "name": "AlationSink"
+ },
+ {
+ "name": "Collibra"
+ }
+ ]
+ },
+ "metadataConnection": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.services.MetadataConnection",
+ "javaInterfaces": [
+ "org.openmetadata.schema.ServiceConnectionEntityInterface"
+ ],
+ "description": "Metadata Service Connection.",
+ "properties": {
+ "config": {
+ "mask": true,
+ "oneOf": [
+ {
+ "$ref": "./connections/metadata/amundsenConnection.json"
+ },
+ {
+ "$ref": "./connections/metadata/metadataESConnection.json"
+ },
+ {
+ "$ref": "./connections/metadata/openMetadataConnection.json"
+ },
+ {
+ "$ref": "./connections/metadata/atlasConnection.json"
+ },
+ {
+ "$ref": "./connections/metadata/alationConnection.json"
+ },
+ {
+ "$ref": "./connections/metadata/alationSinkConnection.json"
+ },
+ {
+ "$ref": "./connections/metadata/collibraConnection.json"
+ }
+ ]
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier of this database service instance.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name that identifies this database service.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "fullyQualifiedName": {
+ "description": "FullyQualifiedName same as `name`.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this database service.",
+ "type": "string"
+ },
+ "serviceType": {
+ "description": "Type of database service such as MySQL, BigQuery, Snowflake, Redshift, Postgres...",
+ "$ref": "#/definitions/metadataServiceType"
+ },
+ "description": {
+ "description": "Description of a database service instance.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "connection": {
+ "$ref": "#/definitions/metadataConnection"
+ },
+ "pipelines": {
+ "description": "References to pipelines deployed for this database service to extract metadata, usage, lineage etc..",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "testConnectionResult": {
+ "description": "Last test connection results for this service",
+ "$ref": "connections/testConnectionResult.json"
+ },
+ "tags": {
+ "description": "Tags for this Metadata Service.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": []
+ },
+ "owners": {
+ "description": "Owners of this database service.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this database service.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "entityStatus": {
+ "description": "Status of the entity.",
+ "$ref": "../../type/status.json"
+ },
+ "provider" : {
+ "$ref": "../../type/basic.json#/definitions/providerType"
+ },
+ "followers": {
+ "description": "Followers of this entity.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "domains" : {
+ "description": "Domains the asset belongs to. When not set, the asset inherits the domain from the parent it belongs to.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "ingestionRunner" : {
+ "description": "The ingestion agent responsible for executing the ingestion pipeline.",
+ "$ref": "../../type/entityReference.json"
+ }
+ },
+ "required": ["id", "name", "serviceType"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/mlmodelService.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/mlmodelService.json
new file mode 100644
index 000000000000..10ec94ffd621
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/mlmodelService.json
@@ -0,0 +1,176 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/mlmodelService.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "MlModelService",
+ "description": "MlModel Service Entity, such as MlFlow.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.services.MlModelService",
+ "javaInterfaces": [
+ "org.openmetadata.schema.EntityInterface",
+ "org.openmetadata.schema.ServiceEntityInterface"
+ ],
+ "definitions": {
+ "mlModelServiceType": {
+ "description": "Type of MlModel service",
+ "type": "string",
+ "javaInterfaces": ["org.openmetadata.schema.EnumInterface"],
+ "enum": ["Mlflow", "Sklearn", "CustomMlModel", "SageMaker", "VertexAI"],
+ "javaEnums": [
+ {
+ "name": "Mlflow"
+ },
+ {
+ "name": "Sklearn"
+ },
+ {
+ "name": "CustomMlModel"
+ },
+ {
+ "name": "SageMaker"
+ },
+ {
+ "name": "VertexAI"
+ }
+ ]
+ },
+ "mlModelConnection": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.MlModelConnection",
+ "description": "MlModel Connection.",
+ "javaInterfaces": [
+ "org.openmetadata.schema.ServiceConnectionEntityInterface"
+ ],
+ "properties": {
+ "config": {
+ "mask": true,
+ "oneOf": [
+ {
+ "$ref": "./connections/mlmodel/mlflowConnection.json"
+ },
+ {
+ "$ref": "./connections/mlmodel/sklearnConnection.json"
+ },
+ {
+ "$ref": "./connections/mlmodel/customMlModelConnection.json"
+ },
+ {
+ "$ref": "./connections/mlmodel/sageMakerConnection.json"
+ },
+ {
+ "$ref": "./connections/mlmodel/vertexaiConnection.json"
+ }
+ ]
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier of this pipeline service instance.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name that identifies this pipeline service.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "fullyQualifiedName": {
+ "description": "FullyQualifiedName same as `name`.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "serviceType": {
+ "description": "Type of pipeline service such as Airflow or Prefect...",
+ "$ref": "#/definitions/mlModelServiceType"
+ },
+ "description": {
+ "description": "Description of a pipeline service instance.",
+ "type": "string"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this pipeline service. It could be title or label from the source services.",
+ "type": "string"
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "pipelines": {
+ "description": "References to pipelines deployed for this pipeline service to extract metadata",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "connection": {
+ "$ref": "#/definitions/mlModelConnection"
+ },
+ "testConnectionResult": {
+ "description": "Last test connection results for this service",
+ "$ref": "connections/testConnectionResult.json"
+ },
+ "tags": {
+ "description": "Tags for this MlModel Service.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": []
+ },
+ "owners": {
+ "description": "Owners of this pipeline service.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this pipeline service.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "entityStatus": {
+ "description": "Status of the entity.",
+ "$ref": "../../type/status.json"
+ },
+ "dataProducts" : {
+ "description": "List of data products this entity is part of.",
+ "$ref" : "../../type/entityReferenceList.json"
+ },
+ "dataContract": {
+ "description": "Reference to the data contract for this entity.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "followers": {
+ "description": "Followers of this entity.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "domains" : {
+ "description": "Domains the MLModel service belongs to.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "ingestionRunner" : {
+ "description": "The ingestion agent responsible for executing the ingestion pipeline.",
+ "$ref": "../../type/entityReference.json"
+ }
+ },
+ "required": ["id", "name", "serviceType"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/pipelineService.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/pipelineService.json
new file mode 100644
index 000000000000..649839fe1aed
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/pipelineService.json
@@ -0,0 +1,321 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/pipelineService.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Pipeline Service",
+ "description": "This schema defines the Pipeline Service entity, such as Airflow and Prefect.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.services.PipelineService",
+ "javaInterfaces": [
+ "org.openmetadata.schema.EntityInterface",
+ "org.openmetadata.schema.ServiceEntityInterface"
+ ],
+ "definitions": {
+ "pipelineServiceType": {
+ "description": "Type of pipeline service - Airflow or Prefect.",
+ "type": "string",
+ "javaInterfaces": [
+ "org.openmetadata.schema.EnumInterface"
+ ],
+ "enum": [
+ "Airflow",
+ "GluePipeline",
+ "KinesisFirehose",
+ "Airbyte",
+ "Fivetran",
+ "Flink",
+ "Dagster",
+ "Nifi",
+ "DomoPipeline",
+ "CustomPipeline",
+ "DatabricksPipeline",
+ "Spline",
+ "Spark",
+ "OpenLineage",
+ "KafkaConnect",
+ "DBTCloud",
+ "Matillion",
+ "Stitch",
+ "DataFactory",
+ "Wherescape",
+ "SSIS",
+ "Snowplow",
+ "Mulesoft",
+ "MicrosoftFabricPipeline"
+ ],
+ "javaEnums": [
+ {
+ "name": "Airflow"
+ },
+ {
+ "name": "GluePipeline"
+ },
+ {
+ "name": "KinesisFirehose"
+ },
+ {
+ "name": "Airbyte"
+ },
+ {
+ "name": "Fivetran"
+ },
+ {
+ "name": "Flink"
+ },
+ {
+ "name": "Dagster"
+ },
+ {
+ "name": "Nifi"
+ },
+ {
+ "name": "DomoPipeline"
+ },
+ {
+ "name": "CustomPipeline"
+ },
+ {
+ "name": "DatabricksPipeline"
+ },
+ {
+ "name": "Spline"
+ },
+ {
+ "name": "Spark"
+ },
+ {
+ "name": "OpenLineage"
+ },
+ {
+ "name": "KafkaConnect"
+ },
+ {
+ "name": "DBTCloud"
+ },
+ {
+ "name": "Matillion"
+ },
+ {
+ "name": "DataFactory"
+ },
+ {
+ "name": "Stitch"
+ },
+ {
+ "name": "Wherescape"
+ },
+ {
+ "name": "SSIS"
+ },
+ {
+ "name": "Snowplow"
+ },
+ {
+ "name": "Mulesoft"
+ },
+ {
+ "name": "MicrosoftFabricPipeline"
+ }
+ ]
+ },
+ "pipelineConnection": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.PipelineConnection",
+ "description": "Pipeline Connection.",
+ "javaInterfaces": [
+ "org.openmetadata.schema.ServiceConnectionEntityInterface"
+ ],
+ "properties": {
+ "config": {
+ "mask": true,
+ "oneOf": [
+ {
+ "$ref": "./connections/pipeline/airflowConnection.json"
+ },
+ {
+ "$ref": "./connections/pipeline/wherescapeConnection.json"
+ },
+ {
+ "$ref": "./connections/pipeline/ssisConnection.json"
+ },
+ {
+ "$ref": "./connections/pipeline/gluePipelineConnection.json"
+ },
+ {
+ "$ref": "./connections/pipeline/kinesisFirehoseConnection.json"
+ },
+ {
+ "$ref": "./connections/pipeline/airbyteConnection.json"
+ },
+ {
+ "$ref": "./connections/pipeline/fivetranConnection.json"
+ },
+ {
+ "$ref": "./connections/pipeline/flinkConnection.json"
+ },
+ {
+ "$ref": "./connections/pipeline/dagsterConnection.json"
+ },
+ {
+ "$ref": "./connections/pipeline/nifiConnection.json"
+ },
+ {
+ "$ref": "./connections/pipeline/domoPipelineConnection.json"
+ },
+ {
+ "$ref": "./connections/pipeline/customPipelineConnection.json"
+ },
+ {
+ "$ref": "./connections/pipeline/databricksPipelineConnection.json"
+ },
+ {
+ "$ref": "./connections/pipeline/splineConnection.json"
+ },
+ {
+ "$ref": "./connections/pipeline/sparkConnection.json"
+ },
+ {
+ "$ref": "./connections/pipeline/openLineageConnection.json"
+ },
+ {
+ "$ref": "./connections/pipeline/kafkaConnectConnection.json"
+ },
+ {
+ "$ref": "./connections/pipeline/dbtCloudConnection.json"
+ },
+ {
+ "$ref": "./connections/pipeline/matillionConnection.json"
+ },
+ {
+ "$ref": "./connections/pipeline/datafactoryConnection.json"
+ },
+ {
+ "$ref": "./connections/pipeline/stitchConnection.json"
+ },
+ {
+ "$ref": "./connections/pipeline/snowplowConnection.json"
+ },
+ {
+ "$ref": "./connections/pipeline/mulesoftConnection.json"
+ },
+ {
+ "$ref": "./connections/pipeline/microsoftFabricPipelineConnection.json"
+ }
+ ]
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier of this pipeline service instance.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name that identifies this pipeline service.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "fullyQualifiedName": {
+ "description": "FullyQualifiedName same as `name`.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "serviceType": {
+ "description": "Type of pipeline service such as Airflow or Prefect...",
+ "$ref": "#/definitions/pipelineServiceType"
+ },
+ "description": {
+ "description": "Description of a pipeline service instance.",
+ "type": "string"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this pipeline service. It could be title or label from the source services.",
+ "type": "string"
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "testConnectionResult": {
+ "description": "Last test connection results for this service",
+ "$ref": "connections/testConnectionResult.json"
+ },
+ "tags": {
+ "description": "Tags for this Pipeline Service.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": []
+ },
+ "pipelines": {
+ "description": "References to pipelines deployed for this pipeline service to extract metadata",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "connection": {
+ "$ref": "#/definitions/pipelineConnection"
+ },
+ "owners": {
+ "description": "Owners of this pipeline service.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this pipeline service.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "entityStatus": {
+ "description": "Status of the entity.",
+ "$ref": "../../type/status.json"
+ },
+ "dataProducts" : {
+ "description": "List of data products this entity is part of.",
+ "$ref" : "../../type/entityReferenceList.json"
+ },
+ "dataContract": {
+ "description": "Reference to the data contract for this entity.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "followers": {
+ "description": "Followers of this entity.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "domains" : {
+ "description": "Domains the Pipeline service belongs to.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "ingestionRunner" : {
+ "description": "The ingestion agent responsible for executing the ingestion pipeline.",
+ "$ref": "../../type/entityReference.json"
+ }
+ },
+ "required": [
+ "id",
+ "name",
+ "serviceType"
+ ],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/searchService.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/searchService.json
new file mode 100644
index 000000000000..ef10341c45dd
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/searchService.json
@@ -0,0 +1,170 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/searchService.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Search Service",
+ "description": "This schema defines the Search Service entity, such as ElasticSearch, OpenSearch.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.services.SearchService",
+ "javaInterfaces": [
+ "org.openmetadata.schema.EntityInterface",
+ "org.openmetadata.schema.ServiceEntityInterface"
+ ],
+ "definitions": {
+ "searchServiceType": {
+ "description": "Type of search service such as ElasticSearch or OpenSearch.",
+ "javaInterfaces": [
+ "org.openmetadata.schema.EnumInterface"
+ ],
+ "type": "string",
+ "enum": [
+ "ElasticSearch",
+ "OpenSearch",
+ "CustomSearch"
+ ],
+ "javaEnums": [
+ {
+ "name": "ElasticSearch"
+ },
+ {
+ "name": "OpenSearch"
+ },
+ {
+ "name": "CustomSearch"
+ }
+ ]
+ },
+ "searchConnection": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.SearchConnection",
+ "description": "search Connection.",
+ "javaInterfaces": [
+ "org.openmetadata.schema.ServiceConnectionEntityInterface"
+ ],
+ "properties": {
+ "config": {
+ "mask": true,
+ "oneOf": [
+ {
+ "$ref": "connections/search/elasticSearchConnection.json"
+ },
+ {
+ "$ref": "connections/search/openSearchConnection.json"
+ },
+ {
+ "$ref": "connections/search/customSearchConnection.json"
+ }
+ ]
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier of this search service instance.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name that identifies this search service.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "fullyQualifiedName": {
+ "description": "FullyQualifiedName same as `name`.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this search service.",
+ "type": "string"
+ },
+ "serviceType": {
+ "description": "Type of search service such as S3, GCS, AZURE...",
+ "$ref": "#/definitions/searchServiceType"
+ },
+ "description": {
+ "description": "Description of a search service instance.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "connection": {
+ "$ref": "#/definitions/searchConnection"
+ },
+ "pipelines": {
+ "description": "References to pipelines deployed for this search service to extract metadata etc..",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "testConnectionResult": {
+ "description": "Last test connection results for this service",
+ "$ref": "connections/testConnectionResult.json"
+ },
+ "tags": {
+ "description": "Tags for this search Service.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": []
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this search service.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "owners": {
+ "description": "Owners of this search service.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "entityStatus": {
+ "description": "Status of the entity.",
+ "$ref": "../../type/status.json"
+ },
+ "dataProducts" : {
+ "description": "List of data products this entity is part of.",
+ "$ref" : "../../type/entityReferenceList.json"
+ },
+ "dataContract": {
+ "description": "Reference to the data contract for this entity.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "followers": {
+ "description": "Followers of this entity.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "domains" : {
+ "description": "Domains the search service belongs to.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "ingestionRunner" : {
+ "description": "The ingestion agent responsible for executing the ingestion pipeline.",
+ "$ref": "../../type/entityReference.json"
+ }
+ },
+ "required": ["id", "name", "serviceType"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/securityService.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/securityService.json
new file mode 100644
index 000000000000..5d5a0f9d415d
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/securityService.json
@@ -0,0 +1,157 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/securityService.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Security Service",
+ "description": "This schema defines the Security Service entity, such as Apache Ranger.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.services.SecurityService",
+ "javaInterfaces": [
+ "org.openmetadata.schema.EntityInterface",
+ "org.openmetadata.schema.ServiceEntityInterface"
+ ],
+ "definitions": {
+ "securityServiceType": {
+ "title": "Security Service Type",
+ "description": "Type of security service - Apache Ranger, etc.",
+ "type": "string",
+ "javaInterfaces": [
+ "org.openmetadata.schema.EnumInterface"
+ ],
+ "enum": [
+ "Ranger"
+ ],
+ "javaEnums": [
+ {
+ "name": "Ranger"
+ }
+ ]
+ },
+ "securityConnection": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.SecurityConnection",
+ "description": "Security Connection.",
+ "javaInterfaces": [
+ "org.openmetadata.schema.ServiceConnectionEntityInterface"
+ ],
+ "properties": {
+ "config": {
+ "mask": true,
+ "oneOf": [
+ {
+ "$ref": "./connections/security/rangerConnection.json"
+ }
+ ]
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier of this security service instance.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name that identifies this security service.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "fullyQualifiedName": {
+ "description": "FullyQualifiedName same as `name`.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "serviceType": {
+ "description": "Type of security service such as Apache Ranger...",
+ "$ref": "#/definitions/securityServiceType"
+ },
+ "description": {
+ "description": "Description of a security service instance.",
+ "type": "string"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this security service. It could be title or label from the source services.",
+ "type": "string"
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "testConnectionResult": {
+ "description": "Last test connection results for this service",
+ "$ref": "connections/testConnectionResult.json"
+ },
+ "tags": {
+ "description": "Tags for this Security Service.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": []
+ },
+ "connection": {
+ "$ref": "#/definitions/securityConnection"
+ },
+ "pipelines": {
+ "description": "References to pipelines deployed for this security service to extract metadata, usage, lineage etc..",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "owners": {
+ "description": "Owners of this security service.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this security service.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "dataProducts": {
+ "description": "List of data products this entity is part of.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "dataContract": {
+ "description": "Reference to the data contract for this entity.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "followers": {
+ "description": "Followers of this entity.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "domains": {
+ "description": "Domains the security service belongs to.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "ingestionRunner": {
+ "description": "The ingestion agent responsible for executing the ingestion pipeline.",
+ "$ref": "../../type/entityReference.json"
+ }
+ },
+ "required": [
+ "id",
+ "name",
+ "serviceType"
+ ],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/serviceType.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/serviceType.json
new file mode 100644
index 000000000000..e8f8b85a244a
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/serviceType.json
@@ -0,0 +1,24 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/serviceType.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Service Type",
+ "description": "This schema defines the service types entities which requires a connection.",
+ "type": "string",
+ "javaType": "org.openmetadata.schema.entity.services.ServiceType",
+ "enum": [
+ "Dashboard",
+ "Database",
+ "Drive",
+ "Messaging",
+ "Metadata",
+ "MlModel",
+ "Pipeline",
+ "Storage",
+ "Search",
+ "Api",
+ "Security",
+ "LLM",
+ "Mcp"
+ ],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/storageService.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/storageService.json
new file mode 100644
index 000000000000..160abb5edd62
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/services/storageService.json
@@ -0,0 +1,177 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/storageService.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Storage Service",
+ "description": "This schema defines the Storage Service entity, such as S3, GCS or AZURE.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.services.StorageService",
+ "javaInterfaces": [
+ "org.openmetadata.schema.EntityInterface",
+ "org.openmetadata.schema.ServiceEntityInterface"
+ ],
+ "definitions": {
+ "storageServiceType": {
+ "description": "Type of storage service such as S3, GFS, AZURE...",
+ "javaInterfaces": [
+ "org.openmetadata.schema.EnumInterface"
+ ],
+ "type": "string",
+ "enum": [
+ "S3",
+ "ADLS",
+ "GCS",
+ "CustomStorage"
+ ],
+ "javaEnums": [
+ {
+ "name": "S3"
+ },
+ {
+ "name": "ADLS"
+ },
+ {
+ "name": "GCS"
+ },
+ {
+ "name": "CustomStorage"
+ }
+ ]
+ },
+ "storageConnection": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.StorageConnection",
+ "description": "Storage Connection.",
+ "javaInterfaces": [
+ "org.openmetadata.schema.ServiceConnectionEntityInterface"
+ ],
+ "properties": {
+ "config": {
+ "mask": true,
+ "oneOf": [
+ {
+ "$ref": "connections/storage/s3Connection.json"
+ },
+ {
+ "$ref": "connections/storage/adlsConnection.json"
+ },
+ {
+ "$ref": "connections/storage/gcsConnection.json"
+ },
+ {
+ "$ref": "connections/storage/customStorageConnection.json"
+ }
+ ]
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier of this storage service instance.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name that identifies this storage service.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "fullyQualifiedName": {
+ "description": "FullyQualifiedName same as `name`.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this storage service.",
+ "type": "string"
+ },
+ "serviceType": {
+ "description": "Type of storage service such as S3, GCS, AZURE...",
+ "$ref": "#/definitions/storageServiceType"
+ },
+ "description": {
+ "description": "Description of a storage service instance.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "connection": {
+ "$ref": "#/definitions/storageConnection"
+ },
+ "pipelines": {
+ "description": "References to pipelines deployed for this storage service to extract metadata, usage, lineage etc..",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "testConnectionResult": {
+ "description": "Last test connection results for this service",
+ "$ref": "connections/testConnectionResult.json"
+ },
+ "tags": {
+ "description": "Tags for this storage Service.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": []
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this storage service.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "owners": {
+ "description": "Owners of this storage service.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "entityStatus": {
+ "description": "Status of the entity.",
+ "$ref": "../../type/status.json"
+ },
+ "dataProducts" : {
+ "description": "List of data products this entity is part of.",
+ "$ref" : "../../type/entityReferenceList.json"
+ },
+ "dataContract": {
+ "description": "Reference to the data contract for this entity.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "followers": {
+ "description": "Followers of this entity.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "domains" : {
+ "description": "Domains the Storage service belongs to.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "ingestionRunner" : {
+ "description": "The ingestion agent responsible for executing the ingestion pipeline.",
+ "$ref": "../../type/entityReference.json"
+ }
+ },
+ "required": ["id", "name", "serviceType"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/tasks/task.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/tasks/task.json
new file mode 100644
index 000000000000..6f9364979455
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/tasks/task.json
@@ -0,0 +1,433 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/tasks/task.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Task",
+ "description": "A Task represents an actionable work item for data governance workflows such as data access requests, glossary approvals, metadata updates, and custom workflows. Tasks have their own lifecycle, assignments, and tracking capabilities.",
+ "javaInterfaces": ["org.openmetadata.schema.NamedEntityInterface"],
+ "javaType": "org.openmetadata.schema.entity.tasks.Task",
+ "type": "object",
+ "definitions": {
+ "taskCategory": {
+ "javaType": "org.openmetadata.schema.type.TaskCategory",
+ "description": "Category of task for grouping similar task types.",
+ "type": "string",
+ "enum": [
+ "Approval",
+ "DataAccess",
+ "MetadataUpdate",
+ "Incident",
+ "Review",
+ "Custom"
+ ],
+ "javaEnums": [
+ {"name": "Approval"},
+ {"name": "DataAccess"},
+ {"name": "MetadataUpdate"},
+ {"name": "Incident"},
+ {"name": "Review"},
+ {"name": "Custom"}
+ ]
+ },
+ "taskType": {
+ "javaType": "org.openmetadata.schema.type.TaskEntityType",
+ "description": "Type of task determining the workflow and required payload.",
+ "type": "string",
+ "enum": [
+ "GlossaryApproval",
+ "RequestApproval",
+ "DataAccessRequest",
+ "DescriptionUpdate",
+ "TagUpdate",
+ "OwnershipUpdate",
+ "TierUpdate",
+ "DomainUpdate",
+ "Suggestion",
+ "TestCaseResolution",
+ "IncidentResolution",
+ "PipelineReview",
+ "DataQualityReview",
+ "CustomTask"
+ ],
+ "javaEnums": [
+ {"name": "GlossaryApproval"},
+ {"name": "RequestApproval"},
+ {"name": "DataAccessRequest"},
+ {"name": "DescriptionUpdate"},
+ {"name": "TagUpdate"},
+ {"name": "OwnershipUpdate"},
+ {"name": "TierUpdate"},
+ {"name": "DomainUpdate"},
+ {"name": "Suggestion"},
+ {"name": "TestCaseResolution"},
+ {"name": "IncidentResolution"},
+ {"name": "PipelineReview"},
+ {"name": "DataQualityReview"},
+ {"name": "CustomTask"}
+ ]
+ },
+ "taskStatus": {
+ "javaType": "org.openmetadata.schema.type.TaskEntityStatus",
+ "description": "Current status of the task in its lifecycle.",
+ "type": "string",
+ "enum": [
+ "Open",
+ "InProgress",
+ "Pending",
+ "Approved",
+ "Rejected",
+ "Completed",
+ "Cancelled",
+ "Failed"
+ ],
+ "javaEnums": [
+ {"name": "Open"},
+ {"name": "InProgress"},
+ {"name": "Pending"},
+ {"name": "Approved"},
+ {"name": "Rejected"},
+ {"name": "Completed"},
+ {"name": "Cancelled"},
+ {"name": "Failed"}
+ ],
+ "default": "Open"
+ },
+ "taskPriority": {
+ "javaType": "org.openmetadata.schema.type.TaskPriority",
+ "description": "Priority level of the task.",
+ "type": "string",
+ "enum": ["Critical", "High", "Medium", "Low"],
+ "javaEnums": [
+ {"name": "Critical"},
+ {"name": "High"},
+ {"name": "Medium"},
+ {"name": "Low"}
+ ],
+ "default": "Medium"
+ },
+ "resolutionType": {
+ "javaType": "org.openmetadata.schema.type.TaskResolutionType",
+ "description": "How the task was resolved.",
+ "type": "string",
+ "enum": [
+ "Approved",
+ "Rejected",
+ "Completed",
+ "Cancelled",
+ "TimedOut",
+ "AutoApproved",
+ "AutoRejected"
+ ],
+ "javaEnums": [
+ {"name": "Approved"},
+ {"name": "Rejected"},
+ {"name": "Completed"},
+ {"name": "Cancelled"},
+ {"name": "TimedOut"},
+ {"name": "AutoApproved"},
+ {"name": "AutoRejected"}
+ ]
+ },
+ "taskResolution": {
+ "javaType": "org.openmetadata.schema.type.TaskResolution",
+ "description": "Details about how the task was resolved.",
+ "type": "object",
+ "properties": {
+ "type": {
+ "$ref": "#/definitions/resolutionType"
+ },
+ "resolvedBy": {
+ "description": "User who resolved the task.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "resolvedAt": {
+ "description": "Timestamp when the task was resolved.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "comment": {
+ "description": "Optional comment explaining the resolution.",
+ "type": "string"
+ },
+ "newValue": {
+ "description": "The new value that was applied when task was resolved (for update tasks).",
+ "type": "string"
+ },
+ "payload": {
+ "description": "Structured resolution data submitted via the transition form at resolution time.",
+ "existingJavaType": "java.lang.Object",
+ "type": "object",
+ "additionalProperties": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "externalReference": {
+ "javaType": "org.openmetadata.schema.type.TaskExternalReference",
+ "description": "Reference to an external system like JIRA or ServiceNow.",
+ "type": "object",
+ "properties": {
+ "system": {
+ "description": "Name of the external system (e.g., 'jira', 'serviceNow', 'asana', 'github').",
+ "type": "string"
+ },
+ "externalId": {
+ "description": "ID in the external system (e.g., JIRA issue key).",
+ "type": "string"
+ },
+ "externalUrl": {
+ "description": "URL to view the item in the external system.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "syncStatus": {
+ "description": "Status of sync with external system.",
+ "type": "string",
+ "enum": ["synced", "pending", "conflict", "error"],
+ "default": "synced"
+ },
+ "lastSyncedAt": {
+ "description": "Timestamp of last sync with external system.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ }
+ },
+ "required": ["system", "externalId"],
+ "additionalProperties": false
+ },
+ "taskComment": {
+ "javaType": "org.openmetadata.schema.type.TaskComment",
+ "description": "A comment on a task.",
+ "type": "object",
+ "properties": {
+ "id": {
+ "description": "Unique identifier for the comment.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "message": {
+ "description": "Comment content in Markdown format.",
+ "type": "string"
+ },
+ "author": {
+ "description": "User who posted the comment.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "createdAt": {
+ "description": "Timestamp when comment was posted.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "reactions": {
+ "description": "Reactions to the comment.",
+ "$ref": "../../type/reaction.json#/definitions/reactionList"
+ }
+ },
+ "required": ["id", "message", "author", "createdAt"],
+ "additionalProperties": false
+ },
+ "taskAvailableTransition": {
+ "javaType": "org.openmetadata.schema.type.TaskAvailableTransition",
+ "description": "A workflow transition currently available for this task.",
+ "type": "object",
+ "properties": {
+ "id": {
+ "description": "Stable transition identifier used when resolving the task.",
+ "type": "string"
+ },
+ "label": {
+ "description": "Human-readable label shown in the UI for the transition.",
+ "type": "string"
+ },
+ "targetStageId": {
+ "description": "Workflow stage identifier reached after this transition.",
+ "type": "string"
+ },
+ "targetTaskStatus": {
+ "description": "Coarse task status mapped from the workflow stage after this transition.",
+ "$ref": "#/definitions/taskStatus"
+ },
+ "resolutionType": {
+ "description": "Optional resolution type emitted when this transition closes the task.",
+ "$ref": "#/definitions/resolutionType"
+ },
+ "formRef": {
+ "description": "Optional transition form reference in the bound TaskFormSchema.transitionForms object.",
+ "type": "string"
+ },
+ "requiresComment": {
+ "description": "Whether the transition requires a comment before submission.",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "required": ["id", "label", "targetStageId", "targetTaskStatus"],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier (UUID) for this task.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "taskId": {
+ "description": "Human-readable task identifier (e.g., TASK-00001).",
+ "type": "string",
+ "pattern": "^TASK-[0-9]+$"
+ },
+ "name": {
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display name for the task.",
+ "type": "string"
+ },
+ "fullyQualifiedName": {
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "description": {
+ "description": "Description of the task in Markdown format.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "category": {
+ "$ref": "#/definitions/taskCategory"
+ },
+ "type": {
+ "$ref": "#/definitions/taskType"
+ },
+ "status": {
+ "$ref": "#/definitions/taskStatus"
+ },
+ "priority": {
+ "$ref": "#/definitions/taskPriority"
+ },
+ "about": {
+ "description": "Reference to the entity this task is about.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "aboutFqnHash": {
+ "description": "Hash of the target entity's fully qualified name for efficient querying. Computed from about.fullyQualifiedName using FullyQualifiedName.buildHash().",
+ "type": "string"
+ },
+ "domains": {
+ "description": "Domains this task belongs to, inherited from the target entity for visibility scoping.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "createdBy": {
+ "description": "User who created this task.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "createdById": {
+ "description": "UUID of the user who created this task. Stored in JSON for efficient querying via generated column index.",
+ "type": "string"
+ },
+ "assignees": {
+ "description": "Users or teams assigned to complete this task.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "reviewers": {
+ "description": "Users or teams who should review this task.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "watchers": {
+ "description": "Users following this task for updates.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "payload": {
+ "description": "Task-specific payload validated at runtime by the resolved TaskFormSchema for the task type and category.",
+ "existingJavaType": "java.lang.Object",
+ "type": "object",
+ "additionalProperties": true
+ },
+ "resolution": {
+ "description": "Resolution details when task is completed.",
+ "$ref": "#/definitions/taskResolution"
+ },
+ "dueDate": {
+ "description": "Due date for task completion.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "externalReference": {
+ "description": "Reference to external system (JIRA, ServiceNow, etc.).",
+ "$ref": "#/definitions/externalReference"
+ },
+ "workflowInstanceId": {
+ "description": "ID of the workflow instance managing this task.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "workflowDefinitionId": {
+ "description": "ID of the workflow definition bound to this task lifecycle.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "workflowStageId": {
+ "description": "Current workflow stage identifier for this task.",
+ "type": "string"
+ },
+ "workflowStageDisplayName": {
+ "description": "Human-readable workflow stage name shown to users.",
+ "type": "string"
+ },
+ "availableTransitions": {
+ "description": "Transitions available from the current workflow stage.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/taskAvailableTransition"
+ },
+ "default": []
+ },
+ "taskFormSchemaId": {
+ "description": "ID of the resolved TaskFormSchema used to validate and render this task.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "taskFormSchemaVersion": {
+ "description": "Version of the resolved TaskFormSchema captured when this task was created.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "comments": {
+ "description": "Comments on this task.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/taskComment"
+ },
+ "default": []
+ },
+ "commentCount": {
+ "description": "Number of comments on this task.",
+ "type": "integer",
+ "default": 0
+ },
+ "tags": {
+ "description": "Tags for this task.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ },
+ "default": []
+ },
+ "createdAt": {
+ "description": "Timestamp when the task was created.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update timestamp.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the last update.",
+ "type": "string"
+ },
+ "href": {
+ "description": "Link to the resource.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the task.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When true indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "required": ["id", "name", "category", "type", "status", "createdBy"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/teams/persona.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/teams/persona.json
new file mode 100644
index 000000000000..c913febdac59
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/teams/persona.json
@@ -0,0 +1,78 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/teams/persona.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Persona",
+ "description": "This schema defines the Persona entity. A `Persona` is a job function associated with a user. An Example, Data Engineer or Data Consumer is a Persona of a user in Metadata world.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.teams.Persona",
+ "javaInterfaces": ["org.openmetadata.schema.EntityInterface"],
+ "properties": {
+ "id": {
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "A unique name of Persona. Example 'data engineer'",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "fullyQualifiedName": {
+ "description": "FullyQualifiedName same as `name`.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "displayName": {
+ "description": "Name used for display purposes. Example 'Data Steward'.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the persona.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this entity.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "uiCustomization": {
+ "description": "Reference to the UI customization configuration.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "users": {
+ "description": "Users that are assigned a persona.",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "domains" : {
+ "description": "Domains the asset belongs to. When not set, the asset inherits the domain from the parent it belongs to.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "default": {
+ "description": "When true, this persona is the system-wide default persona that will be applied to users who don't have any persona assigned or no default persona set.",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "required": ["id", "name"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/teams/role.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/teams/role.json
new file mode 100644
index 000000000000..994b17aac96a
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/teams/role.json
@@ -0,0 +1,98 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/teams/role.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Role",
+ "description": "A `Role` is a collection of `Policies` that provides access control. A user or a team can be assigned one or multiple roles that provide privileges to a user and members of a team to perform the job function.",
+ "javaType": "org.openmetadata.schema.entity.teams.Role",
+ "javaInterfaces": ["org.openmetadata.schema.EntityInterface"],
+ "type": "object",
+"definitions": {
+
+ },
+ "properties": {
+ "id": {
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "fullyQualifiedName": {
+ "description": "FullyQualifiedName same as `name`.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "displayName": {
+ "description": "Name used for display purposes. Example 'Data Consumer'.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the role.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this entity.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "allowDelete" : {
+ "description": "Some system roles can't be deleted",
+ "type" : "boolean"
+ },
+ "allowEdit" : {
+ "description": "Some system roles can't be edited",
+ "type" : "boolean"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "policies": {
+ "description": "Policies that is attached to this role.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "users": {
+ "description": "Users that have this role assigned to them.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "teams": {
+ "description": "Teams that have this role assigned to them.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "provider" : {
+ "$ref": "../../type/basic.json#/definitions/providerType"
+ },
+ "disabled" : {
+ "description": "System policy can't be deleted. Use this flag to disable them.",
+ "type": "boolean"
+ },
+ "domains" : {
+ "description": "Domains the asset belongs to. When not set, the asset inherits the domain from the parent it belongs to.",
+ "$ref": "../../type/entityReferenceList.json"
+ }
+ },
+ "required": ["id", "name"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/teams/team.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/teams/team.json
new file mode 100644
index 000000000000..82f9156adb16
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/teams/team.json
@@ -0,0 +1,150 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/teams/team.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Team",
+ "description": "This schema defines the Team entity. A `Team` is a group of zero or more users and/or other teams. Teams can own zero or more data assets. Hierarchical teams are supported `Organization` -> `BusinessUnit` -> `Division` -> `Department`.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.teams.Team",
+ "javaInterfaces": ["org.openmetadata.schema.EntityInterface"],
+ "definitions": {
+ "teamType" : {
+ "description" : "Organization is the highest level entity. An Organization has one of more Business Units, Division, Departments, Group, or Users. A Business Unit has one or more Divisions, Departments, Group, or Users. A Division has one or more Divisions, Departments, Group, or Users. A Department has one or more Departments, Group, or Users. A Group has only Users",
+ "type" : "string",
+ "enum": [
+ "Group",
+ "Department",
+ "Division",
+ "BusinessUnit",
+ "Organization"
+ ],
+ "default": "Group"
+ }
+ },
+ "properties": {
+ "id": {
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "teamType": {
+ "description": "Team type",
+ "$ref": "#/definitions/teamType"
+ },
+ "name": {
+ "description": "A unique name of the team typically the team ID from an identity provider. Example - group Id from LDAP.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "email": {
+ "description": "Email address of the team.",
+ "$ref": "../../type/basic.json#/definitions/email"
+ },
+ "fullyQualifiedName": {
+ "description": "FullyQualifiedName same as `name`.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "displayName": {
+ "description": "Name used for display purposes. Example 'Data Science team'.",
+ "type": "string"
+ },
+ "externalId": {
+ "description": "External identifier for the team from an external identity provider (e.g., Azure AD group ID).",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the team.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this entity.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "profile": {
+ "description": "Team profile information.",
+ "$ref": "../../type/profile.json"
+ },
+ "parents" : {
+ "description" : "Parent teams. For an `Organization` the `parent` is always null. A `BusinessUnit` always has only one parent of type `BusinessUnit` or an `Organization`. A `Division` can have multiple parents of type `BusinessUnit` or `Division`. A `Department` can have multiple parents of type `Division` or `Department`.",
+ "$ref" : "../../type/entityReferenceList.json"
+ },
+ "children" : {
+ "description" : "Children teams. An `Organization` can have `BusinessUnit`, `Division` or `Department` as children. A `BusinessUnit` can have `BusinessUnit`, `Division`, or `Department` as children. A `Division` can have `Division` or `Department` as children. A `Department` can have `Department` as children.",
+ "$ref" : "../../type/entityReferenceList.json"
+ },
+ "users": {
+ "description": "Users that are part of the team.",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "childrenCount": {
+ "description" : "Total count of Children teams.",
+ "type": "integer"
+ },
+ "userCount": {
+ "description": "Total count of users that are part of the team.",
+ "type": "integer"
+ },
+ "owns": {
+ "description": "List of entities owned by the team.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "owners": {
+ "description": "Owner of this team. ",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "isJoinable": {
+ "description": "Can any user join this team during sign up? Value of true indicates yes, and false no.",
+ "type": "boolean",
+ "default": true
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "defaultRoles": {
+ "description": "Default roles of a team. These roles will be inherited by all the users that are part of this team.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "inheritedRoles": {
+ "description": "Roles that a team is inheriting through membership in teams that have set team default roles.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "defaultPersona": {
+ "description": "Default persona for all users in this team. Only applicable to Group type teams.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "policies": {
+ "description": "Policies that is attached to this team.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "domains" : {
+ "description": "Domain the Team belongs to.",
+ "$ref": "../../type/entityReferenceList.json"
+ }
+ },
+ "required": ["id", "name"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/teams/teamHierarchy.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/teams/teamHierarchy.json
new file mode 100644
index 000000000000..ac87b5d2f1a7
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/teams/teamHierarchy.json
@@ -0,0 +1,58 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/teams/teamHierarchy.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Team Hierarchy",
+ "description": "This schema defines the Team entity with Hierarchy. Hierarchical teams are supported `Organization` -> `BusinessUnit` -> `Division` -> `Department` -> `Group`.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.teams.TeamHierarchy",
+ "definitions": {
+ "teamHierarchyList": {
+ "type": "array",
+ "items": {
+ "$ref": "teamHierarchy.json"
+ },
+ "default": null
+ }
+ },
+ "properties": {
+ "id": {
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "teamType": {
+ "description": "Team type",
+ "$ref": "team.json#/definitions/teamType"
+ },
+ "name": {
+ "description": "A unique name of the team typically the team ID from an identity provider. Example - group Id from LDAP.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "description": {
+ "description": "Description of the team.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "fullyQualifiedName": {
+ "description": "FullyQualifiedName same as `name`.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "displayName": {
+ "description": "Name used for display purposes. Example 'Data Science team'.",
+ "type": "string"
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this entity.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "children" : {
+ "excludedFromEqualsAndHashCode": true,
+ "description" : "Children teams. An `Organization` can have `BusinessUnit`, `Division` or `Department` as children. A `BusinessUnit` can have `BusinessUnit`, `Division`, or `Department` as children. A `Division` can have `Division` or `Department` as children. A `Department` can have `Department` as children.",
+ "$ref" : "#/definitions/teamHierarchyList"
+ },
+ "isJoinable": {
+ "description": "Can any user join this team during sign up? Value of true indicates yes, and false no.",
+ "type": "boolean",
+ "default": true
+ }
+ },
+ "required": ["id", "name"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/teams/user.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/teams/user.json
new file mode 100644
index 000000000000..774cc4dc1d91
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/teams/user.json
@@ -0,0 +1,187 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/teams/user.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "User",
+ "description": "A `User` represents a user of OpenMetadata. A user can be part of 0 or more teams. A special type of user called Bot is used for automation. A user can be an owner of zero or more data assets. A user can also follow zero or more data assets.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.teams.User",
+ "javaInterfaces": ["org.openmetadata.schema.EntityInterface"],
+ "definitions": {
+ "authenticationMechanism": {
+ "type": "object",
+ "description": "User/Bot Authentication Mechanism.",
+ "javaType": "org.openmetadata.schema.entity.teams.AuthenticationMechanism",
+ "properties": {
+ "config": {
+ "oneOf": [
+ {
+ "$ref": "../../auth/ssoAuth.json"
+ },
+ {
+ "$ref": "../../auth/jwtAuth.json"
+ },
+ {
+ "$ref": "../../auth/basicAuth.json"
+ }
+ ]
+ },
+ "authType": {
+ "enum": ["JWT", "SSO", "BASIC"]
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier that identifies a user entity instance.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "A unique name of the user, typically the user ID from an identity provider. Example - uid from LDAP.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "fullyQualifiedName": {
+ "description": "FullyQualifiedName same as `name`.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "description": {
+ "description": "Used for user biography.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "externalId": {
+ "description": "External identifier from identity provider (used for SCIM).",
+ "type": "string"
+ },
+ "scimUserName": {
+ "description": "Raw user name from SCIM.",
+ "type": "string"
+ },
+ "displayName": {
+ "description": "Name used for display purposes. Example 'FirstName LastName'.",
+ "type": "string"
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../../type/basic.json#/definitions/impersonatedBy"
+ },
+ "email": {
+ "description": "Email address of the user.",
+ "$ref": "../../type/basic.json#/definitions/email"
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this entity.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "timezone": {
+ "description": "Timezone of the user.",
+ "type": "string",
+ "format": "timezone"
+ },
+ "isBot": {
+ "description": "When true indicates a special type of user called Bot.",
+ "type": "boolean",
+ "default": false
+ },
+ "isAdmin": {
+ "description": "When true indicates user is an administrator for the system with superuser privileges.",
+ "type": "boolean",
+ "default": false
+ },
+ "allowImpersonation": {
+ "description": "When true, this bot is allowed to impersonate users (subject to policy checks). Only applicable for bot users.",
+ "type": "boolean",
+ "default": false
+ },
+ "authenticationMechanism": {
+ "$ref": "#/definitions/authenticationMechanism"
+ },
+ "profile": {
+ "description": "Profile of the user.",
+ "$ref": "../../type/profile.json"
+ },
+ "teams": {
+ "description": "Teams that the user belongs to.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "defaultPersona": {
+ "description": "Default Persona for the user from list of personas.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "personas": {
+ "description": "Personas that the user assigned to.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "owns": {
+ "description": "List of entities owned by the user.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "follows": {
+ "description": "List of entities followed by the user.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "roles": {
+ "description": "Roles that the user has been assigned.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "inheritedRoles": {
+ "description": "Roles that a user is inheriting through membership in teams that have set team default roles.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "inheritedPersonas": {
+ "description": "Personas inherited through membership in teams that have set a team default persona.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "isEmailVerified": {
+ "description": "If the User has verified the mail",
+ "type": "boolean"
+ },
+ "domains" : {
+ "description": "Domain the User belongs to. This is inherited by the team the user belongs to.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "lastLoginTime": {
+ "description": "Last time the user logged in.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "lastActivityTime": {
+ "description": "Last time the user was active in the system.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "personaPreferences": {
+ "description": "User's personal preferences for each persona. Users can customize certain UI elements per persona while inheriting base persona configuration.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/personaPreferences.json"
+ },
+ "default": []
+ }
+ },
+ "additionalProperties": false,
+ "required": ["id", "name", "email"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/type.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/type.json
new file mode 100644
index 000000000000..23e90758e97b
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/type.json
@@ -0,0 +1,109 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/type.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Type",
+ "description": "This schema defines a type as an entity. Types includes property types and entity types. Custom types can also be defined by the users to extend the metadata system.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.Type",
+ "javaInterfaces": ["org.openmetadata.schema.EntityInterface"],
+ "definitions": {
+ "entityName": {
+ "description": "Name of the property or entity types. Note a property name must be unique for an entity. Property name must follow camelCase naming adopted by openMetadata - must start with lower case with no space, underscore, or dots.",
+ "type": "string",
+ "pattern": "(?U)^[\\w]+$"
+ },
+ "category": {
+ "description": "Metadata category to which a type belongs to.",
+ "type": "string",
+ "javaType": "org.openmetadata.schema.entity.type.Category",
+ "enum": ["field", "entity"],
+ "javaEnums": [
+ {
+ "name": "Field"
+ },
+ {
+ "name": "Entity"
+ }
+ ]
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier of the type instance.",
+ "$ref": "../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Unique name that identifies the type.",
+ "$ref": "#/definitions/entityName"
+ },
+ "fullyQualifiedName": {
+ "description": "FullyQualifiedName same as `name`.",
+ "$ref": "../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this type.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Optional description of entity.",
+ "$ref": "../type/basic.json#/definitions/markdown"
+ },
+ "category": {
+ "$ref": "#/definitions/category"
+ },
+ "nameSpace": {
+ "description": "Namespace or group to which this type belongs to. For example, some of the property types commonly used can come from `basic` namespace. Some of the entities such as `table`, `database`, etc. come from `data` namespace.",
+ "type": "string",
+ "default": "custom"
+ },
+ "schema": {
+ "description": "JSON schema encoded as string that defines the type. This will be used to validate the type values.",
+ "$ref": "../type/basic.json#/definitions/jsonSchema"
+ },
+ "customProperties": {
+ "description": "Custom properties added to extend the entity. Only available for entity type",
+ "type": "array",
+ "items": {
+ "$ref": "../type/customProperty.json"
+ }
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../type/basic.json#/definitions/impersonatedBy"
+ },
+ "href": {
+ "description": "Link to this table resource.",
+ "$ref": "../type/basic.json#/definitions/href"
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "domains" : {
+ "description": "Domains the asset belongs to. When not set, the asset inherits the domain from the parent it belongs to.",
+ "$ref": "../type/entityReferenceList.json"
+ },
+ "dataProducts" : {
+ "description": "List of data products this entity is part of.",
+ "$ref" : "../type/entityReferenceList.json"
+ }
+ },
+ "required": ["name", "description"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/utils/airflowRestApiConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/utils/airflowRestApiConnection.json
new file mode 100644
index 000000000000..23138b4e07e1
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/utils/airflowRestApiConnection.json
@@ -0,0 +1,57 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/utils/airflowRestApiConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AirflowRestApiConnection",
+ "description": "Airflow REST API Connection Config for connecting via REST API.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.services.connections.pipeline.AirflowRestApiConnection",
+ "definitions": {
+ "ApiVersion": {
+ "description": "Airflow REST API version. Use v1 for Airflow 2.x and v2 for Airflow 3.x. Auto will detect the version automatically.",
+ "type": "string",
+ "enum": ["v1", "v2", "auto"],
+ "default": "auto"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Service Type",
+ "description": "Service Type",
+ "type": "string",
+ "enum": ["RestAPI"],
+ "default": "RestAPI"
+ },
+ "authConfig": {
+ "title": "Authentication Configuration",
+ "description": "Choose an authentication method: Basic Auth (username/password), Access Token, GCP Service Account (for Cloud Composer), or AWS Credentials (for MWAA).",
+ "oneOf": [
+ {
+ "$ref": "./common/basicAuthConfig.json"
+ },
+ {
+ "$ref": "./common/accessTokenConfig.json"
+ },
+ {
+ "$ref": "./common/gcpCredentialsConfig.json"
+ },
+ {
+ "$ref": "./common/mwaaAuthConfig.json"
+ }
+ ]
+ },
+ "apiVersion": {
+ "title": "API Version",
+ "description": "Airflow REST API version.",
+ "$ref": "#/definitions/ApiVersion",
+ "default": "auto"
+ },
+ "verifySSL": {
+ "title": "Verify SSL",
+ "description": "Whether to verify SSL certificates when connecting to the Airflow API.",
+ "type": "boolean",
+ "default": true
+ }
+ },
+ "required": ["authConfig"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/utils/common/accessTokenConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/utils/common/accessTokenConfig.json
new file mode 100644
index 000000000000..3af3ae214367
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/utils/common/accessTokenConfig.json
@@ -0,0 +1,18 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/utils/common/accessTokenConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Access Token",
+ "description": "Static access token for Airflow API authentication.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.utils.common.AccessTokenConfig",
+ "properties": {
+ "token": {
+ "title": "Token",
+ "description": "Static access token for Airflow API authentication.",
+ "type": "string",
+ "format": "password"
+ }
+ },
+ "required": ["token"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/utils/common/basicAuthConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/utils/common/basicAuthConfig.json
new file mode 100644
index 000000000000..c8346df960b3
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/utils/common/basicAuthConfig.json
@@ -0,0 +1,23 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/utils/common/basicAuthConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Basic Auth",
+ "description": "Username and password for Airflow API authentication.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.utils.common.BasicAuthConfig",
+ "properties": {
+ "username": {
+ "title": "Username",
+ "description": "Username for basic authentication to the Airflow API.",
+ "type": "string"
+ },
+ "password": {
+ "title": "Password",
+ "description": "Password for basic authentication to the Airflow API.",
+ "type": "string",
+ "format": "password"
+ }
+ },
+ "required": ["username", "password"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/utils/common/gcpCredentialsConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/utils/common/gcpCredentialsConfig.json
new file mode 100644
index 000000000000..2a2c76668942
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/utils/common/gcpCredentialsConfig.json
@@ -0,0 +1,17 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/utils/common/gcpCredentialsConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "GCP Service Account",
+ "description": "GCP credentials for Google Cloud Composer. Supports service account values, credentials path, workload identity (external account), and ADC. Tokens are auto-refreshed at runtime.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.utils.common.GcpCredentialsConfig",
+ "properties": {
+ "credentials": {
+ "title": "GCP Credentials",
+ "description": "GCP credentials configuration.",
+ "$ref": "../../../security/credentials/gcpCredentials.json"
+ }
+ },
+ "required": ["credentials"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/utils/common/mwaaAuthConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/utils/common/mwaaAuthConfig.json
new file mode 100644
index 000000000000..ba9bb28a0c44
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/utils/common/mwaaAuthConfig.json
@@ -0,0 +1,37 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/utils/common/mwaaAuthConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "MWAA Authentication",
+ "description": "AWS MWAA (Managed Workflows for Apache Airflow) authentication configuration.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.utils.common.MWAAAuthConfig",
+ "properties": {
+ "mwaaConfig": {
+ "title": "MWAA Configuration",
+ "description": "MWAA credentials and environment configuration.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.utils.common.MWAAConfig",
+ "properties": {
+ "mwaaEnvironmentName": {
+ "title": "MWAA Environment Name",
+ "description": "The name of your MWAA environment.",
+ "type": "string"
+ },
+ "awsConfig": {
+ "title": "AWS Configuration",
+ "description": "AWS credentials for generating MWAA CLI token.",
+ "$ref": "../../../security/credentials/awsCredentials.json"
+ }
+ },
+ "required": [
+ "mwaaEnvironmentName",
+ "awsConfig"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "required": [
+ "mwaaConfig"
+ ],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/utils/entitiesCount.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/utils/entitiesCount.json
new file mode 100644
index 000000000000..caa407a57178
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/utils/entitiesCount.json
@@ -0,0 +1,59 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/utils/entitiesCount.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Entities Count",
+ "description": "This schema defines Entities Count. This contains aggregated entities count.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.util.EntitiesCount",
+ "properties": {
+ "tableCount": {
+ "description": "Table Count",
+ "type": "integer"
+ },
+ "topicCount": {
+ "description": "Topic Count",
+ "type": "integer"
+ },
+ "dashboardCount": {
+ "description": "Dashboard Count",
+ "type": "integer"
+ },
+ "pipelineCount": {
+ "description": "Pipeline Count",
+ "type": "integer"
+ },
+ "mlmodelCount": {
+ "description": "MlModel Count",
+ "type": "integer"
+ },
+ "servicesCount": {
+ "description": "Services Count",
+ "type": "integer"
+ },
+ "userCount": {
+ "description": "User Count",
+ "type": "integer"
+ },
+ "teamCount": {
+ "description": "Team Count",
+ "type": "integer"
+ },
+ "testSuiteCount": {
+ "description": "Test Suite Count",
+ "type": "integer"
+ },
+ "storageContainerCount": {
+ "description": "Storage Container Count",
+ "type": "integer"
+ },
+ "glossaryCount": {
+ "description": "Glossary Count",
+ "type": "integer"
+ },
+ "glossaryTermCount": {
+ "description": "Glossary Term Count",
+ "type": "integer"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/utils/servicesCount.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/utils/servicesCount.json
new file mode 100644
index 000000000000..29ddb9f3f61b
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/utils/servicesCount.json
@@ -0,0 +1,35 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/utils/servicesCount.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Services Count",
+ "description": "This schema defines Services Count. This contains aggregated services count.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.util.ServicesCount",
+ "properties": {
+ "databaseServiceCount": {
+ "description": "Database Service Count",
+ "type": "integer"
+ },
+ "messagingServiceCount": {
+ "description": "Messaging Service Count",
+ "type": "integer"
+ },
+ "dashboardServiceCount": {
+ "description": "Dashboard Service Count",
+ "type": "integer"
+ },
+ "pipelineServiceCount": {
+ "description": "Pipeline Service Count",
+ "type": "integer"
+ },
+ "mlModelServiceCount": {
+ "description": "MlModel Service Count",
+ "type": "integer"
+ },
+ "storageServiceCount": {
+ "description": "Storage Service Count",
+ "type": "integer"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/entity/utils/supersetApiConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/entity/utils/supersetApiConnection.json
new file mode 100644
index 000000000000..322cd4607657
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/entity/utils/supersetApiConnection.json
@@ -0,0 +1,44 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/services/connections/dashboard/supersetApiConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SupersetApiConnection",
+ "description": "Superset API Connection Config",
+ "type": "object",
+ "definitions": {
+ "apiProvider": {
+ "title": "Provider",
+ "description": "Authentication provider for the Superset service. For basic user/password authentication, the default value `db` can be used. This parameter is used internally to connect to Superset's REST API.",
+ "type": "string",
+ "enum": ["db","ldap"],
+ "default": "db"
+ }
+ },
+ "properties": {
+ "provider": {
+ "title": "Provider",
+ "description": "Authentication provider for the Superset service. For basic user/password authentication, the default value `db` can be used. This parameter is used internally to connect to Superset's REST API.",
+ "$ref": "#/definitions/apiProvider",
+ "default": "db"
+ },
+ "username": {
+ "title": "Username",
+ "description": "Username for Superset.",
+ "type": "string"
+ },
+ "password": {
+ "title": "Password",
+ "description": "Password for Superset.",
+ "type": "string",
+ "format": "password"
+ },
+ "verifySSL": {
+ "$ref": "../../security/ssl/verifySSLConfig.json#/definitions/verifySSL",
+ "default": "no-ssl"
+ },
+ "sslConfig": {
+ "$ref": "../../security/ssl/verifySSLConfig.json#/definitions/sslConfig"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["provider","password","username"]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/events/alertMetrics.json b/openmetadata-spec/bin/src/main/resources/json/schema/events/alertMetrics.json
new file mode 100644
index 000000000000..6b5677b8ce26
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/events/alertMetrics.json
@@ -0,0 +1,27 @@
+{
+ "$id": "https://open-metadata.org/schema/events/alertMetrics.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AlertMetrics",
+ "description": "Alert Metrics Schema",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.events.AlertMetrics",
+ "properties": {
+ "totalEvents": {
+ "description": "Total number of events.",
+ "type": "integer"
+ },
+ "successEvents": {
+ "description": "Number of events that were successfully processed.",
+ "type": "integer"
+ },
+ "failedEvents": {
+ "description": "Number of events that failed to be processed.",
+ "type": "integer"
+ },
+ "timestamp": {
+ "description": "Update time of the job status.",
+ "$ref": "../type/basic.json#/definitions/timestamp"
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/events/api/createEventSubscription.json b/openmetadata-spec/bin/src/main/resources/json/schema/events/api/createEventSubscription.json
new file mode 100644
index 000000000000..13412e43aabc
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/events/api/createEventSubscription.json
@@ -0,0 +1,96 @@
+{
+ "$id": "https://open-metadata.org/schema/events/api/createEventSubscription.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateEventSubscription",
+ "description": "This defines schema for sending alerts for OpenMetadata",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.events.CreateEventSubscription",
+ "javaInterfaces": ["org.openmetadata.schema.CreateEntity"],
+ "properties": {
+ "name": {
+ "description": "Name that uniquely identifies this Alert.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "className": {
+ "description": "Consumer Class for the Event Subscription. Will use 'AlertPublisher' if not provided.",
+ "type": "string"
+ },
+ "displayName": {
+ "description": "Display name for this Alert.",
+ "type": "string"
+ },
+ "description": {
+ "description": "A short description of the Alert, comprehensible to regular users.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "owners": {
+ "description": "Owners of this Alert.",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "enabled": {
+ "description": "Is the alert enabled.",
+ "type": "boolean",
+ "default": true
+ },
+ "batchSize": {
+ "description": "Maximum number of events sent in a batch (Default 10).",
+ "type": "integer",
+ "default": 10
+ },
+ "alertType": {
+ "description": "Type of Alert",
+ "$ref": "../eventSubscription.json#/definitions/alertType"
+ },
+ "trigger": {
+ "$ref": "../eventSubscription.json#/definitions/trigger"
+ },
+ "resources": {
+ "description": "Defines a list of resources that triggers the Event Subscription, Eg All, User, Teams etc.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "destinations": {
+ "description": "Subscription Config.",
+ "type": "array",
+ "items": {
+ "$ref": "../../events/eventSubscription.json#/definitions/destination"
+ }
+ },
+ "provider" : {
+ "$ref": "../../type/basic.json#/definitions/providerType"
+ },
+ "retries": {
+ "description": "Number of times to retry callback on failure. (Default 3).",
+ "type": "integer",
+ "default": 3
+ },
+ "pollInterval": {
+ "description": "Poll Interval in seconds.",
+ "type": "integer",
+ "default": 10
+ },
+ "input": {
+ "description": "Input for the Filters.",
+ "$ref": "../eventSubscription.json#/definitions/alertFilteringInput"
+ },
+ "notificationTemplate": {
+ "description": "Optional custom notification template for this subscription. When not set, system default template will be used. Only USER templates can be assigned.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "domains" : {
+ "description": "Fully qualified names of the domains the Event Subscription belongs to.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "config": {
+ "$ref": "../../type/basic.json#/definitions/map"
+ }
+ },
+ "required": ["name", "alertType"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/events/api/eventSubscriptionDiagnosticInfo.json b/openmetadata-spec/bin/src/main/resources/json/schema/events/api/eventSubscriptionDiagnosticInfo.json
new file mode 100644
index 000000000000..ed1ed420fcf1
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/events/api/eventSubscriptionDiagnosticInfo.json
@@ -0,0 +1,56 @@
+{
+ "$id": "https://open-metadata.org/schema/events/api/eventSubscriptionDiagnosticInfo.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Event Subscription Diagnostic Info",
+ "description": "Schema defining the response for event subscription diagnostics, including details about processed and unprocessed events.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.events.EventSubscriptionDiagnosticInfo",
+ "properties": {
+ "latestOffset": {
+ "description": "The latest offset of the event in the system.",
+ "existingJavaType": "java.lang.Long"
+ },
+ "currentOffset": {
+ "description": "The current offset of the event subscription.",
+ "existingJavaType": "java.lang.Long"
+ },
+ "startingOffset": {
+ "description": "The initial offset of the event subscription when it started processing.",
+ "existingJavaType": "java.lang.Long"
+ },
+ "hasProcessedAllEvents": {
+ "description": "Indicates whether all events have been processed.",
+ "type": "boolean"
+ },
+ "successfulEventsCount": {
+ "description": "Count of successful events for specific alert.",
+ "existingJavaType": "java.lang.Long"
+ },
+ "failedEventsCount": {
+ "description": "Count of failed events for specific alert.",
+ "existingJavaType": "java.lang.Long"
+ },
+ "relevantUnprocessedEventsCount": {
+ "description": "The number of relevant unprocessed events based on the alert's filtering rules for specific alert.",
+ "existingJavaType": "java.lang.Long"
+ },
+ "totalUnprocessedEventsCount": {
+ "description": "The total number of unprocessed events.",
+ "existingJavaType": "java.lang.Long"
+ },
+ "relevantUnprocessedEventsList": {
+ "description": "A list of relevant unprocessed events based on the alert's filtering criteria.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/changeEvent.json"
+ }
+ },
+ "totalUnprocessedEventsList": {
+ "description": "A list of all unprocessed events.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/changeEvent.json"
+ } }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/events/api/eventsRecord.json b/openmetadata-spec/bin/src/main/resources/json/schema/events/api/eventsRecord.json
new file mode 100644
index 000000000000..700fa09c459b
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/events/api/eventsRecord.json
@@ -0,0 +1,27 @@
+{
+ "$id": "https://open-metadata.org/schema/events/api/eventsRecord.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Event Subscription Events Record",
+ "description": "Schema defining the response for event subscription events record, including total, pending, successful, and failed event counts for a specific alert.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.events.EventsRecord",
+ "properties": {
+ "totalEventsCount": {
+ "description": "Count of total events (pendingEventsCount + successfulEventsCount + failedEventsCount) for specific alert.",
+ "existingJavaType": "java.lang.Long"
+ },
+ "pendingEventsCount": {
+ "description": "Count of pending events for specific alert.",
+ "existingJavaType": "java.lang.Long"
+ },
+ "successfulEventsCount": {
+ "description": "Count of successful events for specific alert.",
+ "existingJavaType": "java.lang.Long"
+ },
+ "failedEventsCount": {
+ "description": "Count of failed events for specific alert.",
+ "existingJavaType": "java.lang.Long"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/events/api/testEventSubscriptionDestination.json b/openmetadata-spec/bin/src/main/resources/json/schema/events/api/testEventSubscriptionDestination.json
new file mode 100644
index 000000000000..705da4a3f7c1
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/events/api/testEventSubscriptionDestination.json
@@ -0,0 +1,18 @@
+{
+ "$id": "https://open-metadata.org/schema/events/api/eventSubscriptionDestinationTestRequest.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Test EventSubscription Request",
+ "description": "Schema defining eventSubscription test API.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.api.events.EventSubscriptionDestinationTestRequest",
+ "properties": {
+ "destinations": {
+ "description": "List of external destinations.",
+ "type": "array",
+ "items": {
+ "$ref": "../../events/eventSubscription.json#/definitions/destination"
+ }
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/events/api/typedEvent.json b/openmetadata-spec/bin/src/main/resources/json/schema/events/api/typedEvent.json
new file mode 100644
index 000000000000..aa33e26d5264
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/events/api/typedEvent.json
@@ -0,0 +1,36 @@
+{
+ "$id": "https://open-metadata.org/schema/events/api/typedEvent.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Typed Event",
+ "description": "Schema defining a Typed Event with its status, data, and timestamp.",
+ "type": "object",
+ "javaType": "org.openmetadata.service.resources.events.subscription.TypedEvent",
+ "properties": {
+ "status": {
+ "description": "The status of the event, such as 'failed', 'successful', or 'unprocessed'.",
+ "type": "string",
+ "enum": ["failed", "successful", "unprocessed"]
+ },
+ "data": {
+ "description": "The event data, which can be of different types depending on the status.",
+ "type": "array",
+ "items": {
+ "oneOf": [
+ {
+ "$ref": "../../type/changeEvent.json"
+ },
+ {
+ "$ref": "../failedEventResponse.json"
+ }
+ ]
+ }
+ },
+ "timestamp": {
+ "description": "The timestamp when the event occurred, represented as a long.",
+ "type": "number",
+ "format": "int64"
+ }
+ },
+ "required": ["status", "data", "timestamp"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/events/emailAlertConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/events/emailAlertConfig.json
new file mode 100644
index 000000000000..4981d26927de
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/events/emailAlertConfig.json
@@ -0,0 +1,37 @@
+{
+ "$id": "https://open-metadata.org/schema/alerts/emailAlertConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "EmailAlertConfig",
+ "description": "This schema defines email config for receiving events from OpenMetadata.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.alert.type.EmailAlertConfig",
+ "javaInterfaces": [
+ "org.openmetadata.schema.SubscriptionAction"
+ ],
+ "properties": {
+ "receivers": {
+ "description": "List of receivers to send mail to",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "uniqueItems": true
+ },
+ "sendToAdmins": {
+ "description": "Send the Mails to Admins",
+ "type": "boolean",
+ "default": false
+ },
+ "sendToOwners": {
+ "description": "Send the Mails to Owners",
+ "type": "boolean",
+ "default": false
+ },
+ "sendToFollowers": {
+ "description": "Send the Mails to Followers",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/events/eventFilterRule.json b/openmetadata-spec/bin/src/main/resources/json/schema/events/eventFilterRule.json
new file mode 100644
index 000000000000..cb2b1053e64e
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/events/eventFilterRule.json
@@ -0,0 +1,73 @@
+{
+ "$id": "https://open-metadata.org/schema/events/eventFilterRule.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "EventFilterRule",
+ "description": "Describes an Event Filter Rule",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.events.EventFilterRule",
+ "definitions": {
+ "effect" : {
+ "type" : "string",
+ "enum" : [
+ "include",
+ "exclude"
+ ],
+ "default": "include"
+ },
+ "prefixCondition": {
+ "description": "Prefix Condition to be applied to the Condition.",
+ "type": "string",
+ "enum": [
+ "AND",
+ "OR"
+ ],
+ "default": "AND"
+ }
+ },
+ "properties": {
+ "name": {
+ "description": "Name of this Event Filter.",
+ "type": "string"
+ },
+ "displayName": {
+ "description": "Display Name of the Filter.",
+ "type": "string"
+ },
+ "fullyQualifiedName": {
+ "description": "FullyQualifiedName in the form `eventSubscription.eventFilterRuleName`.",
+ "$ref": "../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "description" : {
+ "description": "Description of the Event Filter Rule.",
+ "$ref": "../type/basic.json#/definitions/markdown"
+ },
+ "effect" : {
+ "$ref": "#/definitions/effect"
+ },
+ "condition" : {
+ "description": "Expression in SpEL used for matching of a `Rule` based on entity, resource, and environmental attributes.",
+ "$ref" : "../type/basic.json#/definitions/expression"
+ },
+ "arguments": {
+ "description": "Arguments to the Condition.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "inputType": {
+ "type": "string",
+ "enum": [
+ "static",
+ "runtime",
+ "none"
+ ]
+ },
+ "prefixCondition": {
+ "description": "Prefix Condition to be applied to the Condition.",
+ "$ref": "#/definitions/prefixCondition"
+ }
+ },
+ "required": ["effect", "condition"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/events/eventSubscription.json b/openmetadata-spec/bin/src/main/resources/json/schema/events/eventSubscription.json
new file mode 100644
index 000000000000..28f1e08fd897
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/events/eventSubscription.json
@@ -0,0 +1,357 @@
+{
+ "$id": "https://open-metadata.org/schema/events/eventSubscription.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "EventSubscription",
+ "description": "This schema defines the EventSubscription entity. An Event Subscription has trigger, filters and Subscription",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.events.EventSubscription",
+ "javaInterfaces": ["org.openmetadata.schema.EntityInterface"],
+ "definitions": {
+ "argumentsInput": {
+ "description": "Observability Filters for Event Subscription.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.events.ArgumentsInput",
+ "properties": {
+ "name": {
+ "description": "Name of the filter",
+ "type": "string"
+ },
+ "effect" : {
+ "$ref": "./eventFilterRule.json#/definitions/effect"
+ },
+ "prefixCondition": {
+ "description": "Prefix Condition for the filter.",
+ "$ref": "../events/eventFilterRule.json#/definitions/prefixCondition"
+ },
+ "arguments": {
+ "description": "Arguments List",
+ "type": "array",
+ "items": {
+ "description": "Argument for the filter.",
+ "type": "object",
+ "properties": {
+ "name": {
+ "description": "Name of the Argument",
+ "type": "string"
+ },
+ "input": {
+ "description": "Value of the Argument",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "additionalProperties": false
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "alertFilteringInput": {
+ "description": "Observability of the event subscription.",
+ "type": "object",
+ "properties": {
+ "filters": {
+ "description": "List of filters for the event subscription.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/argumentsInput"
+ }
+ },
+ "actions": {
+ "description": "List of filters for the event subscription.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/argumentsInput"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "triggerType": {
+ "description": "Trigger Configuration for Alerts.",
+ "type": "string",
+ "enum": ["RealTime", "Scheduled"],
+ "default": "RealTime"
+ },
+ "alertType": {
+ "description": "Type of Alerts supported.",
+ "type": "string",
+ "enum": ["Notification", "Observability", "ActivityFeed", "GovernanceWorkflowChangeEvent", "Custom"],
+ "default": "Notification"
+ },
+ "subscriptionCategory": {
+ "description": "Subscription Endpoint Type.",
+ "type": "string",
+ "enum": [
+ "Users",
+ "Teams",
+ "Admins",
+ "Assignees",
+ "Owners",
+ "Mentions",
+ "Followers",
+ "External"
+ ]
+ },
+ "subscriptionType": {
+ "description": "Subscription Endpoint Type.",
+ "type": "string",
+ "enum": [
+ "Webhook",
+ "Slack",
+ "MsTeams",
+ "GChat",
+ "Email",
+ "ActivityFeed",
+ "GovernanceWorkflowChangeEvent"
+ ]
+ },
+ "destination": {
+ "description": "Subscription which has a type and the config.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.events.SubscriptionDestination",
+ "properties": {
+ "id": {
+ "description": "Unique identifier that identifies this Event Subscription.",
+ "$ref": "../type/basic.json#/definitions/uuid"
+ },
+ "category": {
+ "$ref": "#/definitions/subscriptionCategory"
+ },
+ "type": {
+ "$ref": "#/definitions/subscriptionType"
+ },
+ "statusDetails": {
+ "oneOf": [
+ {
+ "$ref": "../events/subscriptionStatus.json"
+ },
+ {
+ "$ref": "../events/testDestinationStatus.json"
+ }
+ ]
+ },
+ "timeout": {
+ "description": "Connection timeout in seconds. (Default 10s).",
+ "type": "integer",
+ "default": 10
+ },
+ "readTimeout": {
+ "description": "Read timeout in seconds. (Default 12s).",
+ "type": "integer",
+ "default": 12
+ },
+ "enabled": {
+ "description": "Is the subscription enabled.",
+ "type": "boolean",
+ "default": true
+ },
+ "config": {
+ "oneOf": [
+ {
+ "$ref": "../entity/events/webhook.json"
+ },
+ {
+ "$ref": "./emailAlertConfig.json"
+ },
+ {
+ "$ref": "../type/basic.json#/definitions/map"
+ }
+ ]
+ },
+ "notifyDownstream": {
+ "description": "Enable notification of downstream entity stakeholders. When true, notifications will traverse lineage to include stakeholders of entities that consume data from the affected entity.",
+ "type": "boolean",
+ "default": false
+ },
+ "downstreamDepth": {
+ "description": "Maximum depth for downstream stakeholder notification traversal. If null, traverses without depth limit (with cycle protection).",
+ "type": ["integer", "null"],
+ "minimum": 1,
+ "default": null
+ }
+ },
+ "required": ["category", "type"],
+ "additionalProperties": false
+ },
+ "status": {
+ "description": "Status is `disabled`, when eventSubscription was created with `enabled` set to false and it never started publishing events. Status is `active` when eventSubscription is normally functioning and 200 OK response was received for callback notification. Status is `failed` on bad callback URL, connection failures, `1xx`, and `3xx` response was received for callback notification. Status is `awaitingRetry` when previous attempt at callback timed out or received `4xx`, `5xx` response. Status is `retryLimitReached` after all retries fail.",
+ "type": "string",
+ "enum": [
+ "disabled",
+ "failed",
+ "retryLimitReached",
+ "awaitingRetry",
+ "active"
+ ]
+ },
+ "filteringRules": {
+ "description": "Filtering Rules for Event Subscription.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.events.FilteringRules",
+ "properties": {
+ "resources": {
+ "description": "Defines a list of resources that triggers the Event Subscription, Eg All, User, Teams etc.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "rules": {
+ "description": "A set of filter rules associated with the Alert.",
+ "type": "array",
+ "items": {
+ "$ref": "./eventFilterRule.json"
+ }
+ },
+ "actions": {
+ "description": "A set of filter rules associated with the Alert.",
+ "type": "array",
+ "items": {
+ "$ref": "./eventFilterRule.json"
+ }
+ }
+ },
+ "required": ["resources"],
+ "additionalProperties": false
+ },
+ "trigger": {
+ "description": "Trigger Configuration for Alerts.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.events.TriggerConfig",
+ "properties": {
+ "triggerType": {
+ "$ref": "#/definitions/triggerType"
+ },
+ "scheduleInfo": {
+ "description": "Schedule Info",
+ "type": "string",
+ "enum": ["Daily", "Weekly", "Monthly", "Custom"],
+ "default": "Weekly"
+ },
+ "cronExpression": {
+ "description": "Cron Expression in case of Custom scheduled Trigger",
+ "type": "string"
+ }
+ },
+ "required": ["triggerType"],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier that identifies this Event Subscription.",
+ "$ref": "../type/basic.json#/definitions/uuid"
+ },
+ "className": {
+ "description": "Java class for the Event Subscription.",
+ "type": "string"
+ },
+ "name": {
+ "description": "Name that uniquely identifies this Event Subscription.",
+ "$ref": "../type/basic.json#/definitions/entityName"
+ },
+ "fullyQualifiedName": {
+ "description": "FullyQualifiedName that uniquely identifies a Event Subscription.",
+ "$ref": "../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "displayName": {
+ "description": "Display name for this Event Subscription.",
+ "type": "string"
+ },
+ "description": {
+ "description": "A short description of the Event Subscription, comprehensible to regular users.",
+ "$ref": "../type/basic.json#/definitions/markdown"
+ },
+ "owners": {
+ "description": "Owners of this Event Subscription.",
+ "$ref": "../type/entityReferenceList.json",
+ "default": null
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this entity.",
+ "$ref": "../type/basic.json#/definitions/href"
+ },
+ "version": {
+ "description": "Metadata version of the Event Subscription.",
+ "$ref": "../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the Event Subscription in Unix epoch time milliseconds.",
+ "$ref": "../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "changeDescription": {
+ "description": "Change that led to this version of the Event Subscription.",
+ "$ref": "../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "alertType": {
+ "description": "Type of Alert",
+ "$ref": "#/definitions/alertType"
+ },
+ "trigger": {
+ "description": "Trigger information for Alert.",
+ "$ref": "#/definitions/trigger"
+ },
+ "filteringRules": {
+ "description": "Set of rules that the Event Subscription Contains to allow conditional control for alerting.",
+ "$ref": "#/definitions/filteringRules"
+ },
+ "destinations": {
+ "description": "Destination Config.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/destination"
+ }
+ },
+ "notificationTemplate": {
+ "description": "Optional custom notification template for this subscription. When not set, system default template will be used. Only USER templates can be assigned.",
+ "$ref": "../type/entityReference.json"
+ },
+ "enabled": {
+ "description": "Is the event Subscription enabled.",
+ "type": "boolean",
+ "default": true
+ },
+ "batchSize": {
+ "description": "Maximum number of events sent in a batch (Default 100).",
+ "type": "integer",
+ "default": 100
+ },
+ "provider" : {
+ "$ref": "../type/basic.json#/definitions/providerType"
+ },
+ "retries": {
+ "description": "Number of times to retry callback on failure. (Default 3).",
+ "type": "integer",
+ "default": 3
+ },
+ "pollInterval": {
+ "description": "Poll Interval in seconds.",
+ "type": "integer",
+ "default": 60
+ },
+ "input": {
+ "description": "Input for the Filters.",
+ "$ref": "#/definitions/alertFilteringInput"
+ },
+ "domains" : {
+ "description": "Domains the asset belongs to. When not set, the asset inherits the domain from the parent it belongs to.",
+ "$ref": "../type/entityReferenceList.json"
+ },
+ "config": {
+ "$ref": "../type/basic.json#/definitions/map"
+ }
+ },
+ "required": ["id", "name", "alertType", "destinations"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/events/eventSubscriptionOffset.json b/openmetadata-spec/bin/src/main/resources/json/schema/events/eventSubscriptionOffset.json
new file mode 100644
index 000000000000..03cd198dcdbb
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/events/eventSubscriptionOffset.json
@@ -0,0 +1,26 @@
+{
+ "$id": "https://open-metadata.org/schema/events/eventSubscriptionOffset.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "EventSubscriptionOffset",
+ "description": "Represents the offsets for an event subscription, tracking the starting point and current position of events processed.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.events.EventSubscriptionOffset",
+ "properties": {
+ "startingOffset": {
+ "description": "The offset from where event processing starts.",
+ "type": "integer",
+ "existingJavaType": "Long"
+ },
+ "currentOffset": {
+ "description": "The current position in the events.",
+ "type": "integer",
+ "existingJavaType": "Long"
+ },
+ "timestamp": {
+ "description": "Update time of the job status.",
+ "$ref": "../type/basic.json#/definitions/timestamp"
+ }
+ },
+ "required": ["startingOffset", "currentOffset"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/events/failedEvent.json b/openmetadata-spec/bin/src/main/resources/json/schema/events/failedEvent.json
new file mode 100644
index 000000000000..d3891f75d537
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/events/failedEvent.json
@@ -0,0 +1,31 @@
+{
+ "$id": "https://open-metadata.org/schema/events/failedEvents.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "FailedEvents",
+ "description": "Failed Events Schema",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.events.FailedEvent",
+ "properties": {
+ "failingSubscriptionId": {
+ "description": "Unique identifier that identifies this Event Subscription.",
+ "$ref": "../type/basic.json#/definitions/uuid"
+ },
+ "changeEvent": {
+ "description": "Change Event that failed",
+ "$ref": "../type/changeEvent.json"
+ },
+ "reason": {
+ "description": "Reason for failure",
+ "type": "string"
+ },
+ "retriesLeft": {
+ "description": "Retries Left for the event",
+ "type": "integer"
+ },
+ "timestamp": {
+ "description": "Time of Failure",
+ "$ref": "../type/basic.json#/definitions/timestamp"
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/events/failedEventResponse.json b/openmetadata-spec/bin/src/main/resources/json/schema/events/failedEventResponse.json
new file mode 100644
index 000000000000..ad51d742fd99
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/events/failedEventResponse.json
@@ -0,0 +1,31 @@
+{
+ "$id": "https://open-metadata.org/schema/events/failedEventResponse.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "FailedEvents",
+ "description": "Failed Events Schema",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.events.FailedEventResponse",
+ "properties": {
+ "failingSubscriptionId": {
+ "description": "Unique identifier that identifies this Event Subscription.",
+ "$ref": "../type/basic.json#/definitions/uuid"
+ },
+ "changeEvent": {
+ "description": "Change Event that failed",
+ "$ref": "../type/changeEvent.json"
+ },
+ "reason": {
+ "description": "Reason for failure",
+ "type": "string"
+ },
+ "source": {
+ "description": "Source of the failed event",
+ "type": "string"
+ },
+ "timestamp": {
+ "description": "Time of Failure",
+ "$ref": "../type/basic.json#/definitions/timestamp"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/events/filterResourceDescriptor.json b/openmetadata-spec/bin/src/main/resources/json/schema/events/filterResourceDescriptor.json
new file mode 100644
index 000000000000..0440c5cc0ec5
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/events/filterResourceDescriptor.json
@@ -0,0 +1,29 @@
+{
+ "$id": "https://open-metadata.org/schema/events/filterResourceDescriptor.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "FilterResourceDescriptor",
+ "description": "Filter descriptor",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.FilterResourceDescriptor",
+ "properties": {
+ "name": {
+ "description": "Name of the resource. For entity related resources, resource name is same as the entity name. Some resources such as lineage are not entities but are resources.",
+ "type": "string"
+ },
+ "supportedFilters": {
+ "description": "List of operations supported filters by the resource.",
+ "type": "array",
+ "items": {
+ "$ref": "./eventFilterRule.json"
+ }
+ },
+ "supportedActions": {
+ "description": "List of actions supported filters by the resource.",
+ "type": "array",
+ "items": {
+ "$ref": "./eventFilterRule.json"
+ }
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/events/statusContext.json b/openmetadata-spec/bin/src/main/resources/json/schema/events/statusContext.json
new file mode 100644
index 000000000000..8ce5e4503a18
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/events/statusContext.json
@@ -0,0 +1,39 @@
+{
+ "$id": "https://open-metadata.org/schema/events/statusContext.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "FailedEvents",
+ "description": "Status Context",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.events.StatusContext",
+ "properties": {
+ "statusCode": {
+ "description": "HTTP status code of the response",
+ "type": "integer"
+ },
+ "statusInfo": {
+ "description": "Reason phrase associated with the status code",
+ "type": "string"
+ },
+ "headers": {
+ "description": "Response headers as a map",
+ "existingJavaType": "java.util.Map>"
+ },
+ "entity": {
+ "description": "Response entity, if available",
+ "type": "string"
+ },
+ "mediaType": {
+ "description": "Media type of the response",
+ "type": "string"
+ },
+ "location": {
+ "description": "Location URI from the response",
+ "type": "string"
+ },
+ "timestamp": {
+ "description": "Time in milliseconds since epoch",
+ "$ref": "../type/basic.json#/definitions/timestamp"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/events/subscriptionResourceDescriptor.json b/openmetadata-spec/bin/src/main/resources/json/schema/events/subscriptionResourceDescriptor.json
new file mode 100644
index 000000000000..aed99923386e
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/events/subscriptionResourceDescriptor.json
@@ -0,0 +1,42 @@
+{
+ "$id": "https://open-metadata.org/schema/events/subscriptionResourceDescriptor.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SubscriptionResourceDescriptor",
+ "description": "Subscription descriptor",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.NotificationResourceDescriptor",
+ "definitions": {
+ "operation": {
+ "javaType": "org.openmetadata.schema.type.NotificationFilterOperation",
+ "description": "This schema defines all possible filter operations on metadata of entities in OpenMetadata.",
+ "type": "string",
+ "enum": [
+ "filterBySource",
+ "filterByEntityId",
+ "filterByOwnerName",
+ "filterByFqn",
+ "filterByEventType",
+ "filterByUpdaterName",
+ "filterByFieldChange",
+ "filterByDomain",
+ "filterByMentionedName",
+ "filterByGeneralMetadataEvents",
+ "filterByUpdaterIsBot"
+ ]
+ }
+ },
+ "properties": {
+ "name": {
+ "description": "Name of the resource. For entity related resources, resource name is same as the entity name. Some resources such as lineage are not entities but are resources.",
+ "type": "string"
+ },
+ "supportedFilters": {
+ "description": "List of operations supported filters by the resource.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/operation"
+ }
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/events/subscriptionStatus.json b/openmetadata-spec/bin/src/main/resources/json/schema/events/subscriptionStatus.json
new file mode 100644
index 000000000000..f6ce29def6fa
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/events/subscriptionStatus.json
@@ -0,0 +1,46 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/events/subscriptionStatus.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SubscriptionStatus",
+ "description": "Current status of the subscription, including details on the last successful and failed attempts, and retry information.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.events.SubscriptionStatus",
+ "properties": {
+ "status": {
+ "description": "Status is `disabled` when the event subscription was created with `enabled` set to false and it never started publishing events. Status is `active` when the event subscription is functioning normally and a 200 OK response was received for the callback notification. Status is `failed` when a bad callback URL, connection failures, or `1xx` or `3xx` response was received for the callback notification. Status is `awaitingRetry` when the previous attempt at callback timed out or received a `4xx` or `5xx` response. Status is `retryLimitReached` after all retries fail.",
+ "type": "string",
+ "enum": [
+ "disabled",
+ "failed",
+ "retryLimitReached",
+ "awaitingRetry",
+ "active"
+ ]
+ },
+ "lastSuccessfulAt": {
+ "description": "Timestamp of the last successful callback in UNIX UTC epoch time in milliseconds.",
+ "$ref": "../type/basic.json#/definitions/timestamp"
+ },
+ "lastFailedAt": {
+ "description": "Timestamp of the last failed callback in UNIX UTC epoch time in milliseconds.",
+ "$ref": "../type/basic.json#/definitions/timestamp"
+ },
+ "lastFailedStatusCode": {
+ "description": "HTTP status code received during the last failed callback attempt.",
+ "type": "integer"
+ },
+ "lastFailedReason": {
+ "description": "Detailed reason for the last failure received during callback.",
+ "type": "string"
+ },
+ "nextAttempt": {
+ "description": "Timestamp for the next retry attempt in UNIX epoch time in milliseconds. Only valid if `status` is `awaitingRetry`.",
+ "$ref": "../type/basic.json#/definitions/timestamp"
+ },
+ "timestamp": {
+ "description": "Current timestamp of this status in UNIX epoch time in milliseconds.",
+ "$ref": "../type/basic.json#/definitions/timestamp"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/events/testDestinationStatus.json b/openmetadata-spec/bin/src/main/resources/json/schema/events/testDestinationStatus.json
new file mode 100644
index 000000000000..54fc1a9eee01
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/events/testDestinationStatus.json
@@ -0,0 +1,49 @@
+{
+ "$id": "https://open-metadata.org/schema/events/testDestinationStatus.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "TestDestinationStatus",
+ "description": "Detailed status of the destination during a test operation, including HTTP response information.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.events.TestDestinationStatus",
+ "properties": {
+ "status": {
+ "description": "Overall test status, indicating if the test operation succeeded or failed.",
+ "type": "string",
+ "enum": ["Success", "Failed"]
+ },
+ "reason": {
+ "description": "Detailed reason for failure if the test did not succeed.",
+ "type": "string"
+ },
+ "statusCode": {
+ "description": "HTTP status code of the response (e.g., 200 for OK, 404 for Not Found).",
+ "type": "integer"
+ },
+ "statusInfo": {
+ "description": "HTTP status reason phrase associated with the status code (e.g., 'Not Found').",
+ "type": "string"
+ },
+ "headers": {
+ "description": "HTTP headers returned in the response as a map of header names to values.",
+ "existingJavaType": "java.util.Map>"
+ },
+ "entity": {
+ "description": "Body of the HTTP response, if any, returned by the server.",
+ "type": "string"
+ },
+ "mediaType": {
+ "description": "Media type of the response entity, if specified (e.g., application/json).",
+ "type": "string"
+ },
+ "location": {
+ "description": "URL location if the response indicates a redirect or newly created resource.",
+ "type": "string",
+ "format": "uri"
+ },
+ "timestamp": {
+ "description": "Timestamp when the response was received, in UNIX epoch time milliseconds.",
+ "$ref": "../type/basic.json#/definitions/timestamp"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/edge.json b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/edge.json
new file mode 100644
index 000000000000..7a572628788a
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/edge.json
@@ -0,0 +1,24 @@
+{
+ "$id": "https://open-metadata.org/schema/governance/workflows/elements/edge.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "EdgeDefinition",
+ "javaType": "org.openmetadata.schema.governance.workflows.elements.EdgeDefinition",
+ "description": "Governance Workflow Edge.",
+ "type": "object",
+ "properties": {
+ "from": {
+ "description": "Element from which the edge will start.",
+ "type": "string"
+ },
+ "to": {
+ "description": "Element on which the edge will end.",
+ "type": "string"
+ },
+ "condition": {
+ "description": "Defines if the edge will follow a path depending on the source node result.",
+ "type": "string"
+ }
+ },
+ "required": ["to", "from"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodeSubType.json b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodeSubType.json
new file mode 100644
index 000000000000..b3242b6a1f2c
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodeSubType.json
@@ -0,0 +1,27 @@
+{
+ "$id": "https://open-metadata.org/schema/governance/workflows/elements/nodeSubType.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "NodeSubType",
+ "javaType": "org.openmetadata.schema.governance.workflows.elements.NodeSubType",
+ "description": "SubType of the Node.",
+ "type": "string",
+ "enum": [
+ "userApprovalTask",
+ "checkEntityAttributesTask",
+ "setEntityAttributeTask",
+ "setEntityCertificationTask",
+ "setGlossaryTermStatusTask",
+ "endEvent",
+ "startEvent",
+ "createAndRunIngestionPipelineTask",
+ "runAppTask",
+ "rollbackEntityTask",
+ "dataCompletenessTask",
+ "parallelGateway",
+ "sinkTask",
+ "createRecognizerFeedbackApprovalTask",
+ "applyRecognizerFeedbackTask",
+ "rejectRecognizerFeedbackTask",
+ "checkChangeDescriptionTask"
+ ]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodeType.json b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodeType.json
new file mode 100644
index 000000000000..079bd5863644
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodeType.json
@@ -0,0 +1,15 @@
+{
+ "$id": "https://open-metadata.org/schema/governance/workflows/elements/nodeType.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "NodeType",
+ "javaType": "org.openmetadata.schema.governance.workflows.elements.NodeType",
+ "description": "Type of the Node.",
+ "type": "string",
+ "enum": [
+ "automatedTask",
+ "userTask",
+ "endEvent",
+ "startEvent",
+ "gateway"
+ ]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/automatedTask/applyRecognizerFeedbackTask.json b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/automatedTask/applyRecognizerFeedbackTask.json
new file mode 100644
index 000000000000..d9585c1af175
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/automatedTask/applyRecognizerFeedbackTask.json
@@ -0,0 +1,80 @@
+{
+ "$id": "https://open-metadata.org/schema/governance/workflows/elements/nodes/automatedTask/applyRecognizerFeedbackTask.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "ApplyRecognizerFeedbackTaskDefinition",
+ "description": "Applies RecognizerFeedback by removing the tag from the entity and adding it to the recognizer's exception list.",
+ "javaInterfaces": [
+ "org.openmetadata.schema.governance.workflows.elements.WorkflowNodeDefinitionInterface"
+ ],
+ "javaType": "org.openmetadata.schema.governance.workflows.elements.nodes.automatedTask.ApplyRecognizerFeedbackTaskDefinition",
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "default": "automatedTask"
+ },
+ "subType": {
+ "type": "string",
+ "default": "applyRecognizerFeedbackTask"
+ },
+ "name": {
+ "title": "Name",
+ "description": "Name that identifies this Node.",
+ "$ref": "../../../../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "title": "Display Name",
+ "description": "Display Name that identifies this Node.",
+ "type": "string"
+ },
+ "description": {
+ "title": "Description",
+ "description": "Description of the Node.",
+ "$ref": "../../../../../type/basic.json#/definitions/markdown"
+ },
+ "config": {
+ "type": "object",
+ "properties": {},
+ "additionalProperties": false
+ },
+ "input": {
+ "type": "array",
+ "items": { "type": "string" },
+ "default": ["relatedEntity", "updatedBy", "triggeringObjectId", "recognizerFeedback"],
+ "additionalItems": false,
+ "minItems": 1,
+ "maxItems": 4
+ },
+ "inputNamespaceMap": {
+ "type": "object",
+ "properties": {
+ "relatedEntity": {
+ "type": "string",
+ "default": "global"
+ },
+ "updatedBy": {
+ "type": "string",
+ "default": "global"
+ },
+ "triggeringObjectId": {
+ "type": "string",
+ "default": "global"
+ },
+ "recognizerFeedback": {
+ "type": "string",
+ "default": "global"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["relatedEntity", "updatedBy", "triggeringObjectId", "recognizerFeedback"]
+ },
+ "output": {
+ "type": "array",
+ "items": { "type": "string" },
+ "default": [],
+ "additionalItems": false,
+ "minItems": 0,
+ "maxItems": 0
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/automatedTask/checkChangeDescriptionTask.json b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/automatedTask/checkChangeDescriptionTask.json
new file mode 100644
index 000000000000..5f84498ba9fc
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/automatedTask/checkChangeDescriptionTask.json
@@ -0,0 +1,90 @@
+{
+ "$id": "https://open-metadata.org/schema/governance/workflows/elements/nodes/automatedTask/checkChangeDescriptionTask.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CheckChangeDescriptionTaskDefinition",
+ "description": "Validates if entity's change description matches specified field patterns.",
+ "javaInterfaces": [
+ "org.openmetadata.schema.governance.workflows.elements.WorkflowNodeDefinitionInterface"
+ ],
+ "javaType": "org.openmetadata.schema.governance.workflows.elements.nodes.automatedTask.CheckChangeDescriptionTaskDefinition",
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "default": "automatedTask"
+ },
+ "subType": {
+ "type": "string",
+ "default": "checkChangeDescriptionTask"
+ },
+ "name": {
+ "title": "Name",
+ "description": "Name that identifies this Node.",
+ "$ref": "../../../../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "title": "Display Name",
+ "description": "Display Name that identifies this Node.",
+ "type": "string"
+ },
+ "description": {
+ "title": "Description",
+ "description": "Description of the Node.",
+ "$ref": "../../../../../type/basic.json#/definitions/markdown"
+ },
+ "config": {
+ "title": "Node Configuration",
+ "type": "object",
+ "properties": {
+ "condition": {
+ "title": "Logical Condition",
+ "description": "Logical operator to combine multiple field checks (AND requires all fields to match, OR requires at least one).",
+ "type": "string",
+ "enum": ["AND", "OR"],
+ "default": "OR"
+ },
+ "rules": {
+ "title": "Rules",
+ "description": "Map of fields to their required values/patterns. Checks fieldsAdded, fieldsUpdated, and fieldsDeleted.",
+ "type": "object",
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "description": "Field value pattern (substring matching) to check in change description"
+ }
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": ["rules"]
+ },
+ "input": {
+ "type": "array",
+ "items": { "type": "string" },
+ "default": ["relatedEntity"],
+ "additionalItems": false,
+ "minItems": 1,
+ "maxItems": 1
+ },
+ "inputNamespaceMap": {
+ "type": "object",
+ "properties": {
+ "relatedEntity": {
+ "type": "string",
+ "default": "global"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["relatedEntity"]
+ },
+ "branches": {
+ "type": "array",
+ "items": { "type": "string" },
+ "default": ["true", "false"],
+ "additionalItems": false,
+ "minItems": 2,
+ "maxItems": 2
+ }
+ }
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/automatedTask/checkEntityAttributesTask.json b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/automatedTask/checkEntityAttributesTask.json
new file mode 100644
index 000000000000..a881cc80fa87
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/automatedTask/checkEntityAttributesTask.json
@@ -0,0 +1,77 @@
+{
+ "$id": "https://open-metadata.org/schema/governance/workflows/elements/nodes/automatedTask/checkEntityAttributesTask.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CheckEntityAttributesTaskDefinition",
+ "description": "Checks if an Entity attributes fit given rules.",
+ "javaInterfaces": [
+ "org.openmetadata.schema.governance.workflows.elements.WorkflowNodeDefinitionInterface"
+ ],
+ "javaType": "org.openmetadata.schema.governance.workflows.elements.nodes.automatedTask.CheckEntityAttributesTaskDefinition",
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "default": "automatedTask"
+ },
+ "subType": {
+ "type": "string",
+ "default": "checkEntityAttributesTask"
+ },
+ "name": {
+ "title": "Name",
+ "description": "Name that identifies this Node.",
+ "$ref": "../../../../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "title": "Display Name",
+ "description": "Display Name that identifies this Node.",
+ "type": "string"
+ },
+ "description": {
+ "title": "Description",
+ "description": "Description of the Node.",
+ "$ref": "../../../../../type/basic.json#/definitions/markdown"
+ },
+ "config": {
+ "title": "Node Configuration",
+ "type": "object",
+ "properties": {
+ "rules": {
+ "title": "Rules to Check",
+ "description": "Define certain set of rules that you would like to check. If all the rules apply, this will be set as 'True' and will continue through the positive flow. Otherwise it will be set to 'False' and continue through the negative flow.",
+ "type": "string",
+ "outputType": "jsonlogic",
+ "format": "queryBuilder"
+ }
+ },
+ "additionalProperties": false
+ },
+ "input": {
+ "type": "array",
+ "items": { "type": "string" },
+ "default": ["relatedEntity"],
+ "additionalItems": false,
+ "minItems": 1,
+ "maxItems": 1
+ },
+ "inputNamespaceMap": {
+ "type": "object",
+ "properties": {
+ "relatedEntity": {
+ "type": "string",
+ "default": "global"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["relatedEntity"]
+ },
+ "branches": {
+ "type": "array",
+ "items": { "type": "string" },
+ "default": ["true", "false"],
+ "additionalItems": false,
+ "minItems": 2,
+ "maxItems": 2
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/automatedTask/createAndRunIngestionPipelineTask.json b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/automatedTask/createAndRunIngestionPipelineTask.json
new file mode 100644
index 000000000000..bed6f134cf88
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/automatedTask/createAndRunIngestionPipelineTask.json
@@ -0,0 +1,98 @@
+{
+ "$id": "https://open-metadata.org/schema/governance/workflows/elements/nodes/automatedTask/createAndRunIngestionPipelineTask.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateAndRunIngestionPipelineTask",
+ "description": "Creates and Runs an Ingestion Pipeline",
+ "javaInterfaces": [
+ "org.openmetadata.schema.governance.workflows.elements.WorkflowNodeDefinitionInterface"
+ ],
+ "javaType": "org.openmetadata.schema.governance.workflows.elements.nodes.automatedTask.CreateAndRunIngestionPipelineTaskDefinition",
+ "type": "object",
+ "definitions": {
+ "config": {
+ "type": "object",
+ "properties": {
+ "pipelineType": {
+ "title": "Pipeline Type",
+ "description": "Define which ingestion pipeline type should be created",
+ "$ref": "../../../../../entity/services/ingestionPipelines/ingestionPipeline.json#/definitions/pipelineType"
+ },
+ "shouldRun": {
+ "title": "Run the Ingestion Pipeline",
+ "description": "If True, it will be created and run. Otherwise it will just be created.",
+ "type": "boolean",
+ "default": true
+ },
+ "waitForCompletion": {
+ "title": "Wait for Completion",
+ "description": "Set if this step should wait until the Ingestion Pipeline finishes running",
+ "type": "boolean",
+ "default": true
+ },
+ "timeoutSeconds": {
+ "title": "Timeout Seconds",
+ "description": "Set the amount of seconds to wait before defining the Ingestion Pipeline has timed out.",
+ "type": "integer",
+ "default": 3600
+ }
+ },
+ "additionalProperties": false,
+ "required": ["pipelineType", "waitForCompletion", "timeoutSeconds"]
+ }
+ },
+ "properties": {
+ "type": {
+ "type": "string",
+ "default": "automatedTask"
+ },
+ "subType": {
+ "type": "string",
+ "default": "createAndRunIngestionPipelineTask"
+ },
+ "name": {
+ "title": "Name",
+ "description": "Name that identifies this Node.",
+ "$ref": "../../../../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "title": "Display Name",
+ "description": "Display Name that identifies this Node.",
+ "type": "string"
+ },
+ "description": {
+ "title": "Description",
+ "description": "Description of the Node.",
+ "$ref": "../../../../../type/basic.json#/definitions/markdown"
+ },
+ "config": {
+ "$ref": "#/definitions/config"
+ },
+ "input": {
+ "type": "array",
+ "items": { "type": "string" },
+ "default": ["relatedEntity"],
+ "additionalItems": false,
+ "minItems": 1,
+ "maxItems": 1
+ },
+ "inputNamespaceMap": {
+ "type": "object",
+ "properties": {
+ "relatedEntity": {
+ "type": "string",
+ "default": "global"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["relatedEntity"]
+ },
+ "branches": {
+ "type": "array",
+ "items": { "type": "string" },
+ "default": ["success", "failure"],
+ "additionalItems": false,
+ "minItems": 2,
+ "maxItems": 2
+ }
+ }
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/automatedTask/dataCompletenessTask.json b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/automatedTask/dataCompletenessTask.json
new file mode 100644
index 000000000000..2f3e2b79e945
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/automatedTask/dataCompletenessTask.json
@@ -0,0 +1,119 @@
+{
+ "$id": "https://open-metadata.org/schema/governance/workflows/elements/nodes/automatedTask/dataCompletenessTask.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DataCompletenessTaskDefinition",
+ "description": "Evaluates entity data completeness based on field presence and outputs quality bands.",
+ "javaInterfaces": [
+ "org.openmetadata.schema.governance.workflows.elements.WorkflowNodeDefinitionInterface"
+ ],
+ "javaType": "org.openmetadata.schema.governance.workflows.elements.nodes.automatedTask.DataCompletenessTaskDefinition",
+ "type": "object",
+ "definitions": {
+ "qualityBand": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "title": "Band Name",
+ "description": "Name for this quality band (e.g., 'gold', 'excellent', 'tier1')",
+ "type": "string"
+ },
+ "minimumScore": {
+ "title": "Minimum Score",
+ "description": "Minimum completeness percentage for this band",
+ "type": "number",
+ "minimum": 0,
+ "maximum": 100
+ }
+ },
+ "required": ["name", "minimumScore"],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "type": {
+ "type": "string",
+ "default": "automatedTask"
+ },
+ "subType": {
+ "type": "string",
+ "default": "dataCompletenessTask"
+ },
+ "name": {
+ "title": "Node Name",
+ "description": "Unique name that identifies this node in the workflow",
+ "$ref": "../../../../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "title": "Display Name",
+ "description": "User-friendly display name for this node",
+ "type": "string"
+ },
+ "description": {
+ "title": "Description",
+ "description": "Description of what this completeness check does",
+ "$ref": "../../../../../type/basic.json#/definitions/markdown"
+ },
+ "config": {
+ "title": "Completeness Configuration",
+ "type": "object",
+ "properties": {
+ "fieldsToCheck": {
+ "title": "Fields to Check",
+ "description": "List of entity field paths to evaluate. Supports dot notation for nested fields (e.g., 'owner.name', 'columns[].description')",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "minItems": 1,
+ "examples": ["name", "description", "owner", "tags", "columns[].description"]
+ },
+ "qualityBands": {
+ "title": "Quality Bands",
+ "description": "Define quality levels based on completeness scores. Bands are evaluated from highest to lowest score.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/qualityBand"
+ },
+ "default": [
+ {"name": "excellent", "minimumScore": 90},
+ {"name": "good", "minimumScore": 75},
+ {"name": "acceptable", "minimumScore": 50},
+ {"name": "poor", "minimumScore": 0}
+ ],
+ "minItems": 1
+ }
+ },
+ "required": ["fieldsToCheck"],
+ "additionalProperties": false
+ },
+ "input": {
+ "type": "array",
+ "items": { "type": "string" },
+ "default": ["relatedEntity"],
+ "additionalItems": false,
+ "minItems": 1,
+ "maxItems": 1
+ },
+ "inputNamespaceMap": {
+ "type": "object",
+ "properties": {
+ "relatedEntity": {
+ "type": "string",
+ "default": "global"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["relatedEntity"]
+ },
+ "output": {
+ "title": "Output Variables",
+ "description": "Variables this node outputs for use in subsequent nodes",
+ "type": "array",
+ "items": { "type": "string" },
+ "default": ["completenessScore", "qualityBand", "filledFieldsCount", "totalFieldsCount", "missingFields", "filledFields", "result"],
+ "additionalItems": false
+ }
+ },
+ "required": ["name", "config"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/automatedTask/rejectRecognizerFeedbackTask.json b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/automatedTask/rejectRecognizerFeedbackTask.json
new file mode 100644
index 000000000000..510ef14bd10f
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/automatedTask/rejectRecognizerFeedbackTask.json
@@ -0,0 +1,80 @@
+{
+ "$id": "https://open-metadata.org/schema/governance/workflows/elements/nodes/automatedTask/rejectRecognizerFeedbackTask.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "RejectRecognizerFeedbackTaskDefinition",
+ "description": "Rejects RecognizerFeedback, updating its status to REJECTED without modifying the tag or entity.",
+ "javaInterfaces": [
+ "org.openmetadata.schema.governance.workflows.elements.WorkflowNodeDefinitionInterface"
+ ],
+ "javaType": "org.openmetadata.schema.governance.workflows.elements.nodes.automatedTask.RejectRecognizerFeedbackTaskDefinition",
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "default": "automatedTask"
+ },
+ "subType": {
+ "type": "string",
+ "default": "rejectRecognizerFeedbackTask"
+ },
+ "name": {
+ "title": "Name",
+ "description": "Name that identifies this Node.",
+ "$ref": "../../../../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "title": "Display Name",
+ "description": "Display Name that identifies this Node.",
+ "type": "string"
+ },
+ "description": {
+ "title": "Description",
+ "description": "Description of the Node.",
+ "$ref": "../../../../../type/basic.json#/definitions/markdown"
+ },
+ "config": {
+ "type": "object",
+ "properties": {},
+ "additionalProperties": false
+ },
+ "input": {
+ "type": "array",
+ "items": { "type": "string" },
+ "default": ["relatedEntity", "updatedBy", "triggeringObjectId", "recognizerFeedback"],
+ "additionalItems": false,
+ "minItems": 1,
+ "maxItems": 4
+ },
+ "inputNamespaceMap": {
+ "type": "object",
+ "properties": {
+ "relatedEntity": {
+ "type": "string",
+ "default": "global"
+ },
+ "updatedBy": {
+ "type": "string",
+ "default": "global"
+ },
+ "triggeringObjectId": {
+ "type": "string",
+ "default": "global"
+ },
+ "recognizerFeedback": {
+ "type": "string",
+ "default": "global"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["relatedEntity", "updatedBy", "triggeringObjectId", "recognizerFeedback"]
+ },
+ "output": {
+ "type": "array",
+ "items": { "type": "string" },
+ "default": [],
+ "additionalItems": false,
+ "minItems": 0,
+ "maxItems": 0
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/automatedTask/rollbackEntityTask.json b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/automatedTask/rollbackEntityTask.json
new file mode 100644
index 000000000000..1de4c3d1ef56
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/automatedTask/rollbackEntityTask.json
@@ -0,0 +1,81 @@
+{
+ "$id": "https://open-metadata.org/schema/governance/workflows/elements/nodes/automatedTask/rollbackEntityTask.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "RollbackEntityTaskDefinition",
+ "description": "Rolls back an entity to its previous approved version. Always rolls back to the most recent 'Approved' status.",
+ "javaInterfaces": [
+ "org.openmetadata.schema.governance.workflows.elements.WorkflowNodeDefinitionInterface"
+ ],
+ "javaType": "org.openmetadata.schema.governance.workflows.elements.nodes.automatedTask.RollbackEntityTaskDefinition",
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "default": "automatedTask"
+ },
+ "subType": {
+ "type": "string",
+ "default": "rollbackEntityTask"
+ },
+ "name": {
+ "title": "Name",
+ "description": "Name that identifies this Node.",
+ "$ref": "../../../../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "title": "Display Name",
+ "description": "Display Name that identifies this Node.",
+ "type": "string"
+ },
+ "description": {
+ "title": "Description",
+ "description": "Description of the Node.",
+ "$ref": "../../../../../type/basic.json#/definitions/markdown"
+ },
+ "config": {
+ "title": "Node Configuration",
+ "type": "object",
+ "properties": {},
+ "additionalProperties": false
+ },
+ "input": {
+ "type": "array",
+ "items": { "type": "string" },
+ "default": ["relatedEntity", "updatedBy"],
+ "additionalItems": false,
+ "minItems": 2,
+ "maxItems": 2
+ },
+ "inputNamespaceMap": {
+ "type": "object",
+ "properties": {
+ "relatedEntity": {
+ "type": "string",
+ "default": "global"
+ },
+ "updatedBy": {
+ "type": "string",
+ "default": null
+ }
+ },
+ "additionalProperties": false,
+ "required": ["relatedEntity"]
+ },
+ "output": {
+ "type": "array",
+ "items": { "type": "string" },
+ "default": [],
+ "additionalItems": false,
+ "minItems": 0,
+ "maxItems": 0
+ },
+ "outputNamespaceMap": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ }
+ },
+ "required": ["name"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/automatedTask/runAppTask.json b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/automatedTask/runAppTask.json
new file mode 100644
index 000000000000..040586a5284a
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/automatedTask/runAppTask.json
@@ -0,0 +1,87 @@
+{
+ "$id": "https://open-metadata.org/schema/governance/workflows/elements/nodes/automatedTask/runAppTask.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "RunAppTaskDefinition",
+ "description": "Runs an App based on its name.",
+ "javaInterfaces": [
+ "org.openmetadata.schema.governance.workflows.elements.WorkflowNodeDefinitionInterface"
+ ],
+ "javaType": "org.openmetadata.schema.governance.workflows.elements.nodes.automatedTask.RunAppTaskDefinition",
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "default": "automatedTask"
+ },
+ "subType": {
+ "type": "string",
+ "default": "runAppTask"
+ },
+ "name": {
+ "title": "Name",
+ "description": "Name that identifies this Node.",
+ "$ref": "../../../../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "title": "Display Name",
+ "description": "Display Name that identifies this Node.",
+ "type": "string"
+ },
+ "description": {
+ "title": "Description",
+ "description": "Description of the Node.",
+ "$ref": "../../../../../type/basic.json#/definitions/markdown"
+ },
+ "config": {
+ "type": "object",
+ "properties": {
+ "appName": {
+ "title": "App Name",
+ "description": "Set which App should Run",
+ "type": "string"
+ },
+ "waitForCompletion": {
+ "title": "Wait for Completion",
+ "description": "Set if this step should wait until the App finishes running",
+ "type": "boolean",
+ "default": true
+ },
+ "timeoutSeconds": {
+ "title": "Timeout Seconds",
+ "description": "Set the amount of seconds to wait before defining the App has timed out.",
+ "type": "integer",
+ "default": 3600
+ }
+ },
+ "additionalProperties": false,
+ "required": ["appName", "waitForCompletion", "timeoutSeconds"]
+ },
+ "input": {
+ "type": "array",
+ "items": { "type": "string" },
+ "default": ["relatedEntity"],
+ "additionalItems": false,
+ "minItems": 1,
+ "maxItems": 1
+ },
+ "inputNamespaceMap": {
+ "type": "object",
+ "properties": {
+ "relatedEntity": {
+ "type": "string",
+ "default": "global"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["relatedEntity"]
+ },
+ "branches": {
+ "type": "array",
+ "items": { "type": "string" },
+ "default": ["success", "failure"],
+ "additionalItems": false,
+ "minItems": 2,
+ "maxItems": 2
+ }
+ }
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/automatedTask/setEntityAttributeTask.json b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/automatedTask/setEntityAttributeTask.json
new file mode 100644
index 000000000000..63176a899790
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/automatedTask/setEntityAttributeTask.json
@@ -0,0 +1,90 @@
+{
+ "$id": "https://open-metadata.org/schema/governance/workflows/elements/nodes/automatedTask/setEntityAttributeTask.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SetEntityAttributeTaskDefinition",
+ "description": "Sets any Entity attribute field to the configured value.",
+ "javaInterfaces": [
+ "org.openmetadata.schema.governance.workflows.elements.WorkflowNodeDefinitionInterface"
+ ],
+ "javaType": "org.openmetadata.schema.governance.workflows.elements.nodes.automatedTask.SetEntityAttributeTaskDefinition",
+ "type": "object",
+ "definitions": {
+ "attributeConfiguration": {
+ "title": "Node Configuration",
+ "type": "object",
+ "properties": {
+ "fieldName": {
+ "title": "Field Name",
+ "description": "Entity field name to set (e.g., 'status', 'description', 'displayName')",
+ "type": "string"
+ },
+ "fieldValue": {
+ "title": "Field Value",
+ "description": "Value to set for the field",
+ "type": "string"
+ }
+ },
+ "required": ["fieldName", "fieldValue"],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "type": {
+ "type": "string",
+ "default": "automatedTask"
+ },
+ "subType": {
+ "type": "string",
+ "default": "setEntityAttributeTask"
+ },
+ "name": {
+ "title": "Name",
+ "description": "Name that identifies this Node.",
+ "$ref": "../../../../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "title": "Display Name",
+ "description": "Display Name that identifies this Node.",
+ "type": "string"
+ },
+ "description": {
+ "title": "Description",
+ "description": "Description of the Node.",
+ "$ref": "../../../../../type/basic.json#/definitions/markdown"
+ },
+ "config": {
+ "$ref": "#/definitions/attributeConfiguration"
+ },
+ "input": {
+ "type": "array",
+ "items": { "type": "string" },
+ "default": ["relatedEntity", "updatedBy"],
+ "additionalItems": false,
+ "minItems": 2,
+ "maxItems": 2
+ },
+ "inputNamespaceMap": {
+ "type": "object",
+ "properties": {
+ "relatedEntity": {
+ "type": "string",
+ "default": "global"
+ },
+ "updatedBy": {
+ "type": "string",
+ "default": null
+ }
+ },
+ "additionalProperties": false,
+ "required": ["relatedEntity"]
+ },
+ "output": {
+ "type": "array",
+ "items": { "type": "string" },
+ "default": [],
+ "additionalItems": false,
+ "minItems": 0,
+ "maxItems": 0
+ }
+ }
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/automatedTask/setEntityCertificationTask.json b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/automatedTask/setEntityCertificationTask.json
new file mode 100644
index 000000000000..c01d8763a316
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/automatedTask/setEntityCertificationTask.json
@@ -0,0 +1,92 @@
+{
+ "$id": "https://open-metadata.org/schema/governance/workflows/elements/nodes/automatedTask/setEntityCertificationTask.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SetEntityCertificationTaskDefinition",
+ "description": "Sets the Entity Certification to the configured value.",
+ "javaInterfaces": [
+ "org.openmetadata.schema.governance.workflows.elements.WorkflowNodeDefinitionInterface"
+ ],
+ "javaType": "org.openmetadata.schema.governance.workflows.elements.nodes.automatedTask.SetEntityCertificationTaskDefinition",
+ "type": "object",
+ "definitions": {
+ "certificationEnum": {
+ "type": "string",
+ "enum": [
+ "",
+ "Certification.Gold",
+ "Certification.Silver",
+ "Certification.Bronze"
+ ],
+ "enumNames": [
+ "None",
+ "Gold",
+ "Silver",
+ "Bronze"
+ ]
+ },
+ "certificationConfiguration": {
+ "title": "Node Configuration",
+ "type": "object",
+ "properties": {
+ "certification": {
+ "title": "Certification",
+ "description": "Choose which Certification to apply to the Data Asset",
+ "$ref": "#/definitions/certificationEnum"
+ }
+ },
+ "required": ["certification"],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "type": {
+ "type": "string",
+ "default": "automatedTask"
+ },
+ "subType": {
+ "type": "string",
+ "default": "setEntityCertificationTask"
+ },
+ "name": {
+ "title": "Name",
+ "description": "Name that identifies this Node.",
+ "$ref": "../../../../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "title": "Display Name",
+ "description": "Display Name that identifies this Node.",
+ "type": "string"
+ },
+ "description": {
+ "title": "Description",
+ "description": "Description of the Node.",
+ "$ref": "../../../../../type/basic.json#/definitions/markdown"
+ },
+ "config": {
+ "$ref": "#/definitions/certificationConfiguration"
+ },
+ "input": {
+ "type": "array",
+ "items": { "type": "string" },
+ "default": ["relatedEntity", "updatedBy"],
+ "additionalItems": false,
+ "minItems": 2,
+ "maxItems": 2
+ },
+ "inputNamespaceMap": {
+ "type": "object",
+ "properties": {
+ "relatedEntity": {
+ "type": "string",
+ "default": "global"
+ },
+ "updatedBy": {
+ "type": "string",
+ "default": null
+ }
+ },
+ "additionalProperties": false,
+ "required": ["relatedEntity"]
+ }
+ }
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/automatedTask/setGlossaryTermStatusTask.json b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/automatedTask/setGlossaryTermStatusTask.json
new file mode 100644
index 000000000000..ba8e6e351c4f
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/automatedTask/setGlossaryTermStatusTask.json
@@ -0,0 +1,72 @@
+{
+ "$id": "https://open-metadata.org/schema/governance/workflows/elements/nodes/automatedTask/setGlossaryTermStatusTask.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SetGlossaryTermStatusTaskDefinition",
+ "description": "Sets the GlossaryTerm Status to the configured value.",
+ "javaInterfaces": [
+ "org.openmetadata.schema.governance.workflows.elements.WorkflowNodeDefinitionInterface"
+ ],
+ "javaType": "org.openmetadata.schema.governance.workflows.elements.nodes.automatedTask.SetGlossaryTermStatusTaskDefinition",
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "default": "automatedTask"
+ },
+ "subType": {
+ "type": "string",
+ "default": "setGlossaryTermStatusTask"
+ },
+ "name": {
+ "title": "Name",
+ "description": "Name that identifies this Node.",
+ "$ref": "../../../../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "title": "Display Name",
+ "description": "Display Name that identifies this Node.",
+ "type": "string"
+ },
+ "description": {
+ "title": "Description",
+ "description": "Description of the Node.",
+ "$ref": "../../../../../type/basic.json#/definitions/markdown"
+ },
+ "config": {
+ "title": "Node Configuration",
+ "type": "object",
+ "properties": {
+ "glossaryTermStatus": {
+ "title": "Glossary Term Status",
+ "description": "Choose which Status to apply to the Glossary Term",
+ "$ref": "../../../../../type/status.json"
+ }
+ },
+ "required": ["glossaryTermStatus"],
+ "additionalProperties": false
+ },
+ "input": {
+ "type": "array",
+ "items": { "type": "string" },
+ "default": ["relatedEntity", "updatedBy"],
+ "additionalItems": false,
+ "minItems": 2,
+ "maxItems": 2
+ },
+ "inputNamespaceMap": {
+ "type": "object",
+ "properties": {
+ "relatedEntity": {
+ "type": "string",
+ "default": "global"
+ },
+ "updatedBy": {
+ "type": "string",
+ "default": null
+ }
+ },
+ "additionalProperties": false,
+ "required": ["relatedEntity"]
+ }
+ }
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/automatedTask/sinkConfig/baseSinkConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/automatedTask/sinkConfig/baseSinkConfig.json
new file mode 100644
index 000000000000..093306c0dea4
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/automatedTask/sinkConfig/baseSinkConfig.json
@@ -0,0 +1,43 @@
+{
+ "$id": "https://open-metadata.org/schema/governance/workflows/elements/nodes/automatedTask/sinkConfig/baseSinkConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "BaseSinkConfig",
+ "description": "Base configuration shared by all sink types.",
+ "javaType": "org.openmetadata.schema.governance.workflows.elements.nodes.automatedTask.sinkConfig.BaseSinkConfig",
+ "type": "object",
+ "properties": {
+ "retryConfig": {
+ "title": "Retry Configuration",
+ "description": "Configuration for retry behavior on failure.",
+ "type": "object",
+ "properties": {
+ "maxRetries": {
+ "title": "Max Retries",
+ "description": "Maximum number of retry attempts.",
+ "type": "integer",
+ "default": 3,
+ "minimum": 0,
+ "maximum": 10
+ },
+ "retryDelaySeconds": {
+ "title": "Retry Delay Seconds",
+ "description": "Delay between retry attempts in seconds.",
+ "type": "integer",
+ "default": 5,
+ "minimum": 1,
+ "maximum": 300
+ }
+ },
+ "additionalProperties": false
+ },
+ "timeout": {
+ "title": "Timeout",
+ "description": "Timeout in seconds for sink operations.",
+ "type": "integer",
+ "default": 300,
+ "minimum": 30,
+ "maximum": 3600
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/automatedTask/sinkConfig/gitSinkConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/automatedTask/sinkConfig/gitSinkConfig.json
new file mode 100644
index 000000000000..228641526cd0
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/automatedTask/sinkConfig/gitSinkConfig.json
@@ -0,0 +1,149 @@
+{
+ "$id": "https://open-metadata.org/schema/governance/workflows/elements/nodes/automatedTask/sinkConfig/gitSinkConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "GitSinkConfig",
+ "description": "Configuration for Git-based sinks using REST/GraphQL APIs. Supports GitHub (GraphQL), GitLab (REST), and Bitbucket (REST).",
+ "javaType": "org.openmetadata.schema.governance.workflows.elements.nodes.automatedTask.sinkConfig.GitSinkConfig",
+ "type": "object",
+ "definitions": {
+ "gitCredentialsType": {
+ "title": "Credentials Type",
+ "description": "Type of authentication for Git API operations.",
+ "type": "string",
+ "enum": ["token"],
+ "default": "token"
+ },
+ "conflictResolution": {
+ "title": "Conflict Resolution",
+ "description": "How to handle files that were modified directly in git.",
+ "type": "string",
+ "enum": ["overwriteExternal", "preserveExternal", "fail"],
+ "default": "overwriteExternal"
+ }
+ },
+ "properties": {
+ "repositoryUrl": {
+ "title": "Repository URL",
+ "description": "Git repository URL (HTTPS format). Example: https://github.com/org/repo.git",
+ "type": "string",
+ "examples": ["https://github.com/org/repo.git", "https://github.mycompany.com/org/repo.git"]
+ },
+ "branch": {
+ "title": "Branch",
+ "description": "Target branch for commits.",
+ "type": "string",
+ "default": "main"
+ },
+ "basePath": {
+ "title": "Base Path",
+ "description": "Base directory path in the repository for metadata files.",
+ "type": "string",
+ "default": "metadata"
+ },
+ "apiBaseUrl": {
+ "title": "API Base URL",
+ "description": "Custom API base URL for GitHub Enterprise. Leave empty for github.com. Example: https://github.mycompany.com/api",
+ "type": "string"
+ },
+ "credentials": {
+ "title": "Git Credentials",
+ "description": "Authentication credentials for Git API operations.",
+ "type": "object",
+ "properties": {
+ "type": {
+ "$ref": "#/definitions/gitCredentialsType"
+ },
+ "token": {
+ "title": "Access Token",
+ "description": "Personal access token or GitHub App token for authentication. Supports secret references (e.g., secret:/path/to/token).",
+ "type": "string",
+ "format": "password"
+ }
+ },
+ "required": ["type", "token"],
+ "additionalProperties": false
+ },
+ "commitConfig": {
+ "title": "Commit Configuration",
+ "description": "Configuration for Git commits.",
+ "type": "object",
+ "properties": {
+ "messageTemplate": {
+ "title": "Message Template",
+ "description": "Template for commit messages. Variables: {entityType}, {entityName}, {action}, {count}",
+ "type": "string",
+ "default": "Sync {entityType}: {entityName}"
+ },
+ "authorName": {
+ "title": "Author Name",
+ "description": "Git commit author name.",
+ "type": "string",
+ "default": "OpenMetadata Bot"
+ },
+ "authorEmail": {
+ "title": "Author Email",
+ "description": "Git commit author email.",
+ "type": "string",
+ "format": "email",
+ "default": "bot@openmetadata.org"
+ }
+ },
+ "additionalProperties": false
+ },
+ "conflictResolution": {
+ "$ref": "#/definitions/conflictResolution"
+ },
+ "syncMetadata": {
+ "title": "Sync Metadata Configuration",
+ "description": "Configuration for embedding sync metadata in output files.",
+ "type": "object",
+ "properties": {
+ "embed": {
+ "title": "Embed Metadata",
+ "description": "Embed _syncMetadata block in each YAML/JSON file for conflict detection and audit.",
+ "type": "boolean",
+ "default": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "retryConfig": {
+ "title": "Retry Configuration",
+ "description": "Configuration for retrying failed API calls.",
+ "type": "object",
+ "properties": {
+ "maxRetries": {
+ "title": "Max Retries",
+ "description": "Maximum number of retry attempts for transient failures.",
+ "type": "integer",
+ "default": 3,
+ "minimum": 0,
+ "maximum": 10
+ },
+ "retryDelaySeconds": {
+ "title": "Initial Retry Delay",
+ "description": "Initial delay in seconds before first retry (doubles with each attempt).",
+ "type": "integer",
+ "default": 5,
+ "minimum": 1
+ },
+ "maxRetryDelaySeconds": {
+ "title": "Max Retry Delay",
+ "description": "Maximum delay in seconds between retries (caps exponential backoff).",
+ "type": "integer",
+ "default": 60,
+ "minimum": 1
+ }
+ },
+ "additionalProperties": false
+ },
+ "timeout": {
+ "title": "Timeout",
+ "description": "Timeout in seconds for API operations.",
+ "type": "integer",
+ "default": 300
+ }
+ },
+ "required": ["repositoryUrl", "credentials"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/automatedTask/sinkConfig/webhookSinkConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/automatedTask/sinkConfig/webhookSinkConfig.json
new file mode 100644
index 000000000000..616ce02ffb64
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/automatedTask/sinkConfig/webhookSinkConfig.json
@@ -0,0 +1,148 @@
+{
+ "$id": "https://open-metadata.org/schema/governance/workflows/elements/nodes/automatedTask/sinkConfig/webhookSinkConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "WebhookSinkConfig",
+ "description": "Configuration for webhook-based sinks.",
+ "javaType": "org.openmetadata.schema.governance.workflows.elements.nodes.automatedTask.sinkConfig.WebhookSinkConfig",
+ "type": "object",
+ "definitions": {
+ "httpMethod": {
+ "title": "HTTP Method",
+ "description": "HTTP method to use for the webhook request.",
+ "type": "string",
+ "enum": ["POST", "PUT", "PATCH"],
+ "default": "POST"
+ },
+ "authType": {
+ "title": "Authentication Type",
+ "description": "Type of authentication for webhook requests.",
+ "type": "string",
+ "enum": ["none", "bearer", "basic", "apiKey"]
+ }
+ },
+ "properties": {
+ "endpoint": {
+ "title": "Webhook Endpoint",
+ "description": "HTTP endpoint URL for the webhook.",
+ "type": "string",
+ "format": "uri"
+ },
+ "httpMethod": {
+ "$ref": "#/definitions/httpMethod"
+ },
+ "headers": {
+ "title": "Custom Headers",
+ "description": "Additional HTTP headers to include in requests.",
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "queryParams": {
+ "title": "Query Parameters",
+ "description": "Query parameters to append to the webhook URL.",
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "key": {
+ "type": "string"
+ },
+ "value": {
+ "type": "string"
+ }
+ },
+ "required": ["key", "value"],
+ "additionalProperties": false
+ }
+ },
+ "authentication": {
+ "title": "Authentication",
+ "description": "Authentication configuration for webhook requests.",
+ "type": "object",
+ "properties": {
+ "type": {
+ "$ref": "#/definitions/authType"
+ },
+ "token": {
+ "title": "Bearer Token",
+ "description": "Bearer token for authentication.",
+ "type": "string",
+ "format": "password"
+ },
+ "username": {
+ "title": "Username",
+ "description": "Username for basic authentication.",
+ "type": "string"
+ },
+ "password": {
+ "title": "Password",
+ "description": "Password for basic authentication.",
+ "type": "string",
+ "format": "password"
+ },
+ "headerName": {
+ "title": "API Key Header Name",
+ "description": "Header name for API key authentication.",
+ "type": "string",
+ "default": "X-API-Key"
+ },
+ "apiKey": {
+ "title": "API Key",
+ "description": "API key value.",
+ "type": "string",
+ "format": "password"
+ }
+ },
+ "additionalProperties": false
+ },
+ "batchConfig": {
+ "title": "Batch Configuration",
+ "description": "Configuration for batching multiple entities in a single request.",
+ "type": "object",
+ "properties": {
+ "enabled": {
+ "title": "Enable Batching",
+ "description": "Send multiple entities in a single request.",
+ "type": "boolean",
+ "default": false
+ },
+ "batchSize": {
+ "title": "Batch Size",
+ "description": "Maximum number of entities per request.",
+ "type": "integer",
+ "default": 100,
+ "minimum": 1,
+ "maximum": 1000
+ }
+ },
+ "additionalProperties": false
+ },
+ "retryConfig": {
+ "title": "Retry Configuration",
+ "type": "object",
+ "properties": {
+ "maxRetries": {
+ "type": "integer",
+ "default": 3,
+ "minimum": 0,
+ "maximum": 10
+ },
+ "retryDelaySeconds": {
+ "type": "integer",
+ "default": 5,
+ "minimum": 1
+ }
+ },
+ "additionalProperties": false
+ },
+ "timeout": {
+ "title": "Timeout",
+ "description": "Timeout in seconds for HTTP requests.",
+ "type": "integer",
+ "default": 30
+ }
+ },
+ "required": ["endpoint"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/automatedTask/sinkTask.json b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/automatedTask/sinkTask.json
new file mode 100644
index 000000000000..ced047d92c4d
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/automatedTask/sinkTask.json
@@ -0,0 +1,184 @@
+{
+ "$id": "https://open-metadata.org/schema/governance/workflows/elements/nodes/automatedTask/sinkTask.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SinkTaskDefinition",
+ "description": "Pushes entity data to an external sink destination such as Git repositories, webhooks, or HTTP endpoints.",
+ "javaInterfaces": [
+ "org.openmetadata.schema.governance.workflows.elements.WorkflowNodeDefinitionInterface"
+ ],
+ "javaType": "org.openmetadata.schema.governance.workflows.elements.nodes.automatedTask.SinkTaskDefinition",
+ "type": "object",
+ "definitions": {
+ "sinkType": {
+ "title": "Sink Type",
+ "description": "Type of sink destination.",
+ "type": "string",
+ "enum": ["git", "webhook", "httpEndpoint"]
+ },
+ "syncMode": {
+ "title": "Sync Mode",
+ "description": "How entities should be synchronized to the sink.",
+ "type": "string",
+ "enum": ["append", "overwrite", "merge"],
+ "default": "overwrite"
+ },
+ "outputFormat": {
+ "title": "Output Format",
+ "description": "Format for serialized entity output.",
+ "type": "string",
+ "enum": ["yaml", "json"],
+ "default": "yaml"
+ },
+ "entityFilter": {
+ "title": "Entity Filter",
+ "description": "Optional filter to select specific entities or entity types.",
+ "type": "object",
+ "properties": {
+ "entityTypes": {
+ "title": "Entity Types",
+ "description": "Filter entities by type (e.g., table, dashboard, glossaryTerm).",
+ "type": "array",
+ "items": { "type": "string" }
+ },
+ "domains": {
+ "title": "Domains",
+ "description": "Filter entities by domain.",
+ "type": "array",
+ "items": { "type": "string" }
+ },
+ "tags": {
+ "title": "Tags",
+ "description": "Filter entities by tag.",
+ "type": "array",
+ "items": { "type": "string" }
+ }
+ },
+ "additionalProperties": false
+ },
+ "hierarchyConfig": {
+ "title": "Hierarchy Configuration",
+ "description": "Configuration for maintaining asset hierarchy in output.",
+ "type": "object",
+ "properties": {
+ "preserveHierarchy": {
+ "title": "Preserve Hierarchy",
+ "description": "Maintain entity hierarchy in directory structure.",
+ "type": "boolean",
+ "default": true
+ },
+ "rootPath": {
+ "title": "Root Path",
+ "description": "Base directory path for output files.",
+ "type": "string",
+ "default": "metadata"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "type": {
+ "type": "string",
+ "default": "automatedTask"
+ },
+ "subType": {
+ "type": "string",
+ "default": "sinkTask"
+ },
+ "name": {
+ "title": "Name",
+ "description": "Name that identifies this Node.",
+ "$ref": "../../../../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "title": "Display Name",
+ "description": "Display Name that identifies this Node.",
+ "type": "string"
+ },
+ "description": {
+ "title": "Description",
+ "description": "Description of the Node.",
+ "$ref": "../../../../../type/basic.json#/definitions/markdown"
+ },
+ "config": {
+ "title": "Sink Task Configuration",
+ "type": "object",
+ "properties": {
+ "sinkType": {
+ "$ref": "#/definitions/sinkType"
+ },
+ "sinkConfig": {
+ "title": "Sink Configuration",
+ "description": "Inline sink-specific configuration. Schema depends on sinkType.",
+ "type": "object"
+ },
+ "syncMode": {
+ "$ref": "#/definitions/syncMode"
+ },
+ "outputFormat": {
+ "$ref": "#/definitions/outputFormat"
+ },
+ "entityFilter": {
+ "$ref": "#/definitions/entityFilter"
+ },
+ "hierarchyConfig": {
+ "$ref": "#/definitions/hierarchyConfig"
+ },
+ "batchMode": {
+ "title": "Batch Mode",
+ "description": "If true, collect all entities and write in single operation (single git commit). If false, write each entity individually.",
+ "type": "boolean",
+ "default": true
+ },
+ "timeoutSeconds": {
+ "title": "Timeout Seconds",
+ "description": "Timeout in seconds for sink operations.",
+ "type": "integer",
+ "default": 300
+ }
+ },
+ "required": ["sinkType"],
+ "additionalProperties": false
+ },
+ "input": {
+ "type": "array",
+ "items": { "type": "string" },
+ "default": ["relatedEntity", "updatedBy"],
+ "additionalItems": false,
+ "minItems": 1
+ },
+ "inputNamespaceMap": {
+ "type": "object",
+ "properties": {
+ "relatedEntity": {
+ "type": "string",
+ "default": "global"
+ },
+ "updatedBy": {
+ "type": "string",
+ "default": "global"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["relatedEntity"]
+ },
+ "output": {
+ "title": "Output Variables",
+ "description": "Variables this node outputs for use in subsequent nodes",
+ "type": "array",
+ "items": { "type": "string" },
+ "default": ["syncResult", "syncedCount", "failedCount", "result"],
+ "additionalItems": false
+ },
+ "branches": {
+ "type": "array",
+ "items": { "type": "string" },
+ "default": ["success", "failure"],
+ "additionalItems": false,
+ "minItems": 2,
+ "maxItems": 2
+ }
+ },
+ "required": ["name", "config"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/endEvent/endEvent.json b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/endEvent/endEvent.json
new file mode 100644
index 000000000000..14fdbea15d70
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/endEvent/endEvent.json
@@ -0,0 +1,36 @@
+{
+ "$id": "https://open-metadata.org/schema/governance/workflows/elements/nodes/endEvent/endEvent.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "EndEventDefinition",
+ "description": "EndEvent.",
+ "javaInterfaces": [
+ "org.openmetadata.schema.governance.workflows.elements.WorkflowNodeDefinitionInterface"
+ ],
+ "javaType": "org.openmetadata.schema.governance.workflows.elements.nodes.endEvent.EndEventDefinition",
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "default": "endEvent"
+ },
+ "subType": {
+ "type": "string",
+ "default": "endEvent"
+ },
+ "name": {
+ "title": "Name",
+ "description": "Name that identifies this Node.",
+ "$ref": "../../../../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "title": "Display Name",
+ "description": "Display Name that identifies this Node.",
+ "type": "string"
+ },
+ "description": {
+ "title": "Description",
+ "description": "Description of the Node.",
+ "$ref": "../../../../../type/basic.json#/definitions/markdown"
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/gateway/parallelGateway.json b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/gateway/parallelGateway.json
new file mode 100644
index 000000000000..4461fb9e5352
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/gateway/parallelGateway.json
@@ -0,0 +1,33 @@
+{
+ "$id": "https://open-metadata.org/schema/governance/workflows/elements/nodes/gateway/parallelGateway.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "ParallelGatewayDefinition",
+ "description": "Parallel Gateway. It should be used when we want to Parallelize or sync back Parallelized tasks.",
+ "javaInterfaces": [
+ "org.openmetadata.schema.governance.workflows.elements.WorkflowNodeDefinitionInterface"
+ ],
+ "javaType": "org.openmetadata.schema.governance.workflows.elements.nodes.gateway.ParallelGatewayDefinition",
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "default": "gateway"
+ },
+ "subType": {
+ "type": "string",
+ "default": "parallelGateway"
+ },
+ "name": {
+ "description": "Name that identifies this Node.",
+ "$ref": "../../../../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this Node.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the Node.",
+ "$ref": "../../../../../type/basic.json#/definitions/markdown"
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/startEvent/startEvent.json b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/startEvent/startEvent.json
new file mode 100644
index 000000000000..8c366186bd18
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/startEvent/startEvent.json
@@ -0,0 +1,36 @@
+{
+ "$id": "https://open-metadata.org/schema/governance/workflows/elements/nodes/startEvent/startEvent.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "StartEventDefinition",
+ "description": "StartEvent.",
+ "javaInterfaces": [
+ "org.openmetadata.schema.governance.workflows.elements.WorkflowNodeDefinitionInterface"
+ ],
+ "javaType": "org.openmetadata.schema.governance.workflows.elements.nodes.startEvent.StartEventDefinition",
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "default": "startEvent"
+ },
+ "subType": {
+ "type": "string",
+ "default": "startEvent"
+ },
+ "name": {
+ "title": "Name",
+ "description": "Name that identifies this Node.",
+ "$ref": "../../../../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "title": "Display Name",
+ "description": "Display Name that identifies this Node.",
+ "type": "string"
+ },
+ "description": {
+ "title": "Description",
+ "description": "Description of the Node.",
+ "$ref": "../../../../../type/basic.json#/definitions/markdown"
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/userTask/createRecognizerFeedbackApprovalTask.json b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/userTask/createRecognizerFeedbackApprovalTask.json
new file mode 100644
index 000000000000..f3c8ea1be764
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/userTask/createRecognizerFeedbackApprovalTask.json
@@ -0,0 +1,131 @@
+{
+ "$id": "https://open-metadata.org/schema/governance/workflows/elements/nodes/userTask/userApprovalTask.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CreateRecognizerFeedbackApprovalTask",
+ "description": "Defines a Task to approve recognizer feedback on a Tag.",
+ "javaInterfaces": [
+ "org.openmetadata.schema.governance.workflows.elements.WorkflowNodeDefinitionInterface"
+ ],
+ "javaType": "org.openmetadata.schema.governance.workflows.elements.nodes.userTask.CreateRecognizerFeedbackApprovalTaskDefinition",
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "default": "userTask"
+ },
+ "subType": {
+ "type": "string",
+ "default": "createRecognizerFeedbackApprovalTask"
+ },
+ "name": {
+ "title": "Name",
+ "description": "Name that identifies this Node.",
+ "$ref": "../../../../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "title": "Display Name",
+ "description": "Display Name that identifies this Node.",
+ "type": "string"
+ },
+ "description": {
+ "title": "Description",
+ "description": "Description of the Node.",
+ "$ref": "../../../../../type/basic.json#/definitions/markdown"
+ },
+ "config": {
+ "title": "Node Configuration",
+ "type": "object",
+ "properties": {
+ "assignees": {
+ "title": "Assignees",
+ "description": "People/Teams assigned to the Task.",
+ "type": "object",
+ "properties": {
+ "addReviewers": {
+ "description": "Add the Reviewers to the assignees List.",
+ "type": "boolean",
+ "default": true
+ },
+ "addOwners": {
+ "description": "Add the Owners to the assignees List.",
+ "type": "boolean",
+ "default": false
+ },
+ "candidates": {
+ "description": "List of specific candidates (users or teams) assigned to this task.",
+ "type": "array",
+ "items": {
+ "$ref": "../../../../../type/entityReference.json"
+ },
+ "default": []
+ }
+ },
+ "additionalProperties": false
+ },
+ "approvalThreshold": {
+ "title": "Approval Threshold",
+ "description": "Number of reviewers that must approve for the task to be completed. Default is 1 (any single reviewer can approve).",
+ "type": "integer",
+ "minimum": 1,
+ "default": 1
+ },
+ "rejectionThreshold": {
+ "title": "Rejection Threshold",
+ "description": "Number of reviewers that must reject for the task to be rejected. Default is 1 (any single reviewer can reject). This allows for scenarios where you want multiple approvals but a single rejection can veto.",
+ "type": "integer",
+ "minimum": 1,
+ "default": 1
+ }
+ },
+ "required": ["assignees"],
+ "additionalProperties": false
+ },
+ "input": {
+ "type": "array",
+ "items": { "type": "string" },
+ "default": ["relatedEntity", "updatedBy", "triggeringObjectId", "recognizerFeedback"],
+ "additionalItems": false,
+ "minItems": 1,
+ "maxItems": 4
+ },
+ "inputNamespaceMap": {
+ "type": "object",
+ "properties": {
+ "relatedEntity": {
+ "type": "string",
+ "default": "global"
+ },
+ "updatedBy": {
+ "type": "string",
+ "default": "global"
+ },
+ "triggeringObjectId": {
+ "type": "string",
+ "default": "global"
+ },
+ "recognizerFeedback": {
+ "type": "string",
+ "default": "global"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["relatedEntity", "updatedBy", "triggeringObjectId", "recognizerFeedback"]
+ },
+ "output": {
+ "type": "array",
+ "items": { "type": "string" },
+ "default": ["updatedBy"],
+ "additionalItems": false,
+ "minItems": 1,
+ "maxItems": 1
+ },
+ "branches": {
+ "type": "array",
+ "items": { "type": "string" },
+ "default": ["true", "false"],
+ "additionalItems": false,
+ "minItems": 2,
+ "maxItems": 2
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/userTask/userApprovalTask.json b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/userTask/userApprovalTask.json
new file mode 100644
index 000000000000..c7ef70384ace
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/nodes/userTask/userApprovalTask.json
@@ -0,0 +1,174 @@
+{
+ "$id": "https://open-metadata.org/schema/governance/workflows/elements/nodes/userTask/userApprovalTask.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "UserApprovalTaskDefinition",
+ "description": "Defines a Task for a given User to approve.",
+ "javaInterfaces": [
+ "org.openmetadata.schema.governance.workflows.elements.WorkflowNodeDefinitionInterface"
+ ],
+ "javaType": "org.openmetadata.schema.governance.workflows.elements.nodes.userTask.UserApprovalTaskDefinition",
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "default": "userTask"
+ },
+ "subType": {
+ "type": "string",
+ "default": "userApprovalTask"
+ },
+ "name": {
+ "title": "Name",
+ "description": "Name that identifies this Node.",
+ "$ref": "../../../../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "title": "Display Name",
+ "description": "Display Name that identifies this Node.",
+ "type": "string"
+ },
+ "description": {
+ "title": "Description",
+ "description": "Description of the Node.",
+ "$ref": "../../../../../type/basic.json#/definitions/markdown"
+ },
+ "config": {
+ "title": "Node Configuration",
+ "type": "object",
+ "properties": {
+ "assignees": {
+ "title": "Assignees",
+ "description": "People/Teams assigned to the Task.",
+ "type": "object",
+ "properties": {
+ "addReviewers": {
+ "description": "Add the Reviewers to the assignees List.",
+ "type": "boolean",
+ "default": true
+ },
+ "addOwners": {
+ "description": "Add the Owners to the assignees List.",
+ "type": "boolean",
+ "default": false
+ },
+ "candidates": {
+ "description": "List of specific candidates (users or teams) assigned to this task.",
+ "type": "array",
+ "items": {
+ "$ref": "../../../../../type/entityReference.json"
+ },
+ "default": []
+ }
+ },
+ "additionalProperties": false
+ },
+ "approvalThreshold": {
+ "title": "Approval Threshold",
+ "description": "Number of reviewers that must approve for the task to be completed. Default is 1 (any single reviewer can approve).",
+ "type": "integer",
+ "minimum": 1,
+ "default": 1
+ },
+ "rejectionThreshold": {
+ "title": "Rejection Threshold",
+ "description": "Number of reviewers that must reject for the task to be rejected. Default is 1 (any single reviewer can reject). This allows for scenarios where you want multiple approvals but a single rejection can veto.",
+ "type": "integer",
+ "minimum": 1,
+ "default": 1
+ },
+ "stageId": {
+ "title": "Stage Id",
+ "description": "Workflow stage identifier stored on the task while this user task is active.",
+ "type": "string"
+ },
+ "stageDisplayName": {
+ "title": "Stage Display Name",
+ "description": "Human-readable stage label shown to task assignees.",
+ "type": "string"
+ },
+ "taskStatus": {
+ "title": "Task Status",
+ "description": "Coarse task status mapped while this user task is active.",
+ "$ref": "../../../../../entity/tasks/task.json#/definitions/taskStatus"
+ },
+ "assigneeStrategy": {
+ "title": "Assignee Strategy",
+ "description": "Optional label describing how assignees are derived for the stage.",
+ "type": "string"
+ },
+ "transitionMetadata": {
+ "title": "Transition Metadata",
+ "description": "Transitions available from this stage. Edge conditions should match these transition ids.",
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "label": {
+ "type": "string"
+ },
+ "targetStageId": {
+ "type": "string"
+ },
+ "targetTaskStatus": {
+ "$ref": "../../../../../entity/tasks/task.json#/definitions/taskStatus"
+ },
+ "resolutionType": {
+ "$ref": "../../../../../entity/tasks/task.json#/definitions/resolutionType"
+ },
+ "formRef": {
+ "type": "string"
+ },
+ "requiresComment": {
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "required": ["id", "label", "targetStageId", "targetTaskStatus"],
+ "additionalProperties": false
+ },
+ "default": []
+ }
+ },
+ "required": ["assignees"],
+ "additionalProperties": false
+ },
+ "input": {
+ "type": "array",
+ "items": { "type": "string" },
+ "default": ["relatedEntity"],
+ "additionalItems": false,
+ "minItems": 1,
+ "maxItems": 1
+ },
+ "inputNamespaceMap": {
+ "type": "object",
+ "properties": {
+ "relatedEntity": {
+ "type": "string",
+ "default": "global"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["relatedEntity"]
+ },
+ "output": {
+ "type": "array",
+ "items": { "type": "string" },
+ "default": ["updatedBy"],
+ "additionalItems": false,
+ "minItems": 1,
+ "maxItems": 1
+ },
+ "branches": {
+ "type": "array",
+ "items": { "type": "string" },
+ "default": ["true", "false"],
+ "additionalItems": false,
+ "minItems": 2,
+ "maxItems": 2
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/triggers/eventBasedEntityTrigger.json b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/triggers/eventBasedEntityTrigger.json
new file mode 100644
index 000000000000..166c91562f86
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/triggers/eventBasedEntityTrigger.json
@@ -0,0 +1,123 @@
+{
+ "$id": "https://open-metadata.org/schema/governance/workflows/elements/triggers/eventBasedEntityTrigger.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "EventBasedEntityTriggerDefinition",
+ "description": "Event Based Entity Trigger.",
+ "javaType": "org.openmetadata.schema.governance.workflows.elements.triggers.EventBasedEntityTriggerDefinition",
+ "javaInterfaces": [
+ "org.openmetadata.schema.governance.workflows.elements.WorkflowTriggerInterface"
+ ],
+ "type": "object",
+ "definitions": {
+ "event": {
+ "description": "Event for which it should be triggered.",
+ "type": "string",
+ "enum": [
+ "Created",
+ "Updated"
+ ]
+ },
+ "config": {
+ "title": "Trigger Configuration",
+ "description": "Entity Event Trigger Configuration.",
+ "type": "object",
+ "properties": {
+ "entityType": {
+ "description": "Deprecated: Single entity type for which workflow should be triggered. Use 'entityTypes' for multiple types.",
+ "type": "string"
+ },
+ "entityTypes": {
+ "description": "Array of Entity Types for which this workflow should be triggered. Supports multiple entity types in one workflow.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "minItems": 1,
+ "uniqueItems": true
+ },
+ "events": {
+ "title": "Events",
+ "description": "Select the events that should trigger this workflow",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/event"
+ },
+ "uniqueItems": true
+ },
+ "exclude": {
+ "title": "Exclude Fields",
+ "description": "Select fields that should not trigger the workflow if only them are modified.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "include": {
+ "title": "Include Fields",
+ "description": "Array of field names that must be present in the change description to trigger the workflow. Takes priority over exclude fields.",
+ "type": "array",
+ "items": {
+ "type": "string",
+ "description": "Field name that must be present in the change description for the workflow to trigger"
+ }
+ },
+ "filter": {
+ "title": "Filter Condition",
+ "description": "JSON Logic expression to determine if the workflow should be triggered. Can be a string (applied to all entity types) or an object mapping entity types to their specific filters.",
+ "oneOf": [
+ {
+ "type": "string",
+ "description": "Single filter applied to all entity types (legacy format)"
+ },
+ {
+ "type": "object",
+ "description": "Entity-specific filters with optional default",
+ "properties": {
+ "default": {
+ "type": "string",
+ "description": "Default filter for entity types not explicitly configured"
+ }
+ },
+ "additionalProperties": {
+ "type": "string",
+ "description": "Filter for specific entity type"
+ }
+ }
+ ]
+ }
+ },
+ "anyOf": [
+ {
+ "required": ["entityType", "events"]
+ },
+ {
+ "required": ["entityTypes", "events"]
+ }
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "type": {
+ "type": "string",
+ "default": "eventBasedEntity"
+ },
+ "config": {
+ "$ref": "#/definitions/config"
+ },
+ "output": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "default": [
+ "relatedEntity"
+ ],
+ "additionalItems": false,
+ "minItems": 1,
+ "maxItems": 1,
+ "uniqueItems": true
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/triggers/noOpTrigger.json b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/triggers/noOpTrigger.json
new file mode 100644
index 000000000000..57e742f35f9d
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/triggers/noOpTrigger.json
@@ -0,0 +1,28 @@
+{
+ "$id": "https://open-metadata.org/schema/governance/workflows/elements/triggers/noOpTrigger.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "NoOpTrigger",
+ "description": "NoOp Trigger.",
+ "javaType": "org.openmetadata.schema.governance.workflows.elements.triggers.NoOpTriggerDefinition",
+ "javaInterfaces": [
+ "org.openmetadata.schema.governance.workflows.elements.WorkflowTriggerInterface"
+ ],
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "default": "noOp"
+ },
+ "config": {},
+ "output": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "default": [],
+ "additionalItems": false,
+ "uniqueItems": true
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/triggers/periodicBatchEntityTrigger.json b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/triggers/periodicBatchEntityTrigger.json
new file mode 100644
index 000000000000..eb5f9ab995f5
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/elements/triggers/periodicBatchEntityTrigger.json
@@ -0,0 +1,101 @@
+{
+ "$id": "https://open-metadata.org/schema/governance/workflows/elements/triggers/periodicBatchEntityTrigger.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "PeriodicBatchEntityTriggerDefinition",
+ "description": "Periodic Batch Entity Trigger.",
+ "javaType": "org.openmetadata.schema.governance.workflows.elements.triggers.PeriodicBatchEntityTriggerDefinition",
+ "javaInterfaces": [
+ "org.openmetadata.schema.governance.workflows.elements.WorkflowTriggerInterface"
+ ],
+ "type": "object",
+ "definitions": {
+ "config": {
+ "title": "Trigger Configuration",
+ "description": "Entity Event Trigger Configuration.",
+ "type": "object",
+ "properties": {
+ "schedule": {
+ "$ref": "../../../../entity/applications/app.json#definitions/appSchedule",
+ "description": "Defines the schedule of the Periodic Trigger."
+ },
+ "entityType": {
+ "title": "Entity Type",
+ "description": "Deprecated: Single entity type for which workflow should be triggered. Use 'entityTypes' for multiple types.",
+ "type": "string"
+ },
+ "entityTypes": {
+ "title": "Entity Types",
+ "description": "Array of Entity Types for which this workflow should be triggered. Supports multiple entity types in one workflow.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "minItems": 1,
+ "uniqueItems": true
+ },
+ "filters": {
+ "title": "Filters",
+ "description": "Search filters for entities. Can be a string (applied to all entity types) or an object mapping entity types to their specific filters.",
+ "oneOf": [
+ {
+ "type": "string",
+ "description": "Single filter applied to all entity types (legacy format)"
+ },
+ {
+ "type": "object",
+ "description": "Entity-specific filters with optional default",
+ "properties": {
+ "default": {
+ "type": "string",
+ "description": "Default filter for entity types not explicitly configured"
+ }
+ },
+ "additionalProperties": {
+ "type": "string",
+ "description": "Filter for specific entity type"
+ }
+ }
+ ]
+ },
+ "batchSize": {
+ "title": "Batch Size",
+ "description": "Number of Entities to process at once.",
+ "type": "integer",
+ "default": 500
+ }
+ },
+ "anyOf": [
+ {
+ "required": ["schedule", "entityType", "filters"]
+ },
+ {
+ "required": ["schedule", "entityTypes", "filters"]
+ }
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "type": {
+ "type": "string",
+ "default": "periodicBatchEntity"
+ },
+ "config": {
+ "$ref": "#/definitions/config"
+ },
+ "output": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "default": [
+ "relatedEntity"
+ ],
+ "additionalItems": false,
+ "minItems": 1,
+ "maxItems": 1,
+ "uniqueItems": true
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/workflowDefinition.json b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/workflowDefinition.json
new file mode 100644
index 000000000000..9321400f8812
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/workflowDefinition.json
@@ -0,0 +1,127 @@
+{
+ "$id": "https://open-metadata.org/schema/governance/workflows/workflowDefinition.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "WorkflowDefinition",
+ "description": "Defines a workflow, having all the different pieces and attributes.",
+ "javaInterfaces": ["org.openmetadata.schema.EntityInterface"],
+ "javaType": "org.openmetadata.schema.governance.workflows.WorkflowDefinition",
+ "type": "object",
+ "definitions": {
+ "type": {
+ "type": "string",
+ "javaType": "org.openmetadata.schema.governance.workflows.TriggerType",
+ "enum": [
+ "eventBasedEntity",
+ "noOp",
+ "periodicBatchEntity"
+ ]
+ },
+ "workflowConfiguration": {
+ "type": "object",
+ "properties": {
+ "storeStageStatus": {
+ "title": "Storage Workflow Stage Status",
+ "description": "If True, all the stage status will be stored in the database.",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "additionalProperties": false,
+ "required": ["storeStageStatus"]
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier of this workflow definition.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name that identifies this workflow definition.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this workflow definition.",
+ "type": "string"
+ },
+ "fullyQualifiedName": {
+ "description": "FullyQualifiedName same as `name`.",
+ "$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "description": {
+ "description": "Description of the workflow definition.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "owners": {
+ "description": "Owners of this workflow definition.",
+ "$ref": "../../type/entityReferenceList.json",
+ "default": null
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this entity.",
+ "$ref": "../../type/basic.json#/definitions/href"
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "deployed": {
+ "description": "When `true` indicates the workflow is deployed.",
+ "type": "boolean"
+ },
+ "suspended": {
+ "description": "When `true` indicates the workflow is suspended and not accepting new executions.",
+ "type": "boolean",
+ "default": false
+ },
+ "config": {
+ "$ref": "#/definitions/workflowConfiguration"
+ },
+ "trigger": {
+ "description": "Workflow Trigger.",
+ "existingJavaType": "org.openmetadata.schema.governance.workflows.elements.WorkflowTriggerInterface",
+ "properties": {
+ "type": {
+ "$ref": "#/definitions/type"
+ }
+ }
+ },
+ "nodes": {
+ "description": "List of nodes used on the workflow.",
+ "type": "array",
+ "items": {
+ "type": "object",
+ "existingJavaType": "org.openmetadata.schema.governance.workflows.elements.WorkflowNodeDefinitionInterface"
+ }
+ },
+ "edges": {
+ "description": "List of edges that connect the workflow elements and guide its flow.",
+ "type": "array",
+ "items": {
+ "$ref": "./elements/edge.json"
+ }
+ }
+ },
+ "required": ["name", "description"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/workflowInstance.json b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/workflowInstance.json
new file mode 100644
index 000000000000..3b09a7267543
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/workflowInstance.json
@@ -0,0 +1,54 @@
+{
+ "$id": "https://open-metadata.org/schema/governance/workflows/workflowInstance.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "WorkflowInstance",
+ "description": "Defines a workflow instance.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.governance.workflows.WorkflowInstance",
+ "javaInterfaces": ["org.openmetadata.schema.EntityTimeSeriesInterface"],
+ "definitions": {
+ "workflowStatus": {
+ "type": "string",
+ "enum": [
+ "RUNNING",
+ "FINISHED",
+ "FAILURE",
+ "EXCEPTION"
+ ]
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier of this workflow instance state.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "workflowDefinitionId": {
+ "description": "Workflow Definition Id.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "startedAt": {
+ "description": "Timestamp on which the workflow instance started.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "endedAt": {
+ "description": "Timestamp on which the workflow instance ended.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "variables": {
+ "type": "object",
+ "existingJavaType": "java.util.Map"
+ },
+ "timestamp": {
+ "description": "Timestamp on which the workflow instance state was created.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "status": {
+ "$ref": "#/definitions/workflowStatus"
+ },
+ "exception": {
+ "type": "string"
+ }
+ },
+ "required": [],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/workflowInstanceState.json b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/workflowInstanceState.json
new file mode 100644
index 000000000000..f831747feeb4
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/governance/workflows/workflowInstanceState.json
@@ -0,0 +1,71 @@
+{
+ "$id": "https://open-metadata.org/schema/governance/workflows/workflowInstanceState.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "WorkflowInstanceState",
+ "description": "Defines a workflow instance.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.governance.workflows.WorkflowInstanceState",
+ "javaInterfaces": ["org.openmetadata.schema.EntityTimeSeriesInterface"],
+ "properties": {
+ "id": {
+ "description": "Unique identifier of this workflow instance state.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "workflowInstanceId": {
+ "description": "Workflow Instance ID.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "workflowInstanceExecutionId": {
+ "description": "One WorkflowInstance might execute a flow multiple times. This ID groups together the States of one of those flows.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "workflowDefinitionId": {
+ "description": "Workflow Definition Reference.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "stage": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display name of the workflow stage node.",
+ "type": "string"
+ },
+ "startedAt": {
+ "description": "Timestamp on which the workflow instance stage started.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "endedAt": {
+ "description": "Timestamp on which the workflow instance stage ended.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "tasks": {
+ "type": "array",
+ "items": {
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "default": []
+ },
+ "variables": {
+ "type": "object",
+ "existingJavaType": "java.util.Map"
+ }
+ },
+ "additionalProperties": false
+ },
+ "timestamp": {
+ "description": "Timestamp on which the workflow instance state was created.",
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "status": {
+ "$ref": "workflowInstance.json#/definitions/workflowStatus"
+ },
+ "exception": {
+ "type": "string"
+ }
+ },
+ "required": [],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/jobs/backgroundJob.json b/openmetadata-spec/bin/src/main/resources/json/schema/jobs/backgroundJob.json
new file mode 100644
index 000000000000..e74483040e8c
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/jobs/backgroundJob.json
@@ -0,0 +1,58 @@
+{
+ "$id": "https://open-metadata.org/schema/jobs/backgroundJob.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "BackgroundJob",
+ "description": "Defines a background job that is triggered on insertion of new record in background_jobs table.",
+ "javaType": "org.openmetadata.schema.jobs.BackgroundJob",
+ "type": "object",
+ "properties": {
+ "id": {
+ "existingJavaType": "java.lang.Long",
+ "description": "Unique identifier for the job. This field is auto-incremented."
+ },
+ "jobType": {
+ "type": "string",
+ "enum": ["CUSTOM_PROPERTY_ENUM_CLEANUP", "DELETE_ENTITY", "DELETE_TOKEN"],
+ "description": "Type of the job."
+ },
+ "methodName": {
+ "type": "string",
+ "description": "JobHandler name of the method that will be executed for this job."
+ },
+ "jobArgs": {
+ "oneOf": [
+ {
+ "$ref": "./enumCleanupArgs.json"
+ },
+ {
+ "type": "object",
+ "additionalProperties": true
+ }
+ ],
+ "description": "Object containing job arguments."
+ },
+ "runAt": {
+ "description": "Timestamp when the job was run in Unix epoch time milliseconds (default: as soon as possible).",
+ "$ref": "../type/basic.json#/definitions/timestamp"
+ },
+ "status": {
+ "type": "string",
+ "enum": ["COMPLETED", "FAILED", "RUNNING","PENDING"],
+ "description": "Current status of the job."
+ },
+ "createdBy": {
+ "type": "string",
+ "description": "User or Bot who triggered the background job."
+ },
+ "createdAt": {
+ "description": "Timestamp when the job was created in Unix epoch time milliseconds.",
+ "$ref": "../type/basic.json#/definitions/timestamp"
+ },
+ "updatedAt": {
+ "description": "Time when job was last updated in Unix epoch time milliseconds.",
+ "$ref": "../type/basic.json#/definitions/timestamp"
+ }
+ },
+ "required": ["id", "jobType", "methodName", "jobArgs", "status", "createdBy", "createdAt", "updatedAt"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/jobs/enumCleanupArgs.json b/openmetadata-spec/bin/src/main/resources/json/schema/jobs/enumCleanupArgs.json
new file mode 100644
index 000000000000..2c8c6246f308
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/jobs/enumCleanupArgs.json
@@ -0,0 +1,26 @@
+{
+ "$id": "https://open-metadata.org/schema/jobs/enumCleanupArgs.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "EnumCleanupArgs",
+ "description": "Arguments for enum removal job.",
+ "type": "object",
+ "properties": {
+ "propertyName": {
+ "type": "string",
+ "description": "Name of the property."
+ },
+ "removedEnumKeys": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "description": "List of removed enum keys."
+ },
+ "entityType": {
+ "type": "string",
+ "description": "Type of the entity."
+ }
+ },
+ "required": ["propertyName", "removedEnumKeys", "entityType"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/apiServiceMetadataPipeline.json b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/apiServiceMetadataPipeline.json
new file mode 100644
index 000000000000..fdc5faa704ed
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/apiServiceMetadataPipeline.json
@@ -0,0 +1,45 @@
+{
+ "$id": "https://open-metadata.org/schema/metadataIngestion/apiServiceMetadataPipeline.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "ApiServiceMetadataPipeline",
+ "description": "ApiService Metadata Pipeline Configuration.",
+ "type": "object",
+ "definitions": {
+ "ApiMetadataConfigType": {
+ "description": "Api Source Config Metadata Pipeline type",
+ "type": "string",
+ "enum": ["ApiMetadata"],
+ "default": "ApiMetadata"
+ }
+ },
+ "properties": {
+ "type": {
+ "description": "Pipeline type",
+ "$ref": "#/definitions/ApiMetadataConfigType",
+ "default": "ApiMetadata"
+ },
+ "apiCollectionFilterPattern": {
+ "description": "Regex to only fetch api collections with names matching the pattern.",
+ "$ref": "../type/filterPattern.json#/definitions/filterPattern",
+ "title": "API Collection Filter Pattern"
+ },
+ "apiEndpointFilterPattern": {
+ "description": "Regex to only fetch api endpoints with names matching the pattern.",
+ "$ref": "../type/filterPattern.json#/definitions/filterPattern",
+ "title": "API Endpoint Filter Pattern"
+ },
+ "markDeletedApiCollections": {
+ "description": "Optional configuration to soft delete api collections in OpenMetadata if the source collections are deleted. Also, if the collection is deleted, all the associated entities like endpoints, etc., with that collection will be deleted",
+ "type": "boolean",
+ "default": true,
+ "title": "Mark Deleted Api Collection"
+ },
+ "overrideMetadata":{
+ "title": "Override Metadata",
+ "description": "Set the 'Override Metadata' toggle to control whether to override the existing metadata in the OpenMetadata server with the metadata fetched from the source. If the toggle is set to true, the metadata fetched from the source will override the existing metadata in the OpenMetadata server. If the toggle is set to false, the metadata fetched from the source will not override the existing metadata in the OpenMetadata server. This is applicable for fields like description, tags, owner and displayName",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/application.json b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/application.json
new file mode 100644
index 000000000000..dff9a92b3784
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/application.json
@@ -0,0 +1,45 @@
+{
+ "$id": "https://open-metadata.org/schema/metadataIngestion/application.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "OpenMetadataApplicationConfig",
+ "description": "OpenMetadata Ingestion Framework definition for Applications, i.e., the YAML shape we require.",
+ "javaType": "org.openmetadata.schema.metadataIngestion.OpenMetadataAppConfig",
+ "type": "object",
+ "properties": {
+ "workflowConfig": {
+ "$ref": "workflow.json#/definitions/workflowConfig",
+ "description": "General Workflow configuration, such as the OpenMetadata server connection and logging level"
+ },
+ "sourcePythonClass": {
+ "description": "Source Python Class Name to run the application",
+ "type": "string"
+ },
+ "appConfig": {
+ "$ref": "../entity/applications/configuration/applicationConfig.json#/definitions/appConfig",
+ "description": "External Application configuration"
+ },
+ "appPrivateConfig": {
+ "$ref": "../entity/applications/configuration/applicationConfig.json#/definitions/privateConfig",
+ "description": "External Application Private configuration"
+ },
+ "ingestionPipelineFQN": {
+ "description": "Fully qualified name of ingestion pipeline, used to identify the current ingestion pipeline",
+ "type": "string"
+ },
+ "pipelineRunId": {
+ "description": "Unique identifier of pipeline run, used to identify the current pipeline run",
+ "$ref": "../type/basic.json#/definitions/uuid"
+ },
+ "enableStreamableLogs": {
+ "description": "Enable streaming logs to a remote log storage via the OpenMetadata Server",
+ "type": "boolean",
+ "default": false
+ },
+ "ingestionRunnerName": {
+ "description": "Name of the ingestion runner executing this workflow. Set at dispatch time by the execution environment.",
+ "type": "string"
+ }
+ },
+ "required": ["workflowConfig"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/applicationPipeline.json b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/applicationPipeline.json
new file mode 100644
index 000000000000..dc029f796a96
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/applicationPipeline.json
@@ -0,0 +1,35 @@
+{
+ "$id": "https://open-metadata.org/schema/metadataIngestion/applicationPipeline.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "ApplicationPipeline",
+ "description": "Application Pipeline Configuration.",
+ "type": "object",
+ "definitions": {
+ "applicationConfigType": {
+ "description": "Pipeline Source Config For Application Pipeline type. Nothing is required.",
+ "type": "string",
+ "enum": ["Application"],
+ "default": "Application"
+ }
+ },
+ "properties": {
+ "type": {
+ "description": "Pipeline type",
+ "$ref": "#/definitions/applicationConfigType",
+ "default": "Application"
+ },
+ "sourcePythonClass": {
+ "description": "Source Python Class Name to run the application",
+ "type": "string"
+ },
+ "appConfig": {
+ "$ref": "../entity/applications/configuration/applicationConfig.json#/definitions/appConfig",
+ "description": "Application configuration"
+ },
+ "appPrivateConfig": {
+ "$ref": "../entity/applications/configuration/applicationConfig.json#/definitions/privateConfig",
+ "description": "Application private configuration"
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/dashboardServiceMetadataPipeline.json b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/dashboardServiceMetadataPipeline.json
new file mode 100644
index 000000000000..d9a8a58a1ced
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/dashboardServiceMetadataPipeline.json
@@ -0,0 +1,125 @@
+{
+ "$id": "https://open-metadata.org/schema/metadataIngestion/dashboardServiceMetadataPipeline.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DashboardServiceMetadataPipeline",
+ "type": "object",
+ "description": "DashboardService Metadata Pipeline Configuration.",
+ "definitions": {
+ "dashboardMetadataConfigType": {
+ "description": "Dashboard Source Config Metadata Pipeline type",
+ "type": "string",
+ "enum": [
+ "DashboardMetadata"
+ ],
+ "default": "DashboardMetadata"
+ }
+ },
+ "properties": {
+ "type": {
+ "description": "Pipeline type",
+ "$ref": "#/definitions/dashboardMetadataConfigType",
+ "default": "DashboardMetadata"
+ },
+ "lineageInformation": {
+ "description": "Details required to generate Lineage",
+ "type": "object",
+ "title": "Lineage Information",
+ "properties": {
+ "dbServicePrefixes": {
+ "title": "Database Service Prefixes",
+ "description": "List of service path prefixes for lineage matching. Supported formats: DBServiceName, DBServiceName.DatabaseName, DBServiceName.DatabaseName.SchemaName, or DBServiceName.DatabaseName.SchemaName.TableName",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "dashboardFilterPattern": {
+ "description": "Regex to exclude or include dashboards that matches the pattern.",
+ "$ref": "../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Dashboard Filter Pattern"
+ },
+ "chartFilterPattern": {
+ "description": "Regex exclude or include charts that matches the pattern.",
+ "$ref": "../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Chart Filter Pattern"
+ },
+ "dataModelFilterPattern": {
+ "description": "Regex exclude or include data models that matches the pattern.",
+ "$ref": "../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Data Model Filter Pattern"
+ },
+ "projectFilterPattern": {
+ "description": "Regex to exclude or include projects that matches the pattern.",
+ "$ref": "../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Project Filter Pattern"
+ },
+ "queryParserConfig": {
+ "title": "Query Parser Configuration",
+ "description": "Configuration for SQL query parser selection for lineage extraction.",
+ "$ref": "./parserconfig/queryParserConfig.json"
+ },
+ "includeOwners": {
+ "title": "Include Current Owners",
+ "description": "Enabling a flag will replace the current owner with a new owner from the source during metadata ingestion, if the current owner is null. It is recommended to keep the flag enabled to obtain the owner information during the first metadata ingestion.",
+ "type": "boolean",
+ "default": false
+ },
+ "markDeletedDashboards": {
+ "description": "Optional configuration to soft delete dashboards in OpenMetadata if the source dashboards are deleted. Also, if the dashboard is deleted, all the associated entities like lineage, etc., with that dashboard will be deleted",
+ "type": "boolean",
+ "default": true,
+ "title": "Mark Deleted Dashboards"
+ },
+ "markDeletedDataModels": {
+ "description": "Optional configuration to soft delete data models in OpenMetadata if the source data models are deleted. Also, if the data models is deleted, all the associated entities like lineage, etc., with that data models will be deleted",
+ "type": "boolean",
+ "default": true,
+ "title": "Mark Deleted Data Models"
+ },
+ "markDeletedCharts": {
+ "description": "Optional configuration to soft delete charts in OpenMetadata if the source charts are deleted.",
+ "type": "boolean",
+ "default": true,
+ "title": "Mark Deleted Charts"
+ },
+ "includeTags": {
+ "description": "Optional configuration to toggle the tags ingestion.",
+ "type": "boolean",
+ "default": true,
+ "title": "Include Tags"
+ },
+ "includeDataModels": {
+ "description": "Optional configuration to toggle the ingestion of data models.",
+ "type": "boolean",
+ "default": true,
+ "title": "Include Data Models"
+ },
+ "includeDraftDashboard": {
+ "title": "Include Draft Dashboards",
+ "description": "Optional Configuration to include/exclude draft dashboards. By default it will include draft dashboards",
+ "type": "boolean",
+ "default": true
+ },
+ "includeUsage": {
+ "title": "Include Usage",
+ "description": "Optional configuration to toggle the ingestion of usage metadata for dashboards. When enabled, usage statistics will be collected and ingested.",
+ "type": "boolean",
+ "default": true
+ },
+ "overrideMetadata": {
+ "title": "Override Metadata",
+ "description": "Set the 'Override Metadata' toggle to control whether to override the existing metadata in the OpenMetadata server with the metadata fetched from the source. If the toggle is set to true, the metadata fetched from the source will override the existing metadata in the OpenMetadata server. If the toggle is set to false, the metadata fetched from the source will not override the existing metadata in the OpenMetadata server. This is applicable for fields like description, tags, owner and displayName",
+ "type": "boolean",
+ "default": false
+ },
+ "overrideLineage": {
+ "title": "Override Lineage",
+ "description": "Set the 'Override Lineage' toggle to control whether to override the existing lineage.",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/dataInsightPipeline.json b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/dataInsightPipeline.json
new file mode 100644
index 000000000000..eb0987b02098
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/dataInsightPipeline.json
@@ -0,0 +1,24 @@
+{
+ "$id": "https://open-metadata.org/schema/metadataIngestion/dataInsightPipeline.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DataInsightPipeline",
+ "description": "Data Insight Pipeline Configuration.",
+ "type": "object",
+ "definitions": {
+ "dataInsightConfigType": {
+ "description": "Pipeline Source Config Metadata Pipeline type",
+ "type": "string",
+ "enum": ["dataInsight"],
+ "default": "dataInsight"
+ }
+ },
+ "properties": {
+ "type": {
+ "description": "Pipeline type",
+ "$ref": "#/definitions/dataInsightConfigType",
+ "default": "dataInsight"
+ }
+ },
+ "required": ["type"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/databaseServiceAutoClassificationPipeline.json b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/databaseServiceAutoClassificationPipeline.json
new file mode 100644
index 000000000000..5943d9450336
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/databaseServiceAutoClassificationPipeline.json
@@ -0,0 +1,85 @@
+{
+ "$id": "https://open-metadata.org/schema/metadataIngestion/databaseServiceAutoClassificationPipeline.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DatabaseServiceAutoClassificationPipeline",
+ "description": "DatabaseService AutoClassification & Auto Classification Pipeline Configuration.",
+ "type": "object",
+ "definitions": {
+ "autoClassificationConfigType": {
+ "description": "Profiler Source Config Pipeline type",
+ "type": "string",
+ "enum": ["AutoClassification"],
+ "default": "AutoClassification"
+ }
+ },
+ "properties": {
+ "type": {
+ "description": "Pipeline type",
+ "$ref": "#/definitions/autoClassificationConfigType",
+ "default": "AutoClassification"
+ },
+ "classificationFilterPattern": {
+ "description": "Regex to only compute metrics for table that matches the given tag, tiers, gloassary pattern.",
+ "$ref": "../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Classification Filter Pattern"
+ },
+ "schemaFilterPattern": {
+ "description": "Regex to only fetch tables or databases that matches the pattern.",
+ "$ref": "../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Schema Filter Pattern"
+ },
+ "tableFilterPattern": {
+ "description": "Regex exclude tables or databases that matches the pattern.",
+ "$ref": "../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Table Filter Pattern"
+ },
+ "databaseFilterPattern": {
+ "description": "Regex to only fetch databases that matches the pattern.",
+ "$ref": "../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Database Filter Pattern"
+ },
+ "includeViews": {
+ "description": "Optional configuration to turn off fetching metadata for views.",
+ "type": "boolean",
+ "default": true,
+ "title": "Include Views"
+ },
+ "useFqnForFiltering": {
+ "description": "Regex will be applied on fully qualified name (e.g service_name.db_name.schema_name.table_name) instead of raw name (e.g. table_name)",
+ "type": "boolean",
+ "default": false,
+ "title": "Use FQN For Filtering"
+ },
+ "storeSampleData": {
+ "description": "Option to turn on/off storing sample data. If enabled, we will ingest sample data for each table.",
+ "type": "boolean",
+ "default": false,
+ "title": "Store Sample Data"
+ },
+ "enableAutoClassification": {
+ "description": "Optional configuration to automatically tag columns that might contain sensitive information",
+ "type": "boolean",
+ "default": true,
+ "title": "Enable Auto Classification"
+ },
+ "confidence": {
+ "description": "Set the Confidence value for which you want the column to be tagged as PII. Confidence value ranges from 0 to 100. A higher number will yield less false positives but more false negatives. A lower number will yield more false positives but less false negatives.",
+ "type": "number",
+ "default": 80,
+ "title": "Auto Classification Inference Confidence Level"
+ },
+ "sampleDataCount": {
+ "description": "Number of sample rows to ingest when 'Generate Sample Data' is enabled",
+ "type": "integer",
+ "default": 50,
+ "title": "Sample Data Rows Count"
+ },
+ "classificationLanguage": {
+ "description": "Language to use for auto classification recognizers. Use 'any' to run all recognizers regardless of their configured language. For specific languages, only recognizers that support that language will be used.",
+ "$ref": "../type/classificationLanguages.json",
+ "default": "en",
+ "title": "Classification Language"
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/databaseServiceMetadataPipeline.json b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/databaseServiceMetadataPipeline.json
new file mode 100644
index 000000000000..b0428852ded5
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/databaseServiceMetadataPipeline.json
@@ -0,0 +1,187 @@
+{
+ "$id": "https://open-metadata.org/schema/metadataIngestion/databaseServiceMetadataPipeline.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DatabaseServiceMetadataPipeline",
+ "description": "DatabaseService Metadata Pipeline Configuration.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.metadataIngestion.DatabaseServiceMetadataPipeline",
+ "definitions": {
+ "databaseMetadataConfigType": {
+ "description": "Database Source Config Metadata Pipeline type",
+ "type": "string",
+ "enum": ["DatabaseMetadata"],
+ "default": "DatabaseMetadata"
+ },
+ "incremental": {
+ "description": "Use incremental Metadata extraction after the first execution. This is commonly done by getting the changes from Audit tables on the supporting databases.",
+ "type": "object",
+ "title": "Incremental Metadata Extraction Configuration",
+ "properties": {
+ "enabled": {
+ "description": "If True, enables Metadata Extraction to be incremental",
+ "type": "boolean",
+ "default": false,
+ "title": "Enabled"
+ },
+ "lookbackDays": {
+ "description": "Number os days to search back for a successful pipeline run. The timestamp of the last found successful pipeline run will be used as a base to search for updated entities.",
+ "type": "integer",
+ "default": 7,
+ "title": "Successful Pipeline Run Lookback Days"
+ },
+ "safetyMarginDays": {
+ "description": "Number of days to add to the last successful pipeline run timestamp to search for updated entities.",
+ "type": "integer",
+ "default": 1,
+ "title": "Safety Margin Days"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "enabled"
+ ]
+ }
+ },
+ "properties": {
+ "type": {
+ "description": "Pipeline type",
+ "$ref": "#/definitions/databaseMetadataConfigType",
+ "default": "DatabaseMetadata"
+ },
+ "markDeletedTables": {
+ "description": "This is an optional configuration for enabling soft deletion of tables. When this option is enabled, only tables that have been deleted from the source will be soft deleted, and this will apply solely to the schema that is currently being ingested via the pipeline. Any related entities such as test suites or lineage information that were associated with those tables will also be deleted.",
+ "type": "boolean",
+ "default": true,
+ "title": "Mark Deleted Tables"
+ },
+ "markDeletedStoredProcedures": {
+ "description": "Optional configuration to soft delete stored procedures in OpenMetadata if the source stored procedures are deleted. Also, if the stored procedures is deleted, all the associated entities like lineage, etc., with that stored procedures will be deleted",
+ "type": "boolean",
+ "default": true,
+ "title": "Mark Deleted Stored Procedures"
+ },
+ "markDeletedSchemas": {
+ "description": "Optional configuration to soft delete schemas in OpenMetadata if the source schemas are deleted. Also, if the schema is deleted, all the associated entities like tables, views, stored procedures, lineage, etc., with that schema will be deleted",
+ "type": "boolean",
+ "default": false,
+ "title": "Mark Deleted Schemas"
+ },
+ "markDeletedDatabases": {
+ "description": "Optional configuration to soft delete databases in OpenMetadata if the source databases are deleted. Also, if the database is deleted, all the associated entities like schemas, tables, views, stored procedures, lineage, etc., with that database will be deleted",
+ "type": "boolean",
+ "default": false,
+ "title": "Mark Deleted Databases"
+ },
+ "includeTables": {
+ "description": "Optional configuration to turn off fetching metadata for tables.",
+ "type": "boolean",
+ "default": true,
+ "title": "Include Tables"
+ },
+ "includeViews": {
+ "description": "Optional configuration to turn off fetching metadata for views.",
+ "type": "boolean",
+ "default": true,
+ "title": "Include Views"
+ },
+ "includeTags": {
+ "description": "Optional configuration to toggle the tags ingestion.",
+ "type": "boolean",
+ "default": true,
+ "title": "Include Tags"
+ },
+ "includeOwners":{
+ "title": "Include Owners",
+ "description": "Set the 'Include Owners' toggle to control whether to include owners to the ingested entity if the owner email matches with a user stored in the OM server as part of metadata ingestion. If the ingested entity already exists and has an owner, the owner will not be overwritten.",
+ "type": "boolean",
+ "default": false
+ },
+ "ownerConfig": {
+ "title": "Hierarchical Owner Configuration",
+ "description": "Advanced configuration for managing owners at multiple hierarchy levels (Service, Database, Schema, Table) with custom mappings and inheritance rules.",
+ "$ref": "../type/ownerConfig.json"
+ },
+ "includeStoredProcedures": {
+ "description": "Optional configuration to toggle the Stored Procedures ingestion.",
+ "type": "boolean",
+ "default": true,
+ "title": "Include Stored Procedures"
+ },
+ "includeDDL": {
+ "description": "Optional configuration to toggle the DDL Statements ingestion.",
+ "type": "boolean",
+ "default": false,
+ "title": "Include DDL Statements"
+ },
+ "overrideMetadata":{
+ "title": "Override Metadata",
+ "description": "Set the 'Override Metadata' toggle to control whether to override the existing metadata in the OpenMetadata server with the metadata fetched from the source. If the toggle is set to true, the metadata fetched from the source will override the existing metadata in the OpenMetadata server. If the toggle is set to false, the metadata fetched from the source will not override the existing metadata in the OpenMetadata server. This is applicable for fields like description, tags, owner and displayName",
+ "type": "boolean",
+ "default": false
+ },
+ "queryLogDuration": {
+ "description": "Configuration to tune how far we want to look back in query logs to process Stored Procedures results.",
+ "type": "integer",
+ "default": 1,
+ "title": "Query Log Duration"
+ },
+ "queryParsingTimeoutLimit": {
+ "description": "Configuration to set the timeout for parsing the query in seconds.",
+ "type": "integer",
+ "default": 300,
+ "title": "Query Parsing Timeout Limit"
+ },
+ "useFqnForFiltering": {
+ "description": "Regex will be applied on fully qualified name (e.g service_name.db_name.schema_name.table_name) instead of raw name (e.g. table_name)",
+ "type": "boolean",
+ "default": false,
+ "title": "Use FQN For Filtering"
+ },
+ "schemaFilterPattern": {
+ "description": "Regex to only include/exclude schemas that matches the pattern.",
+ "$ref": "../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Schema Filter Pattern"
+ },
+ "tableFilterPattern": {
+ "description": "Regex to only include/exclude tables that matches the pattern.",
+ "$ref": "../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Table Filter Pattern"
+ },
+ "databaseFilterPattern": {
+ "description": "Regex to only include/exclude databases that matches the pattern.",
+ "$ref": "../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Database Filter Pattern"
+ },
+ "storedProcedureFilterPattern": {
+ "description": "Regex to only include/exclude stored procedures that matches the pattern.",
+ "$ref": "../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Stored Procedure Filter Pattern"
+ },
+ "threads": {
+ "description": "Number of Threads to use in order to parallelize Table ingestion.",
+ "type": "integer",
+ "default": 1,
+ "title": "Number of Threads"
+ },
+ "incremental": {
+ "title": "Incremental Metadata Extraction Configuration",
+ "description": "Use incremental Metadata extraction after the first execution. This is commonly done by getting the changes from Audit tables on the supporting databases.",
+ "$ref": "#/definitions/incremental"
+ },
+ "extractJsonSchema": {
+ "title": "Extract JSON Schema",
+ "description": "Extract JSON schema from JSON columns by sampling data. This requires SELECT permission on the tables. If disabled or if SELECT fails, JSON columns will be ingested without schema information.",
+ "type": "boolean",
+ "default": false
+ },
+ "jsonSchemaSampleSize": {
+ "title": "JSON Schema Sample Size",
+ "description": "Number of rows to sample for inferring JSON schema. A larger sample size provides more accurate schema inference but increases query time.",
+ "type": "integer",
+ "default": 10,
+ "minimum": 1,
+ "maximum": 1000
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/databaseServiceProfilerPipeline.json b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/databaseServiceProfilerPipeline.json
new file mode 100644
index 000000000000..f2f18ec39ff5
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/databaseServiceProfilerPipeline.json
@@ -0,0 +1,140 @@
+{
+ "$id": "https://open-metadata.org/schema/metadataIngestion/databaseServiceProfilerPipeline.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DatabaseServiceProfilerPipeline",
+ "description": "DatabaseService Profiler Pipeline Configuration.",
+ "type": "object",
+ "definitions": {
+ "profilerConfigType": {
+ "description": "Profiler Source Config Pipeline type",
+ "type": "string",
+ "enum": ["Profiler"],
+ "default": "Profiler"
+ },
+ "processingEngine": {
+ "title": "Processing Engine",
+ "description": "Processing Engine Configuration. If not provided, the Native Engine will be used by default.",
+ "oneOf": [
+ {
+ "$ref": "../metadataIngestion/engine/nativeEngineConfig.json"
+ },
+ {
+ "$ref": "../metadataIngestion/engine/sparkEngineConfig.json"
+ }
+ ],
+ "default": {
+ "type": "Native"
+ }
+ }
+ },
+ "properties": {
+ "type": {
+ "description": "Pipeline type",
+ "$ref": "#/definitions/profilerConfigType",
+ "default": "Profiler"
+ },
+ "processingEngine": {
+ "$ref": "#/definitions/processingEngine"
+ },
+ "classificationFilterPattern": {
+ "description": "Regex to only compute metrics for table that matches the given tag, tiers, gloassary pattern.",
+ "$ref": "../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Classification Filter Pattern"
+ },
+ "schemaFilterPattern": {
+ "description": "Regex to only fetch tables or databases that matches the pattern.",
+ "$ref": "../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Schema Filter Pattern"
+ },
+ "tableFilterPattern": {
+ "description": "Regex exclude tables or databases that matches the pattern.",
+ "$ref": "../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Table Filter Pattern"
+ },
+ "databaseFilterPattern": {
+ "description": "Regex to only fetch databases that matches the pattern.",
+ "$ref": "../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Database Filter Pattern"
+ },
+ "includeViews": {
+ "description": "Optional configuration to turn off fetching metadata for views.",
+ "type": "boolean",
+ "default": false,
+ "title": "Include Views"
+ },
+ "useFqnForFiltering": {
+ "description": "Regex will be applied on fully qualified name (e.g service_name.db_name.schema_name.table_name) instead of raw name (e.g. table_name)",
+ "type": "boolean",
+ "default": false,
+ "title": "Use FQN For Filtering"
+ },
+ "computeTableMetrics": {
+ "description": "Option to turn on/off table metric computation. If enabled, profiler will compute table level metrics.",
+ "type": "boolean",
+ "default": true,
+ "title": "Compute Table Metrics"
+ },
+ "computeColumnMetrics": {
+ "description": "Option to turn on/off column metric computation. If enabled, profiler will compute column level metrics.",
+ "type": "boolean",
+ "default": true,
+ "title": "Compute Column Metrics"
+ },
+ "useStatistics": {
+ "description": "Use system tables to extract table metrics. Metrics that cannot be gathered from system tables will use the default methods. Using system tables can be faster but requires gathering statistics before running (for example using the ANALYZE procedure). More information can be found in the documentation: https://docs.openmetadata.org/latest/profler",
+ "type": "boolean",
+ "default": false,
+ "title": "Use System Table Statistics"
+ },
+ "profileSampleConfig": {
+ "$ref": "../type/samplingConfig.json#/definitions/profileSampleConfig"
+ },
+ "randomizedSample": {
+ "description": "Whether to randomize the sample data or not.",
+ "type": "boolean",
+ "default": false
+ },
+ "threadCount": {
+ "description": "Number of threads to use during metric computations",
+ "type": ["integer", "null"],
+ "default": null,
+ "title": "Thread Count"
+ },
+ "timeoutSeconds": {
+ "description": "Profiler Timeout in Seconds",
+ "type": "integer",
+ "default": 43200,
+ "title": "Timeout (in sec.)"
+ },
+ "metrics": {
+ "description": "List of metrics to compute. If empty, then all metrics will be computed",
+ "type": "array",
+ "items": {
+ "$ref": "../configuration/profilerConfiguration.json#/definitions/metricType"
+ },
+ "default": [
+ "mean",
+ "valuesCount",
+ "columnCount",
+ "distinctCount",
+ "distinctProportion",
+ "max",
+ "min",
+ "nullCount",
+ "rowCount",
+ "stddev",
+ "sum",
+ "uniqueCount",
+ "uniqueProportion",
+ "columnNames",
+ "nullProportion",
+ "median",
+ "firstQuartile",
+ "thirdQuartile",
+ "interQuartileRange",
+ "nonParametricSkew"
+ ]
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/databaseServiceQueryLineagePipeline.json b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/databaseServiceQueryLineagePipeline.json
new file mode 100644
index 000000000000..b58c89b4f37e
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/databaseServiceQueryLineagePipeline.json
@@ -0,0 +1,133 @@
+{
+ "$id": "https://open-metadata.org/schema/metadataIngestion/databaseServiceQueryLineagePipeline.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DatabaseServiceQueryLineagePipeline",
+ "description": "DatabaseService Query Lineage Pipeline Configuration.",
+ "type": "object",
+ "definitions": {
+ "databaseLineageConfigType": {
+ "description": "Database Source Config Usage Pipeline type",
+ "type": "string",
+ "enum": ["DatabaseLineage"],
+ "default": "DatabaseLineage"
+ }
+ },
+ "properties": {
+ "type": {
+ "description": "Pipeline type",
+ "$ref": "#/definitions/databaseLineageConfigType",
+ "default": "DatabaseLineage"
+ },
+ "queryLogDuration": {
+ "description": "Configuration to tune how far we want to look back in query logs to process lineage data.",
+ "type": "integer",
+ "default": 1,
+ "title": "Query Log Duration"
+ },
+ "queryLogFilePath": {
+ "description": "Configuration to set the file path for query logs",
+ "type": "string",
+ "title": "Query Log File Path"
+ },
+ "resultLimit": {
+ "description": "Configuration to set the limit for query logs",
+ "type": "integer",
+ "default": 1000,
+ "title": "Result Limit"
+ },
+ "parsingTimeoutLimit": {
+ "description": "Configuration to set the timeout for parsing the query in seconds.",
+ "type": "integer",
+ "default": 300,
+ "title": "Parsing Timeout Limit"
+ },
+ "queryParserConfig": {
+ "title": "Query Parser Configuration",
+ "description": "Configuration for SQL query parser selection for lineage extraction.",
+ "$ref": "./parserconfig/queryParserConfig.json"
+ },
+ "filterCondition": {
+ "description": "Configuration the condition to filter the query history.",
+ "type": "string",
+ "title": "Filter Condition"
+ },
+ "schemaFilterPattern": {
+ "description": "Regex to only fetch tables or databases that matches the pattern.",
+ "$ref": "../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Schema Filter Pattern"
+ },
+ "tableFilterPattern": {
+ "description": "Regex exclude tables or databases that matches the pattern.",
+ "$ref": "../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Table Filter Pattern"
+ },
+ "databaseFilterPattern": {
+ "description": "Regex to only fetch databases that matches the pattern.",
+ "$ref": "../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Database Filter Pattern"
+ },
+ "storedProcedureFilterPattern": {
+ "description": "Regex to only fetch stored procedures that matches the pattern.",
+ "$ref": "../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Stored Procedure Filter Pattern"
+ },
+ "overrideViewLineage":{
+ "title": "Override View Lineage",
+ "description": "Set the 'Override View Lineage' toggle to control whether to override the existing view lineage.",
+ "type": "boolean",
+ "default": false
+ },
+ "processViewLineage": {
+ "title": "Process View Lineage",
+ "description": "Set the 'Process View Lineage' toggle to control whether to process view lineage.",
+ "type": "boolean",
+ "default": true
+ },
+ "processQueryLineage": {
+ "title": "Process Query Lineage",
+ "description": "Set the 'Process Query Lineage' toggle to control whether to process query lineage.",
+ "type": "boolean",
+ "default": true
+ },
+ "processStoredProcedureLineage": {
+ "title": "Process Stored Procedure Lineage",
+ "description": "Set the 'Process Stored ProcedureLog Lineage' toggle to control whether to process stored procedure lineage.",
+ "type": "boolean",
+ "default": true
+ },
+ "threads": {
+ "description": "Number of Threads to use in order to parallelize lineage ingestion.",
+ "type": "integer",
+ "default": 1,
+ "title": "Number of Threads",
+ "minimum": 1
+ },
+ "processCrossDatabaseLineage": {
+ "title": "Process Cross Database Lineage",
+ "description": "Set the 'Process Cross Database Lineage' toggle to control whether to process table lineage across different databases.",
+ "type": "boolean",
+ "default": false
+ },
+ "crossDatabaseServiceNames": {
+ "title": "Cross Database Service Names",
+ "description": "Set 'Cross Database Service Names' to process lineage with the database.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "enableTempTableLineage": {
+ "title": "Enable Temp Table Lineage",
+ "description": "Handle Lineage for Snowflake Temporary and Transient Tables. ",
+ "type": "boolean",
+ "default": false
+ },
+ "incrementalLineageProcessing": {
+ "title": "Incremental Lineage Processing",
+ "description": "Set the 'Incremental Lineage Processing' toggle to control whether to process lineage incrementally.",
+ "type": "boolean",
+ "default": true
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/databaseServiceQueryUsagePipeline.json b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/databaseServiceQueryUsagePipeline.json
new file mode 100644
index 000000000000..15572e017a45
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/databaseServiceQueryUsagePipeline.json
@@ -0,0 +1,57 @@
+{
+ "$id": "https://open-metadata.org/schema/metadataIngestion/databaseServiceQueryUsagePipeline.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DatabaseServiceQueryUsagePipeline",
+ "description": "DatabaseService Query Usage Pipeline Configuration.",
+ "type": "object",
+ "definitions": {
+ "databaseUsageConfigType": {
+ "description": "Database Source Config Usage Pipeline type",
+ "type": "string",
+ "enum": ["DatabaseUsage"],
+ "default": "DatabaseUsage"
+ }
+ },
+ "properties": {
+ "type": {
+ "description": "Pipeline type",
+ "$ref": "#/definitions/databaseUsageConfigType",
+ "default": "DatabaseUsage"
+ },
+ "queryLogDuration": {
+ "description": "Configuration to tune how far we want to look back in query logs to process usage data.",
+ "type": "integer",
+ "default": 1,
+ "title": "Query Log Duration"
+ },
+ "stageFileLocation": {
+ "description": "Temporary file name to store the query logs before processing. Absolute file path required.",
+ "type": "string",
+ "default": "/tmp/query_log",
+ "title": "Stage File Location"
+ },
+ "filterCondition": {
+ "description": "Configuration the condition to filter the query history.",
+ "type": "string",
+ "title": "Filter Condition"
+ },
+ "resultLimit": {
+ "description": "Configuration to set the limit for query logs",
+ "type": "integer",
+ "default": 1000,
+ "title": "Result Limit"
+ },
+ "queryLogFilePath": {
+ "description": "Configuration to set the file path for query logs",
+ "type": "string",
+ "title": "Query Log File Path"
+ },
+ "processQueryCostAnalysis": {
+ "description": "Configuration to process query cost",
+ "type": "boolean",
+ "default": true,
+ "title": "Process Query Cost"
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/dbtPipeline.json b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/dbtPipeline.json
new file mode 100644
index 000000000000..e947ea456b6f
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/dbtPipeline.json
@@ -0,0 +1,115 @@
+{
+ "$id": "https://open-metadata.org/schema/metadataIngestion/dbtPipeline.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "dbtPipeline",
+ "description": "DBT Pipeline Configuration.",
+ "type": "object",
+ "definitions": {
+ "dbtConfigType": {
+ "description": "DBT Config Pipeline type",
+ "type": "string",
+ "enum": [
+ "DBT"
+ ],
+ "default": "DBT"
+ }
+ },
+ "properties": {
+ "type": {
+ "description": "Pipeline type",
+ "$ref": "#/definitions/dbtConfigType",
+ "default": "DBT"
+ },
+ "dbtConfigSource": {
+ "mask": true,
+ "title": "DBT Configuration Source",
+ "description": "Available sources to fetch DBT catalog and manifest files.",
+ "oneOf": [
+ {
+ "$ref": "./dbtconfig/dbtCloudConfig.json"
+ },
+ {
+ "$ref": "./dbtconfig/dbtLocalConfig.json"
+ },
+ {
+ "$ref": "./dbtconfig/dbtHttpConfig.json"
+ },
+ {
+ "$ref": "./dbtconfig/dbtS3Config.json"
+ },
+ {
+ "$ref": "./dbtconfig/dbtGCSConfig.json"
+ },
+ {
+ "$ref": "./dbtconfig/dbtAzureConfig.json"
+ }
+ ]
+ },
+ "searchAcrossDatabases": {
+ "title": "Search Across Database Services",
+ "description": "Optional configuration to search across databases for tables or not",
+ "type": "boolean",
+ "default": false
+ },
+ "dbtUpdateDescriptions": {
+ "title": "Update Descriptions",
+ "description": "Optional configuration to update the description from DBT or not",
+ "type": "boolean",
+ "default": false
+ },
+ "dbtUpdateOwners": {
+ "title": "Update Owners",
+ "description": "Optional configuration to update the owners from DBT or not",
+ "type": "boolean",
+ "default": false
+ },
+ "includeTags": {
+ "title": "Include Tags",
+ "description": "Optional configuration to toggle the tags ingestion.",
+ "type": "boolean",
+ "default": true
+ },
+ "overrideLineage":{
+ "title": "Override Lineage",
+ "description": "Set the 'Override Lineage' toggle to control whether to override the existing lineage.",
+ "type": "boolean",
+ "default": false
+ },
+ "dbtClassificationName": {
+ "title": "DBT Classification Name",
+ "description": "Custom OpenMetadata Classification name for dbt tags.",
+ "type": "string",
+ "default": "dbtTags"
+ },
+ "schemaFilterPattern": {
+ "description": "Regex to only fetch tables or databases that matches the pattern.",
+ "$ref": "../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Schema Filter Pattern"
+ },
+ "tableFilterPattern": {
+ "description": "Regex exclude tables or databases that matches the pattern.",
+ "$ref": "../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Table Filter Pattern"
+ },
+ "parsingTimeoutLimit": {
+ "description": "Configuration to set the timeout for parsing the query in seconds.",
+ "type": "integer",
+ "default": 300,
+ "title": "Parsing Timeout Limit (in sec.)"
+ },
+ "databaseFilterPattern": {
+ "description": "Regex to only fetch databases that matches the pattern.",
+ "$ref": "../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Database Filter Pattern"
+ },
+ "tagFilterPattern": {
+ "description": "Regex to only fetch tags that matches the pattern.",
+ "$ref": "../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Tag Filter Pattern"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "dbtConfigSource"
+ ]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/dbtconfig/dbtAzureConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/dbtconfig/dbtAzureConfig.json
new file mode 100644
index 000000000000..dfdbb0b37c20
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/dbtconfig/dbtAzureConfig.json
@@ -0,0 +1,40 @@
+{
+ "$id": "https://open-metadata.org/schema/metadataIngestion/dbtconfig/dbtAzureConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DBT Azure Config",
+ "type": "object",
+ "description": "DBT Catalog, Manifest and Run Results files in Azure bucket. We will search for catalog.json, manifest.json and run_results.json.",
+ "javaType": "org.openmetadata.schema.metadataIngestion.dbtconfig.DbtAzureConfig",
+ "properties": {
+ "dbtConfigType": {
+ "description": "dbt Configuration type",
+ "type": "string",
+ "enum": ["azure"],
+ "default": "azure"
+ },
+ "dbtSecurityConfig": {
+ "title": "DBT Azure Security Config",
+ "$ref": "../../security/credentials/azureCredentials.json"
+ },
+ "dbtPrefixConfig": {
+ "title": "DBT Prefix Config",
+ "description": "Details of the bucket where the dbt files are stored",
+ "type": "object",
+ "properties": {
+ "dbtBucketName": {
+ "title": "DBT Bucket Name",
+ "description": "Name of the bucket where the dbt files are stored",
+ "type": "string"
+ },
+ "dbtObjectPrefix": {
+ "title": "DBT Object Prefix",
+ "description": "Path of the folder where the dbt files are stored",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "additionalProperties": false,
+ "required": ["dbtSecurityConfig", "dbtConfigType"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/dbtconfig/dbtBucketDetails.json b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/dbtconfig/dbtBucketDetails.json
new file mode 100644
index 000000000000..9ece25f98978
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/dbtconfig/dbtBucketDetails.json
@@ -0,0 +1,21 @@
+{
+ "$id": "https://open-metadata.org/schema/metadataIngestion/dbtconfig/dbtBucketDetails.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DBT Bucket Details",
+ "description": "Details of the bucket where the dbt files are stored",
+ "javaType": "org.openmetadata.schema.metadataIngestion.dbtconfig.DbtBucketDetails",
+ "type": "object",
+ "properties": {
+ "dbtBucketName": {
+ "title": "DBT Bucket Name",
+ "description": "Name of the bucket where the dbt files are stored",
+ "type": "string"
+ },
+ "dbtObjectPrefix": {
+ "title": "DBT Object Prefix",
+ "description": "Path of the folder where the dbt files are stored",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/dbtconfig/dbtCloudConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/dbtconfig/dbtCloudConfig.json
new file mode 100644
index 000000000000..f245dbf16895
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/dbtconfig/dbtCloudConfig.json
@@ -0,0 +1,45 @@
+{
+ "$id": "https://open-metadata.org/schema/metadataIngestion/dbtconfig/dbtCloudConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DBT Cloud Config",
+ "description": "dbt Cloud configuration.",
+ "javaType": "org.openmetadata.schema.metadataIngestion.dbtconfig.DbtCloudConfig",
+ "type": "object",
+ "properties": {
+ "dbtConfigType": {
+ "description": "dbt Configuration type",
+ "type": "string",
+ "enum": ["cloud"],
+ "default": "cloud"
+ },
+ "dbtCloudAuthToken": {
+ "title": "dbt Cloud Authentication Token",
+ "description": "dbt cloud account authentication token",
+ "type": "string",
+ "format": "password"
+ },
+ "dbtCloudAccountId": {
+ "title": "dbt Cloud Account Id",
+ "description": "dbt cloud account Id",
+ "type": "string"
+ },
+ "dbtCloudProjectId": {
+ "title": "dbt Cloud Project Id",
+ "description": "In case of multiple projects in a dbt cloud account, specify the project's id from which you want to extract the dbt run artifacts",
+ "type": "string"
+ },
+ "dbtCloudJobId": {
+ "title": "dbt Cloud Job Id",
+ "description": "dbt cloud job id.",
+ "type": "string"
+ },
+ "dbtCloudUrl": {
+ "title": "dbt Cloud URL",
+ "description": "URL to connect to your dbt cloud instance. E.g., https://cloud.getdbt.com or https://emea.dbt.com/",
+ "type": "string",
+ "format": "uri"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["dbtCloudAuthToken", "dbtCloudAccountId", "dbtCloudUrl", "dbtConfigType"]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/dbtconfig/dbtGCSConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/dbtconfig/dbtGCSConfig.json
new file mode 100644
index 000000000000..f9881afaa042
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/dbtconfig/dbtGCSConfig.json
@@ -0,0 +1,40 @@
+{
+ "$id": "https://open-metadata.org/schema/metadataIngestion/dbtconfig/dbtGCSConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DBT GCS Config",
+ "type": "object",
+ "description": "DBT Catalog, Manifest and Run Results files in GCS storage. We will search for catalog.json, manifest.json and run_results.json.",
+ "javaType": "org.openmetadata.schema.metadataIngestion.dbtconfig.DbtGCSConfig",
+ "properties": {
+ "dbtConfigType": {
+ "description": "dbt Configuration type",
+ "type": "string",
+ "enum": ["gcs"],
+ "default": "gcs"
+ },
+ "dbtSecurityConfig": {
+ "title": "DBT GCS Security Config",
+ "$ref": "../../security/credentials/gcpCredentials.json"
+ },
+ "dbtPrefixConfig": {
+ "title": "DBT Prefix Config",
+ "description": "Details of the bucket where the dbt files are stored",
+ "type": "object",
+ "properties": {
+ "dbtBucketName": {
+ "title": "DBT Bucket Name",
+ "description": "Name of the bucket where the dbt files are stored",
+ "type": "string"
+ },
+ "dbtObjectPrefix": {
+ "title": "DBT Object Prefix",
+ "description": "Path of the folder where the dbt files are stored",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "additionalProperties": false,
+ "required": ["dbtSecurityConfig", "dbtConfigType"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/dbtconfig/dbtHttpConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/dbtconfig/dbtHttpConfig.json
new file mode 100644
index 000000000000..222336d29dfa
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/dbtconfig/dbtHttpConfig.json
@@ -0,0 +1,57 @@
+{
+ "$id": "https://open-metadata.org/schema/metadataIngestion/dbtconfig/dbtHttpConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DBT HTTP Config",
+ "description": "DBT Catalog, Manifest and Run Results HTTP path configuration.",
+ "javaType": "org.openmetadata.schema.metadataIngestion.dbtconfig.DbtHttpConfig",
+ "type": "object",
+ "properties": {
+ "dbtConfigType": {
+ "description": "dbt Configuration type",
+ "type": "string",
+ "enum": ["http"],
+ "default": "http"
+ },
+ "dbtCatalogHttpPath": {
+ "title": "DBT Catalog HTTP File Path",
+ "description": "DBT catalog http file path to extract dbt models with their column schemas.",
+ "type": "string"
+ },
+ "dbtManifestHttpPath": {
+ "title": "DBT Manifest HTTP File Path",
+ "description": "DBT manifest http file path to extract dbt models and associate with tables.",
+ "type": "string"
+ },
+ "dbtRunResultsHttpPath": {
+ "title": "DBT Run Results HTTP File Path",
+ "description": "DBT run results http file path to extract the test results information.",
+ "type": "string"
+ },
+ "dbtSourcesHttpPath": {
+ "title": "DBT Sources HTTP File Path",
+ "description": "DBT sources http file path to extract freshness test results information.",
+ "type": "string"
+ },
+ "dbtHttpHeaders": {
+ "title": "DBT HTTP Headers",
+ "description": "Custom HTTP headers to include in every request when fetching dbt artifacts (e.g. Authorization for private GitLab/GitHub repos).",
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "dbtVerifySSL": {
+ "title": "DBT Verify SSL",
+ "description": "SSL/TLS verification mode when fetching dbt artifacts over HTTPS.",
+ "$ref": "../../security/ssl/verifySSLConfig.json#/definitions/verifySSL",
+ "default": "no-ssl"
+ },
+ "dbtSSLConfig": {
+ "title": "DBT SSL Config",
+ "description": "SSL certificate configuration for validating the server certificate when fetching dbt artifacts.",
+ "$ref": "../../security/ssl/verifySSLConfig.json#/definitions/sslConfig"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["dbtManifestHttpPath", "dbtConfigType"]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/dbtconfig/dbtLocalConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/dbtconfig/dbtLocalConfig.json
new file mode 100644
index 000000000000..94ffc2cf1774
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/dbtconfig/dbtLocalConfig.json
@@ -0,0 +1,38 @@
+{
+ "$id": "https://open-metadata.org/schema/metadataIngestion/dbtconfig/dbtLocalConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DBT Local Config",
+ "description": "DBT Catalog, Manifest and Run Results file path config.",
+ "javaType": "org.openmetadata.schema.metadataIngestion.dbtconfig.DbtLocalConfig",
+ "type": "object",
+ "properties": {
+ "dbtConfigType": {
+ "description": "dbt Configuration type",
+ "type": "string",
+ "enum": ["local"],
+ "default": "local"
+ },
+ "dbtCatalogFilePath": {
+ "title": "DBT Catalog File Path",
+ "description": "DBT catalog file path to extract dbt models with their column schemas.",
+ "type": "string"
+ },
+ "dbtManifestFilePath": {
+ "title": "DBT Manifest File Path",
+ "description": "DBT manifest file path to extract dbt models and associate with tables.",
+ "type": "string"
+ },
+ "dbtRunResultsFilePath": {
+ "title": "DBT Run Results File Path",
+ "description": "DBT run results file path to extract the test results information.",
+ "type": "string"
+ },
+ "dbtSourcesFilePath": {
+ "title": "DBT Sources File Path",
+ "description": "DBT sources file path to extract the freshness test result.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["dbtManifestFilePath", "dbtConfigType"]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/dbtconfig/dbtS3Config.json b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/dbtconfig/dbtS3Config.json
new file mode 100644
index 000000000000..47fa0be22381
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/dbtconfig/dbtS3Config.json
@@ -0,0 +1,40 @@
+{
+ "$id": "https://open-metadata.org/schema/metadataIngestion/dbtconfig/dbtS3Config.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DBT S3 Config",
+ "description": "DBT Catalog, Manifest and Run Results files in S3 bucket. We will search for catalog.json, manifest.json and run_results.json.",
+ "javaType": "org.openmetadata.schema.metadataIngestion.dbtconfig.DbtS3Config",
+ "type": "object",
+ "properties": {
+ "dbtConfigType": {
+ "description": "dbt Configuration type",
+ "type": "string",
+ "enum": ["s3"],
+ "default": "s3"
+ },
+ "dbtSecurityConfig": {
+ "title": "DBT S3 Security Config",
+ "$ref": "../../security/credentials/awsCredentials.json"
+ },
+ "dbtPrefixConfig": {
+ "title": "DBT Prefix Config",
+ "description": "Details of the bucket where the dbt files are stored",
+ "type": "object",
+ "properties": {
+ "dbtBucketName": {
+ "title": "DBT Bucket Name",
+ "description": "Name of the bucket where the dbt files are stored",
+ "type": "string"
+ },
+ "dbtObjectPrefix": {
+ "title": "DBT Object Prefix",
+ "description": "Path of the folder where the dbt files are stored",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "additionalProperties": false,
+ "required": ["dbtSecurityConfig", "dbtConfigType"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/driveServiceMetadataPipeline.json b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/driveServiceMetadataPipeline.json
new file mode 100644
index 000000000000..19c83d676198
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/driveServiceMetadataPipeline.json
@@ -0,0 +1,122 @@
+{
+ "$id": "https://open-metadata.org/schema/metadataIngestion/driveServiceMetadataPipeline.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DriveServiceMetadataPipeline",
+ "description": "DriveService Metadata Pipeline Configuration.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.metadataIngestion.DriveServiceMetadataPipeline",
+ "definitions": {
+ "driveMetadataConfigType": {
+ "description": "Drive Source Config Metadata Pipeline type",
+ "type": "string",
+ "enum": ["DriveMetadata"],
+ "default": "DriveMetadata"
+ }
+ },
+ "properties": {
+ "type": {
+ "description": "Pipeline type",
+ "$ref": "#/definitions/driveMetadataConfigType",
+ "default": "DriveMetadata"
+ },
+ "markDeletedDirectories": {
+ "description": "Optional configuration to soft delete directories in OpenMetadata if the source directories are deleted. Also, if the directory is deleted, all the associated entities like files, spreadsheets, worksheets, lineage, etc., with that directory will be deleted",
+ "type": "boolean",
+ "default": true,
+ "title": "Mark Deleted Directories"
+ },
+ "markDeletedFiles": {
+ "description": "Optional configuration to soft delete files in OpenMetadata if the source files are deleted. Also, if the file is deleted, all the associated entities like lineage, etc., with that file will be deleted",
+ "type": "boolean",
+ "default": true,
+ "title": "Mark Deleted Files"
+ },
+ "markDeletedSpreadsheets": {
+ "description": "Optional configuration to soft delete spreadsheets in OpenMetadata if the source spreadsheets are deleted. Also, if the spreadsheet is deleted, all the associated entities like worksheets, lineage, etc., with that spreadsheet will be deleted",
+ "type": "boolean",
+ "default": true,
+ "title": "Mark Deleted Spreadsheets"
+ },
+ "markDeletedWorksheets": {
+ "description": "Optional configuration to soft delete worksheets in OpenMetadata if the source worksheets are deleted. Also, if the worksheet is deleted, all the associated entities like lineage, etc., with that worksheet will be deleted",
+ "type": "boolean",
+ "default": true,
+ "title": "Mark Deleted Worksheets"
+ },
+ "includeDirectories": {
+ "description": "Optional configuration to turn off fetching metadata for directories.",
+ "type": "boolean",
+ "default": true,
+ "title": "Include Directories"
+ },
+ "includeFiles": {
+ "description": "Optional configuration to turn off fetching metadata for files.",
+ "type": "boolean",
+ "default": true,
+ "title": "Include Files"
+ },
+ "includeSpreadsheets": {
+ "description": "Optional configuration to turn off fetching metadata for spreadsheets.",
+ "type": "boolean",
+ "default": true,
+ "title": "Include Spreadsheets"
+ },
+ "includeWorksheets": {
+ "description": "Optional configuration to turn off fetching metadata for worksheets.",
+ "type": "boolean",
+ "default": true,
+ "title": "Include Worksheets"
+ },
+ "includeTags": {
+ "description": "Optional configuration to toggle the tags ingestion.",
+ "type": "boolean",
+ "default": true,
+ "title": "Include Tags"
+ },
+ "includeOwners": {
+ "title": "Include Owners",
+ "description": "Set the 'Include Owners' toggle to control whether to include owners to the ingested entity if the owner email matches with a user stored in the OM server as part of metadata ingestion. If the ingested entity already exists and has an owner, the owner will not be overwritten.",
+ "type": "boolean",
+ "default": false
+ },
+ "overrideMetadata": {
+ "title": "Override Metadata",
+ "description": "Set the 'Override Metadata' toggle to control whether to override the existing metadata in the OpenMetadata server with the metadata fetched from the source. If the toggle is set to true, the metadata fetched from the source will override the existing metadata in the OpenMetadata server. If the toggle is set to false, the metadata fetched from the source will not override the existing metadata in the OpenMetadata server. This is applicable for fields like description, tags, owner and displayName",
+ "type": "boolean",
+ "default": false
+ },
+ "useFqnForFiltering": {
+ "description": "Regex will be applied on fully qualified name (e.g service_name.directory_name.file_name) instead of raw name (e.g. file_name)",
+ "type": "boolean",
+ "default": false,
+ "title": "Use FQN For Filtering"
+ },
+ "directoryFilterPattern": {
+ "description": "Regex to only include/exclude directories that matches the pattern.",
+ "$ref": "../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Directory Filter Pattern"
+ },
+ "fileFilterPattern": {
+ "description": "Regex to only include/exclude files that matches the pattern.",
+ "$ref": "../type/filterPattern.json#/definitions/filterPattern",
+ "title": "File Filter Pattern"
+ },
+ "spreadsheetFilterPattern": {
+ "description": "Regex to only include/exclude spreadsheets that matches the pattern.",
+ "$ref": "../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Spreadsheet Filter Pattern"
+ },
+ "worksheetFilterPattern": {
+ "description": "Regex to only include/exclude worksheets that matches the pattern.",
+ "$ref": "../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Worksheet Filter Pattern"
+ },
+ "threads": {
+ "description": "Number of Threads to use in order to parallelize Drive ingestion.",
+ "type": "integer",
+ "default": 1,
+ "title": "Number of Threads"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/engine/nativeEngineConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/engine/nativeEngineConfig.json
new file mode 100644
index 000000000000..a434efbd152a
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/engine/nativeEngineConfig.json
@@ -0,0 +1,17 @@
+{
+"$id": "https://open-metadata.org/schema/metadataIngestion/engine/nativeEngineConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Native Engine Configuration",
+ "description": "Configuration for the native metadata ingestion engine",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.metadataIngestion.engine.NativeEngineConfig",
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": ["Native"],
+ "description": "The type of the engine configuration"
+ }
+ },
+ "required": ["type"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/engine/sparkEngineConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/engine/sparkEngineConfig.json
new file mode 100644
index 000000000000..576af8697df7
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/engine/sparkEngineConfig.json
@@ -0,0 +1,37 @@
+{
+ "$id": "https://open-metadata.org/schema/metadataIngestion/engine/sparkEngineConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Spark Engine Configuration",
+ "description": "This schema defines the configuration for a Spark Engine runner.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.metadataIngestion.engine.SparkEngineConfig",
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": ["Spark"],
+ "default": "Spark"
+ },
+ "remote": {
+ "description": "Spark Connect Remote URL.",
+ "type": "string"
+ },
+ "config": {
+ "type": "object",
+ "properties": {
+ "tempPath": {
+ "description": "Temporary path to store the data.",
+ "type": "string",
+ "default": "/tmp/openmetadata"
+ },
+ "extraConfig": {
+ "title": "Additional Spark Configuration",
+ "description": "Additional Spark configuration properties as key-value pairs.",
+ "$ref": "../../type/basic.json#/definitions/map"
+ }
+ }
+ }
+ },
+ "required": ["type", "remote"],
+ "additionalProperties": false
+ }
+
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/mcpServiceMetadataPipeline.json b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/mcpServiceMetadataPipeline.json
new file mode 100644
index 000000000000..97a9a0590c52
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/mcpServiceMetadataPipeline.json
@@ -0,0 +1,34 @@
+{
+ "$id": "https://open-metadata.org/schema/metadataIngestion/mcpServiceMetadataPipeline.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "McpServiceMetadataPipeline",
+ "description": "McpService Metadata Pipeline Configuration.",
+ "type": "object",
+ "definitions": {
+ "McpMetadataConfigType": {
+ "description": "MCP Source Config Metadata Pipeline type",
+ "type": "string",
+ "enum": ["McpMetadata"],
+ "default": "McpMetadata"
+ }
+ },
+ "properties": {
+ "type": {
+ "description": "Pipeline type",
+ "$ref": "#/definitions/McpMetadataConfigType",
+ "default": "McpMetadata"
+ },
+ "serverFilterPattern": {
+ "description": "Regex to only fetch MCP servers with names matching the pattern.",
+ "$ref": "../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Server Filter Pattern"
+ },
+ "overrideMetadata": {
+ "title": "Override Metadata",
+ "description": "Set the 'Override Metadata' toggle to control whether to override the existing metadata in the OpenMetadata server with the metadata fetched from the source.",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/messagingServiceMetadataPipeline.json b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/messagingServiceMetadataPipeline.json
new file mode 100644
index 000000000000..18084bc21500
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/messagingServiceMetadataPipeline.json
@@ -0,0 +1,46 @@
+{
+ "$id": "https://open-metadata.org/schema/metadataIngestion/messagingServiceMetadataPipeline.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "MessagingServiceMetadataPipeline",
+ "description": "MessagingService Metadata Pipeline Configuration.",
+ "type": "object",
+ "definitions": {
+ "messagingMetadataConfigType": {
+ "description": "Messaging Source Config Metadata Pipeline type",
+ "type": "string",
+ "enum": ["MessagingMetadata"],
+ "default": "MessagingMetadata"
+ }
+ },
+ "properties": {
+ "type": {
+ "description": "Pipeline type",
+ "$ref": "#/definitions/messagingMetadataConfigType",
+ "default": "MessagingMetadata"
+ },
+ "topicFilterPattern": {
+ "description": "Regex to only fetch topics that matches the pattern.",
+ "$ref": "../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Topic Filter Pattern"
+ },
+ "generateSampleData": {
+ "description": "Option to turn on/off generating sample data during metadata extraction.",
+ "type": "boolean",
+ "default": false,
+ "title": "Generate Sample Data"
+ },
+ "markDeletedTopics": {
+ "description": "Optional configuration to soft delete topics in OpenMetadata if the source topics are deleted. Also, if the topic is deleted, all the associated entities like sample data, lineage, etc., with that topic will be deleted",
+ "type": "boolean",
+ "default": true,
+ "title": "Mark Deleted Topics"
+ },
+ "overrideMetadata":{
+ "title": "Override Metadata",
+ "description": "Set the 'Override Metadata' toggle to control whether to override the existing metadata in the OpenMetadata server with the metadata fetched from the source. If the toggle is set to true, the metadata fetched from the source will override the existing metadata in the OpenMetadata server. If the toggle is set to false, the metadata fetched from the source will not override the existing metadata in the OpenMetadata server. This is applicable for fields like description, tags, owner and displayName",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/metadataToElasticSearchPipeline.json b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/metadataToElasticSearchPipeline.json
new file mode 100644
index 000000000000..36fb124dea98
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/metadataToElasticSearchPipeline.json
@@ -0,0 +1,74 @@
+{
+ "$id": "https://open-metadata.org/schema/metadataIngestion/metadataToElasticSearchPipeline.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "MetadataToElasticSearchPipeline",
+ "description": "Data Insight Pipeline Configuration.",
+ "type": "object",
+ "definitions": {
+ "metadataToESConfigType": {
+ "description": "Pipeline Source Config Metadata Pipeline type",
+ "type": "string",
+ "enum": ["MetadataToElasticSearch"],
+ "default": "MetadataToElasticSearch"
+ }
+ },
+ "properties": {
+ "type": {
+ "description": "Pipeline type",
+ "$ref": "#/definitions/metadataToESConfigType",
+ "default": "MetadataToElasticSearch"
+ },
+ "regionName": {
+ "title": "AWS Region Name",
+ "description": "Region name. Required when using AWS Credentials.",
+ "type": "string",
+ "default": null
+ },
+ "caCerts": {
+ "title": "CA Certificates",
+ "description": "Certificate path to be added in configuration. The path should be local in the Ingestion Container.",
+ "type": "string",
+ "default": null
+ },
+ "timeout": {
+ "description": "Connection Timeout",
+ "type": "integer",
+ "default": 30
+ },
+ "useSSL": {
+ "title": "Use SSL",
+ "description": "Indicates whether to use SSL when connecting to ElasticSearch. By default, we will ignore SSL settings.",
+ "type": "boolean",
+ "default": false
+ },
+ "verifyCerts": {
+ "title": "Validate Certificates",
+ "description": "Indicates whether to verify certificates when using SSL connection to ElasticSearch. Ignored by default. Is set to true, make sure to send the certificates in the property `CA Certificates`.",
+ "type": "boolean",
+ "default": false
+ },
+ "useAwsCredentials": {
+ "title": "Use AWS Credentials",
+ "description": "Indicates whether to use aws credentials when connecting to OpenSearch in AWS.",
+ "type": "boolean",
+ "default": false
+ },
+ "searchIndexMappingLanguage": {
+ "description": "Recreate Indexes with updated Language",
+ "$ref": "../configuration/elasticSearchConfiguration.json#/definitions/searchIndexMappingLanguage"
+ },
+ "batchSize": {
+ "title": "Batch Size",
+ "description": "Maximum number of events entities in a batch (Default 1000).",
+ "type": "integer",
+ "default": 1000
+ },
+ "recreateIndex": {
+ "title": "Recreate Indexes",
+ "type": "boolean",
+ "default": true
+ }
+ },
+ "required": ["type"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/mlmodelServiceMetadataPipeline.json b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/mlmodelServiceMetadataPipeline.json
new file mode 100644
index 000000000000..3fe77e75a6c0
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/mlmodelServiceMetadataPipeline.json
@@ -0,0 +1,61 @@
+{
+ "$id": "https://open-metadata.org/schema/metadataIngestion/mlmodelServiceMetadataPipeline.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "MlModelServiceMetadataPipeline",
+ "description": "MlModelService Metadata Pipeline Configuration.",
+ "type": "object",
+ "definitions": {
+ "mlModelMetadataConfigType": {
+ "description": "MlModel Source Config Metadata Pipeline type",
+ "type": "string",
+ "enum": ["MlModelMetadata"],
+ "default": "MlModelMetadata"
+ }
+ },
+ "properties": {
+ "type": {
+ "description": "Pipeline type",
+ "$ref": "#/definitions/mlModelMetadataConfigType",
+ "default": "MlModelMetadata"
+ },
+ "mlModelFilterPattern": {
+ "description": "Regex to only fetch MlModels with names matching the pattern.",
+ "$ref": "../type/filterPattern.json#/definitions/filterPattern",
+ "title": "ML Model Filter Pattern"
+ },
+ "markDeletedMlModels": {
+ "description": "Optional configuration to soft delete MlModels in OpenMetadata if the source MlModels are deleted. Also, if the MlModel is deleted, all the associated entities like lineage, etc., with that MlModels will be deleted",
+ "type": "boolean",
+ "default": true,
+ "title": "Mark Deleted ML Models"
+ },
+ "lineageInformation": {
+ "description": "Details required to generate Lineage",
+ "type": "object",
+ "title": "Lineage Information",
+ "properties": {
+ "dbServicePrefixes": {
+ "title": "Database Service Prefixes",
+ "description": "List of service path prefixes for lineage matching. Supported formats: DBServiceName, DBServiceName.DatabaseName, DBServiceName.DatabaseName.SchemaName, or DBServiceName.DatabaseName.SchemaName.TableName",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "overrideMetadata":{
+ "title": "Override Metadata",
+ "description": "Set the 'Override Metadata' toggle to control whether to override the existing metadata in the OpenMetadata server with the metadata fetched from the source. If the toggle is set to true, the metadata fetched from the source will override the existing metadata in the OpenMetadata server. If the toggle is set to false, the metadata fetched from the source will not override the existing metadata in the OpenMetadata server. This is applicable for fields like description, tags, owner and displayName",
+ "type": "boolean",
+ "default": false
+ },
+ "overrideLineage": {
+ "title": "Override Lineage",
+ "description": "Set the 'Override Lineage' toggle to control whether to override the existing lineage.",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/parserconfig/queryParserConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/parserconfig/queryParserConfig.json
new file mode 100644
index 000000000000..34a5f48937ac
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/parserconfig/queryParserConfig.json
@@ -0,0 +1,29 @@
+{
+ "$id": "https://open-metadata.org/schema/metadataIngestion/parserconfig/queryParserConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Query Parser Config",
+ "description": "Configuration for SQL query parser selection for lineage and usage extraction.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.metadataIngestion.parserconfig.QueryParserConfig",
+ "definitions": {
+ "QueryParserType": {
+ "description": "Type of SQL query parser to use for lineage and usage extraction. Auto mode is recommended for best results.",
+ "type": "string",
+ "enum": [
+ "Auto",
+ "SqlGlot",
+ "SqlFluff"
+ ],
+ "default": "Auto"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Query Parser Type",
+ "description": "Choose the SQL parser for lineage extraction:\n• Auto (default): Automatically tries SqlGlot first, falls back to SqlFluff, then SqlParse. Recommended for best results.\n• SqlGlot: High-performance parser with excellent dialect support. Falls back to SqlParse on failure.\n• SqlFluff: Comprehensive parser with strong dialect support. Falls back to SqlParse on failure.",
+ "$ref": "#/definitions/QueryParserType",
+ "default": "Auto"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/pipelineServiceMetadataPipeline.json b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/pipelineServiceMetadataPipeline.json
new file mode 100644
index 000000000000..ea6900d0a20f
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/pipelineServiceMetadataPipeline.json
@@ -0,0 +1,99 @@
+{
+ "$id": "https://open-metadata.org/schema/metadataIngestion/pipelineServiceMetadataPipeline.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "PipelineServiceMetadataPipeline",
+ "description": "PipelineService Metadata Pipeline Configuration.",
+ "type": "object",
+ "definitions": {
+ "pipelineMetadataConfigType": {
+ "description": "Pipeline Source Config Metadata Pipeline type",
+ "type": "string",
+ "enum": ["PipelineMetadata"],
+ "default": "PipelineMetadata"
+ }
+ },
+ "properties": {
+ "type": {
+ "description": "Pipeline type",
+ "$ref": "#/definitions/pipelineMetadataConfigType",
+ "default": "PipelineMetadata"
+ },
+ "includeLineage": {
+ "description": "Optional configuration to turn off fetching lineage from pipelines.",
+ "type": "boolean",
+ "default": true,
+ "title": "Include Lineage"
+ },
+ "includeOwners": {
+ "description": "Set the 'Include Owners' toggle to control whether to include owners to the ingested entity if the owner email matches with a user stored in the OM server as part of metadata ingestion. If the ingested entity already exists and has an owner, the owner will not be overwritten.",
+ "type": "boolean",
+ "default": true,
+ "title": "Include Owners"
+ },
+ "pipelineFilterPattern": {
+ "description": "Regex exclude pipelines.",
+ "$ref": "../type/filterPattern.json#/definitions/filterPattern",
+ "title": "Pipeline Filter Pattern"
+ },
+ "lineageInformation": {
+ "description": "Details required to generate Lineage",
+ "type": "object",
+ "title": "Lineage Information",
+ "properties": {
+ "dbServiceNames": {
+ "title": "Database Service Names List",
+ "description": "List of Database Service Names for creation of lineage",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "storageServiceNames": {
+ "title": "Storage Service Names List",
+ "description": "List of Storage Service Names for creation of lineage",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "overrideLineage":{
+ "title": "Override Lineage",
+ "description": "Set the 'Override Lineage' toggle to control whether to override the existing lineage.",
+ "type": "boolean",
+ "default": false
+ },
+ "markDeletedPipelines": {
+ "description": "Optional configuration to soft delete Pipelines in OpenMetadata if the source Pipelines are deleted. Also, if the Pipeline is deleted, all the associated entities like lineage, etc., with that Pipeline will be deleted",
+ "type": "boolean",
+ "default": true,
+ "title": "Mark Deleted Pipeline"
+ },
+ "includeTags": {
+ "description": "Optional configuration to toggle the tags ingestion.",
+ "type": "boolean",
+ "default": true,
+ "title": "Include Tags"
+ },
+ "includeUnDeployedPipelines": {
+ "description": "Optional configuration to toggle whether the un-deployed pipelines should be ingested or not. If set to false, only deployed pipelines will be ingested.",
+ "type": "boolean",
+ "default": true,
+ "title": "Include UnDeployed Pipelines"
+ },
+ "statusLookbackDays": {
+ "description": "Number of days of pipeline run status history to ingest. Only runs within the last N days will be fetched.",
+ "type": "integer",
+ "default": 1,
+ "title": "Status Lookback Days"
+ },
+ "overrideMetadata":{
+ "title": "Override Metadata",
+ "description": "Set the 'Override Metadata' toggle to control whether to override the existing metadata in the OpenMetadata server with the metadata fetched from the source. If the toggle is set to true, the metadata fetched from the source will override the existing metadata in the OpenMetadata server. If the toggle is set to false, the metadata fetched from the source will not override the existing metadata in the OpenMetadata server. This is applicable for fields like description, tags, owner and displayName",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/reverseIngestionPipeline.json b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/reverseIngestionPipeline.json
new file mode 100644
index 000000000000..7cc41a9dd3e8
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/reverseIngestionPipeline.json
@@ -0,0 +1,95 @@
+{
+ "$id": "https://open-metadata.org/schema/metadataIngestion/reverseIngestionPipeline.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "reverseIngestionPipeline",
+ "javaType": "org.openmetadata.schema.metadataIngestion.ReverseIngestionPipeline",
+ "description": "Apply a set of operations on a service",
+ "type": "object",
+ "definitions": {
+ "reverseIngestionType": {
+ "description": "Reverse Ingestion Config Pipeline type",
+ "type": "string",
+ "enum": [
+ "ReverseIngestion"
+ ],
+ "default": "ReverseIngestion"
+ },
+ "operation": {
+ "description": "Operation to be performed on the entity",
+ "type": "object",
+ "properties": {
+ "id": {
+ "description": "The id of the operation",
+ "$ref": "../type/basic.json#/definitions/uuid"
+ },
+ "entityLink": {
+ "description": "Entity to be modified",
+ "$ref": "../type/basic.json#/definitions/entityLink"
+ },
+ "type": {
+ "description": "Type of operation to perform",
+ "type": "string",
+ "javaType": "org.openmetadata.schema.metadataIngestion.reverseIngestionOperationType",
+ "enum": [
+ "UPDATE_DESCRIPTION",
+ "UPDATE_OWNER",
+ "UPDATE_TAGS"
+ ]
+ },
+ "SQLTemplate": {
+ "description": "Templated SQL command to be used for the operation. Context parameters will be populated based on the event type.",
+ "type": "string"
+ },
+ "parameters": {
+ "description": "The configuration for the operation to be applied",
+ "oneOf": [
+ {
+ "$ref": "./reverseingestionconfig/descriptionConfig.json"
+ },
+ {
+ "$ref": "./reverseingestionconfig/ownerConfig.json"
+ },
+ {
+ "$ref": "./reverseingestionconfig/tagsConfig.json"
+ }
+ ]
+ }
+ },
+ "required": [
+ "id",
+ "entityLink",
+ "type",
+ "parameters"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "type": {
+ "description": "Pipeline type",
+ "$ref": "#/definitions/reverseIngestionType",
+ "default": "ReverseIngestion"
+ },
+ "service": {
+ "description": "Service to be modified",
+ "$ref": "../type/entityReference.json"
+ },
+ "operations": {
+ "description": "List of operations to be performed on the service",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/operation"
+ }
+ },
+ "ingestionRunner": {
+ "description": "Optional value of the ingestion runner name responsible for running the workflow",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "type",
+ "service",
+ "operations"
+ ]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/reverseingestionconfig/descriptionConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/reverseingestionconfig/descriptionConfig.json
new file mode 100644
index 000000000000..61c07792caff
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/reverseingestionconfig/descriptionConfig.json
@@ -0,0 +1,19 @@
+{
+ "$id": "https://open-metadata.org/schema/metadataIngestion/reverseingestionconfig/descriptionConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Reverse Ingestion Description Config",
+ "type": "object",
+ "description": "Configuration for updating descriptions",
+ "javaType": "org.openmetadata.schema.metadataIngestion.reverseingestionconfig.descriptionConfig",
+ "properties": {
+ "previousDescription": {
+ "description": "Previous description of the service",
+ "type": "string"
+ },
+ "newDescription": {
+ "description": "New description of the service",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/reverseingestionconfig/ownerConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/reverseingestionconfig/ownerConfig.json
new file mode 100644
index 000000000000..d8012132f081
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/reverseingestionconfig/ownerConfig.json
@@ -0,0 +1,19 @@
+{
+ "$id": "https://open-metadata.org/schema/metadataIngestion/reverseingestionconfig/ownerConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Reverse Ingestion Owner Config",
+ "type": "object",
+ "description": "Configuration for updating owners",
+ "javaType": "org.openmetadata.schema.metadataIngestion.reverseingestionconfig.ownerConfig",
+ "properties": {
+ "removedOwners": {
+ "description": "Removed owners from the entity",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "addedOwners": {
+ "description": "Added owners to be applied",
+ "$ref": "../../type/entityReferenceList.json"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/reverseingestionconfig/tagsConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/reverseingestionconfig/tagsConfig.json
new file mode 100644
index 000000000000..ef64a293fb52
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/reverseingestionconfig/tagsConfig.json
@@ -0,0 +1,25 @@
+{
+ "$id": "https://open-metadata.org/schema/metadataIngestion/reverseingestionconfig/tagsConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Reverse Ingestion Tags Config",
+ "type": "object",
+ "description": "Configuration for updating tags",
+ "javaType": "org.openmetadata.schema.metadataIngestion.reverseingestionconfig.tagsConfig",
+ "properties": {
+ "removedTags": {
+ "description": "Removed tags of the entity",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ }
+ },
+ "addedTags": {
+ "description": "Added tags to be applied",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/tagLabel.json"
+ }
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/searchServiceMetadataPipeline.json b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/searchServiceMetadataPipeline.json
new file mode 100644
index 000000000000..5127fc30483b
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/searchServiceMetadataPipeline.json
@@ -0,0 +1,58 @@
+{
+ "$id": "https://open-metadata.org/schema/metadataIngestion/searchServiceMetadataPipeline.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SearchServiceMetadataPipeline",
+ "description": "SearchService Metadata Pipeline Configuration.",
+ "type": "object",
+ "definitions": {
+ "searchMetadataConfigType": {
+ "description": "Search Source Config Metadata Pipeline type",
+ "type": "string",
+ "enum": ["SearchMetadata"],
+ "default": "SearchMetadata"
+ }
+ },
+ "properties": {
+ "type": {
+ "description": "Pipeline type",
+ "$ref": "#/definitions/searchMetadataConfigType",
+ "default": "SearchMetadata"
+ },
+ "searchIndexFilterPattern": {
+ "title": "Search Index Filter Pattern",
+ "description": "Regex to only fetch search indexes that matches the pattern.",
+ "$ref": "../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "markDeletedSearchIndexes": {
+ "title": "Mark Deleted Search Indexes",
+ "description": "Optional configuration to soft delete search indexes in OpenMetadata if the source search indexes are deleted. Also, if the search index is deleted, all the associated entities like lineage, etc., with that search index will be deleted",
+ "type": "boolean",
+ "default": true
+ },
+ "includeSampleData": {
+ "title": "Include Sample Data",
+ "description": "Optional configuration to turn off fetching sample data for search index.",
+ "type": "boolean",
+ "default": true
+ },
+ "sampleSize": {
+ "title": "Sample Size",
+ "description": "No. of records of sample data we want to ingest.",
+ "default": 10,
+ "type": "integer"
+ },
+ "overrideMetadata": {
+ "title": "Override Metadata",
+ "description": "Set the 'Override Metadata' toggle to control whether to override the existing metadata in the OpenMetadata server with the metadata fetched from the source. If the toggle is set to true, the metadata fetched from the source will override the existing metadata in the OpenMetadata server. If the toggle is set to false, the metadata fetched from the source will not override the existing metadata in the OpenMetadata server. This is applicable for fields like description, tags, owner and displayName",
+ "type": "boolean",
+ "default": false
+ },
+ "includeIndexTemplate": {
+ "title": "Include Index Template",
+ "description": "Enable the 'Include Index Template' toggle to manage the ingestion of index template data.",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/securityServiceMetadataPipeline.json b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/securityServiceMetadataPipeline.json
new file mode 100644
index 000000000000..0b4a19617284
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/securityServiceMetadataPipeline.json
@@ -0,0 +1,25 @@
+{
+ "$id": "https://open-metadata.org/schema/metadataIngestion/securityServiceMetadataPipeline.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SecurityServiceMetadataPipeline",
+ "description": "SecurityService Metadata Pipeline Configuration.",
+ "type": "object",
+ "definitions": {
+ "securityMetadataConfigType": {
+ "description": "Security Source Config Metadata Pipeline type",
+ "type": "string",
+ "enum": [
+ "SecurityMetadata"
+ ],
+ "default": "SecurityMetadata"
+ }
+ },
+ "properties": {
+ "type": {
+ "description": "Pipeline type",
+ "$ref": "#/definitions/securityMetadataConfigType",
+ "default": "SecurityMetadata"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/storage/containerMetadataConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/storage/containerMetadataConfig.json
new file mode 100644
index 000000000000..eb19ed200dfe
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/storage/containerMetadataConfig.json
@@ -0,0 +1,130 @@
+{
+ "$id": "https://open-metadata.org/schema/metadataIngestion/storage/containerMetadataConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "StorageContainerConfig",
+ "description": "Definition of the properties contained by an object store container template config file",
+ "javaType": "org.openmetadata.schema.metadataIngestion.storage.ContainerMetadataConfig",
+ "type": "object",
+ "definitions": {
+ "metadataEntry": {
+ "description": "Config properties for a container found in a user-supplied metadata config",
+ "javaType": "org.openmetadata.schema.metadataIngestion.storage.ContainerMetadataEntry",
+ "type": "object",
+ "properties": {
+ "dataPath": {
+ "title": "Data Path",
+ "description": "Literal path relative to the bucket root, or a glob-style pattern. Use a single-star wildcard for one path level, a double-star wildcard for any depth, and a question mark for a single character.",
+ "type": "string"
+ },
+ "structureFormat": {
+ "title": "Structure Format",
+ "description": "Expected file format for schema inference. Leave blank to auto-detect from the file extension. Ignored when Unstructured Data is enabled.",
+ "type": "string",
+ "default": null
+ },
+ "unstructuredData": {
+ "title": "Unstructured Data",
+ "description": "When true, files matching the glob dataPath are cataloged as individual containers without schema extraction. Use for images, documents, and other non-tabular files.",
+ "type": "boolean",
+ "default": false
+ },
+ "unstructuredFormats": {
+ "title": "Unstructured Formats",
+ "description": "Legacy option for literal dataPath entries. List of file extensions (e.g. png, pdf, jpg) to catalog as unstructured. Prefer the unstructuredData flag with a glob dataPath for new configurations.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "default": null
+ },
+ "depth":{
+ "title": "Depth",
+ "description": "Depth of the data path in the container",
+ "type": "integer",
+ "default": 0
+ },
+ "separator": {
+ "title": "Separator",
+ "description": "For delimited files such as CSV, what is the separator being used?",
+ "type": "string",
+ "default": null
+ },
+ "isPartitioned": {
+ "title": "Is Partitioned",
+ "description": "Flag indicating whether the container's data is partitioned",
+ "type": "boolean",
+ "default": false
+ },
+ "autoPartitionDetection": {
+ "title": "Auto Partition Detection",
+ "description": "When true and dataPath is a glob, automatically detect Hive-style partition columns from matched paths (e.g. year=2024/month=01). Ignored for literal paths.",
+ "type": "boolean",
+ "default": false
+ },
+ "excludePaths": {
+ "title": "Exclude Path Segments",
+ "description": "Path segments to skip during glob discovery. Any file whose path contains one of these segments is ignored. Common defaults applied when unset: _delta_log, _temporary, _spark_metadata, .tmp, _SUCCESS.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "default": null
+ },
+ "excludePatterns": {
+ "title": "Exclude Patterns",
+ "description": "Glob patterns to exclude during glob discovery. Any file matching one of these patterns is skipped.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "default": null
+ },
+ "partitionColumns": {
+ "title": "Partition Columns",
+ "description": "Explicit partition column definitions. Overrides auto-detection when provided.",
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "title": "Name",
+ "description": "Partition column name.",
+ "type": "string"
+ },
+ "dataType": {
+ "title": "Data Type",
+ "description": "Partition column data type.",
+ "$ref": "../../entity/data/table.json#/definitions/dataType"
+ },
+ "dataTypeDisplay": {
+ "title": "Data Type Display",
+ "description": "Display name for the data type (optional).",
+ "type": "string"
+ },
+ "description": {
+ "title": "Description",
+ "description": "Description of the partition column (optional).",
+ "type": "string"
+ }
+ },
+ "required": ["name", "dataType"]
+ },
+ "default": null
+ }
+ },
+ "required": ["dataPath"]
+ }
+ },
+ "properties": {
+ "entries": {
+ "description": "List of metadata entries for the bucket containing information about where data resides and its structure",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/metadataEntry"
+ },
+ "default": null
+ }
+ },
+ "required": ["entries"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/storage/manifestMetadataConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/storage/manifestMetadataConfig.json
new file mode 100644
index 000000000000..bb8e5caa1388
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/storage/manifestMetadataConfig.json
@@ -0,0 +1,139 @@
+{
+ "$id": "https://open-metadata.org/schema/metadataIngestion/manifestMetadataConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "ManifestMetadataConfig",
+ "description": "Definition of the manifest file containing entries to be ingested across multiple buckets as object storage entries",
+ "javaType": "org.openmetadata.schema.metadataIngestion.storage.ManifestMetadataConfig",
+ "definitions": {
+ "manifestMetadataEntry": {
+ "description": "Config properties for a container found in a user-supplied metadata config",
+ "javaType": "org.openmetadata.schema.metadataIngestion.storage.ManifestMetadataEntry",
+ "type": "object",
+ "properties": {
+ "containerName": {
+ "title": "Container Name",
+ "description": "The top-level container name containing the data path to be ingested",
+ "type": "string"
+ },
+ "dataPath": {
+ "title": "Data Path",
+ "description": "Literal path relative to the container, or a glob-style pattern. Use a single-star wildcard for one path level, a double-star wildcard for any depth, and a question mark for a single character.",
+ "type": "string"
+ },
+ "structureFormat": {
+ "title": "Structure Format",
+ "description": "Expected file format for schema inference. Leave blank to auto-detect from the file extension. Ignored when Unstructured Data is enabled.",
+ "type": "string",
+ "default": null
+ },
+ "unstructuredData": {
+ "title": "Unstructured Data",
+ "description": "When true, files matching the glob dataPath are cataloged as individual containers without schema extraction. Use for images, documents, and other non-tabular files.",
+ "type": "boolean",
+ "default": false
+ },
+ "unstructuredFormats": {
+ "title": "Unstructured Formats",
+ "description": "Legacy option for literal dataPath entries. List of file extensions (e.g. png, pdf, jpg) to catalog as unstructured. Prefer the unstructuredData flag with a glob dataPath for new configurations.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "default": null
+ },
+ "separator": {
+ "title": "Separator",
+ "description": "For delimited files such as CSV, what is the separator being used?",
+ "type": "string",
+ "default": null
+ },
+ "isPartitioned": {
+ "title": "Is Partitioned",
+ "description": "Flag indicating whether the container's data is partitioned",
+ "type": "boolean",
+ "default": false
+ },
+ "autoPartitionDetection": {
+ "title": "Auto Partition Detection",
+ "description": "When true and dataPath is a glob, automatically detect Hive-style partition columns from matched paths (e.g. year=2024/month=01). Ignored for literal paths.",
+ "type": "boolean",
+ "default": false
+ },
+ "excludePaths": {
+ "title": "Exclude Path Segments",
+ "description": "Path segments to skip during glob discovery. Any file whose path contains one of these segments is ignored. Common defaults applied when unset: _delta_log, _temporary, _spark_metadata, .tmp, _SUCCESS.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "default": null
+ },
+ "excludePatterns": {
+ "title": "Exclude Patterns",
+ "description": "Glob patterns to exclude during glob discovery. Any file matching one of these patterns is skipped.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "default": null
+ },
+ "partitionColumns": {
+ "title": "Partition Columns",
+ "description": "Explicit partition column definitions. Overrides auto-detection when provided.",
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "title": "Name",
+ "description": "Partition column name.",
+ "type": "string"
+ },
+ "dataType": {
+ "title": "Data Type",
+ "description": "Partition column data type.",
+ "$ref": "../../entity/data/table.json#/definitions/dataType"
+ },
+ "dataTypeDisplay": {
+ "title": "Data Type Display",
+ "description": "Display name for the data type (optional).",
+ "type": "string"
+ },
+ "description": {
+ "title": "Description",
+ "description": "Description of the partition column (optional).",
+ "type": "string"
+ }
+ },
+ "required": ["name", "dataType"]
+ },
+ "default": null
+ },
+ "depth": {
+ "title": "Depth",
+ "description": "Depth level in the storage path hierarchy where data files reside.",
+ "type": "integer",
+ "default": 0
+ }
+ },
+ "required": [
+ "containerName",
+ "dataPath"
+ ]
+ }
+ },
+ "properties": {
+ "entries": {
+ "description": "List of metadata entries for the bucket containing information about where data resides and its structure",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/manifestMetadataEntry"
+ },
+ "default": null
+ }
+ },
+ "required": [
+ "entries"
+ ],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/storage/storageBucketDetails.json b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/storage/storageBucketDetails.json
new file mode 100644
index 000000000000..e229f7e10629
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/storage/storageBucketDetails.json
@@ -0,0 +1,22 @@
+{
+ "$id": "https://open-metadata.org/schema/metadataIngestion/storage/storageBucketDetails.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Storage Metadata Bucket Details",
+ "description": "Details of the bucket where the storage metadata manifest file is stored",
+ "javaType": "org.openmetadata.schema.metadataIngestion.storage.StorageMetadataBucketDetails",
+ "type": "object",
+ "properties": {
+ "containerName": {
+ "title": "Storage Metadata Container Name",
+ "description": "Name of the top level container where the storage metadata file is stored",
+ "type": "string"
+ },
+ "objectPrefix": {
+ "title": "Storage Metadata Object Prefix",
+ "description": "Path of the folder where the storage metadata file is stored. If the file is at the root, you can keep it empty.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["containerName"]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/storage/storageMetadataADLSConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/storage/storageMetadataADLSConfig.json
new file mode 100644
index 000000000000..a7731208d0e7
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/storage/storageMetadataADLSConfig.json
@@ -0,0 +1,20 @@
+{
+ "$id": "https://open-metadata.org/schema/metadataIngestion/storage/storageMetadataADLSConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Storage Metadata ADLS Config",
+ "description": "Storage Metadata Manifest file ADLS path config.",
+ "javaType": "org.openmetadata.schema.metadataIngestion.storage.StorageMetadataADLSConfig",
+ "type": "object",
+ "properties": {
+ "securityConfig": {
+ "title": "ADLS Security Config",
+ "$ref": "../../security/credentials/azureCredentials.json"
+ },
+ "prefixConfig": {
+ "title": "Storage Metadata Prefix Config",
+ "$ref": "./storageBucketDetails.json"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["prefixConfig"]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/storage/storageMetadataGCSConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/storage/storageMetadataGCSConfig.json
new file mode 100644
index 000000000000..0ca626f9548a
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/storage/storageMetadataGCSConfig.json
@@ -0,0 +1,20 @@
+{
+ "$id": "https://open-metadata.org/schema/metadataIngestion/storage/storageMetadataGCSConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Storage Metadata GCS Config",
+ "description": "Storage Metadata Manifest file GCS path config.",
+ "javaType": "org.openmetadata.schema.metadataIngestion.storage.StorageMetadataGCSConfig",
+ "type": "object",
+ "properties": {
+ "securityConfig": {
+ "title": "GCS Security Config",
+ "$ref": "../../security/credentials/gcpCredentials.json"
+ },
+ "prefixConfig": {
+ "title": "Storage Metadata Prefix Config",
+ "$ref": "./storageBucketDetails.json"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["prefixConfig"]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/storage/storageMetadataHttpConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/storage/storageMetadataHttpConfig.json
new file mode 100644
index 000000000000..2c8cbde62308
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/storage/storageMetadataHttpConfig.json
@@ -0,0 +1,17 @@
+{
+ "$id": "https://open-metadata.org/schema/metadataIngestion/storage/storageMetadataHttpConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Storage Metadata Http Config",
+ "description": "Storage Metadata Manifest file HTTP path config.",
+ "javaType": "org.openmetadata.schema.metadataIngestion.storage.StorageMetadataHttpConfig",
+ "type": "object",
+ "properties": {
+ "manifestHttpPath": {
+ "title": "Storage Metadata Manifest HTTP Path",
+ "description": "Storage Metadata manifest http file path to extract locations to ingest from.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["manifestHttpPath"]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/storage/storageMetadataLocalConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/storage/storageMetadataLocalConfig.json
new file mode 100644
index 000000000000..4d7ef83debbd
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/storage/storageMetadataLocalConfig.json
@@ -0,0 +1,17 @@
+{
+ "$id": "https://open-metadata.org/schema/metadataIngestion/storage/storageMetadataLocalConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Storage Metadata Local Config",
+ "description": "Storage Metadata Manifest file path config.",
+ "javaType": "org.openmetadata.schema.metadataIngestion.storage.StorageMetadataLocalConfig",
+ "type": "object",
+ "properties": {
+ "manifestFilePath": {
+ "title": "Storage Metadata Manifest File Path",
+ "description": "Storage Metadata manifest file path to extract locations to ingest from.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["manifestFilePath"]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/storage/storageMetadataS3Config.json b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/storage/storageMetadataS3Config.json
new file mode 100644
index 000000000000..7c851651178d
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/storage/storageMetadataS3Config.json
@@ -0,0 +1,20 @@
+{
+ "$id": "https://open-metadata.org/schema/metadataIngestion/storage/storageMetadataS3Config.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Storage Metadata S3 Config",
+ "description": "Storage Metadata Manifest file S3 path config.",
+ "javaType": "org.openmetadata.schema.metadataIngestion.storage.StorageMetadataS3Config",
+ "type": "object",
+ "properties": {
+ "securityConfig": {
+ "title": "S3 Security Config",
+ "$ref": "../../security/credentials/awsCredentials.json"
+ },
+ "prefixConfig": {
+ "title": "Storage Metadata Prefix Config",
+ "$ref": "./storageBucketDetails.json"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["prefixConfig"]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/storageServiceMetadataPipeline.json b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/storageServiceMetadataPipeline.json
new file mode 100644
index 000000000000..3d0927e1d65a
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/storageServiceMetadataPipeline.json
@@ -0,0 +1,84 @@
+{
+ "$id": "https://open-metadata.org/schema/metadataIngestion/storageServiceMetadataPipeline.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "StorageServiceMetadataPipeline",
+ "description": "StorageService Metadata Pipeline Configuration.",
+ "type": "object",
+ "definitions": {
+ "storageMetadataConfigType": {
+ "description": "Object Store Source Config Metadata Pipeline type",
+ "type": "string",
+ "enum": ["StorageMetadata"],
+ "default": "StorageMetadata"
+ },
+ "noMetadataConfigurationSource": {
+ "title": "No Global Manifest",
+ "description": "No manifest file available. Ingestion would look for bucket-level metadata file instead",
+ "type": "object",
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "type": {
+ "description": "Pipeline type",
+ "$ref": "#/definitions/storageMetadataConfigType",
+ "default": "StorageMetadata"
+ },
+ "containerFilterPattern": {
+ "description": "Regex to only fetch containers that matches the pattern.",
+ "$ref": "../type/filterPattern.json#/definitions/filterPattern"
+ },
+ "storageMetadataConfigSource": {
+ "mask": true,
+ "title": "Storage Metadata Configuration Source",
+ "description": "Global manifest source. When configured, entries here take precedence over any bucket-level openmetadata.json and over defaultManifest for buckets whose containerName matches.",
+ "oneOf": [
+ {
+ "$ref": "#/definitions/noMetadataConfigurationSource"
+ },
+ {
+ "$ref": "./storage/storageMetadataLocalConfig.json"
+ },
+ {
+ "$ref": "./storage/storageMetadataHttpConfig.json"
+ },
+ {
+ "$ref": "./storage/storageMetadataS3Config.json"
+ },
+ {
+ "$ref": "./storage/storageMetadataADLSConfig.json"
+ },
+ {
+ "$ref": "./storage/storageMetadataGCSConfig.json"
+ }
+ ]
+ },
+ "markDeletedContainers": {
+ "description": "Optional configuration to soft delete containers in OpenMetadata if the source containers are deleted. Also, if the topic is deleted, all the associated entities with that containers will be deleted",
+ "type": "boolean",
+ "default": true,
+ "title": "Mark Deleted Containers"
+ },
+ "overrideMetadata":{
+ "title": "Override Metadata",
+ "description": "Set the 'Override Metadata' toggle to control whether to override the existing metadata in the OpenMetadata server with the metadata fetched from the source. If the toggle is set to true, the metadata fetched from the source will override the existing metadata in the OpenMetadata server. If the toggle is set to false, the metadata fetched from the source will not override the existing metadata in the OpenMetadata server. This is applicable for fields like description, tags, owner and displayName",
+ "type": "boolean",
+ "default": false
+ },
+ "includeTags": {
+ "description": "Optional configuration to toggle the tags ingestion.",
+ "type": "boolean",
+ "default": false,
+ "title": "Include Tags"
+ },
+ "defaultManifest": {
+ "title": "Default Manifest (JSON)",
+ "description": "Fallback manifest applied to any bucket that does not have its own openmetadata.json file. If a bucket has a manifest file, that file takes precedence and this value is ignored for that bucket. Paste the same JSON you would place in a bucket's openmetadata.json file — entries accept literal paths or glob-style dataPath patterns.",
+ "type": "string",
+ "uiFieldType": "code",
+ "format": "json",
+ "default": null
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/testSuitePipeline.json b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/testSuitePipeline.json
new file mode 100644
index 000000000000..2c901a4d89aa
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/testSuitePipeline.json
@@ -0,0 +1,73 @@
+{
+ "$id": "https://open-metadata.org/schema/metadataIngestion/testSuitePipeline.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "TestSuitePipeline",
+ "description": "TestSuite Pipeline Configuration.",
+ "type": "object",
+ "definitions": {
+ "testSuiteConfigType": {
+ "description": "Pipeline Source Config Metadata Pipeline type",
+ "type": "string",
+ "enum": ["TestSuite"],
+ "default": "TestSuite"
+ },
+ "serviceConnections": {
+ "description": "Service connections available for the logical test suite.",
+ "type": "object",
+ "properties": {
+ "serviceName": {
+ "type": "string"
+ },
+ "serviceConnection": {
+ "description": "Connection configuration for the source. ex: mysql , tableau connection.",
+ "$ref": "../entity/services/connections/serviceConnection.json#/definitions/serviceConnection"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["serviceName", "serviceConnection"]
+ }
+ },
+ "properties": {
+ "type": {
+ "description": "Pipeline type",
+ "$ref": "#/definitions/testSuiteConfigType",
+ "default": "TestSuite"
+ },
+ "entityFullyQualifiedName": {
+ "description": "Fully qualified name of the entity to be tested, if we're working with a basic suite.",
+ "$ref": "../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "serviceConnections": {
+ "description": "Service connections to be used for the logical test suite.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/serviceConnections"
+ },
+ "default": null
+ },
+ "profileSample": {
+ "description": "Percentage of data or no. of rows we want to execute the profiler and tests on",
+ "type": "number",
+ "default": null,
+ "title": "Profile Sample"
+ },
+ "profileSampleType": {
+ "$ref": "../type/basic.json#/definitions/profileSampleType",
+ "title": "Profile Sample Type"
+ },
+ "samplingMethodType": {
+ "$ref": "../type/basic.json#/definitions/samplingMethodType",
+ "title": "Sampling Method Type"
+ },
+ "testCases": {
+ "description": "List of test cases to be executed on the entity. If null, all test cases will be executed.",
+ "type": "array",
+ "items": {
+ "$ref": "../type/basic.json#/definitions/testCaseEntityName"
+ },
+ "default": null
+ }
+ },
+ "required": ["type"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/workflow.json b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/workflow.json
new file mode 100644
index 000000000000..1b6e7f65d8ae
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/metadataIngestion/workflow.json
@@ -0,0 +1,264 @@
+{
+ "$id": "https://open-metadata.org/schema/metadataIngestion/workflow.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "MetadataWorkflow",
+ "description": "OpenMetadata Ingestion Framework definition.",
+ "type": "object",
+ "definitions": {
+ "sourceConfig": {
+ "description": "Additional connection configuration.",
+ "javaType": "org.openmetadata.schema.metadataIngestion.SourceConfig",
+ "type": "object",
+ "properties": {
+ "config": {
+ "oneOf": [
+ {
+ "$ref": "databaseServiceMetadataPipeline.json"
+ },
+ {
+ "$ref": "databaseServiceQueryUsagePipeline.json"
+ },
+ {
+ "$ref": "databaseServiceQueryLineagePipeline.json"
+ },
+ {
+ "$ref": "dashboardServiceMetadataPipeline.json"
+ },
+ {
+ "$ref": "messagingServiceMetadataPipeline.json"
+ },
+ {
+ "$ref": "databaseServiceProfilerPipeline.json"
+ },
+ {
+ "$ref": "databaseServiceAutoClassificationPipeline.json"
+ },
+ {
+ "$ref": "pipelineServiceMetadataPipeline.json"
+ },
+ {
+ "$ref": "mlmodelServiceMetadataPipeline.json"
+ },
+ {
+ "$ref": "storageServiceMetadataPipeline.json"
+ },
+ {
+ "$ref": "driveServiceMetadataPipeline.json"
+ },
+ {
+ "$ref": "searchServiceMetadataPipeline.json"
+ },
+ {
+ "$ref": "testSuitePipeline.json"
+ },
+ {
+ "$ref": "metadataToElasticSearchPipeline.json"
+ },
+ {
+ "$ref": "dataInsightPipeline.json"
+ },
+ {
+ "$ref": "dbtPipeline.json"
+ },
+ {
+ "$ref": "applicationPipeline.json"
+ },
+ {
+ "$ref": "apiServiceMetadataPipeline.json"
+ },
+ {
+ "$ref": "reverseIngestionPipeline.json"
+ },
+ {
+ "$ref": "mcpServiceMetadataPipeline.json"
+ }
+ ]
+ }
+ },
+ "additionalProperties": false
+ },
+ "source": {
+ "description": "Configuration for Source component in OpenMetadata Ingestion Framework.",
+ "type": "object",
+ "properties": {
+ "type": {
+ "description": "Type of the source connector ex: mysql, snowflake, tableau etc..",
+ "type": "string"
+ },
+ "serviceName": {
+ "description": "Type of the source connector ex: mysql, snowflake, tableau etc..",
+ "type": "string"
+ },
+ "serviceConnection": {
+ "description": "Connection configuration for the source. ex: mysql , tableau connection.",
+ "$ref": "../entity/services/connections/serviceConnection.json#/definitions/serviceConnection"
+ },
+ "sourceConfig": {
+ "$ref": "#/definitions/sourceConfig"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["type", "sourceConfig"]
+ },
+ "processor": {
+ "description": "Configuration for Processor Component in the OpenMetadata Ingestion Framework.",
+ "type": "object",
+ "properties": {
+ "type": {
+ "description": "Type of processor component ex: pii-processor",
+ "type": "string"
+ },
+ "config": {
+ "$ref": "../type/basic.json#/definitions/componentConfig"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["type"]
+ },
+ "stage": {
+ "description": "Configuration for Stage Component in the OpenMetadata Ingestion Framework.",
+ "type": "object",
+ "properties": {
+ "type": {
+ "description": "Type of stage component ex: table-usage",
+ "type": "string"
+ },
+ "config": {
+ "$ref": "../type/basic.json#/definitions/componentConfig"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["type"]
+ },
+ "sink": {
+ "description": "Configuration for Sink Component in the OpenMetadata Ingestion Framework.",
+ "type": "object",
+ "properties": {
+ "type": {
+ "description": "Type of sink component ex: metadata",
+ "type": "string"
+ },
+ "config": {
+ "$ref": "../type/basic.json#/definitions/componentConfig"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["type"]
+ },
+ "bulkSink": {
+ "description": "Configuration for BulkSink Component in the OpenMetadata Ingestion Framework.",
+ "type": "object",
+ "properties": {
+ "type": {
+ "description": "Type of BulkSink component ex: metadata-usage",
+ "type": "string"
+ },
+ "config": {
+ "$ref": "../type/basic.json#/definitions/componentConfig"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["type"]
+ },
+ "logLevels": {
+ "description": "Supported logging levels",
+ "javaType": "org.openmetadata.schema.metadataIngestion.LogLevels",
+ "type": "string",
+ "enum": ["DEBUG", "INFO", "WARN", "ERROR"],
+ "default": "INFO"
+ },
+ "workflowConfig": {
+ "description": "Configuration for the entire Ingestion Workflow.",
+ "type": "object",
+ "properties": {
+ "loggerLevel": {
+ "$ref": "#/definitions/logLevels",
+ "default": "INFO"
+ },
+ "raiseOnError": {
+ "description": "Control if we want to flag the workflow as failed if we encounter any processing errors.",
+ "type": "boolean",
+ "default": true
+ },
+ "successThreshold": {
+ "title": "Success Threshold",
+ "description": "The percentage of successfully processed records that must be achieved for the pipeline to be considered successful. Otherwise, the pipeline will be marked as failed.",
+ "type": "integer",
+ "default": 90,
+ "minimum": 0,
+ "maximum": 100
+ },
+ "openMetadataServerConfig": {
+ "$ref": "../entity/services/connections/metadata/openMetadataConnection.json"
+ },
+ "config": {
+ "$ref": "../type/basic.json#/definitions/componentConfig"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["openMetadataServerConfig"]
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier that identifies this pipeline.",
+ "$ref": "../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name that identifies this pipeline instance uniquely.",
+ "$ref": "../type/basic.json#/definitions/entityName"
+ },
+ "openMetadataWorkflowConfig": {
+ "description": "OpenMetadata Ingestion Workflow Config.",
+ "type": "object",
+ "properties": {
+ "source": {
+ "$ref": "#/definitions/source"
+ },
+ "processor": {
+ "$ref": "#/definitions/processor"
+ },
+ "sink": {
+ "$ref": "#/definitions/sink"
+ },
+ "stage": {
+ "$ref": "#/definitions/stage"
+ },
+ "bulkSink": {
+ "$ref": "#/definitions/bulkSink"
+ },
+ "workflowConfig": {
+ "$ref": "#/definitions/workflowConfig"
+ },
+ "ingestionPipelineFQN": {
+ "description": "Fully qualified name of ingestion pipeline, used to identify the current ingestion pipeline",
+ "type": "string"
+ },
+ "pipelineRunId": {
+ "description": "Unique identifier of pipeline run, used to identify the current pipeline run",
+ "$ref": "../type/basic.json#/definitions/uuid"
+ },
+ "enableStreamableLogs": {
+ "description": "Enable streaming logs to a remote log storage via the OpenMetadata Server",
+ "type": "boolean",
+ "default": false
+ },
+ "ingestionRunnerName": {
+ "description": "Name of the ingestion runner executing this workflow. Set at dispatch time by the execution environment.",
+ "type": "string"
+ }
+ },
+ "required": ["source", "workflowConfig"],
+ "additionalProperties": false
+ }
+ },
+ "oneOf": [
+ {
+ "required": ["name", "openMetadataWorkflowConfig", "source", "sink"]
+ },
+ {
+ "required": ["name", "openMetadataWorkflowConfig", "source", "bulkSink"]
+ }
+ ],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/monitoring/eventMonitorProvider.json b/openmetadata-spec/bin/src/main/resources/json/schema/monitoring/eventMonitorProvider.json
new file mode 100644
index 000000000000..dcdb3f505820
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/monitoring/eventMonitorProvider.json
@@ -0,0 +1,10 @@
+{
+ "$id": "https://open-metadata.org/schema/monitoring/eventMonitorProvider.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Event Monitor Provider",
+ "description": "OpenMetadata Event Monitor Provider.",
+ "type": "string",
+ "javaType": "org.openmetadata.schema.monitoring.EventMonitorProvider",
+ "enum": ["cloudwatch", "prometheus"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/scim/scimConfiguration.json b/openmetadata-spec/bin/src/main/resources/json/schema/scim/scimConfiguration.json
new file mode 100644
index 000000000000..1549363e2f90
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/scim/scimConfiguration.json
@@ -0,0 +1,23 @@
+{
+ "$id": "https://open-metadata.org/schema/security/scim/scimConfiguration.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SCIM Configuration",
+ "description": "SCIM configuration for automatic provisioning through identity providers like Azure AD or Okta.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.security.scim.ScimConfiguration",
+ "properties": {
+ "enabled": {
+ "title": "Enabled",
+ "description": "Whether SCIM provisioning is enabled.",
+ "type": "boolean",
+ "default": false
+ },
+ "identityProvider": {
+ "title": "Identity Provider",
+ "description": "The name of the identity provider for SCIM (e.g., azure, okta).",
+ "type": "string",
+ "default": "azure"
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/search/aggregationRequest.json b/openmetadata-spec/bin/src/main/resources/json/schema/search/aggregationRequest.json
new file mode 100644
index 000000000000..456f52a7efea
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/search/aggregationRequest.json
@@ -0,0 +1,80 @@
+{
+ "$id": "https://open-metadata.org/schema/search/aggregationRequest.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AggregationRequest",
+ "description": "Request body for performing field aggregations with optional top_hits sub-aggregation.",
+ "javaType": "org.openmetadata.schema.search.AggregationRequest",
+ "type": "object",
+ "properties": {
+ "query": {
+ "description": "Query string to be sent to the search engine.",
+ "type": "string",
+ "default": ""
+ },
+ "index": {
+ "description": "Name of the index to aggregate on.",
+ "type": "string",
+ "default": "table_search_index"
+ },
+ "fieldName": {
+ "description": "Field name to aggregate on (typically a keyword field like service.displayName.keyword).",
+ "type": "string",
+ "default": ""
+ },
+ "fieldValue": {
+ "description": "Filter value for the aggregation include clause.",
+ "type": "string",
+ "default": ""
+ },
+ "deleted": {
+ "description": "Whether to include deleted documents.",
+ "type": "boolean",
+ "default": false
+ },
+ "size": {
+ "description": "Size to limit the number of aggregation buckets returned.",
+ "type": "integer",
+ "default": 10
+ },
+ "sourceFields": {
+ "description": "List of fields to include from _source in the response (outside of top_hits).",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "queryText": {
+ "description": "Free-text search query used to scope aggregation results to matching documents.",
+ "type": "string"
+ },
+ "topHits": {
+ "description": "Optional top_hits sub-aggregation to fetch selected source fields per bucket.",
+ "type": "object",
+ "properties": {
+ "size": {
+ "description": "Number of top documents to return per bucket.",
+ "type": "integer",
+ "default": 1
+ },
+ "sortField": {
+ "description": "Field to sort the top hits on.",
+ "type": "string",
+ "default": "_doc"
+ },
+ "sortOrder": {
+ "description": "Sort order for top hits - asc or desc.",
+ "type": "string",
+ "enum": ["asc", "desc"],
+ "default": "asc"
+ }
+ },
+ "default": {
+ "size": 1,
+ "sortField": "_doc",
+ "sortOrder": "asc"
+ }
+ }
+ },
+ "required": ["fieldName"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/search/searchRequest.json b/openmetadata-spec/bin/src/main/resources/json/schema/search/searchRequest.json
new file mode 100644
index 000000000000..470503f3c3f3
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/search/searchRequest.json
@@ -0,0 +1,115 @@
+{
+ "$id": "https://open-metadata.org/schema/search/searchRequest.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SearchRequest",
+ "description": "Search Request to find entities from Elastic Search based on different parameters.",
+ "javaType": "org.openmetadata.schema.search.SearchRequest",
+ "type": "object",
+ "properties": {
+ "query": {
+ "description": "Query to be send to Search Engine.",
+ "type": "string",
+ "default": "*"
+ },
+ "index": {
+ "description": "Index Name.",
+ "type": "string",
+ "default": "table_search_index"
+ },
+ "fieldName": {
+ "description": "Field Name to match.",
+ "type": "string",
+ "default": "suggest"
+ },
+ "from": {
+ "description": "Start Index for the req.",
+ "type": "integer",
+ "default": 0
+ },
+ "size": {
+ "description": "Size to limit the no.of results returned.",
+ "type": "integer",
+ "default": 10
+ },
+ "queryFilter": {
+ "description": "Elasticsearch query that will be combined with the query_string query generator from the `query` arg",
+ "type": "string"
+ },
+ "postFilter": {
+ "description": "Elasticsearch query that will be used as a post_filter",
+ "type": "string"
+ },
+ "fetchSource": {
+ "description": "Get document body for each hit",
+ "type": "boolean",
+ "default": true
+ },
+ "trackTotalHits": {
+ "description": "Track Total Hits.",
+ "type": "boolean",
+ "default": false
+ },
+ "explain": {
+ "description": "Explain the results of the query. Defaults to false. Only for debugging purposes.",
+ "type": "boolean",
+ "default": false
+ },
+ "deleted": {
+ "description": "Filter documents by deleted param.",
+ "type": "boolean",
+ "default": null,
+ "existingJavaType": "java.lang.Boolean"
+ },
+ "sortFieldParam": {
+ "description": "Sort the search results by field, available fields to sort weekly_stats daily_stats, monthly_stats, last_updated_timestamp.",
+ "type": "string",
+ "default": "_score"
+ },
+ "sortOrder": {
+ "description": "Sort order asc for ascending or desc for descending, defaults to desc.",
+ "type": "string",
+ "default": "desc"
+ },
+ "includeSourceFields": {
+ "description": "Get only selected fields of the document body for each hit. Empty value will return all fields",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "excludeSourceFields": {
+ "description": "Exclude specified fields from the document body for each hit. Use this to exclude heavy fields like 'columns' for better performance",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "searchAfter": {
+ "description": "When paginating, specify the search_after values. Use it ass search_after=,,...",
+ "existingJavaType": "java.util.List"
+ },
+ "domains": {
+ "description": "Internal Object to filter by Domains.",
+ "existingJavaType": "java.util.List"
+ },
+ "applyDomainFilter": {
+ "description": "If Need to apply the domain filter.",
+ "type": "boolean"
+ },
+ "isHierarchy": {
+ "description": "If true it will try to get the hierarchy of the entity.",
+ "type": "boolean",
+ "default": false
+ },
+ "fieldValue": {
+ "description": "Field Value in case of Aggregations.",
+ "type": "string"
+ },
+ "includeAggregations": {
+ "description": "Include aggregations in the search response. Defaults to true. Set to false to skip aggregations for faster response times when only search results are needed.",
+ "type": "boolean",
+ "default": true
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/security/client/auth0SSOClientConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/security/client/auth0SSOClientConfig.json
new file mode 100644
index 000000000000..03a0c04d52a4
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/security/client/auth0SSOClientConfig.json
@@ -0,0 +1,25 @@
+{
+ "$id": "https://open-metadata.org/schema/security/client/auth0SSOClientConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Auth0SSOClientConfig",
+ "description": "Auth0 SSO client security configs.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.security.client.Auth0SSOClientConfig",
+ "properties": {
+ "clientId": {
+ "description": "Auth0 Client ID.",
+ "type": "string"
+ },
+ "secretKey": {
+ "description": "Auth0 Client Secret Key.",
+ "type": "string",
+ "format": "password"
+ },
+ "domain": {
+ "description": "Auth0 Domain.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["clientId", "secretKey", "domain"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/security/client/azureSSOClientConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/security/client/azureSSOClientConfig.json
new file mode 100644
index 000000000000..be93cf16ed55
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/security/client/azureSSOClientConfig.json
@@ -0,0 +1,32 @@
+{
+ "$id": "https://open-metadata.org/schema/security/client/azureSSOClientConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AzureSSOClientConfig",
+ "description": "Azure SSO Client security config to connect to OpenMetadata.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.security.client.AzureSSOClientConfig",
+ "properties": {
+ "clientSecret": {
+ "description": "Azure SSO client secret key",
+ "type": "string",
+ "format": "password"
+ },
+ "authority": {
+ "description": "Azure SSO Authority",
+ "type": "string"
+ },
+ "clientId": {
+ "description": "Azure Client ID.",
+ "type": "string"
+ },
+ "scopes": {
+ "description": "Azure Client ID.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": ["clientSecret", "clientId", "authority", "scopes"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/security/client/customOidcSSOClientConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/security/client/customOidcSSOClientConfig.json
new file mode 100644
index 000000000000..f3d9cab9618d
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/security/client/customOidcSSOClientConfig.json
@@ -0,0 +1,25 @@
+{
+ "$id": "https://open-metadata.org/schema/security/client/customOidcSSOClientConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CustomOIDCSSOClientConfig",
+ "description": "Custom OIDC SSO client security configs.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.security.client.CustomOIDCSSOClientConfig",
+ "properties": {
+ "clientId": {
+ "description": "Custom OIDC Client ID.",
+ "type": "string"
+ },
+ "secretKey": {
+ "description": "Custom OIDC Client Secret Key.",
+ "type": "string",
+ "format": "password"
+ },
+ "tokenEndpoint": {
+ "description": "Custom OIDC token endpoint.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["clientId", "secretKey", "tokenEndpoint"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/security/client/googleSSOClientConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/security/client/googleSSOClientConfig.json
new file mode 100644
index 000000000000..62381eaae89f
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/security/client/googleSSOClientConfig.json
@@ -0,0 +1,22 @@
+{
+ "$id": "https://open-metadata.org/schema/security/client/googleSSOClientConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "GoogleSSOClientConfig",
+ "description": "Google SSO client security configs.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.security.client.GoogleSSOClientConfig",
+ "properties": {
+ "secretKey": {
+ "description": "Google SSO client secret key path or contents.",
+ "type": "string",
+ "format": "password"
+ },
+ "audience": {
+ "description": "Google SSO audience URL",
+ "type": "string",
+ "default": "https://www.googleapis.com/oauth2/v4/token"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["secretKey"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/security/client/oidcClientConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/security/client/oidcClientConfig.json
new file mode 100644
index 000000000000..54acb5ba3495
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/security/client/oidcClientConfig.json
@@ -0,0 +1,103 @@
+{
+ "$id": "https://open-metadata.org/schema/security/client/oidcClientConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "OidcClientConfig",
+ "description": "Oidc client security configs.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.security.client.OidcClientConfig",
+ "properties": {
+ "type": {
+ "description": "IDP type (Example Google,Azure).",
+ "type": "string"
+ },
+ "id": {
+ "description": "Client ID.",
+ "type": "string"
+ },
+ "secret": {
+ "description": "Client Secret.",
+ "type": "string",
+ "format": "password"
+ },
+ "scope": {
+ "description": "Oidc Request Scopes.",
+ "type": "string",
+ "default": "openid email profile"
+ },
+ "discoveryUri": {
+ "description": "Discovery Uri for the Client.",
+ "type": "string"
+ },
+ "useNonce": {
+ "description": "Use Nonce.",
+ "type": "string",
+ "default": true
+ },
+ "preferredJwsAlgorithm": {
+ "description": "Preferred Jws Algorithm.",
+ "type": "string",
+ "default": "RS256"
+ },
+ "responseType": {
+ "description": "Auth0 Client Secret Key.",
+ "type": "string",
+ "default": "code"
+ },
+ "disablePkce": {
+ "description": "Disable PKCE.",
+ "type": "boolean",
+ "default": true
+ },
+ "maxClockSkew": {
+ "description": "Max Clock Skew",
+ "type": "string"
+ },
+ "clientAuthenticationMethod": {
+ "description": "Client Authentication Method.",
+ "type": "string",
+ "enum": [
+ "client_secret_basic",
+ "client_secret_post",
+ "client_secret_jwt",
+ "private_key_jwt"
+ ]
+ },
+ "tokenValidity": {
+ "description": "Validity for the JWT Token created from SAML Response",
+ "type": "integer",
+ "default": "3600"
+ },
+ "customParams": {
+ "description": "Custom Params.",
+ "existingJavaType": "java.util.Map",
+ "type": "object"
+ },
+ "tenant": {
+ "description": "Tenant in case of Azure.",
+ "type": "string"
+ },
+ "serverUrl": {
+ "description": "Server Url.",
+ "type": "string"
+ },
+ "callbackUrl": {
+ "description": "Callback Url.",
+ "type": "string"
+ },
+ "maxAge": {
+ "description": "Validity for the JWT Token created from SAML Response",
+ "type": "string"
+ },
+ "prompt": {
+ "description": "Prompt whether login/consent",
+ "type": "string"
+ },
+ "sessionExpiry": {
+ "description": "Validity for the Session in case of confidential clients",
+ "type": "integer",
+ "default": "604800"
+ }
+ },
+ "required": ["id", "secret", "discoveryUri", "tenant"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/security/client/oktaSSOClientConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/security/client/oktaSSOClientConfig.json
new file mode 100644
index 000000000000..be85fa013f58
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/security/client/oktaSSOClientConfig.json
@@ -0,0 +1,36 @@
+{
+ "$id": "https://open-metadata.org/schema/security/client/oktaSSOClientConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "OktaSSOClientConfig",
+ "description": "Okta SSO client security configs.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.security.client.OktaSSOClientConfig",
+ "properties": {
+ "clientId": {
+ "description": "Okta Client ID.",
+ "type": "string"
+ },
+ "orgURL": {
+ "description": "Okta org url.",
+ "type": "string"
+ },
+ "privateKey": {
+ "description": "Okta Private Key.",
+ "type": "string",
+ "format": "password"
+ },
+ "email": {
+ "description": "Okta Service account Email.",
+ "type": "string"
+ },
+ "scopes": {
+ "type": "array",
+ "description": "Okta client scopes.",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": ["clientId", "orgURL", "privateKey", "email"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/security/client/openMetadataJWTClientConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/security/client/openMetadataJWTClientConfig.json
new file mode 100644
index 000000000000..5e9208c264e6
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/security/client/openMetadataJWTClientConfig.json
@@ -0,0 +1,17 @@
+{
+ "$id": "https://open-metadata.org/schema/security/client/openMetadataJWTClientConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "openMetadataJWTClientConfig",
+ "description": "openMetadataJWTClientConfig security configs.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.security.client.OpenMetadataJWTClientConfig",
+ "properties": {
+ "jwtToken": {
+ "description": "OpenMetadata generated JWT token.",
+ "type": "string",
+ "format": "password"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["jwtToken"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/security/client/samlSSOClientConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/security/client/samlSSOClientConfig.json
new file mode 100644
index 000000000000..70185a3ffc56
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/security/client/samlSSOClientConfig.json
@@ -0,0 +1,164 @@
+{
+ "$id": "https://open-metadata.org/schema/security/client/samlSSOClientConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SamlSSOClientConfig",
+ "description": "SAML SSO client security configs.",
+ "type": "object",
+ "javaType": "org.openmetadata.catalog.security.client.SamlSSOClientConfig",
+ "definitions": {
+ "idp": {
+ "javaType": "org.openmetadata.catalog.type.IdentityProviderConfig",
+ "description": "This schema defines defines the identity provider config.",
+ "type": "object",
+ "properties": {
+ "entityId": {
+ "description": "Identity Provider Entity ID usually same as the SSO login URL.",
+ "type": "string"
+ },
+ "ssoLoginUrl": {
+ "description": "SSO Login URL.",
+ "type": "string"
+ },
+ "authorityUrl": {
+ "description": "Authority URL (deprecated, use entityId instead).",
+ "type": "string",
+ "deprecated": true
+ },
+ "idpX509Certificate": {
+ "description": "X509 Certificate ",
+ "type": "string",
+ "format": "password"
+ },
+ "nameId": {
+ "description": "Name ID format for SAML assertions",
+ "type": "string",
+ "default": "urn:oasis:names:tc:SAML:2.0:nameid-format:emailAddress"
+ }
+ },
+ "required": ["entityId", "ssoLoginUrl"],
+ "additionalProperties": false
+ },
+ "sp": {
+ "javaType": "org.openmetadata.catalog.type.ServiceProviderConfig",
+ "description": "This schema defines defines the identity provider config.",
+ "type": "object",
+ "properties": {
+ "entityId": {
+ "description": "Service Provider Entity ID.",
+ "type": "string"
+ },
+ "acs": {
+ "description": "Assertion Consumer URL.",
+ "type": "string"
+ },
+ "spX509Certificate": {
+ "description": "X509 Certificate ",
+ "type": "string",
+ "format": "password"
+ },
+ "spPrivateKey": {
+ "description": "Sp Private Key for Signing and Encryption Only",
+ "type": "string",
+ "format": "password"
+ },
+ "callback": {
+ "description": "Service Provider Entity ID usually same as the SSO login URL.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["entityId", "acs", "callback"]
+ },
+ "security": {
+ "javaType": "org.openmetadata.catalog.type.SamlSecurityConfig",
+ "description": "This schema defines defines the security config for SAML.",
+ "type": "object",
+ "properties": {
+ "strictMode": {
+ "description": "Only accept valid signed and encrypted assertions if the relevant flags are set",
+ "type": "boolean",
+ "default": false
+ },
+ "validateXml": {
+ "description": "In case of strict mode whether to validate XML format.",
+ "type": "boolean",
+ "default": false
+ },
+ "tokenValidity": {
+ "description": "Validity for the JWT Token created from SAML Response",
+ "type": "integer",
+ "default": "3600"
+ },
+ "sendEncryptedNameId": {
+ "description": "Encrypt Name Id while sending requests from SP.",
+ "type": "boolean",
+ "default": false
+ },
+ "sendSignedAuthRequest": {
+ "description": "Sign the Authn Request while sending.",
+ "type": "boolean",
+ "default": false
+ },
+ "signSpMetadata": {
+ "description": "Want the Metadata of this SP to be signed.",
+ "type": "boolean",
+ "default": false
+ },
+ "wantMessagesSigned": {
+ "description": "SP requires the messages received to be signed.",
+ "type": "boolean",
+ "default": false
+ },
+ "wantAssertionsSigned": {
+ "description": "SP requires the assertions received to be signed.",
+ "type": "boolean",
+ "default": false
+ },
+ "wantAssertionEncrypted": {
+ "description": "SP requires the assertion received to be encrypted.",
+ "type": "boolean",
+ "default": false
+ },
+ "keyStoreFilePath": {
+ "description": "KeyStore File Path",
+ "type": "string"
+ },
+ "keyStoreAlias": {
+ "description": "KeyStore Alias",
+ "type": "string"
+ },
+ "keyStorePassword": {
+ "description": "KeyStore Password",
+ "type": "string",
+ "format": "password"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "idp": {
+ "$ref": "#/definitions/idp"
+ },
+ "sp": {
+ "$ref": "#/definitions/sp"
+ },
+ "security": {
+ "$ref": "#/definitions/security"
+ },
+ "debugMode": {
+ "description": "Get logs from the Library in debug mode",
+ "type": "boolean",
+ "default": false
+ },
+ "samlDisplayNameAttributes": {
+ "description": "Ordered list of SAML attribute names to check for display name. First available attribute wins. Defaults to common OIDC/SAML attribute names.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": ["idp", "sp"]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/security/credentials/accessTokenAuth.json b/openmetadata-spec/bin/src/main/resources/json/schema/security/credentials/accessTokenAuth.json
new file mode 100644
index 000000000000..7c4906143540
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/security/credentials/accessTokenAuth.json
@@ -0,0 +1,23 @@
+{
+ "$id": "https://open-metadata.org/schema/security/credentials/accessTokenAuth.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AccessTokenAuth",
+ "description": "Access Token Auth Credentials",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.security.credentials.AccessTokenAuth",
+ "properties": {
+ "personalAccessTokenName": {
+ "title": "Personal Access Token",
+ "description": "Personal Access Token Name.",
+ "type": "string"
+ },
+ "personalAccessTokenSecret": {
+ "title": "Personal Access Token Secret",
+ "description": "Personal Access Token Secret.",
+ "type": "string",
+ "format": "password"
+ }
+ },
+ "required": ["personalAccessTokenName", "personalAccessTokenSecret"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/security/credentials/apiAccessTokenAuth.json b/openmetadata-spec/bin/src/main/resources/json/schema/security/credentials/apiAccessTokenAuth.json
new file mode 100644
index 000000000000..09d569a1c70e
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/security/credentials/apiAccessTokenAuth.json
@@ -0,0 +1,18 @@
+{
+ "$id": "https://open-metadata.org/schema/security/credentials/apiAccessTokenAuth.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "ApiAccessTokenAuth",
+ "description": "API Access Token Auth Credentials",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.security.credentials.ApiAccessTokenAuth",
+ "properties": {
+ "accessToken": {
+ "title": "Access Token",
+ "description": "Access Token for the API",
+ "type": "string",
+ "format": "password"
+ }
+ },
+ "required": ["accessToken"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/security/credentials/awsBaseConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/security/credentials/awsBaseConfig.json
new file mode 100644
index 000000000000..bed3264423b4
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/security/credentials/awsBaseConfig.json
@@ -0,0 +1,47 @@
+{
+ "$id": "https://open-metadata.org/schema/security/credentials/awsBaseConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AWSBaseConfig",
+ "description": "Base AWS configuration for authentication. Supports static credentials, IAM roles, and default credential provider chain.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.security.credentials.AWSBaseConfig",
+ "properties": {
+ "enabled": {
+ "description": "Enable AWS IAM authentication. When enabled, uses the default credential provider chain (environment variables, instance profile, etc.). Defaults to false for backward compatibility.",
+ "type": "boolean",
+ "default": false
+ },
+ "region": {
+ "description": "AWS Region (e.g., us-east-1). Required when AWS authentication is enabled.",
+ "type": "string"
+ },
+ "accessKeyId": {
+ "description": "AWS Access Key ID. Falls back to default credential provider chain if not set.",
+ "type": "string"
+ },
+ "secretAccessKey": {
+ "description": "AWS Secret Access Key. Falls back to default credential provider chain if not set.",
+ "type": "string",
+ "format": "password"
+ },
+ "sessionToken": {
+ "description": "AWS Session Token for temporary credentials.",
+ "type": "string"
+ },
+ "assumeRoleArn": {
+ "description": "ARN of IAM role to assume for cross-account access.",
+ "type": "string"
+ },
+ "assumeRoleSessionName": {
+ "description": "Session name for assumed role.",
+ "type": "string",
+ "default": "OpenMetadataSession"
+ },
+ "endpointUrl": {
+ "description": "Custom endpoint URL for AWS-compatible services (MinIO, LocalStack).",
+ "type": "string",
+ "format": "uri"
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/security/credentials/awsCredentials.json b/openmetadata-spec/bin/src/main/resources/json/schema/security/credentials/awsCredentials.json
new file mode 100644
index 000000000000..9a6661b5e0c1
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/security/credentials/awsCredentials.json
@@ -0,0 +1,66 @@
+{
+ "$id": "https://open-metadata.org/schema/security/credentials/awsCredentials.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AWSCredentials",
+ "description": "AWS credentials configs.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.security.credentials.AWSCredentials",
+ "properties": {
+ "enabled": {
+ "title": "Enable IAM Auth",
+ "description": "Enable AWS IAM authentication. When enabled, uses the default credential provider chain (environment variables, instance profile, etc.). Defaults to false for backward compatibility.",
+ "type": "boolean",
+ "default": false
+ },
+ "awsAccessKeyId": {
+ "title": "AWS Access Key ID",
+ "description": "AWS Access key ID.",
+ "type": "string"
+ },
+ "awsSecretAccessKey": {
+ "title": "AWS Secret Access Key",
+ "description": "AWS Secret Access Key.",
+ "type": "string",
+ "format": "password"
+ },
+ "awsRegion": {
+ "title": "AWS Region",
+ "description": "AWS Region",
+ "type": "string"
+ },
+ "awsSessionToken": {
+ "title": "AWS Session Token",
+ "description": "AWS Session Token.",
+ "type": "string"
+ },
+ "endPointURL": {
+ "title": "Endpoint URL",
+ "description": "EndPoint URL for the AWS",
+ "type": "string",
+ "format": "uri"
+ },
+ "profileName": {
+ "title": "Profile Name",
+ "description": "The name of a profile to use with the boto session.",
+ "type": "string"
+ },
+ "assumeRoleArn": {
+ "title": "Role Arn for Assume Role",
+ "description": "The Amazon Resource Name (ARN) of the role to assume. Required Field in case of Assume Role",
+ "type": "string"
+ },
+ "assumeRoleSessionName": {
+ "title": "Role Session Name for Assume Role",
+ "description": "An identifier for the assumed role session. Use the role session name to uniquely identify a session when the same role is assumed by different principals or for different reasons. Required Field in case of Assume Role",
+ "type": "string",
+ "default": "OpenMetadataSession"
+ },
+ "assumeRoleSourceIdentity": {
+ "title": "Source Identity for Assume Role",
+ "description": "The Amazon Resource Name (ARN) of the role to assume. Optional Field in case of Assume Role",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["awsRegion"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/security/credentials/azureCredentials.json b/openmetadata-spec/bin/src/main/resources/json/schema/security/credentials/azureCredentials.json
new file mode 100644
index 000000000000..7db1e585769e
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/security/credentials/azureCredentials.json
@@ -0,0 +1,42 @@
+{
+ "$id": "https://open-metadata.org/schema/security/credentials/azureCredentials.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AzureCredentials",
+ "description": "Azure Cloud Credentials",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.security.credentials.AzureCredentials",
+ "properties": {
+ "clientId": {
+ "title": "Client ID",
+ "description": "Your Service Principal App ID (Client ID)",
+ "type": "string"
+ },
+ "clientSecret": {
+ "title": "Client Secret",
+ "description": "Your Service Principal Password (Client Secret)",
+ "type": "string",
+ "format": "password"
+ },
+ "tenantId": {
+ "title": "Tenant ID",
+ "description": "Tenant ID of your Azure Subscription",
+ "type": "string"
+ },
+ "accountName": {
+ "title": "Storage Account Name",
+ "description": "Account Name of your storage account",
+ "type": "string"
+ },
+ "vaultName": {
+ "title": "Key Vault Name",
+ "description": "Key Vault Name",
+ "type": "string"
+ },
+ "scopes": {
+ "title": "Scopes",
+ "description": "Scopes to get access token, for e.g. api://6dfX33ab-XXXX-49df-XXXX-3459eX817d3e/.default",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/security/credentials/basicAuth.json b/openmetadata-spec/bin/src/main/resources/json/schema/security/credentials/basicAuth.json
new file mode 100644
index 000000000000..5111f340c78e
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/security/credentials/basicAuth.json
@@ -0,0 +1,23 @@
+{
+ "$id": "https://open-metadata.org/schema/security/credentials/basicAuth.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "BasicAuth",
+ "description": "Basic Auth Credentials",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.security.credentials.BasicAuth",
+ "properties": {
+ "username": {
+ "title": "Username",
+ "description": "Username to access the service.",
+ "type": "string"
+ },
+ "password": {
+ "title": "Password",
+ "description": "Password to access the service.",
+ "type": "string",
+ "format": "password"
+ }
+ },
+ "required": ["username", "password"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/security/credentials/bitbucketCredentials.json b/openmetadata-spec/bin/src/main/resources/json/schema/security/credentials/bitbucketCredentials.json
new file mode 100644
index 000000000000..a621ca56e0f7
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/security/credentials/bitbucketCredentials.json
@@ -0,0 +1,47 @@
+{
+ "$id": "https://open-metadata.org/schema/security/credentials/bitbucketCredentials.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "BitBucketCredentials",
+ "description": "Credentials for a BitBucket repository",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.security.credentials.BitBucketCredentials",
+ "definitions": {
+ "bitbucketType": {
+ "description": "BitBucket Credentials type",
+ "type": "string",
+ "enum": ["BitBucket"],
+ "default": "BitBucket"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Credentials Type",
+ "description": "Credentials Type",
+ "$ref": "#/definitions/bitbucketType",
+ "default": "BitBucket"
+ },
+ "gitHostURL": {
+ "title": "Git Host URL",
+ "description": "BitBucket instance URL. For BitBucket Cloud, use https://bitbucket.org",
+ "type": "string",
+ "format": "uri",
+ "default": "https://bitbucket.org"
+ },
+ "repositoryOwner": {
+ "$ref": "gitCredentials.json#/definitions/repositoryOwner"
+ },
+ "repositoryName": {
+ "$ref": "gitCredentials.json#/definitions/repositoryName"
+ },
+ "token": {
+ "$ref": "gitCredentials.json#/definitions/token"
+ },
+ "branch": {
+ "title": "Main Branch",
+ "description": "Main production branch of the repository. E.g., `main`",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["repositoryOwner", "repositoryName", "branch"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/security/credentials/fabricCredentials.json b/openmetadata-spec/bin/src/main/resources/json/schema/security/credentials/fabricCredentials.json
new file mode 100644
index 000000000000..66208f6885ce
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/security/credentials/fabricCredentials.json
@@ -0,0 +1,62 @@
+{
+ "$id": "https://open-metadata.org/schema/security/credentials/fabricCredentials.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "FabricCredentials",
+ "description": "Microsoft Fabric credentials configuration for authentication across Fabric services (Database, Pipeline, Dashboard).",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.security.credentials.FabricCredentials",
+ "definitions": {
+ "servicePrincipal": {
+ "title": "Service Principal Authentication",
+ "description": "Authenticate using Azure Active Directory Service Principal (Application)",
+ "type": "object",
+ "properties": {
+ "type": {
+ "title": "Credentials Type",
+ "description": "Azure Service Principal Authentication",
+ "type": "string",
+ "default": "ServicePrincipal",
+ "const": "ServicePrincipal"
+ },
+ "clientId": {
+ "title": "Client ID",
+ "description": "Azure Active Directory Application (Client) ID",
+ "type": "string"
+ },
+ "clientSecret": {
+ "title": "Client Secret",
+ "description": "Azure Active Directory Application Client Secret",
+ "type": "string",
+ "format": "password"
+ },
+ "tenantId": {
+ "title": "Tenant ID",
+ "description": "Azure Active Directory Tenant ID",
+ "type": "string"
+ },
+ "authorityUri": {
+ "title": "Authority URI",
+ "description": "Azure AD Authority URI. Defaults to https://login.microsoftonline.com/",
+ "type": "string",
+ "default": "https://login.microsoftonline.com/",
+ "format": "uri"
+ }
+ },
+ "required": ["clientId", "clientSecret", "tenantId"],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "credentials": {
+ "title": "Fabric Credentials",
+ "description": "Microsoft Fabric authentication credentials",
+ "oneOf": [
+ {
+ "$ref": "#/definitions/servicePrincipal"
+ }
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "required": ["credentials"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/security/credentials/gcpCredentials.json b/openmetadata-spec/bin/src/main/resources/json/schema/security/credentials/gcpCredentials.json
new file mode 100644
index 000000000000..723e3890cd58
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/security/credentials/gcpCredentials.json
@@ -0,0 +1,116 @@
+{
+ "$id": "https://open-metadata.org/schema/security/credentials/gcpCredentials.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "GCPCredentials",
+ "description": "GCP credentials configs.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.security.credentials.GCPCredentials",
+ "definitions": {
+ "gcpADC": {
+ "title": "GCP Application Default Credentials",
+ "description": "Use the application default credentials",
+ "type": "object",
+ "properties": {
+ "type": {
+ "title": "Credentials Type",
+ "description": "Google Cloud Platform ADC ( Application Default Credentials )",
+ "type": "string",
+ "default": "gcp_adc",
+ "const": "gcp_adc"
+ },
+ "projectId": {
+ "title": "GCP Project ID",
+ "description": "GCP Project ID to parse metadata from",
+ "oneOf": [
+ {
+ "$ref": "gcpValues.json#/definitions/singleProjectId"
+ },
+ {
+ "$ref": "gcpValues.json#/definitions/multipleProjectId"
+ }
+ ],
+ "default": null
+ }
+ }
+ },
+ "gcpCredentialsPath": {
+ "title": "GCP Credentials Path",
+ "description": "Pass the path of file containing the GCP credentials info",
+ "type": "object",
+ "properties": {
+ "type": {
+ "title": "Credentials Type",
+ "description": "Google Cloud Platform account type.",
+ "type": "string",
+ "default": "gcp_credential_path",
+ "const": "gcp_credential_path"
+ },
+ "path": {
+ "title": "Path",
+ "description": "Path of the file containing the GCP credentials info",
+ "type": "string"
+ },
+ "projectId": {
+ "title": "GCP Project ID",
+ "description": "GCP Project ID to parse metadata from",
+ "oneOf": [
+ {
+ "$ref": "gcpValues.json#/definitions/singleProjectId"
+ },
+ {
+ "$ref": "gcpValues.json#/definitions/multipleProjectId"
+ }
+ ],
+ "default": null
+ }
+ }
+ },
+ "GCPImpersonateServiceAccountValues": {
+ "title": "GCP impersonate service account values",
+ "description": "Pass the values to impersonate a service account of Google Cloud",
+ "type": "object",
+ "properties": {
+ "impersonateServiceAccount": {
+ "title": "Target Service Account Email",
+ "description": "The impersonated service account email",
+ "type": "string"
+ },
+ "lifetime": {
+ "title": "Lifetime",
+ "description": "Number of seconds the delegated credential should be valid",
+ "type": "integer",
+ "default": 3600
+ }
+ }
+ }
+ },
+ "properties": {
+ "gcpConfig": {
+ "title": "GCP Credentials Configuration",
+ "description": "We support two ways of authenticating to GCP i.e via GCP Credentials Values or GCP Credentials Path",
+ "oneOf": [
+ {
+ "$ref": "gcpValues.json"
+ },
+ {
+ "$ref": "#/definitions/gcpCredentialsPath"
+ },
+ {
+ "$ref": "gcpExternalAccount.json"
+ },
+ {
+ "$ref": "#/definitions/gcpADC"
+ }
+ ]
+ },
+ "gcpImpersonateServiceAccount": {
+ "title": "GCP Impersonate Service Account Configuration",
+ "description": "we enable the authenticated service account to impersonate another service account",
+ "$ref": "#/definitions/GCPImpersonateServiceAccountValues"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "gcpConfig"
+ ]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/security/credentials/gcpExternalAccount.json b/openmetadata-spec/bin/src/main/resources/json/schema/security/credentials/gcpExternalAccount.json
new file mode 100644
index 000000000000..43bc7c87f217
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/security/credentials/gcpExternalAccount.json
@@ -0,0 +1,49 @@
+{
+ "$id": "https:./open-metadata.org/schema/security/credentials/gcpExternalAccount.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.security.credentials.GCPExternalAccount",
+ "title": "GCP External Account",
+ "description": "Pass the raw credential values provided by GCP",
+ "properties": {
+ "type": {
+ "title": "Credentials Type",
+ "description": "Google Cloud Platform account type.",
+ "type": "string",
+ "default": "external_account",
+ "const": "external_account"
+ },
+ "externalType": {
+ "title": "GCP Account Type",
+ "description": "Google Cloud Platform account type.",
+ "type": "string",
+ "default": "external_account",
+ "const": "external_account"
+ },
+ "audience": {
+ "title": "Audience",
+ "description": "Google Security Token Service audience which contains the resource name for the workload identity pool and the provider identifier in that pool.",
+ "type": "string"
+ },
+ "subjectTokenType": {
+ "title": "Subject Token Type",
+ "description": "Google Security Token Service subject token type based on the OAuth 2.0 token exchange spec.",
+ "type": "string"
+ },
+ "tokenURL": {
+ "title": "Token URL",
+ "description": "Google Security Token Service token exchange endpoint.",
+ "type": "string"
+ },
+ "credentialSource": {
+ "title": "Credential Source",
+ "description": "This object defines the mechanism used to retrieve the external credential from the local environment so that it can be exchanged for a GCP access token via the STS endpoint",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.security.credentials.credentialSource",
+ "additionalProperties": {
+ "type": "string"
+ }
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/security/credentials/gcpValues.json b/openmetadata-spec/bin/src/main/resources/json/schema/security/credentials/gcpValues.json
new file mode 100644
index 000000000000..b40f85c70289
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/security/credentials/gcpValues.json
@@ -0,0 +1,91 @@
+{
+ "$id": "https://open-metadata.org/schema/security/credentials/gcpValues.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.security.credentials.GCPValues",
+ "title": "GCP Credentials Values",
+ "description": "Pass the raw credential values provided by GCP",
+ "definitions": {
+ "singleProjectId": {
+ "title": "Single Project ID",
+ "type": "string"
+ },
+ "multipleProjectId": {
+ "title": "Multiple Project ID",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Credentials Type",
+ "description": "Google Cloud Platform account type.",
+ "type": "string",
+ "default": "service_account",
+ "const": "service_account"
+ },
+ "projectId": {
+ "title": "Project ID",
+ "description": "Project ID",
+ "oneOf": [
+ {
+ "$ref": "#/definitions/singleProjectId"
+ },
+ {
+ "$ref": "#/definitions/multipleProjectId"
+ }
+ ]
+ },
+ "privateKeyId": {
+ "title": "Private Key ID",
+ "description": "Google Cloud private key id.",
+ "type": "string"
+ },
+ "privateKey": {
+ "title": "Private Key",
+ "description": "Google Cloud private key.",
+ "type": "string",
+ "format": "password"
+ },
+ "clientEmail": {
+ "title": "Client Email",
+ "description": "Google Cloud email.",
+ "type": "string"
+ },
+ "clientId": {
+ "title": "Client ID",
+ "description": "Google Cloud Client ID.",
+ "type": "string"
+ },
+ "authUri": {
+ "title": "Authentication URI",
+ "description": "Google Cloud auth uri.",
+ "type": "string",
+ "format": "uri",
+ "default": "https://accounts.google.com/o/oauth2/auth"
+ },
+ "tokenUri": {
+ "title": "Token URI",
+ "description": "Google Cloud token uri.",
+ "type": "string",
+ "format": "uri",
+ "default": "https://oauth2.googleapis.com/token"
+ },
+ "authProviderX509CertUrl": {
+ "title": "Authentication Provider x509 Certificate URL",
+ "description": "Google Cloud auth provider certificate.",
+ "type": "string",
+ "format": "uri",
+ "default": "https://www.googleapis.com/oauth2/v1/certs"
+ },
+ "clientX509CertUrl": {
+ "title": "Client x509 Certificate URL",
+ "description": "Google Cloud client certificate uri.",
+ "type": "string",
+ "format": "uri"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/security/credentials/gitCredentials.json b/openmetadata-spec/bin/src/main/resources/json/schema/security/credentials/gitCredentials.json
new file mode 100644
index 000000000000..417be160f642
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/security/credentials/gitCredentials.json
@@ -0,0 +1,26 @@
+{
+ "$id": "https://open-metadata.org/schema/security/credentials/gitCredentials.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "GitCredentials",
+ "description": "Credentials for a generic Git repository",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.security.credentials.GitCredentials",
+ "definitions": {
+ "repositoryOwner": {
+ "title": "Repository Owner",
+ "description": "The owner (user or organization) of a Git repository. For example, in https://github.com/open-metadata/OpenMetadata, the owner is `open-metadata`.",
+ "type": "string"
+ },
+ "repositoryName": {
+ "title": "Repository Name",
+ "description": "The name of a Git repository. For example, in https://github.com/open-metadata/OpenMetadata, the name is `OpenMetadata`.",
+ "type": "string"
+ },
+ "token": {
+ "title": "API Token",
+ "description": "Token to use the API. This is required for private repositories and to ensure we don't hit API limits.",
+ "type": "string",
+ "format": "password"
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/security/credentials/githubCredentials.json b/openmetadata-spec/bin/src/main/resources/json/schema/security/credentials/githubCredentials.json
new file mode 100644
index 000000000000..99b917791708
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/security/credentials/githubCredentials.json
@@ -0,0 +1,42 @@
+{
+ "$id": "https://open-metadata.org/schema/security/credentials/githubCredentials.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "GitHubCredentials",
+ "description": "Credentials for a GitHub repository",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.security.credentials.GitHubCredentials",
+ "definitions": {
+ "githubType": {
+ "description": "GitHub Credentials type",
+ "type": "string",
+ "enum": ["GitHub"],
+ "default": "GitHub"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Credentials Type",
+ "description": "Credentials Type",
+ "$ref": "#/definitions/githubType",
+ "default": "GitHub"
+ },
+ "gitHostURL": {
+ "title": "Git Host URL",
+ "description": "GitHub instance URL. For GitHub.com, use https://github.com",
+ "type": "string",
+ "format": "uri",
+ "default": "https://github.com"
+ },
+ "repositoryOwner": {
+ "$ref": "gitCredentials.json#/definitions/repositoryOwner"
+ },
+ "repositoryName": {
+ "$ref": "gitCredentials.json#/definitions/repositoryName"
+ },
+ "token": {
+ "$ref": "gitCredentials.json#/definitions/token"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["repositoryOwner", "repositoryName"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/security/credentials/gitlabCredentials.json b/openmetadata-spec/bin/src/main/resources/json/schema/security/credentials/gitlabCredentials.json
new file mode 100644
index 000000000000..f041eea436bf
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/security/credentials/gitlabCredentials.json
@@ -0,0 +1,42 @@
+{
+ "$id": "https://open-metadata.org/schema/security/credentials/gitlabCredentials.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "GitlabCredentials",
+ "description": "Credentials for a Gitlab repository",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.security.credentials.GitlabCredentials",
+ "definitions": {
+ "gitlabType": {
+ "description": "Gitlab Credentials type",
+ "type": "string",
+ "enum": ["Gitlab"],
+ "default": "Gitlab"
+ }
+ },
+ "properties": {
+ "type": {
+ "title": "Credentials Type",
+ "description": "Credentials Type",
+ "$ref": "#/definitions/gitlabType",
+ "default": "Gitlab"
+ },
+ "gitHostURL": {
+ "title": "Git Host URL",
+ "description": "Gitlab instance URL. For Gitlab.com, use https://gitlab.com",
+ "type": "string",
+ "format": "uri",
+ "default": "https://gitlab.com"
+ },
+ "repositoryOwner": {
+ "$ref": "gitCredentials.json#/definitions/repositoryOwner"
+ },
+ "repositoryName": {
+ "$ref": "gitCredentials.json#/definitions/repositoryName"
+ },
+ "token": {
+ "$ref": "gitCredentials.json#/definitions/token"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["repositoryOwner", "repositoryName"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/security/credentials/kubernetesCredentials.json b/openmetadata-spec/bin/src/main/resources/json/schema/security/credentials/kubernetesCredentials.json
new file mode 100644
index 000000000000..b1211a1af0a3
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/security/credentials/kubernetesCredentials.json
@@ -0,0 +1,27 @@
+{
+ "$id": "https://open-metadata.org/schema/security/credentials/kubernetesCredentials.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "KubernetesCredentials",
+ "description": "Credentials for a Kubernetes cluster",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.security.credentials.KubernetesCredentials",
+ "properties": {
+ "namespace": {
+ "title": "Namespace",
+ "description": "The namespace of the Kubernetes cluster",
+ "type": "string"
+ },
+ "inCluster": {
+ "title": "In Cluster",
+ "description": "Whether the Kubernetes secrets manager is running in the same cluster where the OpenMetadata services are running",
+ "type": "boolean"
+ },
+ "kubeconfigPath": {
+ "title": "Kubeconfig Path",
+ "description": "The path to the kubeconfig file",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ }
+
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/security/sasl/saslClientConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/security/sasl/saslClientConfig.json
new file mode 100644
index 000000000000..51debf9197a7
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/security/sasl/saslClientConfig.json
@@ -0,0 +1,27 @@
+{
+ "$id": "https://open-metadata.org/schema/security/sasl/SASLClientConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SASL Client Config",
+ "description": "SASL client configuration.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.security.sasl.SASLClientConfig",
+ "additionalProperties": false,
+ "properties": {
+ "saslMechanism": {
+ "title": "SASL Mechanism",
+ "description": "SASL security mechanism",
+ "$ref": "../../entity/services/connections/messaging/saslMechanismType.json",
+ "default": "PLAIN"
+ },
+ "saslUsername": {
+ "title": "SASL Username",
+ "description": "The SASL authentication username.",
+ "type": "string"
+ },
+ "saslPassword": {
+ "title": "SASL Password",
+ "description": "The SASL authentication password.",
+ "type": "string"
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/security/secrets/secretsManagerClientLoader.json b/openmetadata-spec/bin/src/main/resources/json/schema/security/secrets/secretsManagerClientLoader.json
new file mode 100644
index 000000000000..e1693081ec25
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/security/secrets/secretsManagerClientLoader.json
@@ -0,0 +1,11 @@
+{
+ "$id": "https://open-metadata.org/schema/security/secrets/secretsManagerClientLoader.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Secrets Manager Client Loader",
+ "description": "OpenMetadata Secrets Manager Client Loader. Lets the client know how the Secrets Manager Credentials should be loaded from the environment.",
+ "type": "string",
+ "javaType": "org.openmetadata.schema.security.secrets.SecretsManagerClientLoader",
+ "enum": ["noop", "airflow","env"],
+ "default": "noop",
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/security/secrets/secretsManagerConfiguration.json b/openmetadata-spec/bin/src/main/resources/json/schema/security/secrets/secretsManagerConfiguration.json
new file mode 100644
index 000000000000..691df5a10a79
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/security/secrets/secretsManagerConfiguration.json
@@ -0,0 +1,41 @@
+{
+ "$id": "https://open-metadata.org/schema/security/secrets/secretsManagerConfiguration.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SecretsManagerConfiguration",
+ "description": "OpenMetadata server configuration for the Secrets Manager feature.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.security.secrets.SecretsManagerConfiguration",
+ "properties": {
+ "secretsManager": {
+ "title": "Secrets Manager Provider",
+ "description": "OpenMetadata Secrets Manager Provider. Make sure to configure the same secrets manager providers as the ones configured on the OpenMetadata server.",
+ "$ref": "secretsManagerProvider.json",
+ "default": "noop"
+ },
+ "prefix": {
+ "title": "Secret ID Prefix",
+ "description": "Prefix to be added to the secret key ID: `///`",
+ "type": "string"
+ },
+ "tags": {
+ "title": "Secret Resource Tags",
+ "description": "Add tags to the created resource, e.g., in AWS. Format is `[key1:value1,key2:value2,...]`",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "default": null
+ },
+ "parameters": {
+ "title": "Parameters",
+ "description": "Extra parameters used by the Secrets Manager implementation.",
+ "type": "object",
+ "additionalProperties": {
+ ".{1,}": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/security/secrets/secretsManagerProvider.json b/openmetadata-spec/bin/src/main/resources/json/schema/security/secrets/secretsManagerProvider.json
new file mode 100644
index 000000000000..b333f373c2a8
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/security/secrets/secretsManagerProvider.json
@@ -0,0 +1,11 @@
+{
+ "$id": "https://open-metadata.org/schema/security/secrets/secretsManagerProvider.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Secrets Manager Provider",
+ "description": "OpenMetadata Secrets Manager Provider. Make sure to configure the same secrets manager providers as the ones configured on the OpenMetadata server.",
+ "type": "string",
+ "javaType": "org.openmetadata.schema.security.secrets.SecretsManagerProvider",
+ "enum": ["db", "managed-aws","aws", "managed-aws-ssm", "aws-ssm", "managed-azure-kv", "azure-kv", "in-memory", "gcp", "kubernetes"],
+ "default": "db",
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/security/securityConfiguration.json b/openmetadata-spec/bin/src/main/resources/json/schema/security/securityConfiguration.json
new file mode 100644
index 000000000000..6d2b44655f07
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/security/securityConfiguration.json
@@ -0,0 +1,17 @@
+{
+ "$id": "https://open-metadata.org/schema/security/secrets/securityConfiguration.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "ValidateSSLClientConfig",
+ "description": "Security configuration for the OpenMetadata server.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.security.SecurityConfiguration",
+ "properties": {
+ "maskPasswordsAPI": {
+ "title": "Mask Password API",
+ "description": "If enabled, it will mask all the password fields in the responses sent from the API except for the bots",
+ "type": "boolean",
+ "default": "false"
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/security/ssl/validateSSLClientConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/security/ssl/validateSSLClientConfig.json
new file mode 100644
index 000000000000..0526b753f6f3
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/security/ssl/validateSSLClientConfig.json
@@ -0,0 +1,35 @@
+{
+ "$id": "https://open-metadata.org/schema/security/ssl/validateSSLClientConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Validate SSL Client Config",
+ "description": "OpenMetadata Client configured to validate SSL certificates.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.security.ssl.ValidateSSLClientConfig",
+ "additionalProperties": false,
+ "properties": {
+ "caCertificate": {
+ "title": "CA Certificate",
+ "description": "The CA certificate used for SSL validation.",
+ "type": "string",
+ "format": "password",
+ "accept": [".pem", ".crt", ".cer", ".der", ".p12"],
+ "uiFieldType": "fileOrInput"
+ },
+ "sslCertificate": {
+ "title": "SSL Certificate",
+ "description": "The SSL certificate used for client authentication.",
+ "type": "string",
+ "format": "password",
+ "accept": [".pem", ".crt", ".cer", ".der", ".p12"],
+ "uiFieldType": "fileOrInput"
+ },
+ "sslKey": {
+ "title": "SSL Key",
+ "description": "The private key associated with the SSL certificate.",
+ "type": "string",
+ "format": "password",
+ "accept": [".pem", ".crt", ".cer", ".der", ".p12"],
+ "uiFieldType": "fileOrInput"
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/security/ssl/verifySSLConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/security/ssl/verifySSLConfig.json
new file mode 100644
index 000000000000..0699133446e6
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/security/ssl/verifySSLConfig.json
@@ -0,0 +1,46 @@
+{
+ "$id": "https://open-metadata.org/schema/security/ssl/verifySSLConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Verify SSL Config",
+ "description": "Client configuration to validate SSL certificates.",
+ "definitions": {
+ "verifySSL": {
+ "title": "Verify SSL",
+ "description": "Client SSL verification. Make sure to configure the SSLConfig if enabled.",
+ "javaType": "org.openmetadata.schema.security.ssl.VerifySSL",
+ "type": "string",
+ "enum": [
+ "no-ssl",
+ "ignore",
+ "validate"
+ ],
+ "default": "no-ssl"
+ },
+ "sslMode": {
+ "title": "SSL Mode",
+ "description": "SSL Mode to connect to database.",
+ "javaType": "org.openmetadata.schema.security.ssl.SSLMode",
+ "enum": [
+ "disable",
+ "allow",
+ "prefer",
+ "require",
+ "verify-ca",
+ "verify-full"
+ ],
+ "default": "disable"
+ },
+ "sslConfig": {
+ "title": "SSL Config",
+ "description": "Client SSL configuration",
+ "javaType": "org.openmetadata.schema.security.ssl.SSLConfig",
+ "mask": true,
+ "oneOf": [
+ {
+ "$ref": "validateSSLClientConfig.json"
+ }
+ ]
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/settings/settings.json b/openmetadata-spec/bin/src/main/resources/json/schema/settings/settings.json
new file mode 100644
index 000000000000..4daacd61b62b
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/settings/settings.json
@@ -0,0 +1,125 @@
+{
+ "$id": "https://open-metadata.org/schema/settings/settings.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Settings",
+ "description": "This schema defines the Settings. A Settings represents a generic Setting.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.settings.Settings",
+ "definitions": {
+ "settingType": {
+ "javaType": "org.openmetadata.schema.settings.SettingsType",
+ "description": "This schema defines all possible filters enum in OpenMetadata.",
+ "type": "string",
+ "enum": [
+ "authorizerConfiguration",
+ "authenticationConfiguration",
+ "jwtTokenConfiguration",
+ "elasticsearch",
+ "eventHandlerConfiguration",
+ "airflowConfiguration",
+ "fernetConfiguration",
+ "slackEventPublishers",
+ "secretsManagerConfiguration",
+ "sandboxModeEnabled",
+ "slackChat",
+ "emailConfiguration",
+ "openMetadataBaseUrlConfiguration",
+ "customUiThemePreference",
+ "loginConfiguration",
+ "slackAppConfiguration",
+ "slackBot",
+ "slackInstaller",
+ "slackState",
+ "teamsAppConfiguration",
+ "profilerConfiguration",
+ "searchSettings",
+ "assetCertificationSettings",
+ "lineageSettings",
+ "workflowSettings",
+ "scimConfiguration",
+ "securityConfiguration",
+ "entityRulesSettings",
+ "openLineageSettings",
+ "mcpConfiguration",
+ "glossaryTermRelationSettings"
+ ]
+ }
+ },
+ "properties": {
+ "config_type": {
+ "description": "Unique identifier that identifies an entity instance.",
+ "$ref": "#/definitions/settingType"
+ },
+ "config_value": {
+ "oneOf": [
+ {
+ "$ref": "../configuration/pipelineServiceClientConfiguration.json"
+ },
+ {
+ "$ref": "../configuration/authenticationConfiguration.json"
+ },
+ {
+ "$ref": "../configuration/authorizerConfiguration.json"
+ },
+ {
+ "$ref": "../configuration/elasticSearchConfiguration.json"
+ },
+ {
+ "$ref": "../configuration/eventHandlerConfiguration.json"
+ },
+ {
+ "$ref": "../configuration/fernetConfiguration.json"
+ },
+ {
+ "$ref": "../configuration/jwtTokenConfiguration.json"
+ },
+ {
+ "$ref": "../configuration/taskNotificationConfiguration.json"
+ },
+ {
+ "$ref": "../email/smtpSettings.json"
+ },
+ {
+ "$ref": "../configuration/openMetadataBaseUrlConfiguration.json"
+ },
+ {
+ "$ref": "../configuration/slackAppConfiguration.json"
+ },
+ {
+ "$ref": "../configuration/teamsAppConfiguration.json"
+ },
+ {
+ "$ref": "../configuration/profilerConfiguration.json"
+ },
+ {
+ "$ref": "../configuration/searchSettings.json"
+ },
+ {
+ "$ref": "../configuration/assetCertificationSettings.json"
+ },
+ {
+ "$ref": "../configuration/lineageSettings.json"
+ },
+ {
+ "$ref": "../configuration/workflowSettings.json"
+ },
+ {
+ "$ref": "../configuration/entityRulesSettings.json"
+ },
+ {
+ "$ref": "../configuration/securityConfiguration.json"
+ },
+ {
+ "$ref": "../configuration/openLineageSettings.json"
+ },
+ {
+ "$ref": "../configuration/mcpConfiguration.json"
+ },
+ {
+ "$ref": "../configuration/glossaryTermRelationSettings.json"
+ }
+ ]
+ }
+ },
+ "required": ["config_type"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/system/entityError.json b/openmetadata-spec/bin/src/main/resources/json/schema/system/entityError.json
new file mode 100644
index 000000000000..176f2a1cde35
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/system/entityError.json
@@ -0,0 +1,16 @@
+{
+ "$id": "https://open-metadata.org/schema/system/entityError.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "EntityError",
+ "description": "Entity And Message Scehma in case of failures.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.system.EntityError",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "entity": {
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/system/eventPublisherJob.json b/openmetadata-spec/bin/src/main/resources/json/schema/system/eventPublisherJob.json
new file mode 100644
index 000000000000..347c1be6973c
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/system/eventPublisherJob.json
@@ -0,0 +1,266 @@
+{
+ "$id": "https://open-metadata.org/schema/system/eventPublisherJob.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "EventPublisherResult",
+ "description": "This schema defines Event Publisher Job.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.system.EventPublisherJob",
+ "definitions": {
+ "stepStats": {
+ "description": "Stats for Different Steps Reader, Processor, Writer.",
+ "javaType": "org.openmetadata.schema.system.StepStats",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "totalRecords": {
+ "description": "Count of Total Failed Records",
+ "type": "integer",
+ "default": 0,
+ "minimum": 0
+ },
+ "successRecords": {
+ "description": "Count of Total Successfully Records",
+ "type": "integer",
+ "default": 0,
+ "minimum": 0
+ },
+ "failedRecords": {
+ "description": "Count of Total Failed Records",
+ "type": "integer",
+ "default": 0,
+ "minimum": 0
+ },
+ "warningRecords": {
+ "description": "Count of Records with Warnings (e.g., stale references that were skipped)",
+ "type": "integer",
+ "default": 0,
+ "minimum": 0
+ },
+ "vectorSuccessRecords": {
+ "description": "Count of records with successful vector embeddings",
+ "type": "integer",
+ "default": 0,
+ "minimum": 0
+ },
+ "vectorFailedRecords": {
+ "description": "Count of records with failed vector embeddings",
+ "type": "integer",
+ "default": 0,
+ "minimum": 0
+ }
+ }
+ },
+ "stats": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.system.Stats",
+ "properties": {
+ "jobStats": {
+ "description": "Stats for the job",
+ "$ref": "#/definitions/stepStats"
+ },
+ "readerStats": {
+ "description": "Stats for the reader step (reading from database)",
+ "$ref": "#/definitions/stepStats"
+ },
+ "processStats": {
+ "description": "Stats for the process step (building search index documents)",
+ "$ref": "#/definitions/stepStats"
+ },
+ "sinkStats": {
+ "description": "Stats for the sink step (writing to search index)",
+ "$ref": "#/definitions/stepStats"
+ },
+ "vectorStats": {
+ "description": "Stats for the vector step (generating and indexing vector embeddings)",
+ "$ref": "#/definitions/stepStats"
+ },
+ "entityStats": {
+ "javaType": "org.openmetadata.schema.system.EntityStats",
+ "description": "Stats for different entities. Keys should match entity types",
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/stepStats"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "runMode": {
+ "description": "This schema publisher run modes.",
+ "type": "string",
+ "enum": [
+ "stream",
+ "batch"
+ ]
+ },
+ "publisherType": {
+ "description": "This schema event Publisher Types",
+ "type": "string",
+ "enum": [
+ "elasticSearch",
+ "kafka"
+ ]
+ }
+ },
+ "properties": {
+ "name": {
+ "description": "Name of the result",
+ "type": "string"
+ },
+ "timestamp": {
+ "$ref": "../type/basic.json#/definitions/timestamp"
+ },
+ "status": {
+ "description": "This schema publisher run job status.",
+ "type": "string",
+ "enum": [
+ "started",
+ "running",
+ "completed",
+ "failed",
+ "active",
+ "activeError",
+ "stopped",
+ "success",
+ "stopInProgress"
+ ]
+ },
+ "failure": {
+ "description": "Failure for the job",
+ "$ref": "./indexingError.json"
+ },
+ "stats": {
+ "$ref": "#/definitions/stats"
+ },
+ "entities": {
+ "description": "List of Entities to Reindex",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "uniqueItems": true
+ },
+ "recreateIndex": {
+ "description": "This schema publisher run modes.",
+ "type": "boolean"
+ },
+ "batchSize": {
+ "description": "Maximum number of events sent in a batch (Default 10).",
+ "type": "integer",
+ "default": 100,
+ "minimum": 1
+ },
+ "payLoadSize": {
+ "description": "Payload size in bytes depending on config.",
+ "type": "integer",
+ "existingJavaType": "java.lang.Long",
+ "default": 9437184,
+ "minimum": 1
+ },
+ "producerThreads": {
+ "title": "Number of Producer Threads to use",
+ "description": "Number of producer threads to use for reindexing",
+ "type": "integer",
+ "default": 1,
+ "minimum": 1
+ },
+ "consumerThreads": {
+ "title": "Number of Consumer Threads to use",
+ "description": "Number of consumer threads to use for reindexing",
+ "type": "integer",
+ "default": 1,
+ "minimum": 1
+ },
+ "queueSize": {
+ "title": "Queue Size to use.",
+ "description": "Queue Size to use internally for reindexing.",
+ "type": "integer",
+ "default": 100,
+ "minimum": 1
+ },
+ "maxConcurrentRequests": {
+ "title": "Max Concurrent Requests",
+ "description": "Maximum number of concurrent requests to the search index",
+ "type": "integer",
+ "default": 100,
+ "minimum": 1
+ },
+ "maxRetries": {
+ "title": "Max Retries",
+ "description": "Maximum number of retries for a failed request",
+ "type": "integer",
+ "default": 5,
+ "minimum": 0
+ },
+ "initialBackoff": {
+ "title": "Initial Backoff Millis",
+ "description": "Initial backoff time in milliseconds",
+ "type": "integer",
+ "default": 1000,
+ "minimum": 0
+ },
+ "maxBackoff": {
+ "title": "Max Backoff Millis",
+ "description": "Maximum backoff time in milliseconds",
+ "type": "integer",
+ "default": 10000,
+ "minimum": 0
+ },
+ "searchIndexMappingLanguage": {
+ "description": "Recreate Indexes with updated Language",
+ "$ref": "../configuration/elasticSearchConfiguration.json#/definitions/searchIndexMappingLanguage"
+ },
+ "afterCursor": {
+ "description": "Provide After in case of failure to start reindexing after the issue is solved",
+ "type": "string"
+ },
+ "autoTune": {
+ "description": "Enable automatic performance tuning based on cluster capabilities and database entity count",
+ "type": "boolean",
+ "default": false
+ },
+ "force": {
+ "description": "Force reindexing even if no index mapping changes are detected",
+ "type": "boolean",
+ "default": false
+ },
+ "slackBotToken": {
+ "description": "Optional Slack bot token for sending progress notifications with real-time updates",
+ "type": "string"
+ },
+ "slackChannel": {
+ "description": "Slack channel ID or name (required when using bot token, e.g., 'C1234567890' or '#general')",
+ "type": "string"
+ },
+ "useDistributedIndexing": {
+ "description": "Enable distributed indexing across multiple servers. When enabled, reindexing work is partitioned and can be processed by multiple servers concurrently with crash recovery support.",
+ "type": "boolean",
+ "default": true
+ },
+ "partitionSize": {
+ "title": "Partition Size",
+ "description": "Number of entities per partition for distributed indexing. Smaller values create more partitions for better distribution across servers. Range: 1000-50000.",
+ "type": "integer",
+ "default": 10000,
+ "minimum": 1000,
+ "maximum": 50000
+ },
+ "timeSeriesMaxDays": {
+ "title": "Time Series Max Days",
+ "description": "Maximum age in days for time series data during reindexing. Only records from the last N days will be indexed. Default 0 (index all data). Set to a positive value like 15 to limit to recent data.",
+ "type": "integer",
+ "default": 0,
+ "minimum": -1
+ },
+ "timeSeriesEntityDays": {
+ "title": "Time Series Entity Days Override",
+ "description": "Per-entity-type override for time series max days. Keys are entity type names, values are number of days. Entities not in this map use timeSeriesMaxDays as default.",
+ "type": "object",
+ "existingJavaType": "java.util.Map",
+ "additionalProperties": {
+ "type": "integer"
+ }
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/system/indexingError.json b/openmetadata-spec/bin/src/main/resources/json/schema/system/indexingError.json
new file mode 100644
index 000000000000..d619f7d9e25a
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/system/indexingError.json
@@ -0,0 +1,47 @@
+{
+ "$id": "https://open-metadata.org/schema/system/indexingError.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "IndexingAppError",
+ "description": "This schema defines Event Publisher Job Error Schema. Additional properties exist for backward compatibility. Don't use it.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.system.IndexingError",
+ "definitions": {
+ "errorSource": {
+ "type": "string",
+ "enum": ["Job" ,"Reader", "Processor", "Sink"]
+ }
+ },
+ "properties": {
+ "errorSource": {
+ "$ref": "#/definitions/errorSource"
+ },
+ "lastFailedCursor": {
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ },
+ "failedEntities": {
+ "type": "array",
+ "items": {
+ "$ref": "./entityError.json"
+ }
+ },
+ "reason": {
+ "type": "string"
+ },
+ "stackTrace": {
+ "type": "string"
+ },
+ "submittedCount": {
+ "type": "integer"
+ },
+ "successCount": {
+ "type": "integer"
+ },
+ "failedCount": {
+ "type": "integer"
+ }
+ },
+ "additionalProperties": true
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/system/limitsResponse.json b/openmetadata-spec/bin/src/main/resources/json/schema/system/limitsResponse.json
new file mode 100644
index 000000000000..60a907458be9
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/system/limitsResponse.json
@@ -0,0 +1,20 @@
+{
+ "$id": "https://open-metadata.org/schema/system/limitsResponse.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "LimitsResponse",
+ "description": "Limits Config schema",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.system.LimitsConfig",
+ "properties": {
+ "enable": {
+ "description": "Limits Enabled",
+ "type": "boolean",
+ "default": false
+ },
+ "limits": {
+ "description": "Limits",
+ "type": "object"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/system/securityValidationResponse.json b/openmetadata-spec/bin/src/main/resources/json/schema/system/securityValidationResponse.json
new file mode 100644
index 000000000000..60c451da27af
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/system/securityValidationResponse.json
@@ -0,0 +1,63 @@
+{
+ "$id": "https://open-metadata.org/schema/system/securityValidationResponse.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SecurityValidationResponse",
+ "description": "Response for security configuration validation",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.system.SecurityValidationResponse",
+ "definitions": {
+ "validationResult": {
+ "javaType": "org.openmetadata.schema.system.ValidationResult",
+ "description": "Legacy validation result for backward compatibility",
+ "type": "object",
+ "properties": {
+ "component": {
+ "description": "Component being validated (e.g., oidc, ldap, saml)",
+ "type": "string"
+ },
+ "status": {
+ "description": "Status of the validation (success/failed)",
+ "type": "string"
+ },
+ "message": {
+ "description": "Validation message or error details",
+ "type": "string"
+ }
+ },
+ "required": ["component", "status", "message"],
+ "additionalProperties": false
+ },
+ "fieldError": {
+ "javaType": "org.openmetadata.schema.system.FieldError",
+ "type": "object",
+ "properties": {
+ "field": {
+ "description": "Field path that has the error (e.g., 'authenticationConfiguration.oidcConfiguration.clientId')",
+ "type": "string"
+ },
+ "error": {
+ "description": "Concise error message for display under form field",
+ "type": "string"
+ }
+ },
+ "required": ["field", "error"],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "status": {
+ "description": "Overall validation status (success/failed)",
+ "type": "string",
+ "enum": ["success", "failed"]
+ },
+ "errors": {
+ "description": "List of field errors (only present when status is 'failed')",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/fieldError"
+ }
+ }
+ },
+ "required": ["status"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/system/ui/knowledgePanel.json b/openmetadata-spec/bin/src/main/resources/json/schema/system/ui/knowledgePanel.json
new file mode 100644
index 000000000000..9d96d0168405
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/system/ui/knowledgePanel.json
@@ -0,0 +1,21 @@
+{
+ "$id": "https://open-metadata.org/schema/system/ui/knowledgePanel.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Team",
+ "description": "This schema defines the KnowledgePanel entity. A Knowledge panel is an information box used for UX customization in OpenMetadata.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.system.ui.KnowledgePanel",
+ "properties": {
+ "entityType": {
+ "description": "Entity Type.",
+ "enum": ["KnowledgePanel"],
+ "default": "KnowledgePanel"
+ },
+ "configuration": {
+ "description": "Configuration for the Knowledge Panel.",
+ "type": "object"
+ }
+ },
+ "required": ["entityType"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/system/ui/navigationItem.json b/openmetadata-spec/bin/src/main/resources/json/schema/system/ui/navigationItem.json
new file mode 100644
index 000000000000..270876a5a6ce
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/system/ui/navigationItem.json
@@ -0,0 +1,34 @@
+{
+ "$id": "https://open-metadata.org/schema/system/ui/navigationItem.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "NavigationItem",
+ "description": "Defines a navigation item in the UI navigation menu.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.system.ui.NavigationItem",
+ "properties": {
+ "id": {
+ "description": "Unique identifier for the navigation item.",
+ "$ref": "../../type/basic.json#/definitions/uuid"
+ },
+ "title": {
+ "description": "Display title of the navigation item.",
+ "type": "string"
+ },
+ "pageId": {
+ "description": "Reference to a Page ID that this navigation item links to.",
+ "type": "string"
+ },
+ "isHidden": {
+ "description": "Determine if item is visible or not",
+ "type": "boolean"
+ },
+ "children": {
+ "description": "Optional sub-navigation items.",
+ "type": "array",
+ "items": { "$ref": "#" },
+ "default": []
+ }
+ },
+ "required": ["id", "title", "pageId"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/system/ui/page.json b/openmetadata-spec/bin/src/main/resources/json/schema/system/ui/page.json
new file mode 100644
index 000000000000..e833e76d910e
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/system/ui/page.json
@@ -0,0 +1,87 @@
+{
+ "$id": "https://open-metadata.org/schema/system/ui/page.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Team",
+ "description": "This schema defines the Page entity. A Page is a landing page, schema page to customize in OpenMetadata.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.system.ui.Page",
+ "definitions": {
+ "pageType": {
+ "javaType": "org.openmetadata.schema.system.ui.PageType",
+ "description": "This schema defines the type used for describing different types of pages.",
+ "type": "string",
+ "enum": [
+ "LandingPage",
+ "Table",
+ "StoredProcedure",
+ "Database",
+ "DatabaseSchema",
+ "Topic",
+ "Pipeline",
+ "Dashboard",
+ "DashboardDataModel",
+ "DataMarketplace",
+ "Container",
+ "SearchIndex",
+ "Glossary",
+ "GlossaryTerm",
+ "Domain",
+ "DataProduct",
+ "APICollection",
+ "APIEndpoint",
+ "Metric",
+ "MlModel",
+ "Tag",
+ "Classification",
+ "Chart",
+ "Directory",
+ "File",
+ "Spreadsheet",
+ "Worksheet"
+ ]
+ }
+ },
+ "properties": {
+ "entityType": {
+ "description": "Entity Type.",
+ "enum": [
+ "Page"
+ ],
+ "default": "Page"
+ },
+ "pageType": {
+ "$ref": "#/definitions/pageType"
+ },
+ "layout": {
+ "description": "Configuration for the Knowledge Panel.",
+ "type": "object"
+ },
+ "tabs": {
+ "description": "Tabs included in this page.",
+ "type": "array",
+ "items": {
+ "$ref": "tab.json"
+ },
+ "default": []
+ },
+ "persona": {
+ "description": "Persona this page belongs to.",
+ "$ref": "../../type/entityReference.json"
+ },
+ "domains": {
+ "description": "Domains this page belongs to.",
+ "$ref": "../../type/entityReferenceList.json"
+ },
+ "knowledgePanels": {
+ "description": "KnowledgePanels that are part of this Page.",
+ "$ref": "../../type/entityReferenceList.json"
+ }
+ },
+ "required": [
+ "entityType",
+ "pageType",
+ "knowledgePanels",
+ "layout"
+ ],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/system/ui/tab.json b/openmetadata-spec/bin/src/main/resources/json/schema/system/ui/tab.json
new file mode 100644
index 000000000000..93805686b474
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/system/ui/tab.json
@@ -0,0 +1,33 @@
+{
+ "$id": "https://open-metadata.org/schema/system/ui/tab.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Tab",
+ "description": "This schema defines a Tab within a Page.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.system.ui.Tab",
+ "properties": {
+ "id": { "$ref": "../../type/basic.json#/definitions/uuid" },
+ "name": {
+ "description": "Name of the tab.",
+ "type": "string"
+ },
+ "displayName": {
+ "description": "DisplayName of the tab.",
+ "type": "string"
+ },
+ "layout": {
+ "description": "Layout configuration for this tab.",
+ "type": "object"
+ },
+ "editable": {
+ "description": "Weather tab can be edit by the user or not.",
+ "type": "boolean"
+ },
+ "knowledgePanels": {
+ "description": "KnowledgePanels that are part of this Tab.",
+ "$ref": "../../type/entityReferenceList.json"
+ }
+ },
+ "required": ["id", "name", "layout"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/system/ui/uiCustomization.json b/openmetadata-spec/bin/src/main/resources/json/schema/system/ui/uiCustomization.json
new file mode 100644
index 000000000000..1f207510868f
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/system/ui/uiCustomization.json
@@ -0,0 +1,54 @@
+{
+ "$id": "https://open-metadata.org/schema/system/ui/uiCustomization.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "UICustomization",
+ "description": "Contains UI customization details for a Persona.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.system.ui.UICustomization",
+ "properties": {
+ "id": { "$ref": "../../type/basic.json#/definitions/uuid" },
+ "name": {
+ "description": "A unique name for the UI customization configuration.",
+ "$ref": "../../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Name used for display purposes.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the UI customization.",
+ "$ref": "../../type/basic.json#/definitions/markdown"
+ },
+ "pages": {
+ "description": "List of Pages in the UI customization.",
+ "type": "array",
+ "items": { "$ref": "page.json" }
+ },
+ "navigation": {
+ "description": "Site-wide navigation configuration.",
+ "type": "array",
+ "items": { "$ref": "navigationItem.json" }
+ },
+ "personaPreferences": {
+ "description": "Persona default preferences. Admin can customize certain UI elements per persona as base configuration.",
+ "type": "array",
+ "items": {
+ "$ref": "../../type/personaPreferences.json"
+ },
+ "default": []
+ },
+ "updatedAt": {
+ "$ref": "../../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": { "type": "string" },
+ "version": {
+ "$ref": "../../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "changeDescription": {
+ "$ref": "../../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "href": { "$ref": "../../type/basic.json#/definitions/href" }
+ },
+ "required": ["id", "name", "pages"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/system/validationResponse.json b/openmetadata-spec/bin/src/main/resources/json/schema/system/validationResponse.json
new file mode 100644
index 000000000000..f726110b2676
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/system/validationResponse.json
@@ -0,0 +1,57 @@
+{
+ "$id": "https://open-metadata.org/schema/system/validationResponse.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SystemValidationResponse",
+ "description": "Define the system validation response",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.system.ValidationResponse",
+ "definitions": {
+ "stepValidation": {
+ "javaType": "org.openmetadata.schema.system.StepValidation",
+ "type": "object",
+ "properties": {
+ "description": {
+ "description": "Validation description. What is being tested?",
+ "type": "string"
+ },
+ "passed": {
+ "description": "Did the step validation successfully?",
+ "type": "boolean"
+ },
+ "message": {
+ "description": "Results or exceptions to be shared after running the test.",
+ "type": "string",
+ "default": null
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "database": {
+ "description": "Database connectivity check",
+ "$ref": "#/definitions/stepValidation"
+ },
+ "searchInstance": {
+ "description": "Search instance connectivity check",
+ "$ref": "#/definitions/stepValidation"
+ },
+ "pipelineServiceClient": {
+ "description": "Pipeline Service Client connectivity check",
+ "$ref": "#/definitions/stepValidation"
+ },
+ "jwks": {
+ "description": "JWKs validation",
+ "$ref": "#/definitions/stepValidation"
+ },
+ "migrations": {
+ "description": "List migration results",
+ "$ref": "#/definitions/stepValidation"
+ },
+ "logStorage": {
+ "description": "Log storage connectivity check (only shown if S3 storage is configured)",
+ "$ref": "#/definitions/stepValidation"
+ }
+ },
+ "additionalProperties": true
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/tests/assigned.json b/openmetadata-spec/bin/src/main/resources/json/schema/tests/assigned.json
new file mode 100644
index 000000000000..4ce3b6eff5f7
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/tests/assigned.json
@@ -0,0 +1,16 @@
+{
+ "$id": "https://open-metadata.org/schema/tests/assigned.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Assigned",
+ "description": "test case failure details for assigned failures",
+ "javaType": "org.openmetadata.schema.tests.type.Assigned",
+ "type": "object",
+ "properties": {
+ "assignee": {
+ "description": "User working on failure resolution.",
+ "$ref": "../type/entityReference.json"
+ }
+ },
+ "required": ["assignee"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/tests/basic.json b/openmetadata-spec/bin/src/main/resources/json/schema/tests/basic.json
new file mode 100644
index 000000000000..49a90c693d85
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/tests/basic.json
@@ -0,0 +1,302 @@
+{
+ "$id": "https://open-metadata.org/schema/tests/basic.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Basic",
+ "description": "This schema defines basic types that are used by other test schemas.",
+ "definitions": {
+ "columnTestSummaryDefinition": {
+ "description": "Schema to capture test case execution summary at the column level.",
+ "javaType": "org.openmetadata.schema.tests.type.ColumnTestSummaryDefinition",
+ "type": "object",
+ "properties": {
+ "success": {
+ "description": "Number of test cases that passed.",
+ "type": "integer"
+ },
+ "failed": {
+ "description": "Number of test cases that failed.",
+ "type": "integer"
+ },
+ "aborted": {
+ "description": "Number of test cases that aborted.",
+ "type": "integer"
+ },
+ "queued": {
+ "description": "Number of test cases that are queued for execution.",
+ "type": "integer"
+ },
+ "total": {
+ "description": "Total number of test cases.",
+ "type": "integer"
+ },
+ "entityLink": {
+ "$ref": "../type/basic.json#/definitions/entityLink"
+ }
+ }
+ },
+ "testSummary": {
+ "description": "Schema to capture test case execution summary.",
+ "javaType": "org.openmetadata.schema.tests.type.TestSummary",
+ "type": "object",
+ "properties": {
+ "success": {
+ "description": "Number of test cases that passed.",
+ "type": "integer"
+ },
+ "failed": {
+ "description": "Number of test cases that failed.",
+ "type": "integer"
+ },
+ "aborted": {
+ "description": "Number of test cases that aborted.",
+ "type": "integer"
+ },
+ "queued": {
+ "description": "Number of test cases that are queued for execution.",
+ "type": "integer"
+ },
+ "total": {
+ "description": "Total number of test cases.",
+ "type": "integer"
+ },
+ "columnTestSummary": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/columnTestSummaryDefinition"
+ }
+ }
+ }
+ },
+ "testResultValue": {
+ "description": "Schema to capture test case result values.",
+ "javaType": "org.openmetadata.schema.tests.type.TestResultValue",
+ "type": "object",
+ "properties": {
+ "name": {
+ "description": "name of the value",
+ "type": "string"
+ },
+ "value": {
+ "description": "test result value",
+ "type": "string"
+ },
+ "predictedValue": {
+ "description": "predicted value",
+ "type": "string"
+ }
+ }
+ },
+ "testCaseStatus": {
+ "description": "Status of Test Case run.",
+ "javaType": "org.openmetadata.schema.tests.type.TestCaseStatus",
+ "type": "string",
+ "enum": ["Success", "Failed", "Aborted", "Queued"],
+ "javaEnums": [
+ {
+ "name": "Success"
+ },
+ {
+ "name": "Failed"
+ },
+ {
+ "name": "Aborted"
+ },
+ {
+ "name": "Queued"
+ }
+ ]
+ },
+ "testCaseResult": {
+ "description": "Schema to capture test case result.",
+ "javaType": "org.openmetadata.schema.tests.type.TestCaseResult",
+ "javaInterfaces": ["org.openmetadata.schema.EntityTimeSeriesInterface"],
+ "type": "object",
+ "properties": {
+ "id": {
+ "description": "Unique identifier of this failure instance",
+ "$ref": "../type/basic.json#/definitions/uuid"
+ },
+ "testCaseFQN": {
+ "description": "Fully qualified name of the test case.",
+ "$ref": "../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "timestamp": {
+ "description": "Data one which test case result is taken.",
+ "$ref": "../type/basic.json#/definitions/timestamp"
+ },
+ "testCaseStatus": {
+ "description": "Status of Test Case run.",
+ "$ref": "#/definitions/testCaseStatus"
+ },
+ "result": {
+ "description": "Details of test case results.",
+ "type": "string"
+ },
+ "sampleData": {
+ "description": "sample data to capture rows/columns that didn't match the expressed testcase.",
+ "type": "string"
+ },
+ "testResultValue": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/testResultValue"
+ }
+ },
+ "passedRows": {
+ "description": "Number of rows that passed.",
+ "type": "integer",
+ "existingJavaType": "java.lang.Long"
+ },
+ "failedRows": {
+ "description": "Number of rows that failed.",
+ "type": "integer",
+ "existingJavaType": "java.lang.Long"
+ },
+ "passedRowsPercentage": {
+ "description": "Percentage of rows that passed.",
+ "type": "number"
+ },
+ "failedRowsPercentage": {
+ "description": "Percentage of rows that failed.",
+ "type": "number"
+ },
+ "incidentId": {
+ "description": "Incident State ID associated with this result. This association happens when the result is created, and will stay there even when the incident is resolved.",
+ "$ref": "../type/basic.json#/definitions/uuid"
+ },
+ "maxBound": {
+ "description": "Upper bound limit for the test case result as defined in the test definition.",
+ "type": "number"
+ },
+ "minBound": {
+ "description": "Lower bound limit for the test case result as defined in the test definition.",
+ "type": "number"
+ },
+ "testCase": {
+ "description": "Test case that this result is for.",
+ "$ref": "../type/entityReference.json"
+ },
+ "testDefinition": {
+ "description": "Test definition that this result is for.",
+ "$ref": "../type/entityReference.json"
+ },
+ "dimensionResults": {
+ "description": "List of dimensional test results. Only populated when the test case has dimensionColumns specified.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/testCaseDimensionResult"
+ }
+ }
+ },
+ "required": ["timestamp"]
+ },
+ "testSuiteExecutionFrequency": {
+ "description": "How often the test case should run.",
+ "javaType": "org.openmetadata.schema.tests.type.TestSuiteExecutionFrequency",
+ "type": "string",
+ "enum": ["Hourly", "Daily", "Weekly"],
+ "javaEnums": [
+ {
+ "name": "Hourly"
+ },
+ {
+ "name": "Daily"
+ },
+ {
+ "name": "Weekly"
+ }
+ ]
+ },
+ "dimensionValue": {
+ "description": "A single dimension name-value pair for dimensional test results",
+ "javaType": "org.openmetadata.schema.tests.type.DimensionValue",
+ "type": "object",
+ "properties": {
+ "name": {
+ "description": "Name of the dimension (e.g., 'column', 'region', 'tier')",
+ "type": "string"
+ },
+ "value": {
+ "description": "Value for this dimension (e.g., 'address', 'US', 'gold')",
+ "type": "string"
+ }
+ },
+ "required": ["name", "value"],
+ "additionalProperties": false
+ },
+ "testCaseDimensionResult": {
+ "description": "Test case result for dimensional analysis - supports both single and multi-dimensional groupings",
+ "javaType": "org.openmetadata.schema.tests.type.TestCaseDimensionResult",
+ "javaInterfaces": ["org.openmetadata.schema.EntityTimeSeriesInterface"],
+ "type": "object",
+ "properties": {
+ "id": {
+ "description": "Unique identifier of this dimensional result instance",
+ "$ref": "../type/basic.json#/definitions/uuid"
+ },
+ "testCaseResultId": {
+ "description": "Reference to the parent TestCaseResult execution that generated this dimensional result",
+ "$ref": "../type/basic.json#/definitions/uuid"
+ },
+ "testCase": {
+ "description": "Reference to the test case for efficient querying of dimensional time series",
+ "$ref": "../type/entityReference.json"
+ },
+ "timestamp": {
+ "description": "Timestamp when the dimensional test result was captured (same as parent TestCaseResult)",
+ "$ref": "../type/basic.json#/definitions/timestamp"
+ },
+ "dimensionValues": {
+ "description": "Array of dimension name-value pairs for this result (e.g., [{'name': 'region', 'value': 'mumbai'}, {'name': 'product', 'value': 'laptop'}])",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/dimensionValue"
+ }
+ },
+ "dimensionKey": {
+ "description": "Composite key for API filtering: 'region=mumbai' or 'region=mumbai,product=laptop'",
+ "type": "string"
+ },
+ "testCaseStatus": {
+ "description": "Status of the test for this dimension combination",
+ "$ref": "#/definitions/testCaseStatus"
+ },
+ "result": {
+ "description": "Details of test case results for this dimension combination",
+ "type": "string"
+ },
+ "testResultValue": {
+ "description": "Test result values for this dimension combination",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/testResultValue"
+ }
+ },
+ "passedRows": {
+ "description": "Number of rows that passed for this dimension combination",
+ "type": "integer"
+ },
+ "failedRows": {
+ "description": "Number of rows that failed for this dimension combination",
+ "type": "integer"
+ },
+ "passedRowsPercentage": {
+ "description": "Percentage of rows that passed for this dimension combination",
+ "type": "number"
+ },
+ "failedRowsPercentage": {
+ "description": "Percentage of rows that failed for this dimension combination",
+ "type": "number"
+ },
+ "impactScore": {
+ "description": "Impact score indicating the significance of this dimension for revealing data quality variations. Higher scores indicate dimensions with more significant quality issues considering both failure rate and data volume.",
+ "type": "number",
+ "minimum": 0,
+ "maximum": 1
+ }
+ },
+ "required": ["id", "testCaseResultId", "timestamp", "dimensionValues", "dimensionKey", "testCaseStatus"],
+ "additionalProperties": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/tests/customMetric.json b/openmetadata-spec/bin/src/main/resources/json/schema/tests/customMetric.json
new file mode 100644
index 000000000000..b35bb7fb94d8
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/tests/customMetric.json
@@ -0,0 +1,45 @@
+{
+ "$id": "https://open-metadata.org/schema/tests/customMetric.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CustomMetric",
+ "description": "Custom Metric definition that we will associate with a column.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.tests.CustomMetric",
+ "properties": {
+ "id": {
+ "description": "Unique identifier of this Custom Metric instance.",
+ "$ref": "../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name that identifies this Custom Metric.",
+ "$ref": "../type/basic.json#/definitions/entityName"
+ },
+ "description": {
+ "description": "Description of the Metric.",
+ "$ref": "../type/basic.json#/definitions/markdown"
+ },
+ "columnName": {
+ "description": "Name of the column in a table.",
+ "type": "string"
+ },
+ "expression": {
+ "description": "SQL expression to compute the Metric. It should return a single numerical value.",
+ "type": "string"
+ },
+ "owners": {
+ "description": "Owners of this Custom Metric.",
+ "$ref": "../type/entityReferenceList.json",
+ "default": null
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ }
+ },
+ "required": ["name", "expression"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/tests/dataQualityReport.json b/openmetadata-spec/bin/src/main/resources/json/schema/tests/dataQualityReport.json
new file mode 100644
index 000000000000..5f468a9f625e
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/tests/dataQualityReport.json
@@ -0,0 +1,54 @@
+{
+ "$id": "https://open-metadata.org/schema/tests/dataQualityReport.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DataQualityReport",
+ "description": "Data Quality report and aggregation model.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.tests.DataQualityReport",
+ "definitions": {
+ "dataQualityReportMetadata": {
+ "description": "Schema to capture data quality reports and aggregation data.",
+ "javaType": "org.openmetadata.schema.tests.type.DataQualityReportMetadata",
+ "type": "object",
+ "properties": {
+ "keys": {
+ "description": "Keys to identify the data quality report.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "dimensions": {
+ "description": "Dimensions to capture the data quality report.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "metrics": {
+ "description": "Metrics to capture the data quality report.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "properties": {
+ "metadata": {
+ "description": "Metadata for the data quality report.",
+ "$ref": "#/definitions/dataQualityReportMetadata"
+ },
+ "data": {
+ "description": "Data for the data quality report.",
+ "type": "array",
+ "items": {
+ "type": "object",
+ "additionalProperties": {"type": "string"}
+ }
+ }
+ },
+ "required": ["metadata", "data"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/tests/dimensionResult.json b/openmetadata-spec/bin/src/main/resources/json/schema/tests/dimensionResult.json
new file mode 100644
index 000000000000..2ccb2b10c99c
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/tests/dimensionResult.json
@@ -0,0 +1,55 @@
+{
+ "$id": "https://open-metadata.org/schema/tests/dimensionResult.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DimensionResult",
+ "description": "Test case result for a specific combination of dimension values",
+ "javaType": "org.openmetadata.schema.tests.type.DimensionResult",
+ "type": "object",
+ "properties": {
+ "dimensionValues": {
+ "description": "Array of dimension name-value pairs for this result (e.g., [{'name': 'region', 'value': 'mumbai'}, {'name': 'product', 'value': 'laptop'}])",
+ "type": "array",
+ "items": {
+ "$ref": "basic.json#/definitions/dimensionValue"
+ }
+ },
+ "testCaseStatus": {
+ "description": "Status of the test for this dimension combination",
+ "$ref": "basic.json#/definitions/testCaseStatus"
+ },
+ "result": {
+ "description": "Details of test case results for this dimension combination",
+ "type": "string"
+ },
+ "testResultValue": {
+ "type": "array",
+ "items": {
+ "$ref": "basic.json#/definitions/testResultValue"
+ }
+ },
+ "passedRows": {
+ "description": "Number of rows that passed for this dimension",
+ "type": "integer"
+ },
+ "failedRows": {
+ "description": "Number of rows that failed for this dimension",
+ "type": "integer"
+ },
+ "passedRowsPercentage": {
+ "description": "Percentage of rows that passed for this dimension",
+ "type": "number"
+ },
+ "failedRowsPercentage": {
+ "description": "Percentage of rows that failed for this dimension",
+ "type": "number"
+ },
+ "impactScore": {
+ "description": "Impact score indicating the significance of this dimension for revealing data quality variations. Higher scores indicate dimensions with more variance in test results.",
+ "type": "number",
+ "minimum": 0,
+ "maximum": 1
+ }
+ },
+ "required": ["dimensionValues", "testCaseStatus"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/tests/resolved.json b/openmetadata-spec/bin/src/main/resources/json/schema/tests/resolved.json
new file mode 100644
index 000000000000..d15b6a1c9da2
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/tests/resolved.json
@@ -0,0 +1,39 @@
+{
+ "$id": "https://open-metadata.org/schema/tests/resolved.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Resolved",
+ "description": "test case failure details for resolved failures",
+ "javaType": "org.openmetadata.schema.tests.type.Resolved",
+ "type": "object",
+ "definitions": {
+ "testCaseFailureReasonType": {
+ "description": "Reason of Test Case initial failure.",
+ "javaType": "org.openmetadata.schema.tests.type.TestCaseFailureReasonType",
+ "type": "string",
+ "enum": ["FalsePositive", "MissingData", "Duplicates", "OutOfBounds", "Other"],
+ "javaEnums": [
+ {"name": "FalsePositive"},
+ {"name": "MissingData"},
+ {"name": "Duplicates"},
+ {"name": "OutOfBounds"},
+ {"name": "Other"}
+ ]
+ }
+ },
+ "properties": {
+ "testCaseFailureReason": {
+ "description": "Reason of Test Case resolution.",
+ "$ref": "#/definitions/testCaseFailureReasonType"
+ },
+ "testCaseFailureComment": {
+ "description": "Test case failure resolution comment.",
+ "type": "string"
+ },
+ "resolvedBy": {
+ "description": "User who resolved the test case failure.",
+ "$ref": "../type/entityReference.json"
+ }
+ },
+ "required": ["testCaseFailureReason", "testCaseFailureComment"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/tests/testCase.json b/openmetadata-spec/bin/src/main/resources/json/schema/tests/testCase.json
new file mode 100644
index 000000000000..8a37a3311e4d
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/tests/testCase.json
@@ -0,0 +1,196 @@
+{
+ "$id": "https://open-metadata.org/schema/tests/testCase.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "TestCase",
+ "description": "Test case is a test definition to capture data quality tests against tables, columns, and other data assets.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.tests.TestCase",
+ "javaInterfaces": ["org.openmetadata.schema.EntityInterface"],
+ "definitions": {
+ "testCaseParameterValue": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.tests.TestCaseParameterValue",
+ "description": "This schema defines the parameter values that can be passed for a Test Case.",
+ "properties": {
+ "name": {
+ "description": "name of the parameter. Must match the parameter names in testCaseParameterDefinition",
+ "type": "string"
+ },
+ "value": {
+ "description": "value to be passed for the Parameters. These are input from Users. We capture this in string and convert during the runtime.",
+ "type": "string"
+ }
+ }
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier of this table instance.",
+ "$ref": "../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name that identifies this test case.",
+ "$ref": "../type/basic.json#/definitions/testCaseEntityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this test.",
+ "type": "string"
+ },
+ "fullyQualifiedName": {
+ "description": "FullyQualifiedName same as `name`.",
+ "$ref": "../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "description": {
+ "description": "Description of the testcase.",
+ "$ref": "../type/basic.json#/definitions/markdown"
+ },
+ "testDefinition": {
+ "description": "Test definition that this test case is based on.",
+ "$ref": "../type/entityReference.json"
+ },
+ "entityLink": {
+ "description": "Link to the entity that this test case is testing.",
+ "$ref": "../type/basic.json#/definitions/entityLink"
+ },
+ "entityFQN": {
+ "type": "string"
+ },
+ "testSuite": {
+ "description": "Basic Test Suite that this test case belongs to.",
+ "$ref": "../type/entityReference.json"
+ },
+ "testSuites": {
+ "type": "array",
+ "description": "Basic and Logical Test Suites this test case belongs to",
+ "items": {
+ "$ref": "./testSuite.json"
+ }
+ },
+ "parameterValues": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/testCaseParameterValue"
+ }
+ },
+ "testCaseResult": {
+ "description": "Latest test case result obtained for this test case.",
+ "$ref": "./basic.json#/definitions/testCaseResult"
+ },
+ "testCaseStatus": {
+ "description": "Status of Test Case run.",
+ "$ref": "./basic.json#/definitions/testCaseStatus"
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "owners": {
+ "description": "Owners of this Pipeline.",
+ "$ref": "../type/entityReferenceList.json",
+ "default": null
+ },
+ "createdBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this entity.",
+ "$ref": "../type/basic.json#/definitions/href"
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "computePassedFailedRowCount": {
+ "description": "Compute the passed and failed row count for the test case.",
+ "type": "boolean",
+ "default": false
+ },
+ "autoCloseIncident": {
+ "description": "Automatically resolve an open incident when a subsequent test result succeeds.",
+ "type": "boolean",
+ "default": false
+ },
+ "incidentId": {
+ "description": "Reference to an ongoing Incident ID (stateId) for this test case.",
+ "$ref": "../type/basic.json#/definitions/uuid"
+ },
+ "failedRowsSample": {
+ "description": "Sample of failed rows for this test case.",
+ "$ref": "../entity/data/table.json#/definitions/tableData"
+ },
+ "inspectionQuery": {
+ "description": "SQL query to retrieve the failed rows for this test case.",
+ "$ref": "../type/basic.json#/definitions/sqlQuery"
+ },
+ "domains" : {
+ "description": "Domains the test case belongs to. When not set, the test case inherits the domain from the table it belongs to.",
+ "$ref": "../type/entityReferenceList.json"
+ },
+ "dataProducts": {
+ "description": "List of data products this test case is part of. When not set, the test case inherits the data products from the table it belongs to.",
+ "$ref": "../type/entityReferenceList.json"
+ },
+ "followers": {
+ "description": "Followers of this test case. When not set, the test case inherits the followers from the table it belongs to.",
+ "$ref": "../type/entityReferenceList.json"
+ },
+ "useDynamicAssertion": {
+ "description": "If the test definition supports it, use dynamic assertion to evaluate the test case.",
+ "type": "boolean",
+ "default": false
+ },
+ "tags": {
+ "description": "Tags for this test case. This is an inherited field from the parent entity and is not set directly on the test case.",
+ "type": "array",
+ "items": {
+ "$ref": "../type/tagLabel.json"
+ },
+ "default": []
+ },
+ "dimensionColumns": {
+ "description": "List of columns to group test results by dimensions. When specified, the test will be executed both overall and grouped by these columns to provide fine-grained data quality insights.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "default": []
+ },
+ "topDimensions": {
+ "description": "Number of top dimension values to show before grouping the rest as Others. Controls the cardinality of dimensional test results. Defaults to 5 when not specified.",
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 50,
+ "default": 5
+ },
+ "entityStatus": {
+ "description": "Current status of the test case.",
+ "$ref": "../type/status.json",
+ "default": "Approved"
+ },
+ "reviewers": {
+ "description": "List of reviewers for this entity.",
+ "$ref": "../type/entityReferenceList.json",
+ "default": null
+ }
+ },
+ "required": ["name", "testDefinition", "entityLink", "testSuite"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/tests/testCaseResolutionStatus.json b/openmetadata-spec/bin/src/main/resources/json/schema/tests/testCaseResolutionStatus.json
new file mode 100644
index 000000000000..e3e929861f41
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/tests/testCaseResolutionStatus.json
@@ -0,0 +1,102 @@
+{
+ "$id": "https://open-metadata.org/schema/tests/testCaseResolutionStatus.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "TestCaseResolutionStatus",
+ "description": "Schema to capture test case resolution status.",
+ "javaType": "org.openmetadata.schema.tests.type.TestCaseResolutionStatus",
+ "javaInterfaces": ["org.openmetadata.schema.EntityTimeSeriesInterface"],
+ "type": "object",
+ "definitions": {
+ "testCaseResolutionStatusTypes": {
+ "description": "Test case resolution status type.",
+ "javaType": "org.openmetadata.schema.tests.type.TestCaseResolutionStatusTypes",
+ "type": "string",
+ "enum": ["New","Ack", "Assigned", "Resolved"],
+ "javaEnums": [
+ {"name": "New"},
+ {"name": "Ack"},
+ {"name": "Assigned"},
+ {"name": "Resolved"}
+ ]
+ },
+ "severities": {
+ "description": "Test case resolution status type.",
+ "javaType": "org.openmetadata.schema.tests.type.Severity",
+ "type": "string",
+ "enum": ["Severity1", "Severity2", "Severity3", "Severity4", "Severity5"],
+ "javaEnums": [
+ {"name": "Severity1"},
+ {"name": "Severity2"},
+ {"name": "Severity3"},
+ {"name": "Severity4"},
+ {"name": "Severity5"}
+ ]
+ },
+ "metric": {
+ "description": "Representation of a metric.",
+ "javaType": "org.openmetadata.schema.tests.type.Metric",
+ "properties": {
+ "name": {
+ "description": "Name of the metric.",
+ "type": "string"
+ },
+ "value": {
+ "description": "Value of the metric.",
+ "type": "number"
+ }
+ }
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier of this failure instance",
+ "$ref": "../type/basic.json#/definitions/uuid"
+ },
+ "stateId": {
+ "description": "Sequence ID for a failure status. Statuses belonging to the same sequence will have the same ID. Unique across a failure cycle, i.e. new -> ack -> ... -> resolved.",
+ "$ref": "../type/basic.json#/definitions/uuid"
+ },
+ "timestamp": {
+ "description": "Timestamp on which the failure was created.",
+ "$ref": "../type/basic.json#/definitions/timestamp"
+ },
+ "testCaseResolutionStatusType": {
+ "description": "Status of Test Case Acknowledgement.",
+ "$ref": "#/definitions/testCaseResolutionStatusTypes"
+ },
+ "testCaseResolutionStatusDetails": {
+ "description": "Details of the test case failure status.",
+ "oneOf": [
+ {"$ref": "./assigned.json"},
+ {"$ref": "./resolved.json"}
+ ],
+ "default": null
+ },
+ "updatedBy": {
+ "description": "User who updated the test case failure status.",
+ "$ref": "../type/entityReference.json",
+ "default": null
+ },
+ "updatedAt": {
+ "description": "Time when test case resolution was updated.",
+ "$ref": "../type/basic.json#/definitions/timestamp"
+ },
+ "testCaseReference": {
+ "description": "Test case reference",
+ "$ref": "../type/entityReference.json"
+ },
+ "severity": {
+ "description": "Severity failure for the test associated with the resolution.",
+ "$ref": "#/definitions/severities"
+ },
+ "metrics": {
+ "description": "List of metrics associated with the test case resolution.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/metric"
+ }
+ }
+ },
+ "required": ["testCaseResolutionStatusType"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/tests/testDefinition.json b/openmetadata-spec/bin/src/main/resources/json/schema/tests/testDefinition.json
new file mode 100644
index 000000000000..3de410195aaf
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/tests/testDefinition.json
@@ -0,0 +1,244 @@
+{
+ "$id": "https://open-metadata.org/schema/tests/testDefinition.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "TestDefinition",
+ "description": "Test Definition is a type of test using which test cases are created to capture data quality tests against data entities.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.tests.TestDefinition",
+ "javaInterfaces": ["org.openmetadata.schema.EntityInterface"],
+ "definitions": {
+ "testPlatform": {
+ "javaType": "org.openmetadata.schema.tests.TestPlatform",
+ "description": "This schema defines the platform where tests are defined and ran.",
+ "type": "string",
+ "enum": [
+ "OpenMetadata",
+ "GreatExpectations",
+ "dbt",
+ "Deequ",
+ "Soda",
+ "Other"
+ ]
+ },
+ "testDataType": {
+ "javaType": "org.openmetadata.schema.type.TestCaseParameterDataType",
+ "description": "This enum defines the type of data stored in a column.",
+ "type": "string",
+ "enum": [
+ "NUMBER",
+ "INT",
+ "FLOAT",
+ "DOUBLE",
+ "DECIMAL",
+ "TIMESTAMP",
+ "TIME",
+ "DATE",
+ "DATETIME",
+ "ARRAY",
+ "MAP",
+ "SET",
+ "STRING",
+ "BOOLEAN"
+ ]
+ },
+ "entityType": {
+ "javaType": "org.openmetadata.schema.type.TestDefinitionEntityType",
+ "description": "This enum defines the type for which this test definition applies to.",
+ "type": "string",
+ "enum": [
+ "TABLE",
+ "COLUMN"
+ ]
+ },
+ "testCaseParameterDefinition": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.tests.TestCaseParameter",
+ "description": "This schema defines the parameters that can be passed for a Test Case.",
+ "properties": {
+ "name": {
+ "description": "name of the parameter.",
+ "type": "string"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this parameter name.",
+ "type": "string"
+ },
+ "dataType": {
+ "description": "Data type of the parameter (int, date etc.).",
+ "$ref": "#/definitions/testDataType"
+ },
+ "description": {
+ "description": "Description of the parameter.",
+ "$ref": "../type/basic.json#/definitions/markdown"
+ },
+ "required": {
+ "description": "Is this parameter required.",
+ "type": "boolean",
+ "default": false
+ },
+ "optionValues": {
+ "description": "List of values that can be passed for this parameter.",
+ "type": "array",
+ "default": []
+ },
+ "validationRule": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.tests.TestCaseParameterValidationRule",
+ "description": "Validation for the test parameter value.",
+ "properties": {
+ "parameterField": {
+ "description": "Name of the parameter to validate against.",
+ "type": "string"
+ },
+ "rule": {
+ "javaType": "org.openmetadata.schema.type.TestCaseParameterValidationRuleType",
+ "description": "This enum defines the type to use for a parameter validation rule.",
+ "type": "string",
+ "enum": [
+ "EQUALS",
+ "NOT_EQUALS",
+ "GREATER_THAN_OR_EQUALS",
+ "LESS_THAN_OR_EQUALS"
+ ]
+ }
+ }
+ }
+ }
+ },
+ "dataQualityDimensions": {
+ "javaType": "org.openmetadata.schema.type.DataQualityDimensions",
+ "description": "This enum defines the dimension a test case belongs to.",
+ "type": "string",
+ "enum": [
+ "Completeness",
+ "Accuracy",
+ "Consistency",
+ "Validity",
+ "Uniqueness",
+ "Integrity",
+ "SQL",
+ "NoDimension"
+ ]
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier of this test case definition instance.",
+ "$ref": "../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name that identifies this test case.",
+ "$ref": "../type/basic.json#/definitions/testCaseEntityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this test case.",
+ "type": "string"
+ },
+ "fullyQualifiedName": {
+ "description": "FullyQualifiedName same as `name`.",
+ "$ref": "../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "description": {
+ "description": "Description of the testcase.",
+ "$ref": "../type/basic.json#/definitions/markdown"
+ },
+ "entityType": {
+ "$ref": "#/definitions/entityType"
+ },
+ "testPlatforms": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/testPlatform"
+ }
+ },
+ "supportedDataTypes": {
+ "type": "array",
+ "items": {
+ "$ref": "../entity/data/table.json#/definitions/dataType"
+ }
+ },
+ "parameterDefinition": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/testCaseParameterDefinition"
+ }
+ },
+ "dataQualityDimension": {
+ "$ref": "#/definitions/dataQualityDimensions"
+ },
+ "owners": {
+ "description": "Owners of this TestCase definition.",
+ "$ref": "../type/entityReferenceList.json",
+ "default": null
+ },
+ "provider" : {
+ "$ref": "../type/basic.json#/definitions/providerType"
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this entity.",
+ "$ref": "../type/basic.json#/definitions/href"
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "supportsRowLevelPassedFailed": {
+ "description": "When `true` indicates the test case supports row level passed/failed.",
+ "type": "boolean",
+ "default": false
+ },
+ "domains" : {
+ "description": "Domains the asset belongs to. When not set, the asset inherits the domain from the parent it belongs to.",
+ "$ref": "../type/entityReferenceList.json"
+ },
+ "supportsDynamicAssertion": {
+ "description": "When `true` indicates the test case supports dynamic assertions.",
+ "type": "boolean",
+ "default": false
+ },
+ "enabled": {
+ "description": "When `true` indicates the test definition is available for creating test cases. System test definitions can only be disabled by users with appropriate permissions.",
+ "type": "boolean",
+ "default": true
+ },
+ "supportedServices": {
+ "description": "List of services that this test definition supports. When empty, it implies all services are supported.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "default": []
+ },
+ "sqlExpression": {
+ "description": "SQL expression template for custom SQL-based test definitions. Supports substitution variables: {table} and {column} for runtime entity references, and {{paramName}} for user-defined parameters. This field is only applicable for test definitions with testPlatforms set to 'OpenMetadata' and is used to execute custom SQL queries for data quality validation.",
+ "$ref": "../type/basic.json#/definitions/sqlQuery"
+ },
+ "validatorClass": {
+ "description": "Class name of the validator to use for this test definition. This field is used to map the test definition to its corresponding validation logic in the data quality framework.",
+ "type": "string"
+ }
+ },
+ "required": ["name", "testPlatforms"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/tests/testSuite.json b/openmetadata-spec/bin/src/main/resources/json/schema/tests/testSuite.json
new file mode 100644
index 000000000000..4c2c520c9a6e
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/tests/testSuite.json
@@ -0,0 +1,193 @@
+{
+ "$id": "https://open-metadata.org/schema/tests/testSuite.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "TestSuite",
+ "description": "TestSuite is a set of test cases grouped together to capture data quality tests against data entities.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.tests.TestSuite",
+ "javaInterfaces": [
+ "org.openmetadata.schema.ServiceEntityInterface"
+ ],
+ "definitions": {
+ "testSuiteConnection": {
+ "type": "object",
+ "javaInterfaces": [
+ "org.openmetadata.schema.ServiceConnectionEntityInterface"
+ ],
+ "properties": {
+ "config": {
+ "type": "null"
+ }
+ },
+ "resultSummary": {
+ "javaType": "org.openmetadata.schema.tests.ResultSummary",
+ "properties": {
+ "testCaseName": {
+ "description": "Name of the test case.",
+ "$ref": "../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "status": {
+ "description": "Status of the test case.",
+ "$ref": "./basic.json#/definitions/testCaseStatus"
+ },
+ "timestamp": {
+ "description": "Timestamp of the test case execution.",
+ "$ref": "../type/basic.json#/definitions/timestamp"
+ }
+ }
+ }
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier of this test suite instance.",
+ "$ref": "../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name that identifies this test suite.",
+ "$ref": "../api/tests/createTestSuite.json#/definitions/testSuiteEntityName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this test suite.",
+ "type": "string"
+ },
+ "fullyQualifiedName": {
+ "description": "FullyQualifiedName same as `name`.",
+ "$ref": "../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "description": {
+ "description": "Description of the test suite.",
+ "$ref": "../type/basic.json#/definitions/markdown"
+ },
+ "tests": {
+ "type": "array",
+ "items": {
+ "$ref": "../type/entityReference.json"
+ },
+ "default": null
+ },
+ "connection": {
+ "description": "TestSuite mock connection, since it needs to implement a Service.",
+ "$ref": "#/definitions/testSuiteConnection"
+ },
+ "testConnectionResult": {
+ "description": "Result of the test connection.",
+ "$ref": "../entity/services/connections/testConnectionResult.json"
+ },
+ "pipelines": {
+ "description": "References to pipelines deployed for this Test Suite to execute the tests.",
+ "$ref": "../type/entityReferenceList.json",
+ "default": null
+ },
+ "serviceType": {
+ "description": "Type of database service such as MySQL, BigQuery, Snowflake, Redshift, Postgres...",
+ "javaInterfaces": [
+ "org.openmetadata.schema.EnumInterface"
+ ],
+ "type": "string",
+ "enum": [
+ "TestSuite"
+ ],
+ "default": "TestSuite"
+ },
+ "owners": {
+ "description": "Owners of this TestCase definition.",
+ "$ref": "../type/entityReferenceList.json",
+ "default": null
+ },
+ "version": {
+ "description": "Metadata version of the entity.",
+ "$ref": "../type/entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "href": {
+ "description": "Link to the resource corresponding to this entity.",
+ "$ref": "../type/basic.json#/definitions/href"
+ },
+ "changeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "deleted": {
+ "description": "When `true` indicates the entity has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ },
+ "basic": {
+ "description": "Indicates if the test suite is basic, i.e., the parent suite of a test and linked to an entity. Set on the backend.",
+ "type": "boolean",
+ "default": false
+ },
+ "executable": {
+ "description": "DEPRECATED in 1.6.2: Use 'basic'",
+ "type": "boolean",
+ "deprecated": true
+ },
+ "basicEntityReference": {
+ "description": "Entity reference the test suite needs to execute the test against. Only applicable if the test suite is basic.",
+ "$ref": "../type/entityReference.json"
+ },
+ "executableEntityReference": {
+ "description": "DEPRECATED in 1.6.2: Use 'basicEntityReference'.",
+ "$ref": "../type/entityReference.json",
+ "deprecated": true
+ },
+ "dataContract": {
+ "description": "Reference to the data contract that this test suite is associated with.",
+ "$ref": "../type/entityReference.json",
+ "default": null
+ },
+ "summary": {
+ "description": "Summary of the previous day test cases execution for this test suite.",
+ "$ref": "./basic.json#/definitions/testSummary"
+ },
+ "testCaseResultSummary": {
+ "description": "Summary of test case execution",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/testSuiteConnection/resultSummary"
+ }
+ },
+ "domains": {
+ "description": "Domains the test Suite belongs to. When not set, the test Suite inherits the domain from the table it belongs to.",
+ "$ref": "../type/entityReferenceList.json"
+ },
+ "tags": {
+ "description": "Tags for this test suite. This is an inherited field from the parent entity if the testSuite is native.",
+ "type": "array",
+ "items": {
+ "$ref": "../type/tagLabel.json"
+ },
+ "default": []
+ },
+ "inherited": {
+ "description": "Indicates if the test suite is inherited from a parent entity.",
+ "type": "boolean",
+ "default": false
+ },
+ "ingestionRunner": {
+ "description": "Link to the ingestion pipeline that ingested this entity.",
+ "$ref": "../type/entityReference.json"
+ },
+ "reviewers": {
+ "description": "List of reviewers for this entity.",
+ "$ref": "../type/entityReferenceList.json",
+ "default": null
+ }
+ },
+ "required": [
+ "name"
+ ],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/aiCompliance.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/aiCompliance.json
new file mode 100644
index 000000000000..d2f7ebe59a75
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/aiCompliance.json
@@ -0,0 +1,332 @@
+{
+ "$id": "https://open-metadata.org/schema/type/aiCompliance.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AICompliance",
+ "description": "Reusable AI compliance and regulatory framework assessments. Can be applied to AI Applications, LLM Models, MCP Servers, and other AI entities.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.AICompliance",
+ "definitions": {
+ "complianceFramework": {
+ "type": "string",
+ "javaType": "org.openmetadata.schema.type.ComplianceFramework",
+ "description": "Type of AI compliance framework",
+ "enum": [
+ "EU_AI_Act",
+ "Singapore_Model_AI_Governance",
+ "Canada_AIDA",
+ "US_AI_Bill_of_Rights",
+ "NIST_AI_RMF",
+ "ISO_IEC_42001",
+ "UK_AI_Regulation",
+ "China_AI_Regulations",
+ "Custom"
+ ],
+ "javaEnums": [
+ {"name": "EU_AI_Act"},
+ {"name": "Singapore_Model_AI_Governance"},
+ {"name": "Canada_AIDA"},
+ {"name": "US_AI_Bill_of_Rights"},
+ {"name": "NIST_AI_RMF"},
+ {"name": "ISO_IEC_42001"},
+ {"name": "UK_AI_Regulation"},
+ {"name": "China_AI_Regulations"},
+ {"name": "Custom"}
+ ]
+ },
+ "euAIActCompliance": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.EUAIActCompliance",
+ "description": "EU AI Act compliance assessment (Regulation EU 2024/1689)",
+ "additionalProperties": false,
+ "properties": {
+ "riskClassification": {
+ "type": "string",
+ "description": "Risk classification under EU AI Act",
+ "enum": ["Minimal", "Limited", "High", "Unacceptable"]
+ },
+ "riskRationale": {
+ "type": "string",
+ "description": "Rationale for the risk classification"
+ },
+ "prohibitedPractices": {
+ "type": "object",
+ "description": "Article 5 prohibited AI practices assessment",
+ "properties": {
+ "subliminalManipulativeTechniques": {
+ "type": "boolean",
+ "description": "Art 5(1)(a): Subliminal techniques beyond person's consciousness"
+ },
+ "exploitationOfVulnerabilities": {
+ "type": "boolean",
+ "description": "Art 5(1)(b): Exploitation of vulnerabilities due to age, disability, or social/economic situation"
+ },
+ "socialScoringSystem": {
+ "type": "boolean",
+ "description": "Art 5(1)(c): Social scoring by public authorities"
+ },
+ "riskAssessmentCriminalOffences": {
+ "type": "boolean",
+ "description": "Art 5(1)(d): Risk assessment based solely on profiling for predicting criminal offences"
+ },
+ "facialRecognitionDatabaseCreation": {
+ "type": "boolean",
+ "description": "Art 5(1)(e): Untargeted scraping of facial images for facial recognition databases"
+ },
+ "emotionInferenceWorkplaceEducation": {
+ "type": "boolean",
+ "description": "Art 5(1)(f): Emotion recognition in workplace and education"
+ },
+ "biometricCategorisation": {
+ "type": "boolean",
+ "description": "Art 5(1)(g): Biometric categorisation inferring sensitive attributes"
+ },
+ "realTimeBiometricIdentification": {
+ "type": "boolean",
+ "description": "Art 5(1)(h): Real-time remote biometric identification in public spaces by law enforcement"
+ }
+ }
+ },
+ "highRiskSystems": {
+ "type": "object",
+ "description": "Article 6 high-risk AI systems assessment",
+ "properties": {
+ "criticalInfrastructure": {
+ "type": "boolean",
+ "description": "Annex III(1): Critical infrastructure (transport, water, gas, electricity, etc.)"
+ },
+ "educationVocationalTraining": {
+ "type": "boolean",
+ "description": "Annex III(3): Education and vocational training"
+ },
+ "employment": {
+ "type": "boolean",
+ "description": "Annex III(4): Employment, workers management, and access to self-employment"
+ },
+ "essentialPrivateServices": {
+ "type": "boolean",
+ "description": "Annex III(5): Access to essential private services (credit, insurance, etc.)"
+ },
+ "essentialPublicServices": {
+ "type": "boolean",
+ "description": "Annex III(6): Law enforcement"
+ },
+ "lawEnforcement": {
+ "type": "boolean",
+ "description": "Annex III(6): Law enforcement purposes"
+ },
+ "migrationAsylumBorderControl": {
+ "type": "boolean",
+ "description": "Annex III(7): Migration, asylum, and border control management"
+ },
+ "administrationOfJustice": {
+ "type": "boolean",
+ "description": "Annex III(8): Administration of justice and democratic processes"
+ }
+ }
+ },
+ "conformityAssessment": {
+ "type": "object",
+ "description": "Conformity assessment status",
+ "properties": {
+ "assessmentRequired": {
+ "type": "boolean",
+ "description": "Whether conformity assessment is required"
+ },
+ "assessmentType": {
+ "type": "string",
+ "description": "Type of conformity assessment",
+ "enum": ["Internal", "ThirdParty", "NotRequired"]
+ },
+ "assessmentBody": {
+ "type": "string",
+ "description": "Name of notified body performing assessment"
+ },
+ "certificateNumber": {
+ "type": "string",
+ "description": "Certificate number if issued"
+ },
+ "validUntil": {
+ "$ref": "basic.json#/definitions/timestamp",
+ "description": "Certificate validity date"
+ }
+ }
+ },
+ "transparencyObligations": {
+ "type": "object",
+ "description": "Article 50 transparency obligations",
+ "properties": {
+ "usersInformed": {
+ "type": "boolean",
+ "description": "Users are informed they are interacting with AI"
+ },
+ "deepfakeLabeling": {
+ "type": "boolean",
+ "description": "AI-generated content is appropriately labeled"
+ },
+ "emotionRecognitionDisclosure": {
+ "type": "boolean",
+ "description": "Emotion recognition or biometric categorization disclosed"
+ }
+ }
+ }
+ }
+ },
+ "ethicalAIAssessment": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.EthicalAIAssessment",
+ "description": "Ethical AI framework assessment covering privacy, fairness, transparency, accountability, and environmental impact",
+ "additionalProperties": false,
+ "properties": {
+ "privacyLevel": {
+ "type": "string",
+ "description": "Level of privacy-sensitive data accessed",
+ "enum": ["Public", "Sensitive", "PersonalData"]
+ },
+ "fairnessRisk": {
+ "type": "string",
+ "description": "Risk level for fairness and discrimination",
+ "enum": ["Low", "Medium", "High"]
+ },
+ "biasMitigationCoverage": {
+ "type": "string",
+ "description": "Coverage of bias mitigation measures",
+ "enum": ["None", "Partial", "Full"]
+ },
+ "reliabilitySafetyRisk": {
+ "type": "string",
+ "description": "Risk level for reliability and safety",
+ "enum": ["Low", "Moderate", "High"]
+ },
+ "transparencyLevel": {
+ "type": "string",
+ "description": "Level of transparency in AI operations",
+ "enum": ["None", "Partial", "FullDisclosure"]
+ },
+ "accountabilityMeasures": {
+ "type": "object",
+ "description": "Accountability measures in place",
+ "properties": {
+ "hasOwner": {
+ "type": "boolean",
+ "description": "Has designated owner responsible for AI system"
+ },
+ "subjectToHumanOversight": {
+ "type": "boolean",
+ "description": "Subject to human oversight and intervention"
+ },
+ "auditTrailEnabled": {
+ "type": "boolean",
+ "description": "Comprehensive audit trail enabled"
+ }
+ }
+ },
+ "environmentalConsciousness": {
+ "type": "string",
+ "description": "Environmental impact risk level (carbon footprint, energy consumption)",
+ "enum": ["LowRisk", "MediumRisk", "HighRisk"]
+ }
+ }
+ },
+ "aiComplianceRecord": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.AIComplianceRecord",
+ "description": "Single compliance record for a specific framework",
+ "additionalProperties": false,
+ "properties": {
+ "framework": {
+ "$ref": "#/definitions/complianceFramework"
+ },
+ "assessedBy": {
+ "type": "string",
+ "description": "Person or team who performed the assessment"
+ },
+ "assessedAt": {
+ "$ref": "basic.json#/definitions/timestamp",
+ "description": "When the assessment was performed"
+ },
+ "nextReviewDate": {
+ "$ref": "basic.json#/definitions/timestamp",
+ "description": "When the next compliance review is due"
+ },
+ "status": {
+ "type": "string",
+ "description": "Compliance status",
+ "enum": ["Compliant", "PartiallyCompliant", "NonCompliant", "UnderReview", "NotApplicable"]
+ },
+ "euAIAct": {
+ "$ref": "#/definitions/euAIActCompliance",
+ "description": "EU AI Act specific assessment (only when framework is EU_AI_Act)"
+ },
+ "ethicalAssessment": {
+ "$ref": "#/definitions/ethicalAIAssessment",
+ "description": "Ethical AI assessment applicable to most frameworks"
+ },
+ "scopeAndDeployment": {
+ "type": "object",
+ "description": "Deployment scope relevant to compliance jurisdiction",
+ "properties": {
+ "scope": {
+ "type": "string",
+ "description": "Scope of AI usage",
+ "enum": ["Internal", "External", "Both"]
+ },
+ "deploymentRegions": {
+ "type": "array",
+ "description": "Geographic regions where deployed (relevant for jurisdiction)",
+ "items": {"type": "string"}
+ },
+ "affectedUserCount": {
+ "type": "integer",
+ "description": "Estimated number of affected users"
+ }
+ }
+ },
+ "verification": {
+ "type": "object",
+ "description": "Verification and certification status",
+ "properties": {
+ "isVerified": {
+ "type": "boolean",
+ "description": "Whether compliance has been verified"
+ },
+ "verifiedBy": {
+ "type": "string",
+ "description": "Verifier (internal auditor, external body, etc.)"
+ },
+ "verifiedAt": {
+ "$ref": "basic.json#/definitions/timestamp",
+ "description": "Timestamp of verification"
+ },
+ "verificationNotes": {
+ "type": "string",
+ "description": "Notes from verification process"
+ },
+ "certificateUrl": {
+ "type": "string",
+ "description": "URL to certificate or compliance documentation"
+ }
+ }
+ },
+ "notes": {
+ "type": "string",
+ "description": "Additional notes and findings from compliance assessment"
+ },
+ "remediationRequired": {
+ "type": "array",
+ "description": "List of remediation actions required for compliance",
+ "items": {"type": "string"}
+ }
+ },
+ "required": ["framework", "status"]
+ }
+ },
+ "properties": {
+ "complianceRecords": {
+ "description": "List of compliance assessments for different frameworks",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/aiComplianceRecord"
+ }
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/apiSchema.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/apiSchema.json
new file mode 100644
index 000000000000..58ee920b14e9
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/apiSchema.json
@@ -0,0 +1,24 @@
+{
+ "$id": "https://open-metadata.org/schema/type/apiSchema.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "APISchema",
+ "$comment": "@om-entity-type",
+ "description": "This schema defines the API Endpoint entity's request/response schema.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.APISchema",
+ "properties": {
+ "schemaType": {
+ "description": "Schema used for message serialization.",
+ "$ref": "schema.json#/definitions/schemaType",
+ "default": "JSON"
+ },
+ "schemaFields": {
+ "description": "Columns in this schema.",
+ "type": "array",
+ "items": {
+ "$ref": "schema.json#/definitions/field"
+ },
+ "default": []
+ }
+ }
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/assetCertification.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/assetCertification.json
new file mode 100644
index 000000000000..a35020503750
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/assetCertification.json
@@ -0,0 +1,22 @@
+{ "$id": "https://open-metadata.org/schema/type/assetCertification.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AssetCertification",
+ "description": "Defines the Asset Certification schema.",
+ "javaType": "org.openmetadata.schema.type.AssetCertification",
+ "type": "object",
+ "properties": {
+ "tagLabel": {
+ "$ref": "./tagLabel.json"
+ },
+ "appliedDate": {
+ "description": "The date when the certification was applied.",
+ "$ref": "basic.json#/definitions/timestamp"
+ },
+ "expiryDate": {
+ "description": "The date when the certification expires.",
+ "$ref": "basic.json#/definitions/timestamp"
+ }
+ },
+ "required": ["tagLabel", "appliedDate", "expiryDate"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/auditLog.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/auditLog.json
new file mode 100644
index 000000000000..ec4a5ad3dc65
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/auditLog.json
@@ -0,0 +1,48 @@
+{
+ "$id": "https://open-metadata.org/schema/type/auditLog.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "AuditLog",
+ "description": "This schema defines the Audit Log type to capture the audit trail of POST, PUT, and PATCH API operations.",
+ "type": "object",
+
+ "properties": {
+ "method": {
+ "description": "HTTP Method used in a call.",
+ "type": "string",
+ "enum": ["POST", "PUT", "PATCH", "DELETE"]
+ },
+ "responseCode": {
+ "description": "HTTP response code for the api requested.",
+ "type": "integer"
+ },
+ "path": {
+ "description": "Requested API Path.",
+ "type": "string"
+ },
+ "userName": {
+ "description": "Name of the user who made the API request.",
+ "type": "string"
+ },
+ "entityId": {
+ "description": "Identifier of entity that was modified by the operation.",
+ "$ref": "basic.json#/definitions/uuid"
+ },
+ "entityType": {
+ "description": "Type of Entity that is modified by the operation.",
+ "type": "string"
+ },
+ "timestamp": {
+ "description": "Timestamp when the API call is made in Unix epoch time milliseconds in Unix epoch time milliseconds.",
+ "$ref": "basic.json#/definitions/timestamp"
+ }
+ },
+ "required": [
+ "method",
+ "responseCode",
+ "path",
+ "userName",
+ "entityId",
+ "entityType"
+ ],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/basic.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/basic.json
new file mode 100644
index 000000000000..37b6e0aa8f8f
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/basic.json
@@ -0,0 +1,313 @@
+{
+ "$id": "https://open-metadata.org/schema/type/basic.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Basic",
+ "description": "This schema defines basic common types that are used by other schemas.",
+ "definitions": {
+ "integer" : {
+ "$comment" : "@om-field-type",
+ "description": "An integer type.",
+ "type" : "integer"
+ },
+ "number" : {
+ "$comment" : "@om-field-type",
+ "description": "A numeric type that includes integer or floating point numbers.",
+ "type" : "number"
+ },
+ "string" : {
+ "$comment" : "@om-field-type",
+ "description": "A String type.",
+ "type" : "string"
+ },
+ "uuid": {
+ "description": "Unique id used to identify an entity.",
+ "type": "string",
+ "format": "uuid"
+ },
+ "email": {
+ "$comment" : "@om-field-type",
+ "description": "Email address of a user or other entities.",
+ "type": "string",
+ "format": "email",
+ "pattern": "^[\\S.!#$%&’*+/=?^_`{|}~-]+@\\S+\\.\\S+$",
+ "minLength": 6,
+ "maxLength": 127
+ },
+ "timestamp": {
+ "$comment" : "@om-field-type",
+ "description": "Timestamp in Unix epoch time milliseconds.",
+ "@comment": "Note that during code generation this is converted into long",
+ "type": "integer",
+ "format": "utc-millisec"
+ },
+ "href": {
+ "description": "URI that points to a resource.",
+ "type": "string",
+ "format": "uri"
+ },
+ "timeInterval": {
+ "$comment" : "@om-field-type",
+ "type": "object",
+ "description": "Time interval in unixTimeMillis.",
+ "javaType": "org.openmetadata.schema.type.TimeInterval",
+ "properties": {
+ "start": {
+ "description": "Start time in unixTimeMillis.",
+ "type": "integer"
+ },
+ "end": {
+ "description": "End time in unixTimeMillis.",
+ "type": "integer"
+ }
+ },
+ "additionalProperties": false
+ },
+ "duration": {
+ "$comment" : "@om-field-type",
+ "description": "Duration in ISO 8601 format in UTC. Example - 'P23DT23H'.",
+ "type": "string"
+ },
+ "date": {
+ "description": "Date in ISO 8601 format in UTC. Example - '2018-11-13'.",
+ "type": "string",
+ "format": "date"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "type": "string"
+ },
+ "dateTime": {
+ "description": "Date and time in ISO 8601 format. Example - '2018-11-13T20:20:39+00:00'.",
+ "type": "string",
+ "format": "date-time"
+ },
+ "time": {
+ "description": "time in ISO 8601 format. Example - '20:20:39+00:00'.",
+ "type": "string",
+ "format": "time"
+ },
+ "date-cp": {
+ "$comment" : "@om-field-type",
+ "description": "Date as defined in custom property.",
+ "type": "string"
+ },
+ "dateTime-cp": {
+ "$comment" : "@om-field-type",
+ "description": "Date and time as defined in custom property.",
+ "type": "string"
+ },
+ "time-cp": {
+ "$comment" : "@om-field-type",
+ "description": "Time as defined in custom property.",
+ "type": "string"
+ },
+ "enum": {
+ "$comment" : "@om-field-type",
+ "description": "List of values in Enum.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "timezone": {
+ "description": "Timezone of the user in the format `America/Los_Angeles`, `Brazil/East`, etc.",
+ "type": "string",
+ "format": "timezone"
+ },
+ "entityLink": {
+ "description": "Link to an entity or field within an entity using this format `<#E::{entities}::{entityType}::{field}::{arrayFieldName}::{arrayFieldValue}`.",
+ "type": "string",
+ "pattern": "(?U)^<#E::\\w+::(?:[^:<>|]|:[^:<>|])+(?:::(?:[^:<>|]|:[^:<>|])+)*>$"
+ },
+ "entityName": {
+ "description": "Name that identifies an entity.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256,
+ "pattern": "^((?!::).)*$"
+ },
+ "testCaseEntityName": {
+ "description": "Name that identifies a test definition and test case.",
+ "type": "string",
+ "minLength": 1,
+ "pattern": "^((?!::).)*$"
+ },
+ "fullyQualifiedEntityName": {
+ "description": "A unique name that identifies an entity. Example for table 'DatabaseService.Database.Schema.Table'.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 3072
+ },
+ "sqlQuery": {
+ "$comment" : "@om-field-type",
+ "description": "SQL query statement. Example - 'select * from orders'.",
+ "type": "string"
+ },
+ "sqlFunction": {
+ "description": "SQL function. Example - 'AVG()`, `COUNT()`, etc..",
+ "type": "string"
+ },
+ "markdown": {
+ "$comment" : "@om-field-type",
+ "description": "Text in Markdown format.",
+ "type": "string"
+ },
+ "expression": {
+ "description": "Expression in SpEL.",
+ "type": "string"
+ },
+ "jsonSchema": {
+ "description": "JSON schema encoded as string. This will be used to validate the JSON fields using this schema.",
+ "type": "string"
+ },
+ "entityExtension" : {
+ "description": "Entity extension data with custom attributes added to the entity."
+ },
+ "providerType": {
+ "javaType": "org.openmetadata.schema.type.ProviderType",
+ "description": "Type of provider of an entity. Some entities are provided by the `system`. Some are entities created and provided by the `user`. Typically `system` provide entities can't be deleted and can only be disabled. Some apps such as AutoPilot create entities with `automation` provider type. These entities can be deleted by the user.",
+ "type": "string",
+ "enum": ["system", "user", "automation"],
+ "default": "user"
+ },
+ "componentConfig": {
+ "description": "key/value pairs to pass to workflow component.",
+ "type": "object",
+ "additionalProperties": {
+ ".{1,}": { "type": "string" }
+ }
+ },
+ "map": {
+ "description": "A generic map that can be deserialized later.",
+ "existingJavaType" : "java.util.Map",
+ "type" : "object",
+ "additionalProperties": true
+ },
+ "status" : {
+ "javaType": "org.openmetadata.schema.type.ApiStatus",
+ "description": "State of an action over API.",
+ "type" : "string",
+ "enum" : ["success", "failure", "aborted", "partialSuccess", "running"]
+ },
+ "sourceUrl" : {
+ "description": "Source Url of the respective entity.",
+ "type" : "string",
+ "format": "url"
+ },
+ "coverImage": {
+ "description": "Cover image configuration for an entity. This is used to display a banner or header image for entities like Domain, Glossary, Data Product, etc.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.type.CoverImage",
+ "properties": {
+ "url": {
+ "description": "URL of the cover image.",
+ "type": "string",
+ "format": "url"
+ },
+ "position": {
+ "description": "Position of the cover image in CSS background-position format. Supports keywords (top, center, bottom) or pixel values (e.g., '20px 30px').",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "style": {
+ "description": "UI Style is used to associate a color code and/or icon to entity to customize the look of that entity in UI.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.type.Style",
+ "properties": {
+ "color": {
+ "description": "Hex Color Code to mark an entity such as GlossaryTerm, Tag, Domain or Data Product.",
+ "type": "string"
+ },
+ "iconURL": {
+ "description": "An icon to associate with GlossaryTerm, Tag, Domain or Data Product.",
+ "type" : "string",
+ "format": "url"
+ },
+ "coverImage": {
+ "description": "Cover image configuration for the entity.",
+ "$ref": "#/definitions/coverImage"
+ }
+ },
+ "additionalProperties": false
+ },
+ "semanticsRule": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.SemanticsRule",
+ "description": "Semantics rule defined in the data contract.",
+ "properties": {
+ "name": {
+ "title": "Rule Name",
+ "description": "Name of the semantics rule.",
+ "type": "string"
+ },
+ "description": {
+ "title": "Rule Description",
+ "description": "Description of the semantics rule.",
+ "$ref": "#/definitions/markdown"
+ },
+ "rule": {
+ "title": "Rule Definition",
+ "description": "Definition of the semantics rule.",
+ "type": "string",
+ "outputType": "jsonlogic",
+ "format": "queryBuilder"
+ },
+ "enabled": {
+ "title": "Enabled",
+ "description": "Indicates if the semantics rule is enabled.",
+ "type": "boolean",
+ "default": true
+ },
+ "entityType": {
+ "title": "Entity Type",
+ "description": "Type of the entity to which this semantics rule applies.",
+ "type": "string",
+ "default": null
+ },
+ "ignoredEntities": {
+ "title": "Ignored Entities",
+ "description": "List of entities to ignore for this semantics rule.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "default": []
+ },
+ "jsonTree": {
+ "title": "JSON Tree to represents rule in UI.",
+ "description": "JSON Tree to represents rule in UI.",
+ "type": "string"
+ },
+ "provider": {
+ "$ref": "#/definitions/providerType"
+ },
+ "inherited": {
+ "title": "Inherited",
+ "description": "Whether this rule was inherited from a Data Product.",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "required": [
+ "name",
+ "description",
+ "rule",
+ "enabled"
+ ],
+ "additionalProperties": false
+ },
+ "profileSampleType": {
+ "description": "Type of Profile Sample (percentage or rows)",
+ "type": "string",
+ "enum": ["PERCENTAGE", "ROWS"],
+ "default": "PERCENTAGE"
+ },
+ "samplingMethodType": {
+ "description": "Type of Sampling Method (BERNOULLI or SYSTEM)",
+ "type": "string",
+ "enum": ["BERNOULLI", "SYSTEM"]
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/bulkOperationResult.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/bulkOperationResult.json
new file mode 100644
index 000000000000..a046af4c29b1
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/bulkOperationResult.json
@@ -0,0 +1,81 @@
+{
+ "$id": "https://open-metadata.org/schema/type/csvImportResult.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "BulkOperationResult",
+ "description": "Represents result of bulk Operation performed on entities.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.api.BulkOperationResult",
+ "definitions": {
+ "rowCount" : {
+ "description": "Type used to indicate row count",
+ "type": "integer",
+ "format" : "int64",
+ "minimum": 0,
+ "default": 0
+ },
+ "index" : {
+ "description": "Type used to indicate row number or field number. In CSV the indexes start with 1.",
+ "type": "integer",
+ "format" : "int64",
+ "minimum": 1
+ },
+ "response": {
+ "javaType": "org.openmetadata.schema.type.api.BulkResponse",
+ "description": "Request that can be processed successfully.",
+ "type": "object",
+ "properties": {
+ "request": {
+ "description": "Request that can be processed successfully."
+ },
+ "message": {
+ "description": "Message for the request.",
+ "type": "string"
+ },
+ "status": {
+ "description": "HTTP status code for the request.",
+ "type": "integer"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "dryRun" : {
+ "description": "True if the operation has dryRun flag enabled",
+ "type" : "boolean"
+ },
+ "status" : {
+ "$ref" : "basic.json#/definitions/status"
+ },
+ "abortReason": {
+ "description": "Reason why import was aborted. This is set only when the `status` field is set to `aborted`",
+ "type" : "string"
+ },
+ "numberOfRowsProcessed" : {
+ "$ref": "#/definitions/rowCount"
+ },
+ "numberOfRowsPassed" : {
+ "$ref": "#/definitions/rowCount"
+ },
+ "numberOfRowsFailed" : {
+ "$ref": "#/definitions/rowCount"
+ },
+ "successRequest": {
+ "description": "Request that can be processed successfully.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/response"
+ },
+ "default": null
+ },
+ "failedRequest": {
+ "description": "Failure Request that can be processed successfully.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/response"
+ },
+ "default": null
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/bulkTaskOperationResult.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/bulkTaskOperationResult.json
new file mode 100644
index 000000000000..2f4f4d6a4bdf
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/bulkTaskOperationResult.json
@@ -0,0 +1,52 @@
+{
+ "$id": "https://open-metadata.org/schema/type/bulkTaskOperationResult.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "BulkTaskOperationResult",
+ "description": "Result of a bulk task operation.",
+ "javaType": "org.openmetadata.schema.type.BulkTaskOperationResult",
+ "type": "object",
+ "definitions": {
+ "bulkTaskOperationResultItem": {
+ "javaType": "org.openmetadata.schema.type.BulkTaskOperationResultItem",
+ "description": "Result of a single task operation.",
+ "type": "object",
+ "properties": {
+ "taskId": {
+ "description": "The task ID that was processed.",
+ "type": "string"
+ },
+ "status": {
+ "description": "Status of the operation.",
+ "type": "string",
+ "enum": ["success", "failed"]
+ },
+ "error": {
+ "description": "Error message if the operation failed.",
+ "type": "string"
+ }
+ }
+ }
+ },
+ "properties": {
+ "totalRequested": {
+ "description": "Total number of tasks in the request.",
+ "type": "integer"
+ },
+ "successful": {
+ "description": "Number of successfully processed tasks.",
+ "type": "integer"
+ },
+ "failed": {
+ "description": "Number of failed tasks.",
+ "type": "integer"
+ },
+ "results": {
+ "description": "Individual results for each task.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/bulkTaskOperationResultItem"
+ }
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/changeEvent.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/changeEvent.json
new file mode 100644
index 000000000000..be7a76028b96
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/changeEvent.json
@@ -0,0 +1,70 @@
+{
+ "$id": "https://open-metadata.org/schema/type/changeEvent.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "ChangeEvent",
+ "description": "This schema defines the change event type to capture the changes to entities. Entities change due to user activity, such as updating description of a dataset, changing ownership, or adding new tags. Entity also changes due to activities at the metadata sources, such as a new dataset was created, a datasets was deleted, or schema of a dataset is modified. When state of entity changes, an event is produced. These events can be used to build apps and bots that respond to the change from activities.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.ChangeEvent",
+ "properties": {
+ "id": {
+ "description": "Unique identifier for the event.",
+ "$ref": "basic.json#/definitions/uuid"
+ },
+ "eventType": {
+ "$ref": "./changeEventType.json"
+ },
+ "entityType": {
+ "description": "Entity type that changed. Use the schema of this entity to process the entity attribute.",
+ "type": "string"
+ },
+ "entityId": {
+ "description": "Identifier of entity that was modified by the operation.",
+ "$ref": "basic.json#/definitions/uuid"
+ },
+ "domains": {
+ "description": "Domain the entity belongs to.",
+ "type": "array",
+ "items": {
+ "$ref": "../type/basic.json#/definitions/uuid"
+ },
+ "default": null
+ },
+ "entityFullyQualifiedName": {
+ "description": "Fully Qualified Name of entity that was modified by the operation.",
+ "type": "string"
+ },
+ "previousVersion": {
+ "description": "Version of the entity before this change. Note that not all changes result in entity version change. When entity version is not changed, `previousVersion` is same as `currentVersion`.",
+ "$ref": "entityHistory.json#/definitions/entityVersion"
+ },
+ "currentVersion": {
+ "description": "Current version of the entity after this change. Note that not all changes result in entity version change. When entity version is not changed, `previousVersion` is same as `currentVersion`.",
+ "$ref": "entityHistory.json#/definitions/entityVersion"
+ },
+ "userName": {
+ "description": "Name of the user whose activity resulted in the change.",
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "description": "Bot user that performed the action on behalf of the actual user.",
+ "$ref": "../type/basic.json#/definitions/impersonatedBy"
+ },
+ "timestamp": {
+ "description": "Timestamp when the change was made in Unix epoch time milliseconds.",
+ "$ref": "basic.json#/definitions/timestamp"
+ },
+ "changeDescription": {
+ "description": "For `eventType` `entityUpdated` this field captures details about what fields were added/updated/deleted. For `eventType` `entityCreated` or `entityDeleted` this field is null.",
+ "$ref": "entityHistory.json#/definitions/changeDescription"
+ },
+ "incrementalChangeDescription": {
+ "description": "Change that lead to this version of the entity.",
+ "$ref": "../type/entityHistory.json#/definitions/changeDescription"
+ },
+ "entity": {
+ "description": "For `eventType` `entityCreated`, this field captures JSON coded string of the entity using the schema corresponding to `entityType`."
+ }
+ },
+ "required": ["id", "eventType", "entityType", "entityId", "timestamp"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/changeEventType.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/changeEventType.json
new file mode 100644
index 000000000000..ab78a1961696
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/changeEventType.json
@@ -0,0 +1,58 @@
+{
+ "$id": "https://open-metadata.org/schema/type/changeEventTyoe.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "EventType",
+ "description": "Type of event.",
+ "type": "string",
+ "javaType": "org.openmetadata.schema.type.EventType",
+ "enum": [
+ "entityCreated",
+ "entityUpdated",
+ "entityFieldsChanged",
+ "entityNoChange",
+ "entitySoftDeleted",
+ "entityDeleted",
+ "entityRestored",
+ "threadCreated",
+ "threadUpdated",
+ "postCreated",
+ "postUpdated",
+ "taskCreated",
+ "taskUpdated",
+ "taskResolved",
+ "taskClosed",
+ "logicalTestCaseAdded",
+ "suggestionCreated",
+ "suggestionUpdated",
+ "suggestionAccepted",
+ "suggestionRejected",
+ "suggestionDeleted",
+ "userLogin",
+ "userLogout"
+ ],
+ "javaEnums": [
+ {"name": "ENTITY_CREATED"},
+ {"name": "ENTITY_UPDATED"},
+ {"name": "ENTITY_FIELDS_CHANGED"},
+ {"name": "ENTITY_NO_CHANGE"},
+ {"name": "ENTITY_SOFT_DELETED"},
+ {"name": "ENTITY_DELETED"},
+ {"name": "ENTITY_RESTORED"},
+ {"name": "THREAD_CREATED"},
+ {"name": "THREAD_UPDATED"},
+ {"name": "POST_CREATED"},
+ {"name": "POST_UPDATED"},
+ {"name": "TASK_CREATED"},
+ {"name": "TASK_UPDATED"},
+ {"name": "TASK_RESOLVED"},
+ {"name": "TASK_CLOSED"},
+ {"name": "LOGICAL_TEST_CASE_ADDED"},
+ {"name": "SUGGESTION_CREATED"},
+ {"name": "SUGGESTION_UPDATED"},
+ {"name": "SUGGESTION_ACCEPTED"},
+ {"name": "SUGGESTION_REJECTED"},
+ {"name": "SUGGESTION_DELETED"},
+ {"name": "USER_LOGIN"},
+ {"name": "USER_LOGOUT"}
+ ]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/changeSummaryMap.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/changeSummaryMap.json
new file mode 100644
index 000000000000..365180e32964
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/changeSummaryMap.json
@@ -0,0 +1,42 @@
+{
+ "$id": "https://open-metadata.org/schema/type/changeSummary.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Change Summary",
+ "description": "This schema defines structure for change summaries.",
+ "definitions": {
+ "changeSource": {
+ "javaType": "org.openmetadata.schema.type.change.ChangeSource",
+ "description": "The source of the change. This will change based on the context of the change (example: manual vs programmatic)",
+ "type": "string",
+ "enum": [
+ "Manual",
+ "Propagated",
+ "Automated",
+ "Derived",
+ "Ingested",
+ "Suggested"
+ ],
+ "default": "Manual"
+ },
+ "changeSummary": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.change.ChangeSummary",
+ "properties": {
+ "changeSource": {
+ "$ref": "#/definitions/changeSource"
+ },
+ "changedBy": {
+ "description": "Name of the user or bot who made this change",
+ "type": "string"
+ },
+ "changedAt": {
+ "$ref": "./basic.json#/definitions/timestamp"
+ }
+ }
+ }
+ },
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/changeSummary"
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/classificationLanguages.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/classificationLanguages.json
new file mode 100644
index 000000000000..18c324c69d3d
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/classificationLanguages.json
@@ -0,0 +1,93 @@
+{
+ "$id": "https://open-metadata.org/schema/type/classificationLanguages.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "ClassificationLanguage",
+ "description": "Supported languages for auto classification recognizers (ISO 639-1 codes). Use 'any' to apply all recognizers regardless of their configured language.",
+ "type": "string",
+ "javaType": "org.openmetadata.schema.type.ClassificationLanguage",
+ "enum": [
+ "any",
+ "af",
+ "sq",
+ "am",
+ "ar",
+ "hy",
+ "az",
+ "eu",
+ "be",
+ "bn",
+ "bs",
+ "bg",
+ "ca",
+ "zh",
+ "hr",
+ "cs",
+ "da",
+ "nl",
+ "en",
+ "et",
+ "fi",
+ "fr",
+ "gl",
+ "ka",
+ "de",
+ "el",
+ "gu",
+ "ht",
+ "he",
+ "hi",
+ "hu",
+ "is",
+ "id",
+ "ga",
+ "it",
+ "ja",
+ "kn",
+ "kk",
+ "km",
+ "ko",
+ "ku",
+ "ky",
+ "lo",
+ "lv",
+ "lt",
+ "mk",
+ "ms",
+ "ml",
+ "mt",
+ "mi",
+ "mr",
+ "mn",
+ "my",
+ "ne",
+ "no",
+ "ps",
+ "fa",
+ "pl",
+ "pt",
+ "pa",
+ "ro",
+ "ru",
+ "sr",
+ "si",
+ "sk",
+ "sl",
+ "so",
+ "es",
+ "sw",
+ "sv",
+ "tl",
+ "ta",
+ "te",
+ "th",
+ "tr",
+ "uk",
+ "ur",
+ "uz",
+ "vi",
+ "cy",
+ "yi",
+ "zu"
+ ],
+ "default": "en"
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/collectionDescriptor.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/collectionDescriptor.json
new file mode 100644
index 000000000000..41a69f3d3aae
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/collectionDescriptor.json
@@ -0,0 +1,41 @@
+{
+ "$id": "https://open-metadata.org/schema/type/collectionDescriptor.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CollectionDescriptor",
+ "description": "Type used for capturing the details of a collection.",
+ "type": "object",
+
+ "definitions": {
+ "collectionInfo": {
+ "title": "CollectionInfo",
+ "description": "Collection Info.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.CollectionInfo",
+ "properties": {
+ "name": {
+ "description": "Unique name that identifies a collection.",
+ "type": "string"
+ },
+ "documentation": {
+ "description": "Description of collection.",
+ "type": "string"
+ },
+ "href": {
+ "type": "string",
+ "description": "URL of the API endpoint where given collections are available.",
+ "format": "uri"
+ },
+ "images": {
+ "$ref": "profile.json#/definitions/imageList"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "collection": {
+ "$ref": "#/definitions/collectionInfo"
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/contextRecognizer.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/contextRecognizer.json
new file mode 100644
index 000000000000..ecc7d61affb5
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/contextRecognizer.json
@@ -0,0 +1,47 @@
+{
+ "$id": "https://open-metadata.org/schema/type/contextRecognizer.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "ContextRecognizer",
+ "description": "Context-aware recognizer using surrounding text",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.ContextRecognizer",
+ "properties": {
+ "type": {
+ "const": "context"
+ },
+ "contextWords": {
+ "description": "Words that indicate the presence of the entity",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "minItems": 1
+ },
+ "supportedLanguage": {
+ "description": "Language supported by this recognizer",
+ "$ref": "classificationLanguages.json",
+ "default": "en"
+ },
+ "minScore": {
+ "description": "Minimum confidence score",
+ "type": "number",
+ "minimum": 0.0,
+ "maximum": 1.0,
+ "default": 0.4
+ },
+ "maxScore": {
+ "description": "Maximum confidence score",
+ "type": "number",
+ "minimum": 0.0,
+ "maximum": 1.0,
+ "default": 0.8
+ },
+ "increaseFactorByCharLength": {
+ "description": "Factor to increase score based on entity length",
+ "type": "number",
+ "default": 0.05
+ }
+ },
+ "required": ["type", "contextWords", "supportedLanguage"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/contractExecutionStatus.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/contractExecutionStatus.json
new file mode 100644
index 000000000000..101efd34e291
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/contractExecutionStatus.json
@@ -0,0 +1,36 @@
+{
+ "$id": "https://open-metadata.org/schema/type/contractExecutionStatus.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "ContractExecutionStatus",
+ "javaType": "org.openmetadata.schema.type.ContractExecutionStatus",
+ "description": "Status of the data contract execution.",
+ "type": "string",
+ "enum": [
+ "Running",
+ "Success",
+ "Failed",
+ "PartialSuccess",
+ "Aborted",
+ "Queued"
+ ],
+ "javaEnums": [
+ {
+ "name": "Running"
+ },
+ {
+ "name": "Success"
+ },
+ {
+ "name": "Failed"
+ },
+ {
+ "name": "PartialSuccess"
+ },
+ {
+ "name": "Aborted"
+ },
+ {
+ "name": "Queued"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/csvDocumentation.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/csvDocumentation.json
new file mode 100644
index 000000000000..906a15eaae3c
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/csvDocumentation.json
@@ -0,0 +1,24 @@
+{
+ "$id": "https://open-metadata.org/schema/type/csvDocumentation.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "csvDocumentation",
+ "description": "Documentation for CSV file that describes headers and example values.",
+ "javaType": "org.openmetadata.schema.type.csv.CsvDocumentation",
+ "type": "object",
+ "properties": {
+ "summary" : {
+ "description": "Summary documentation for CSV file.",
+ "type" : "string"
+
+ },
+ "headers": {
+ "description": "Documentation for CSV file header",
+ "type": "array",
+ "items": {
+ "$ref": "csvFile.json#/definitions/csvHeader"
+ }
+ }
+ },
+ "required": ["summary", "headers"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/csvErrorType.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/csvErrorType.json
new file mode 100644
index 000000000000..25deec764302
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/csvErrorType.json
@@ -0,0 +1,16 @@
+{
+ "$id": "https://open-metadata.org/schema/type/csvErrorType.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "csvErrorType",
+ "type": "string",
+ "javaType": "org.openmetadata.schema.type.csv.CsvErrorType",
+ "description": "What type of error occurred when importing a CSV file.",
+ "enum": [
+ "UNKNOWN",
+ "PARSER_FAILURE",
+ "INVALID_HEADER",
+ "INVALID_FIELD_COUNT",
+ "FIELD_REQUIRED",
+ "INVALID_FIELD"
+ ]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/csvFile.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/csvFile.json
new file mode 100644
index 000000000000..2c82a4abc333
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/csvFile.json
@@ -0,0 +1,60 @@
+{
+ "$id": "https://open-metadata.org/schema/type/csvFile.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "csvFile",
+ "description": "Represents a CSV file.",
+ "javaType": "org.openmetadata.schema.type.csv.CsvFile",
+ "definitions": {
+ "csvHeader": {
+ "description": "Represents a header for a field in a CSV file.",
+ "javaType": "org.openmetadata.schema.type.csv.CsvHeader",
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "required": {
+ "type": "boolean",
+ "default": false
+ },
+ "description" : {
+ "description": "Description of the header field for documentation purposes.",
+ "$ref" : "basic.json#/definitions/markdown"
+ },
+ "examples" : {
+ "description": "Example values for the field",
+ "type" : "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": ["name", "description", "examples"]
+ },
+ "csvRecord": {
+ "javaType": "org.openmetadata.schema.type.csv.CsvRecord",
+ "description": "Represents a CSV record that contains one row values separated by a separator.",
+ "type": "array",
+ "items" : {
+ "type" : "string"
+ }
+ }
+ },
+ "type": "object",
+ "properties": {
+ "headers": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/csvHeader"
+ }
+ },
+ "records": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/csvRecord"
+ }
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/csvImportResult.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/csvImportResult.json
new file mode 100644
index 000000000000..31ad35dd1cb8
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/csvImportResult.json
@@ -0,0 +1,50 @@
+{
+ "$id": "https://open-metadata.org/schema/type/csvImportResult.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "csvImportResult",
+ "description": "Represents result of importing a CSV file. Detailed error is provided on if the CSV file is conformant and failure to load any of the records in the CSV file.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.csv.CsvImportResult",
+ "definitions": {
+ "rowCount" : {
+ "description": "Type used to indicate row count",
+ "type": "integer",
+ "format" : "int64",
+ "minimum": 0,
+ "default": 0
+ },
+ "index" : {
+ "description": "Type used to indicate row number or field number. In CSV the indexes start with 1.",
+ "type": "integer",
+ "format" : "int64",
+ "minimum": 1
+ }
+ },
+ "properties": {
+ "dryRun" : {
+ "description": "True if the CSV import has dryRun flag enabled",
+ "type" : "boolean"
+ },
+ "status" : {
+ "$ref" : "basic.json#/definitions/status"
+ },
+ "abortReason": {
+ "description": "Reason why import was aborted. This is set only when the `status` field is set to `aborted`",
+ "type" : "string"
+ },
+ "numberOfRowsProcessed" : {
+ "$ref": "#/definitions/rowCount"
+ },
+ "numberOfRowsPassed" : {
+ "$ref": "#/definitions/rowCount"
+ },
+ "numberOfRowsFailed" : {
+ "$ref": "#/definitions/rowCount"
+ },
+ "importResultsCsv" : {
+ "description": "CSV file that captures the result of import operation.",
+ "type" : "string"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/customProperties/complexTypes.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/customProperties/complexTypes.json
new file mode 100644
index 000000000000..db71dea64dba
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/customProperties/complexTypes.json
@@ -0,0 +1,165 @@
+{
+ "$id": "https://open-metadata.org/schema/type/customProperties/complexTypes.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "description": "This schema defines custom properties complex types.",
+ "definitions": {
+ "entityReference": {
+ "$comment": "@om-field-type",
+ "description": "Entity Reference for Custom Property.",
+ "properties": {
+ "id": {
+ "description": "Unique identifier that identifies an entity instance.",
+ "type": "string",
+ "format": "uuid"
+ },
+ "type": {
+ "description": "Entity type/class name - Examples: `database`, `table`, `metrics`, `databaseService`, `dashboardService`...",
+ "type": "string"
+ },
+ "name": {
+ "description": "Name of the entity instance.",
+ "type": "string"
+ },
+ "fullyQualifiedName": {
+ "description": "Fully qualified name of the entity instance. For entities such as tables, databases fullyQualifiedName is returned in this field. For entities that don't have name hierarchy such as `user` and `team` this will be same as the `name` field.",
+ "type": "string"
+ },
+ "description": {
+ "$comment": "@om-field-type",
+ "description": "Optional description of entity.",
+ "type": "string"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this entity.",
+ "type": "string"
+ },
+ "deleted": {
+ "description": "If true the entity referred to has been soft-deleted.",
+ "type": "boolean"
+ },
+ "inherited": {
+ "description": "If true the relationship indicated by this entity reference is inherited from the parent entity.",
+ "type": "boolean"
+ },
+ "href": {
+ "description": "Link to the entity resource.",
+ "type": "string",
+ "format": "uri"
+ }
+ }
+ },
+ "entityReferenceList": {
+ "$comment": "@om-field-type",
+ "description": "Entity Reference List for Custom Property.",
+ "type": "array",
+ "properties": {
+ "items": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "description": "Unique identifier that identifies an entity instance.",
+ "type": "string",
+ "format": "uuid"
+ },
+ "type": {
+ "description": "Entity type/class name - Examples: `database`, `table`, `metrics`, `databaseService`, `dashboardService`...",
+ "type": "string"
+ },
+ "name": {
+ "description": "Name of the entity instance.",
+ "type": "string"
+ },
+ "fullyQualifiedName": {
+ "description": "Fully qualified name of the entity instance. For entities such as tables, databases fullyQualifiedName is returned in this field. For entities that don't have name hierarchy such as `user` and `team` this will be same as the `name` field.",
+ "type": "string"
+ },
+ "description": {
+ "$comment": "@om-field-type",
+ "description": "Optional description of entity.",
+ "type": "string"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this entity.",
+ "type": "string"
+ },
+ "deleted": {
+ "description": "If true the entity referred to has been soft-deleted.",
+ "type": "boolean"
+ },
+ "inherited": {
+ "description": "If true the relationship indicated by this entity reference is inherited from the parent entity.",
+ "type": "boolean"
+ },
+ "href": {
+ "description": "Link to the entity resource.",
+ "type": "string",
+ "format": "uri"
+ }
+ }
+ }
+ }
+ },
+ "table-cp": {
+ "$comment": "@om-field-type",
+ "title": "Table",
+ "description": "A table-type custom property having rows and columns where all column data types are strings.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.customProperties.Table",
+ "properties": {
+ "columns": {
+ "type": "array",
+ "description": "List of column names defined at the entity type level.",
+ "items": {
+ "type": "string",
+ "description": "The name of the column."
+ },
+ "minItems": 1,
+ "maxItems": 3,
+ "uniqueItems": true
+ },
+ "rows": {
+ "type": "array",
+ "description": "List of rows added at the entity instance level. Each row contains dynamic fields based on the defined columns.",
+ "items": {
+ "type": "object",
+ "description": "A row in the table, with dynamic key-value pairs corresponding to columns.",
+ "additionalProperties": {
+ "type": "string",
+ "description": "The cell value of each column in the row."
+ }
+ }
+ }
+ },
+ "required": ["columns"],
+ "additionalProperties": false
+ },
+ "hyperlink-cp": {
+ "$comment": "@om-field-type",
+ "title": "Hyperlink",
+ "description": "A hyperlink custom property containing a URL and optional display text. When display text is provided, it renders as a clickable hyperlink with the text label.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.customProperties.Hyperlink",
+ "properties": {
+ "url": {
+ "type": "string",
+ "description": "The URL that the hyperlink points to.",
+ "format": "uri"
+ },
+ "displayText": {
+ "type": "string",
+ "description": "Optional display text for the hyperlink. If not provided, the URL will be displayed."
+ }
+ },
+ "required": ["url"],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "table-cp": {
+ "$ref": "#/definitions/table-cp"
+ },
+ "hyperlink-cp": {
+ "$ref": "#/definitions/hyperlink-cp"
+ }
+ }
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/customProperties/enumConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/customProperties/enumConfig.json
new file mode 100644
index 000000000000..e9ffe0df6b9a
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/customProperties/enumConfig.json
@@ -0,0 +1,21 @@
+{
+ "$id": "https://open-metadata.org/schema/type/customPropertyEnumConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "EnumConfig",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.customProperties.EnumConfig",
+ "description": "Applies to Enum type, this config is used to define list of enum values",
+ "properties": {
+ "multiSelect": {
+ "type": "boolean",
+ "default": false
+ },
+ "values": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "additionalProperties": false
+ }
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/customProperties/tableConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/customProperties/tableConfig.json
new file mode 100644
index 000000000000..55a1bdaf78a7
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/customProperties/tableConfig.json
@@ -0,0 +1,33 @@
+{
+ "$id": "https://open-metadata.org/schema/type/customProperties/tableConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "TableConfig",
+ "description": "Custom property configuration for table-type property where all column data types are strings.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.customProperties.TableConfig",
+ "properties": {
+ "columns": {
+ "type": "array",
+ "description": "List of column names defined at the entity type level.",
+ "items": {
+ "type": "string",
+ "description": "The name of the column."
+ },
+ "minItems": 1,
+ "maxItems": 3,
+ "uniqueItems": true
+ },
+ "minColumns": {
+ "type": "integer",
+ "default": 1,
+ "$comment": "For internal use only: Minimum number of columns."
+ },
+ "maxColumns": {
+ "type": "integer",
+ "default": 3,
+ "$comment": "For internal use only: Maximum number of columns."
+ }
+ },
+ "required": ["columns"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/customProperty.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/customProperty.json
new file mode 100644
index 000000000000..052e25586cf6
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/customProperty.json
@@ -0,0 +1,71 @@
+{
+ "$id": "https://open-metadata.org/schema/type/customProperty.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CustomProperty",
+ "description": "This schema defines the custom property to an entity to extend it.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.type.CustomProperty",
+ "definitions": {
+ "format": {
+ "description": "Applies to date interval, date, time format.",
+ "type": "string"
+ },
+ "entityTypes": {
+ "description": "Applies to Entity References. Entity Types can be used to restrict what type of entities can be configured for a entity reference.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "customPropertyConfig": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.CustomPropertyConfig",
+ "title": "CustomPropertyConfig",
+ "description": "Config to define constraints around CustomProperty",
+ "properties": {
+ "config": {
+ "oneOf": [
+ {
+ "$ref": "../type/customProperties/enumConfig.json"
+ },
+ {
+ "$ref": "#/definitions/format"
+ },
+ {
+ "$ref": "#/definitions/entityTypes"
+ },
+ {
+ "$ref": "customProperties/tableConfig.json"
+ }
+ ]
+ }
+ },
+ "additionalProperties": false
+ },
+ "propertyType": {
+ "description": "Reference to a property type. Only property types are allowed and entity types are not allowed as custom properties to extend an existing entity",
+ "$ref": "../type/entityReference.json"
+ }
+ },
+ "properties": {
+ "name": {
+ "description": "Name of the entity property. Note a property name must be unique for an entity. Property name must follow camelCase naming adopted by openMetadata - must start with lower case with no space, underscore, or dots.",
+ "$ref": "../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display Name for the custom property.Must be unique for an entity.",
+ "type": "string"
+ },
+ "description": {
+ "$ref": "../type/basic.json#/definitions/markdown"
+ },
+ "propertyType": {
+ "$ref": "#/definitions/propertyType"
+ },
+ "customPropertyConfig": {
+ "$ref": "#/definitions/customPropertyConfig"
+ }
+ },
+ "required": ["name", "description", "propertyType"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/customRecognizer.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/customRecognizer.json
new file mode 100644
index 000000000000..8dccea132ea0
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/customRecognizer.json
@@ -0,0 +1,29 @@
+{
+ "$id": "https://open-metadata.org/schema/type/customRecognizer.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CustomRecognizer",
+ "description": "Custom recognizer with user-defined logic",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.CustomRecognizer",
+ "properties": {
+ "type": {
+ "const": "custom"
+ },
+ "validatorFunction": {
+ "description": "Optional custom validation function (Python code)",
+ "type": "string"
+ },
+ "config": {
+ "description": "Custom configuration parameters",
+ "type": "object",
+ "additionalProperties": true
+ },
+ "supportedLanguage": {
+ "description": "Language supported by this recognizer",
+ "$ref": "classificationLanguages.json",
+ "default": "en"
+ }
+ },
+ "required": ["type", "validatorFunction", "supportedLanguage"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/dailyCount.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/dailyCount.json
new file mode 100644
index 000000000000..1b9d997dc618
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/dailyCount.json
@@ -0,0 +1,20 @@
+{
+ "$id": "https://open-metadata.org/schema/type/dailyCount.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Daily count of some measurement",
+ "description": "This schema defines the type for reporting the daily count of some measurement. For example, you might use this schema for the number of times a table is queried each day.",
+ "type": "object",
+
+ "properties": {
+ "count": {
+ "description": "Daily count of a measurement on the given date.",
+ "type": "integer",
+ "minimum": 0
+ },
+ "date": {
+ "$ref": "basic.json#/definitions/date"
+ }
+ },
+ "required": ["count", "date"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/dataAccessRequestPayload.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/dataAccessRequestPayload.json
new file mode 100644
index 000000000000..11953f9ffcde
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/dataAccessRequestPayload.json
@@ -0,0 +1,37 @@
+{
+ "$id": "https://open-metadata.org/schema/type/dataAccessRequestPayload.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DataAccessRequestPayload",
+ "description": "Payload for Data Access Request tasks.",
+ "javaType": "org.openmetadata.schema.type.DataAccessRequestPayload",
+ "type": "object",
+ "properties": {
+ "requestedAccess": {
+ "description": "Type of access requested.",
+ "type": "string",
+ "enum": ["Read", "Write", "Admin"]
+ },
+ "duration": {
+ "description": "Requested duration for access (ISO 8601).",
+ "$ref": "basic.json#/definitions/duration"
+ },
+ "reason": {
+ "description": "Business justification for the request.",
+ "type": "string"
+ },
+ "assets": {
+ "description": "List of assets being requested access to.",
+ "$ref": "entityReferenceList.json"
+ },
+ "ticketId": {
+ "description": "External ticket ID (JIRA, ServiceNow) if required.",
+ "type": "string"
+ },
+ "expirationDate": {
+ "description": "When the access should expire.",
+ "$ref": "basic.json#/definitions/timestamp"
+ }
+ },
+ "required": ["requestedAccess", "reason"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/databaseConnectionConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/databaseConnectionConfig.json
new file mode 100644
index 000000000000..12f8d39b047c
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/databaseConnectionConfig.json
@@ -0,0 +1,71 @@
+{
+ "$id": "https://open-metadata.org/schema/type/databaseConnectionConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DatabaseConnectionConfig",
+ "description": "Database Connection Config to capture connection details to a database service.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "username": {
+ "description": "username to connect to the data source.",
+ "type": "string"
+ },
+ "password": {
+ "description": "password to connect to the data source.",
+ "type": "string"
+ },
+ "hostPort": {
+ "description": "Host and port of the data source.",
+ "type": "string"
+ },
+ "database": {
+ "description": "Database of the data source.",
+ "type": "string"
+ },
+ "schema": {
+ "description": "schema of the data source.",
+ "type": "string"
+ },
+ "includeViews": {
+ "description": "optional configuration to turn off fetching metadata for views.",
+ "type": "boolean",
+ "default": true
+ },
+ "includeTables": {
+ "description": "Optional configuration to turn off fetching metadata for tables.",
+ "type": "boolean",
+ "default": true
+ },
+ "generateSampleData": {
+ "description": "Turn on/off collecting sample data.",
+ "type": "boolean",
+ "default": true
+ },
+ "sampleDataQuery": {
+ "description": "query to generate sample data.",
+ "type": "string",
+ "default": "select * from {}.{} limit 50"
+ },
+ "enableDataProfiler": {
+ "description": "Run data profiler as part of ingestion to get table profile data.",
+ "type": "boolean",
+ "default": false
+ },
+ "includeFilterPattern": {
+ "description": "Regex to only fetch tables or databases that matches the pattern.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "default": null
+ },
+ "excludeFilterPattern": {
+ "description": "Regex exclude tables or databases that matches the pattern.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "default": null
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/descriptionUpdatePayload.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/descriptionUpdatePayload.json
new file mode 100644
index 000000000000..c48b3e010d82
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/descriptionUpdatePayload.json
@@ -0,0 +1,36 @@
+{
+ "$id": "https://open-metadata.org/schema/type/descriptionUpdatePayload.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DescriptionUpdatePayload",
+ "description": "Payload for Description Update tasks.",
+ "javaType": "org.openmetadata.schema.type.DescriptionUpdatePayload",
+ "type": "object",
+ "properties": {
+ "fieldPath": {
+ "description": "Path to the field being updated (e.g., 'columns.customer_id.description' or just 'description' for entity-level).",
+ "type": "string"
+ },
+ "currentDescription": {
+ "description": "Current description value.",
+ "type": "string"
+ },
+ "newDescription": {
+ "description": "Proposed new description value.",
+ "type": "string"
+ },
+ "source": {
+ "description": "Source of the update request.",
+ "type": "string",
+ "enum": ["User", "Agent", "AutoPilot", "Ingestion"],
+ "default": "User"
+ },
+ "confidence": {
+ "description": "Confidence score for AI-generated descriptions (0-100).",
+ "type": "number",
+ "minimum": 0,
+ "maximum": 100
+ }
+ },
+ "required": ["newDescription"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/domainUpdatePayload.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/domainUpdatePayload.json
new file mode 100644
index 000000000000..310f81b8cde1
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/domainUpdatePayload.json
@@ -0,0 +1,24 @@
+{
+ "$id": "https://open-metadata.org/schema/type/domainUpdatePayload.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DomainUpdatePayload",
+ "description": "Payload for Domain Update tasks.",
+ "javaType": "org.openmetadata.schema.type.DomainUpdatePayload",
+ "type": "object",
+ "properties": {
+ "currentDomain": {
+ "description": "Current domain of the entity.",
+ "$ref": "entityReference.json"
+ },
+ "newDomain": {
+ "description": "Proposed new domain for the entity.",
+ "$ref": "entityReference.json"
+ },
+ "reason": {
+ "description": "Reason for the domain change.",
+ "type": "string"
+ }
+ },
+ "required": ["newDomain"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/dynamicSamplingConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/dynamicSamplingConfig.json
new file mode 100644
index 000000000000..90c7dba8d3bf
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/dynamicSamplingConfig.json
@@ -0,0 +1,42 @@
+{
+ "$id": "https://open-metadata.org/schema/type/dynamicSamplingConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "DynamicSamplingConfig",
+ "javaType": "org.openmetadata.schema.type.DynamicSamplingConfig",
+ "description": "Configuration for dynamic sampling based on table row count.",
+ "type": "object",
+ "properties": {
+ "thresholds": {
+ "description": "Row count thresholds for sampling. Evaluated in order from highest to lowest threshold. Tables below the lowest threshold are profiled at 100% (no sampling).",
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "rowCountThreshold": {
+ "description": "Minimum row count for this tier to apply",
+ "type": "integer",
+ "minimum": 1,
+ "title": "Row Count Threshold"
+ },
+ "profileSample": {
+ "description": "Sample percentage or row count to use for tables at or above this threshold",
+ "type": "number",
+ "default": null,
+ "title": "Profile Sample"
+ },
+ "profileSampleType": {
+ "$ref": "./basic.json#/definitions/profileSampleType",
+ "title": "Profile Sample Type"
+ },
+ "samplingMethodType": {
+ "$ref": "./basic.json#/definitions/samplingMethodType",
+ "title": "Sampling Method Type"
+ }
+ },
+ "required": ["rowCountThreshold", "profileSample"],
+ "additionalProperties": false
+ }
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/entityHierarchy.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/entityHierarchy.json
new file mode 100644
index 000000000000..859b97024b95
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/entityHierarchy.json
@@ -0,0 +1,45 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/data/entityHierarchy.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "EntityHierarchy",
+ "description": "This schema defines the entity hierarchy structure.",
+ "$comment": "@om-entity-type",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.entity.data.EntityHierarchy",
+ "definitions": {
+ "entityHierarchyList": {
+ "type": "array",
+ "items": {
+ "$ref": "entityHierarchy.json"
+ },
+ "default": []
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier of an entity hierarchy instance.",
+ "$ref": "../type/basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Preferred name for the entity hierarchy.",
+ "$ref": "../type/basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display name that identifies this hierarchy.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the entity hierarchy.",
+ "$ref": "../type/basic.json#/definitions/markdown"
+ },
+ "fullyQualifiedName": {
+ "description": "A unique name that identifies an entity within the hierarchy. It captures name hierarchy in the form of `rootEntity.childEntity`.",
+ "$ref": "../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "children": {
+ "description": "Other entities that are children of this entity.",
+ "$ref" : "#/definitions/entityHierarchyList"
+ }
+ },
+ "required": ["id", "name", "description"]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/entityHistory.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/entityHistory.json
new file mode 100644
index 000000000000..54987ff6a90f
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/entityHistory.json
@@ -0,0 +1,121 @@
+{
+ "$id": "https://open-metadata.org/schema/type/entityHistory.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Entity Version History",
+ "description": "This schema defines the type used for capturing version of history of entity.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.EntityHistory",
+ "definitions": {
+ "entityVersion": {
+ "description": "Metadata version of the entity in the form `Major.Minor`. First version always starts from `0.1` when the entity is created. When the backward compatible changes are made to the entity, only the `Minor` version is incremented - example `1.0` is changed to `1.1`. When backward incompatible changes are made the `Major` version is incremented - example `1.1` to `2.0`.",
+ "type": "number",
+ "multipleOf": 0.1,
+ "default": 0.1,
+ "minimum": 0.1
+ },
+ "fieldName": {
+ "description": "Name of the field of an entity.",
+ "type": "string"
+ },
+ "fieldChange": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "description": "Name of the entity field that changed.",
+ "$ref": "#/definitions/fieldName"
+ },
+ "oldValue": {
+ "description": "Previous value of the field. Note that this is a JSON string and use the corresponding field type to deserialize it."
+ },
+ "newValue": {
+ "description": "New value of the field. Note that this is a JSON string and use the corresponding field type to deserialize it."
+ }
+ },
+ "additionalProperties": false
+ },
+ "changeDescription": {
+ "description": "Description of the change.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.ChangeDescription",
+ "properties": {
+ "fieldsAdded": {
+ "description": "Names of fields added during the version changes.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/fieldChange"
+ }
+ },
+ "fieldsUpdated": {
+ "description": "Fields modified during the version changes with old and new values.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/fieldChange"
+ }
+ },
+ "fieldsDeleted": {
+ "description": "Fields deleted during the version changes with old value before deleted.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/fieldChange"
+ }
+ },
+ "previousVersion": {
+ "description": "When a change did not result in change, this could be same as the current version.",
+ "$ref": "#/definitions/entityVersion"
+ },
+ "changeSummary": {
+ "$ref": "./changeSummaryMap.json"
+ }
+ },
+ "additionalProperties": false
+ },
+ "incrementalChangeDescription": {
+ "description": "Description of the change.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.ChangeDescription",
+ "properties": {
+ "fieldsAdded": {
+ "description": "Names of fields added during the version changes.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/fieldChange"
+ }
+ },
+ "fieldsUpdated": {
+ "description": "Fields modified during the version changes with old and new values.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/fieldChange"
+ }
+ },
+ "fieldsDeleted": {
+ "description": "Fields deleted during the version changes with old value before deleted.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/fieldChange"
+ }
+ },
+ "previousVersion": {
+ "description": "When a change did not result in change, this could be same as the current version.",
+ "$ref": "#/definitions/entityVersion"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "entityType": {
+ "description": "Entity type, such as `database`, `table`, `dashboard`, for which this version history is produced.",
+ "type": "string"
+ },
+ "versions": {
+ "descriptions": "All the versions of the entity ordered from the latest to the oldest version. Note the array element object has schema that corresponds to schema of the entity from the `entityType` attribute. For example, if `entityType` is `table`, then the schema of the object in the array is `table.json`.",
+ "type": "array"
+ },
+ "paging": {
+ "$ref": "paging.json"
+ }
+ },
+ "required": ["entityType", "versions"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/entityLineage.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/entityLineage.json
new file mode 100644
index 000000000000..e7e51c558f23
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/entityLineage.json
@@ -0,0 +1,185 @@
+{
+ "$id": "https://open-metadata.org/schema/type/entityLineage.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Entity Lineage",
+ "description": "The `Lineage` for a given data asset, has information of the input datasets used and the ETL pipeline that created it.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.EntityLineage",
+ "definitions": {
+ "tempLineageTable": {
+ "description": "A single hop in a temporary table lineage path.",
+ "type": "object",
+ "properties": {
+ "fromEntity": {
+ "description": "Source entity or table name for this hop.",
+ "type": "string"
+ },
+ "toEntity": {
+ "description": "Target entity or table name for this hop.",
+ "type": "string"
+ }
+ },
+ "required": ["fromEntity", "toEntity"]
+ },
+ "columnLineage": {
+ "type" : "object",
+ "properties": {
+ "fromColumns" : {
+ "description": "One or more source columns identified by fully qualified column name used by transformation function to create destination column.",
+ "type" : "array",
+ "items" : {
+ "$ref" : "../type/basic.json#/definitions/fullyQualifiedEntityName"
+ }
+ },
+ "toColumn" : {
+ "description": "Destination column identified by fully qualified column name created by the transformation of source columns.",
+ "$ref" : "../type/basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "function" : {
+ "description": "Transformation function applied to source columns to create destination column. That is `function(fromColumns) -> toColumn`.",
+ "$ref" : "../type/basic.json#/definitions/sqlFunction"
+ }
+ }
+ },
+ "lineageDetails" : {
+ "description" : "Lineage details including sqlQuery + pipeline + columnLineage.",
+ "type" : "object",
+ "properties": {
+ "sqlQuery" : {
+ "description": "SQL used for transformation.",
+ "$ref" : "../type/basic.json#/definitions/sqlQuery"
+ },
+ "columnsLineage" : {
+ "description" : "Lineage information of how upstream columns were combined to get downstream column.",
+ "type" : "array",
+ "items" : {
+ "$ref" : "#/definitions/columnLineage"
+ }
+ },
+ "pipeline" : {
+ "description": "Pipeline where the sqlQuery is periodically run.",
+ "$ref" : "../type/entityReference.json"
+ },
+ "description" :{
+ "description": "description of lineage",
+ "type": "string"
+ },
+ "source": {
+ "description": "Lineage type describes how a lineage was created.",
+ "type": "string",
+ "enum": ["Manual", "ViewLineage", "QueryLineage", "PipelineLineage", "DashboardLineage", "DbtLineage", "SparkLineage", "OpenLineage", "ExternalTableLineage", "CrossDatabaseLineage", "ChildAssets"],
+ "default": "Manual"
+ },
+ "createdAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../type/basic.json#/definitions/timestamp"
+ },
+ "createdBy": {
+ "description": "User who created the node.",
+ "type": "string"
+ },
+ "updatedAt": {
+ "description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
+ "$ref": "../type/basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update.",
+ "type": "string"
+ },
+ "assetEdges": {
+ "description": "Asset count in case of child assets lineage.",
+ "type": "integer",
+ "default": null
+ },
+ "tempLineageTables": {
+ "description": "Lineage path through temporary/intermediate tables. Each element represents a hop with fromEntity and toEntity fields.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/tempLineageTable"
+ },
+ "default": null
+ }
+ }
+ },
+ "edge": {
+ "description": "Edge in the lineage graph from one entity to another by entity IDs.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.Edge",
+ "properties": {
+ "fromEntity": {
+ "description": "From entity that is upstream of lineage edge.",
+ "$ref": "basic.json#/definitions/uuid"
+ },
+ "toEntity": {
+ "description": "To entity that is downstream of lineage edge.",
+ "$ref": "basic.json#/definitions/uuid"
+ },
+ "description": {
+ "$ref": "basic.json#/definitions/markdown"
+ },
+ "lineageDetails": {
+ "description": "Optional lineageDetails provided only for table to table lineage edge.",
+ "$ref": "#/definitions/lineageDetails"
+ }
+ },
+ "required": ["fromEntity", "toEntity"],
+ "additionalProperties": false
+ },
+ "entitiesEdge": {
+ "description": "Edge in the lineage graph from one entity to another using entity references.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.EntitiesEdge",
+ "properties": {
+ "fromEntity": {
+ "description": "From entity that is upstream of lineage edge.",
+ "$ref": "entityReference.json"
+ },
+ "toEntity": {
+ "description": "To entity that is downstream of lineage edge.",
+ "$ref": "entityReference.json"
+ },
+ "description": {
+ "$ref": "basic.json#/definitions/markdown"
+ },
+ "lineageDetails": {
+ "description": "Optional lineageDetails provided only for table to table lineage edge.",
+ "$ref": "#/definitions/lineageDetails"
+ }
+ },
+ "required": ["fromEntity", "toEntity"],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "entity": {
+ "description": "Primary entity for which this lineage graph is created.",
+ "$ref": "entityReference.json"
+ },
+ "nodes": {
+ "descriptions": "All the entities that are the nodes in the lineage graph excluding the primary entity.",
+ "type": "array",
+ "items": {
+ "$ref": "entityReference.json"
+ },
+ "default": null
+ },
+ "upstreamEdges": {
+ "descriptions": "All the edges in the lineage graph that are upstream from the primary entity.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/edge"
+ },
+ "default": null
+ },
+ "downstreamEdges": {
+ "descriptions": "All the edges in the lineage graph that are downstream from the primary entity.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/edge"
+ },
+ "default": null
+ }
+ },
+ "required": ["entity"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/entityProfile.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/entityProfile.json
new file mode 100644
index 000000000000..3011da254c4a
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/entityProfile.json
@@ -0,0 +1,47 @@
+{
+ "$id": "https://open-metadata.org/schema/type/entityProfile.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "EntityProfile",
+ "description": "This schema defines the type to capture the full table Entity profile.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.EntityProfile",
+ "javaInterfaces": ["org.openmetadata.schema.EntityTimeSeriesInterface"],
+ "definitions": {
+ "profileTypeEnum": {
+ "description": "profile type",
+ "enum": [
+ "column",
+ "table",
+ "system"
+ ]
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier of this profile instance",
+ "$ref": "basic.json#/definitions/uuid"
+ },
+ "entityReference": {
+ "description": "Reference to the entity for which this profile is created.",
+ "$ref": "entityReference.json"
+ },
+ "timestamp": {
+ "description": "Data one which test case result is taken.",
+ "$ref": "basic.json#/definitions/timestamp"
+ },
+ "profileData":{
+ "description": "Profile data specific to the entity type.",
+ "oneOf": [
+ { "$ref": "../entity/data/table.json#/definitions/tableProfile"},
+ { "$ref": "../entity/data/table.json#/definitions/columnProfile"},
+ { "$ref": "../entity/data/table.json#/definitions/systemProfile"}
+ ]
+ },
+ "profileType": {
+ "description": "type of profile",
+ "$ref": "#/definitions/profileTypeEnum"
+ }
+ },
+ "required": ["id", "entityReference", "timestamp", "profileData"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/entityReference.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/entityReference.json
new file mode 100644
index 000000000000..c32f866ced82
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/entityReference.json
@@ -0,0 +1,48 @@
+{
+ "$id": "https://open-metadata.org/schema/type/entityReference.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Entity Reference",
+ "description": "This schema defines the EntityReference type used for referencing an entity. EntityReference is used for capturing relationships from one entity to another. For example, a table has an attribute called database of type EntityReference that captures the relationship of a table `belongs to a` database.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.EntityReference",
+ "properties": {
+ "id": {
+ "description": "Unique identifier that identifies an entity instance.",
+ "$ref": "basic.json#/definitions/uuid"
+ },
+ "type": {
+ "description": "Entity type/class name - Examples: `database`, `table`, `metrics`, `databaseService`, `dashboardService`...",
+ "type": "string"
+ },
+ "name": {
+ "description": "Name of the entity instance.",
+ "type": "string"
+ },
+ "fullyQualifiedName": {
+ "description": "Fully qualified name of the entity instance. For entities such as tables, databases fullyQualifiedName is returned in this field. For entities that don't have name hierarchy such as `user` and `team` this will be same as the `name` field.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Optional description of entity.",
+ "$ref": "basic.json#/definitions/markdown"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this entity.",
+ "type": "string"
+ },
+ "deleted": {
+ "description": "If true the entity referred to has been soft-deleted.",
+ "type": "boolean"
+ },
+ "inherited": {
+ "description": "If true the relationship indicated by this entity reference is inherited from the parent entity.",
+ "type": "boolean"
+ },
+ "href": {
+ "description": "Link to the entity resource.",
+ "$ref": "basic.json#/definitions/href"
+ }
+ },
+ "required": ["id", "type"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/entityReferenceList.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/entityReferenceList.json
new file mode 100644
index 000000000000..74b7bd8816ae
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/entityReferenceList.json
@@ -0,0 +1,11 @@
+{
+ "$id": "https://open-metadata.org/schema/type/entityReferenceList.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Entity Reference List",
+ "description": "This schema defines the EntityReferenceList type used for referencing an entity. EntityReference is used for capturing relationships from one entity to another. For example, a table has an attribute called database of type EntityReference that captures the relationship of a table `belongs to a` database.",
+ "type": "array",
+ "items": {
+ "$ref": "entityReference.json"
+ },
+ "default": null
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/entityRelationship.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/entityRelationship.json
new file mode 100644
index 000000000000..8fd527ae7073
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/entityRelationship.json
@@ -0,0 +1,114 @@
+{
+ "$id": "https://open-metadata.org/schema/type/entityRelationship.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "EntityRelationship",
+ "description": "This schema defines the EntityRelationship type used for establishing relationship between two entities. EntityRelationship is used for capturing relationships from one entity to another. For example, a database contains tables.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.EntityRelationship",
+ "definitions": {
+ "relationshipType": {
+ "javaType": "org.openmetadata.schema.type.Relationship",
+ "description": "This enum captures all the relationships between Catalog entities. Note that the relationship from is a Strong entity and to is Weak entity when possible.",
+ "$comment": "Rules for changing enums since the ordinal position is stored in the database: (1) Don't remove an enum, since the database might have stored the enum ordinal number. (2) When adding a new enum, add it as the last enum to preserve the ordinal positions of the existing enums.",
+ "type": "string",
+ "enum": [
+ "contains",
+ "createdBy",
+ "repliedTo",
+ "isAbout",
+ "addressedTo",
+ "mentionedIn",
+ "testedBy",
+ "uses",
+ "owns",
+ "parentOf",
+ "has",
+ "follows",
+ "joinedWith",
+ "upstream",
+ "appliedTo",
+ "relatedTo",
+ "reviews",
+ "reactedTo",
+ "voted",
+ "expert",
+ "editedBy",
+ "defaultsTo",
+ "relatesTo",
+ "inputPort",
+ "outputPort",
+ "assignedTo"
+ ],
+ "javaEnums": [
+ { "name": "CONTAINS" },
+ { "name": "CREATED" },
+ { "name": "REPLIED_TO" },
+ { "name": "IS_ABOUT" },
+ { "name": "ADDRESSED_TO" },
+ { "name": "MENTIONED_IN" },
+ { "name": "TESTED_BY" },
+ { "name": "USES" },
+ { "name": "OWNS" },
+ { "name": "PARENT_OF" },
+ { "name": "HAS" },
+ { "name": "FOLLOWS" },
+ { "name": "JOINED_WITH" },
+ { "name": "UPSTREAM" },
+ { "name": "APPLIED_TO" },
+ { "name": "RELATED_TO" },
+ { "name": "REVIEWS" },
+ { "name": "REACTED_TO" },
+ { "name": "VOTED" },
+ { "name": "EXPERT" },
+ { "name": "EDITED_BY" },
+ { "name": "DEFAULTS_TO" },
+ { "name": "RELATES_TO" },
+ { "name": "INPUT_PORT" },
+ { "name": "OUTPUT_PORT" },
+ { "name": "ASSIGNED_TO" }
+ ]
+ }
+ },
+ "properties": {
+ "fromId": {
+ "description": "Unique identifier that identifies the entity from which the relationship originates.",
+ "$ref": "basic.json#/definitions/uuid"
+ },
+ "fromFQN": {
+ "description": "Fully qualified name of the entity from which the relationship originates.",
+ "type": "string"
+ },
+ "fromEntity": {
+ "description": "Type of the entity from which the relationship originates. Examples: `database`, `table`, `metrics` ...",
+ "type": "string"
+ },
+ "toId": {
+ "description": "Unique identifier that identifies the entity towards which the relationship refers to.",
+ "$ref": "basic.json#/definitions/uuid"
+ },
+ "toFQN": {
+ "description": "Fully qualified name of the entity towards which the relationship refers to.",
+ "type": "string"
+ },
+ "toEntity": {
+ "description": "Type of the entity towards which the relationship refers to. Examples: `database`, `table`, `metrics` ...",
+ "type": "string"
+ },
+ "relation": {
+ "description": "Describes relationship between the two entities as an integer.",
+ "type": "integer",
+ "minimum": 0
+ },
+ "relationshipType": {
+ "description": "Describes relationship between the two entities. Eg: Database --- Contains --> Table.",
+ "$ref": "#/definitions/relationshipType"
+ },
+ "deleted": {
+ "description": "`true` indicates the relationship has been soft deleted.",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "required": ["fromEntity", "toEntity", "relationshipType"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/entityRelationship/nodeInformation.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/entityRelationship/nodeInformation.json
new file mode 100644
index 000000000000..4103a8a19345
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/entityRelationship/nodeInformation.json
@@ -0,0 +1,18 @@
+{
+ "$id": "https://open-metadata.org/schema/type/entityRelationship/nodeInformation.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "NodeInformation",
+ "description": "Entity Relationship Node Information.",
+ "javaType": "org.openmetadata.schema.type.entityRelationship.NodeInformation",
+ "type": "object",
+ "properties": {
+ "entity": {
+ "description": "Entity information."
+ },
+ "paging": {
+ "description": "Paging information for the node.",
+ "$ref": "../layerPaging.json"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/entityUsage.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/entityUsage.json
new file mode 100644
index 000000000000..b2a62be3f2d2
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/entityUsage.json
@@ -0,0 +1,23 @@
+{
+ "$id": "https://open-metadata.org/schema/type/entityUsage.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "EntityUsage",
+ "description": "This schema defines the type used for capturing usage details of an entity.",
+ "type": "object",
+
+ "properties": {
+ "entity": {
+ "description": "Entity for which usage is returned.",
+ "$ref": "entityReference.json"
+ },
+ "usage": {
+ "description": "List usage details per day.",
+ "type": "array",
+ "items": {
+ "$ref": "usageDetails.json"
+ }
+ }
+ },
+ "required": ["entity", "usage"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/exactTermsRecognizer.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/exactTermsRecognizer.json
new file mode 100644
index 000000000000..6f63299efbdb
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/exactTermsRecognizer.json
@@ -0,0 +1,31 @@
+{
+ "$id": "https://open-metadata.org/schema/type/exactTermsRecognizer.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "ExactTermsRecognizer",
+ "description": "Exact terms recognizer that matches against a list of specific values",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.ExactTermsRecognizer",
+ "properties": {
+ "type": {
+ "const": "exact_terms"
+ },
+ "exactTerms": {
+ "description": "List of values to match against",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "minItems": 1
+ },
+ "supportedLanguage": {
+ "description": "Language supported by this recognizer",
+ "$ref": "classificationLanguages.json",
+ "default": "en"
+ },
+ "regexFlags": {
+ "$ref": "recognizers/regexFlags.json"
+ }
+ },
+ "required": ["type", "exactTerms", "supportedLanguage", "regexFlags"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/filterPattern.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/filterPattern.json
new file mode 100644
index 000000000000..f986b554c911
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/filterPattern.json
@@ -0,0 +1,31 @@
+{
+ "$id": "https://open-metadata.org/schema/type/filterPattern.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "FilterPatternModel",
+ "description": "OpenMetadata Ingestion Framework definition.",
+ "type": "object",
+ "definitions": {
+ "filterPattern": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.metadataIngestion.FilterPattern",
+ "description": "Regex to only fetch entities that matches the pattern.",
+ "properties": {
+ "includes": {
+ "description": "List of strings/regex patterns to match and include only database entities that match.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "excludes": {
+ "description": "List of strings/regex patterns to match and exclude only database entities that match.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "additionalProperties": false
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/function.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/function.json
new file mode 100644
index 000000000000..6a8466196683
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/function.json
@@ -0,0 +1,51 @@
+{
+ "$id": "https://open-metadata.org/schema/type/function.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "function",
+ "description": "Functions used for writing SpEL expression based conditions",
+ "type" : "object",
+ "javaType": "org.openmetadata.schema.type.Function",
+ "definitions": {
+ "parameterType": {
+ "type": "string",
+ "enum": ["NotRequired", "AllIndexElasticSearch", "SpecificIndexElasticSearch", "ReadFromParamContext", "ReadFromParamContextPerEntity"]
+ },
+ "paramAdditionalContext": {
+ "description": "Additional Context",
+ "type": "object",
+ "properties": {
+ "data": {
+ "description": "List of Entities"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "name" : {
+ "description": "Name of the function.",
+ "type" : "string"
+ },
+ "input" : {
+ "description": "Description of input taken by the function.",
+ "type" : "string"
+ },
+ "description" : {
+ "description": "Description for the function.",
+ "type" : "string"
+ },
+ "examples" : {
+ "description": "Examples of the function to help users author conditions.",
+ "type" : "array"
+ },
+ "parameterInputType": {
+ "description": "List of receivers to send mail to",
+ "$ref": "#/definitions/parameterType"
+ },
+ "paramAdditionalContext": {
+ "$ref": "#/definitions/paramAdditionalContext"
+ }
+
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/genericTaskPayload.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/genericTaskPayload.json
new file mode 100644
index 000000000000..6e0e61265c0e
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/genericTaskPayload.json
@@ -0,0 +1,20 @@
+{
+ "$id": "https://open-metadata.org/schema/type/genericTaskPayload.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "GenericTaskPayload",
+ "description": "Generic payload for custom tasks allowing arbitrary key-value pairs.",
+ "javaType": "org.openmetadata.schema.type.GenericTaskPayload",
+ "type": "object",
+ "properties": {
+ "data": {
+ "description": "Generic data content for the task.",
+ "type": "string"
+ },
+ "metadata": {
+ "description": "Additional metadata as key-value pairs.",
+ "type": "object",
+ "additionalProperties": true
+ }
+ },
+ "additionalProperties": true
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/glossaryApprovalPayload.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/glossaryApprovalPayload.json
new file mode 100644
index 000000000000..4cfbc7b6d291
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/glossaryApprovalPayload.json
@@ -0,0 +1,29 @@
+{
+ "$id": "https://open-metadata.org/schema/type/glossaryApprovalPayload.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "GlossaryApprovalPayload",
+ "description": "Payload for Glossary Approval tasks.",
+ "javaType": "org.openmetadata.schema.type.GlossaryApprovalPayload",
+ "type": "object",
+ "properties": {
+ "glossaryTerm": {
+ "description": "Reference to the glossary term being approved.",
+ "$ref": "entityReference.json"
+ },
+ "action": {
+ "description": "Action being approved.",
+ "type": "string",
+ "enum": ["Create", "Update", "Delete"]
+ },
+ "currentState": {
+ "description": "Current state of the term before changes.",
+ "type": "string"
+ },
+ "proposedState": {
+ "description": "Proposed state of the term after changes.",
+ "type": "string"
+ }
+ },
+ "required": ["glossaryTerm", "action"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/incidentResolutionPayload.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/incidentResolutionPayload.json
new file mode 100644
index 000000000000..602ee1d03cd6
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/incidentResolutionPayload.json
@@ -0,0 +1,50 @@
+{
+ "$id": "https://open-metadata.org/schema/type/incidentResolutionPayload.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "IncidentResolutionPayload",
+ "description": "Payload for Incident Resolution tasks.",
+ "javaType": "org.openmetadata.schema.type.IncidentResolutionPayload",
+ "type": "object",
+ "properties": {
+ "incidentType": {
+ "description": "Type of incident.",
+ "type": "string",
+ "enum": ["DataQuality", "Pipeline", "Schema", "Freshness", "Volume", "Custom"]
+ },
+ "severity": {
+ "description": "Severity of the incident.",
+ "type": "string",
+ "enum": ["Critical", "High", "Medium", "Low"]
+ },
+ "impactedAssets": {
+ "description": "Assets impacted by this incident.",
+ "$ref": "entityReferenceList.json"
+ },
+ "rootCause": {
+ "description": "Root cause analysis.",
+ "type": "string"
+ },
+ "resolution": {
+ "description": "How the incident was resolved.",
+ "type": "string"
+ },
+ "preventiveMeasures": {
+ "description": "Measures to prevent recurrence.",
+ "type": "string"
+ },
+ "startTime": {
+ "description": "When the incident started.",
+ "$ref": "basic.json#/definitions/timestamp"
+ },
+ "endTime": {
+ "description": "When the incident was resolved.",
+ "$ref": "basic.json#/definitions/timestamp"
+ },
+ "externalTicketUrl": {
+ "description": "URL to external incident ticket.",
+ "$ref": "basic.json#/definitions/href"
+ }
+ },
+ "required": ["incidentType", "severity"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/include.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/include.json
new file mode 100644
index 000000000000..bb7392979499
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/include.json
@@ -0,0 +1,20 @@
+{
+ "$id": "https://open-metadata.org/schema/type/include.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Include",
+ "description": "GET entity by id, GET entity by name, and LIST entities can include deleted or non-deleted entities using the parameter include.",
+ "type": "string",
+ "javaType": "org.openmetadata.schema.type.Include",
+ "enum": ["all", "deleted", "non-deleted"],
+ "javaEnums": [
+ {
+ "name": "ALL"
+ },
+ {
+ "name": "DELETED"
+ },
+ {
+ "name": "NON_DELETED"
+ }
+ ]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/jdbcConnection.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/jdbcConnection.json
new file mode 100644
index 000000000000..bc74845ab4bd
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/jdbcConnection.json
@@ -0,0 +1,55 @@
+{
+ "$id": "https://open-metadata.org/schema/type/jdbcConnection.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "JDBC connection",
+ "description": "This schema defines the type used for JDBC connection information.",
+ "type": "object",
+
+ "definitions": {
+ "driverClass": {
+ "description": "Type used for JDBC driver class.",
+ "type": "string"
+ },
+ "connectionUrl": {
+ "description": "Type used for JDBC connection URL of format `url_scheme://:@:/`.",
+ "type": "string"
+ },
+
+ "jdbcInfo": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.JdbcInfo",
+ "description": "Type for capturing JDBC connector information.",
+ "properties": {
+ "driverClass": {
+ "$ref": "#/definitions/driverClass"
+ },
+ "connectionUrl": {
+ "$ref": "#/definitions/connectionUrl"
+ }
+ },
+ "required": ["driverClass", "connectionUrl"],
+ "additionalProperties": false
+ }
+ },
+
+ "properties": {
+ "driverClass": {
+ "description": "JDBC driver class.",
+ "$ref": "#/definitions/driverClass"
+ },
+ "connectionUrl": {
+ "description": "JDBC connection URL.",
+ "$ref": "#/definitions/connectionUrl"
+ },
+ "userName": {
+ "description": "Login user name.",
+ "type": "string"
+ },
+ "password": {
+ "description": "Login password.",
+ "type": "string"
+ }
+ },
+ "required": ["driverClass", "connectionUrl", "userName", "password"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/layerPaging.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/layerPaging.json
new file mode 100644
index 000000000000..47c6f6aea915
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/layerPaging.json
@@ -0,0 +1,19 @@
+{
+ "$id": "https://open-metadata.org/schema/type/layerPaging.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "LayerPaging",
+ "description": "Layer Paging Information for Entity Relationships and Lineage.",
+ "javaType": "org.openmetadata.schema.type.LayerPaging",
+ "type": "object",
+ "properties": {
+ "entityUpstreamCount": {
+ "description": "Total Upstream Entity Count",
+ "type": "integer"
+ },
+ "entityDownstreamCount": {
+ "description": "Total Downstream Entity Count",
+ "type": "integer"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/lifeCycle.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/lifeCycle.json
new file mode 100644
index 000000000000..f2ea4e74b4db
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/lifeCycle.json
@@ -0,0 +1,48 @@
+{
+ "$id": "https://open-metadata.org/schema/type/lifeCycle.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Life Cycle",
+ "description": "This schema defines Life Cycle Properties.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.LifeCycle",
+ "definitions": {
+ "accessDetails": {
+ "description": "Access details of an entity ",
+ "type": "object",
+ "properties": {
+ "timestamp": {
+ "description": "Timestamp of data asset accessed for creation, update, read.",
+ "$ref": "basic.json#/definitions/timestamp",
+ "default": null
+ },
+ "accessedBy": {
+ "description": "User, Pipeline, Query that created,updated or accessed the data asset",
+ "$ref": "entityReference.json",
+ "default": null
+ },
+ "accessedByAProcess": {
+ "description": "Any process that accessed the data asset that is not captured in OpenMetadata.",
+ "type": "string",
+ "default": null
+ }
+ },
+ "additionalProperties": false,
+ "required": ["timestamp"]
+ }
+ },
+ "properties": {
+ "created": {
+ "description": "Access Details about created aspect of the data asset",
+ "$ref": "#/definitions/accessDetails"
+ },
+ "updated": {
+ "description": "Access Details about updated aspect of the data asset",
+ "$ref": "#/definitions/accessDetails"
+ },
+ "accessed": {
+ "description": "Access Details about accessed aspect of the data asset",
+ "$ref": "#/definitions/accessDetails"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/ownerConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/ownerConfig.json
new file mode 100644
index 000000000000..61798784aafa
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/ownerConfig.json
@@ -0,0 +1,136 @@
+{
+ "$id": "https://open-metadata.org/schema/type/ownerConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Owner Configuration",
+ "description": "Configuration for assigning owners to ingested entities following topology hierarchy with inheritance support",
+ "javaType": "org.openmetadata.schema.type.OwnerConfig",
+ "type": "object",
+ "definitions": {
+ "ownerValue": {
+ "description": "Single owner or list of owners. Business rules: multiple users allowed, only ONE team allowed, users and teams are mutually exclusive.",
+ "anyOf": [
+ {
+ "type": "string",
+ "description": "Single owner (user or team name/email)"
+ },
+ {
+ "type": "array",
+ "description": "Multiple owners (must be all users OR single team, cannot mix)",
+ "items": {
+ "type": "string"
+ },
+ "minItems": 1
+ }
+ ]
+ }
+ },
+ "properties": {
+ "default": {
+ "description": "Default owner applied to all entities when no specific owner is configured (user or team name/email)",
+ "type": "string",
+ "examples": ["data-engineering-team", "admin@company.com"]
+ },
+ "service": {
+ "description": "Owner for the service level",
+ "type": "string"
+ },
+ "database": {
+ "description": "Owner for database entities. Can be a single owner for all databases, or a map of database names to owner(s).",
+ "anyOf": [
+ {
+ "type": "string",
+ "description": "Single owner (user or team) for all databases"
+ },
+ {
+ "type": "object",
+ "description": "Map of database names to their owner(s)",
+ "additionalProperties": {
+ "$ref": "#/definitions/ownerValue"
+ },
+ "examples": [{
+ "sales_db": "sales-team",
+ "analytics_db": "analytics-team",
+ "shared_db": ["alice", "bob", "charlie"]
+ }]
+ }
+ ]
+ },
+ "databaseSchema": {
+ "description": "Owner for schema entities. Can be a single owner for all schemas, or a map of schema FQNs to owner(s).",
+ "anyOf": [
+ {
+ "type": "string",
+ "description": "Single owner (user or team) for all schemas"
+ },
+ {
+ "type": "object",
+ "description": "Map of schema names/FQNs to their owner(s)",
+ "additionalProperties": {
+ "$ref": "#/definitions/ownerValue"
+ },
+ "examples": [{
+ "public": "public-schema-team",
+ "analytics_db.analytics_schema": "analytics-team",
+ "shared_schema": ["alice", "bob"]
+ }]
+ }
+ ]
+ },
+ "table": {
+ "description": "Owner for table entities. Can be a single owner for all tables, or a map of table FQNs to owner(s).",
+ "anyOf": [
+ {
+ "type": "string",
+ "description": "Single owner (user or team) for all tables"
+ },
+ {
+ "type": "object",
+ "description": "Map of table names/FQNs to their owner(s)",
+ "additionalProperties": {
+ "$ref": "#/definitions/ownerValue"
+ }
+ }
+ ]
+ },
+ "enableInheritance": {
+ "description": "Enable child entities to inherit owner from parent entities when they don't have a specific owner configured",
+ "type": "boolean",
+ "default": true
+ }
+ },
+ "additionalProperties": false,
+ "examples": [
+ {
+ "default": "data-platform-team"
+ },
+ {
+ "default": "data-team",
+ "database": "database-admins",
+ "databaseSchema": "schema-owners",
+ "table": "table-stewards",
+ "enableInheritance": true
+ },
+ {
+ "default": "data-team",
+ "database": {
+ "sales_db": "sales-team",
+ "analytics_db": "analytics-team"
+ },
+ "databaseSchema": {
+ "public": "public-team",
+ "analytics_db.reporting": "reporting-team"
+ },
+ "enableInheritance": true
+ },
+ {
+ "default": "data-team",
+ "table": {
+ "customers": "customer-team",
+ "orders": ["alice", "bob"],
+ "sales_db.public.shared_data": ["charlie", "david", "emma"]
+ },
+ "enableInheritance": true
+ }
+ ]
+}
+
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/ownershipUpdatePayload.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/ownershipUpdatePayload.json
new file mode 100644
index 000000000000..d474d4c97a20
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/ownershipUpdatePayload.json
@@ -0,0 +1,24 @@
+{
+ "$id": "https://open-metadata.org/schema/type/ownershipUpdatePayload.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "OwnershipUpdatePayload",
+ "description": "Payload for Ownership Update tasks.",
+ "javaType": "org.openmetadata.schema.type.OwnershipUpdatePayload",
+ "type": "object",
+ "properties": {
+ "currentOwners": {
+ "description": "Current owners of the entity.",
+ "$ref": "entityReferenceList.json"
+ },
+ "newOwners": {
+ "description": "Proposed new owners for the entity.",
+ "$ref": "entityReferenceList.json"
+ },
+ "reason": {
+ "description": "Reason for the ownership change.",
+ "type": "string"
+ }
+ },
+ "required": ["newOwners"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/paging.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/paging.json
new file mode 100644
index 000000000000..053145e50bbf
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/paging.json
@@ -0,0 +1,34 @@
+{
+ "$id": "https://open-metadata.org/schema/type/paging.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Paging",
+ "description": "Type used for cursor based pagination information in GET list responses.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.Paging",
+ "properties": {
+ "before": {
+ "description": "Before cursor used for getting the previous page (see API pagination for details).",
+ "type": "string"
+ },
+ "after": {
+ "description": "After cursor used for getting the next page (see API pagination for details).",
+ "type": "string"
+ },
+ "offset": {
+ "description": "Offset used in case of offset based pagination.",
+ "type": "integer",
+ "default": null
+ },
+ "limit": {
+ "description": "Limit used in case of offset based pagination.",
+ "type": "integer",
+ "default": null
+ },
+ "total": {
+ "description": "Total number of entries available to page through.",
+ "type": "integer"
+ }
+ },
+ "required": ["total"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/patternRecognizer.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/patternRecognizer.json
new file mode 100644
index 000000000000..74e4ca053679
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/patternRecognizer.json
@@ -0,0 +1,39 @@
+{
+ "$id": "https://open-metadata.org/schema/type/patternRecognizer.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "PatternRecognizer",
+ "description": "Pattern-based recognizer using regular expressions",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.PatternRecognizer",
+ "properties": {
+ "type": {
+ "const": "pattern"
+ },
+ "patterns": {
+ "description": "List of patterns",
+ "type": "array",
+ "items": {
+ "$ref": "recognizers/patterns.json"
+ },
+ "default": []
+ },
+ "regexFlags": {
+ "$ref": "recognizers/regexFlags.json"
+ },
+ "context": {
+ "description": "List of context words that can help boost confidence score",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "default": []
+ },
+ "supportedLanguage": {
+ "description": "Language supported by this recognizer",
+ "$ref": "classificationLanguages.json",
+ "default": "en"
+ }
+ },
+ "required": ["type", "patterns", "supportedLanguage", "regexFlags"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/personaPreferences.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/personaPreferences.json
new file mode 100644
index 000000000000..ef05a095f3cf
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/personaPreferences.json
@@ -0,0 +1,35 @@
+{
+ "$id": "https://open-metadata.org/schema/type/personaPreferences.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "PersonaPreferences",
+ "description": "User-specific preferences for a persona that override default persona UI customization. These are limited customizations that users can apply to personalize their experience while still inheriting the base persona configuration.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.PersonaPreferences",
+ "properties": {
+ "personaId": {
+ "description": "UUID of the persona these preferences belong to.",
+ "$ref": "basic.json#/definitions/uuid"
+ },
+ "personaName": {
+ "description": "Name of the persona for quick reference and linking.",
+ "type": "string"
+ },
+ "landingPageSettings": {
+ "description": "User's personal customizations for the landing page.",
+ "type": "object",
+ "properties": {
+ "headerColor": {
+ "description": "Custom header background color for the landing page.",
+ "type": "string"
+ },
+ "headerImage": {
+ "description": "Reference to a custom header background image (reserved for future use).",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "required": ["personaId", "personaName"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/piiEntity.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/piiEntity.json
new file mode 100644
index 000000000000..887ca7e0b0e6
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/piiEntity.json
@@ -0,0 +1,48 @@
+{
+ "$id": "https://open-metadata.org/schema/type/piiEntity.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "PIIEntity",
+ "description": "Enum of PII (Personally Identifiable Information) tags for classification and detection of sensitive data. Based on Presidio supported entities (https://microsoft.github.io/presidio/supported_entities/).",
+ "type": "string",
+ "javaType": "org.openmetadata.schema.type.PIIEntity",
+ "enum": [
+ "CREDIT_CARD",
+ "CRYPTO",
+ "DATE_TIME",
+ "EMAIL_ADDRESS",
+ "IBAN_CODE",
+ "IP_ADDRESS",
+ "NRP",
+ "LOCATION",
+ "PERSON",
+ "PHONE_NUMBER",
+ "MEDICAL_LICENSE",
+ "URL",
+ "US_BANK_NUMBER",
+ "US_DRIVER_LICENSE",
+ "US_ITIN",
+ "US_PASSPORT",
+ "US_SSN",
+ "UK_NHS",
+ "ES_NIF",
+ "ES_NIE",
+ "IT_FISCAL_CODE",
+ "IT_DRIVER_LICENSE",
+ "IT_VAT_CODE",
+ "IT_PASSPORT",
+ "IT_IDENTITY_CARD",
+ "PL_PESEL",
+ "SG_NRIC_FIN",
+ "SG_UEN",
+ "AU_ABN",
+ "AU_ACN",
+ "AU_TFN",
+ "AU_MEDICARE",
+ "IN_PAN",
+ "IN_AADHAAR",
+ "IN_VEHICLE_REGISTRATION",
+ "IN_VOTER",
+ "IN_PASSPORT",
+ "FI_PERSONAL_IDENTITY_CODE"
+ ]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/pipelineExecutionTrend.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/pipelineExecutionTrend.json
new file mode 100644
index 000000000000..512053391d19
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/pipelineExecutionTrend.json
@@ -0,0 +1,50 @@
+{
+ "$id": "https://open-metadata.org/schema/type/pipelineExecutionTrend.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Pipeline Execution Trend",
+ "description": "Day-wise pipeline execution trend showing succeeded and failed counts",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.PipelineExecutionTrend",
+ "properties": {
+ "timestamp": {
+ "description": "Timestamp for the execution date",
+ "$ref": "basic.json#/definitions/timestamp"
+ },
+ "date": {
+ "type": "string",
+ "description": "Date in YYYY-MM-DD format"
+ },
+ "successCount": {
+ "type": "integer",
+ "default": 0,
+ "description": "Number of successful pipeline executions on this date"
+ },
+ "failedCount": {
+ "type": "integer",
+ "default": 0,
+ "description": "Number of failed pipeline executions on this date"
+ },
+ "pendingCount": {
+ "type": "integer",
+ "default": 0,
+ "description": "Number of pending pipeline executions on this date"
+ },
+ "skippedCount": {
+ "type": "integer",
+ "default": 0,
+ "description": "Number of skipped pipeline executions on this date"
+ },
+ "runningCount": {
+ "type": "integer",
+ "default": 0,
+ "description": "Number of running pipeline executions on this date"
+ },
+ "totalCount": {
+ "type": "integer",
+ "default": 0,
+ "description": "Total number of pipeline executions on this date"
+ }
+ },
+ "required": ["timestamp", "date", "totalCount"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/pipelineExecutionTrendList.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/pipelineExecutionTrendList.json
new file mode 100644
index 000000000000..152a20d5bb52
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/pipelineExecutionTrendList.json
@@ -0,0 +1,56 @@
+{
+ "$id": "https://open-metadata.org/schema/type/pipelineExecutionTrendList.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Pipeline Execution Trend List",
+ "description": "List of pipeline execution trends over a time period",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.PipelineExecutionTrendList",
+ "properties": {
+ "data": {
+ "type": "array",
+ "description": "List of execution trend data points",
+ "items": {
+ "$ref": "pipelineExecutionTrend.json"
+ }
+ },
+ "paging": {
+ "$ref": "paging.json",
+ "description": "Pagination information"
+ },
+ "startDate": {
+ "type": "string",
+ "description": "Start date of the trend period"
+ },
+ "endDate": {
+ "type": "string",
+ "description": "End date of the trend period"
+ },
+ "totalSuccessful": {
+ "type": "integer",
+ "default": 0,
+ "description": "Total successful executions in the period"
+ },
+ "totalFailed": {
+ "type": "integer",
+ "default": 0,
+ "description": "Total failed executions in the period"
+ },
+ "totalExecutions": {
+ "type": "integer",
+ "default": 0,
+ "description": "Total executions in the period"
+ },
+ "dataAvailable": {
+ "type": "boolean",
+ "default": false,
+ "description": "Indicates if data is available from Elasticsearch"
+ },
+ "errorMessage": {
+ "type": ["string", "null"],
+ "default": null,
+ "description": "Error message if data retrieval failed"
+ }
+ },
+ "required": ["data", "dataAvailable"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/pipelineMetrics.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/pipelineMetrics.json
new file mode 100644
index 000000000000..1ab0c8ee1cfe
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/pipelineMetrics.json
@@ -0,0 +1,70 @@
+{
+ "$id": "https://open-metadata.org/schema/type/pipelineMetrics.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Pipeline Metrics",
+ "description": "Aggregated metrics about pipelines",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.PipelineMetrics",
+ "properties": {
+ "totalPipelines": {
+ "type": "integer",
+ "default": 0,
+ "description": "Total count of all pipelines"
+ },
+ "serviceCount": {
+ "type": "integer",
+ "default": 0,
+ "description": "Count of unique pipeline services"
+ },
+ "activePipelines": {
+ "type": "integer",
+ "default": 0,
+ "description": "Count of active pipelines"
+ },
+ "inactivePipelines": {
+ "type": "integer",
+ "default": 0,
+ "description": "Count of inactive pipelines"
+ },
+ "failedPipelines": {
+ "type": "integer",
+ "default": 0,
+ "description": "Count of pipelines with failed last run status"
+ },
+ "successfulPipelines": {
+ "type": "integer",
+ "default": 0,
+ "description": "Count of pipelines with successful last run status"
+ },
+ "pipelinesWithoutStatus": {
+ "type": "integer",
+ "default": 0,
+ "description": "Count of pipelines that have never been executed"
+ },
+ "serviceBreakdown": {
+ "type": "array",
+ "default": [],
+ "description": "Breakdown of pipelines by service",
+ "items": {
+ "type": "object",
+ "properties": {
+ "serviceName": {"type": "string"},
+ "serviceType": {"type": ["string", "null"]},
+ "count": {"type": "integer"}
+ }
+ }
+ },
+ "dataAvailable": {
+ "type": "boolean",
+ "default": false,
+ "description": "Indicates if Elasticsearch data is available"
+ },
+ "errorMessage": {
+ "type": ["string", "null"],
+ "default": null,
+ "description": "Error message if metrics retrieval failed"
+ }
+ },
+ "required": ["totalPipelines", "dataAvailable"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/pipelineObservability.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/pipelineObservability.json
new file mode 100644
index 000000000000..da1fca29cfbd
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/pipelineObservability.json
@@ -0,0 +1,51 @@
+{
+ "$id": "https://open-metadata.org/schema/type/pipelineObservability.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Pipeline Observability",
+ "description": "This schema defines pipeline observability data that can be associated with data assets to track pipeline execution information.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.PipelineObservability",
+ "properties": {
+ "pipeline": {
+ "description": "Reference to the pipeline that processes this data asset.",
+ "$ref": "entityReference.json"
+ },
+ "serviceType": {
+ "$ref": "../entity/services/pipelineService.json#/definitions/pipelineServiceType",
+ "description": "Type of pipeline service"
+ },
+ "scheduleInterval": {
+ "description": "Schedule interval for the pipeline in cron format.",
+ "type": ["string", "null"]
+ },
+ "startTime": {
+ "description": "Start time of the pipeline schedule.",
+ "$ref": "basic.json#/definitions/timestamp"
+ },
+ "endTime": {
+ "description": "End time of the pipeline schedule.",
+ "$ref": "basic.json#/definitions/timestamp"
+ },
+ "lastRunTime": {
+ "description": "Timestamp of the last pipeline execution.",
+ "$ref": "basic.json#/definitions/timestamp"
+ },
+ "lastRunStatus": {
+ "description": "Status of the last pipeline execution.",
+ "type": "string",
+ "enum": [
+ "Successful",
+ "Failed",
+ "Pending",
+ "Skipped",
+ "Running"
+ ]
+ },
+ "averageRunTime": {
+ "description": "Average runtime of the pipeline in milliseconds.",
+ "type": "number"
+ }
+ },
+ "required": ["pipeline"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/pipelineObservabilityResponse.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/pipelineObservabilityResponse.json
new file mode 100644
index 000000000000..eb0a98c0f204
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/pipelineObservabilityResponse.json
@@ -0,0 +1,57 @@
+{
+ "$id": "https://open-metadata.org/schema/type/pipelineObservabilityResponse.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "PipelineObservabilityResponse",
+ "description": "Response containing pipeline observability data grouped by tables",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.PipelineObservabilityResponse",
+ "properties": {
+ "pipelineId": {
+ "$ref": "../type/basic.json#/definitions/uuid",
+ "description": "Pipeline ID for which observability data is requested"
+ },
+ "pipelineFqn": {
+ "description": "Pipeline fully qualified name",
+ "type": "string"
+ },
+ "tableObservabilityData": {
+ "description": "List of table observability data associated with this pipeline",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/tableObservabilityData"
+ }
+ },
+ "paging": {
+ "$ref": "../type/paging.json",
+ "description": "Pagination information for table observability data"
+ }
+ },
+ "required": ["pipelineId", "pipelineFqn", "tableObservabilityData"],
+ "definitions": {
+ "tableObservabilityData": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.TableObservabilityData",
+ "description": "Observability data for a specific table related to the pipeline",
+ "properties": {
+ "tableId": {
+ "$ref": "../type/basic.json#/definitions/uuid",
+ "description": "Table ID"
+ },
+ "tableFqn": {
+ "description": "Table fully qualified name",
+ "type": "string"
+ },
+ "observabilityData": {
+ "description": "Pipeline observability data entries for this table",
+ "type": "array",
+ "items": {
+ "$ref": "pipelineObservability.json"
+ }
+ }
+ },
+ "required": ["tableId", "tableFqn", "observabilityData"],
+ "additionalProperties": false
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/pipelineRuntimeTrend.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/pipelineRuntimeTrend.json
new file mode 100644
index 000000000000..324145649037
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/pipelineRuntimeTrend.json
@@ -0,0 +1,40 @@
+{
+ "$id": "https://open-metadata.org/schema/type/pipelineRuntimeTrend.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Pipeline Runtime Trend",
+ "description": "Day-wise pipeline runtime trend showing max, min, and average runtime",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.PipelineRuntimeTrend",
+ "properties": {
+ "timestamp": {
+ "description": "Timestamp for the date",
+ "$ref": "basic.json#/definitions/timestamp"
+ },
+ "date": {
+ "type": "string",
+ "description": "Date in YYYY-MM-DD format"
+ },
+ "maxRuntime": {
+ "type": "number",
+ "default": 0.0,
+ "description": "Maximum runtime in milliseconds among all pipelines executed on this date"
+ },
+ "minRuntime": {
+ "type": "number",
+ "default": 0.0,
+ "description": "Minimum runtime in milliseconds among all pipelines executed on this date"
+ },
+ "avgRuntime": {
+ "type": "number",
+ "default": 0.0,
+ "description": "Average runtime in milliseconds for pipelines executed on this date"
+ },
+ "totalPipelines": {
+ "type": "integer",
+ "default": 0,
+ "description": "Total number of pipelines executed on this date"
+ }
+ },
+ "required": ["timestamp", "date", "totalPipelines"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/pipelineRuntimeTrendList.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/pipelineRuntimeTrendList.json
new file mode 100644
index 000000000000..84173de0f4a3
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/pipelineRuntimeTrendList.json
@@ -0,0 +1,41 @@
+{
+ "$id": "https://open-metadata.org/schema/type/pipelineRuntimeTrendList.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Pipeline Runtime Trend List",
+ "description": "List of pipeline runtime trends over a time period",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.PipelineRuntimeTrendList",
+ "properties": {
+ "data": {
+ "type": "array",
+ "description": "List of runtime trend data points, one per day",
+ "items": {
+ "$ref": "pipelineRuntimeTrend.json"
+ }
+ },
+ "paging": {
+ "$ref": "paging.json",
+ "description": "Pagination information"
+ },
+ "startDate": {
+ "type": "string",
+ "description": "Start date of the trend period"
+ },
+ "endDate": {
+ "type": "string",
+ "description": "End date of the trend period"
+ },
+ "dataAvailable": {
+ "type": "boolean",
+ "default": false,
+ "description": "Indicates if data is available from Elasticsearch"
+ },
+ "errorMessage": {
+ "type": ["string", "null"],
+ "default": null,
+ "description": "Error message if data retrieval failed"
+ }
+ },
+ "required": ["data", "dataAvailable"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/pipelineSummary.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/pipelineSummary.json
new file mode 100644
index 000000000000..883fe8c3ec2b
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/pipelineSummary.json
@@ -0,0 +1,68 @@
+{
+ "$id": "https://open-metadata.org/schema/type/pipelineSummary.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Pipeline Summary",
+ "description": "Summary information about a pipeline including impacted assets count",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.PipelineSummary",
+ "properties": {
+ "pipelineId": {
+ "type": "string",
+ "format": "uuid",
+ "description": "Unique identifier of the pipeline"
+ },
+ "pipelineName": {
+ "type": "string",
+ "description": "Name of the pipeline"
+ },
+ "pipelineFqn": {
+ "type": "string",
+ "description": "Fully qualified name of the pipeline"
+ },
+ "serviceType": {
+ "$ref": "../entity/services/pipelineService.json#/definitions/pipelineServiceType",
+ "description": "Type of pipeline service"
+ },
+ "startTime": {
+ "$ref": "basic.json#/definitions/timestamp",
+ "default": null,
+ "description": "Start time of the pipeline schedule"
+ },
+ "endTime": {
+ "$ref": "basic.json#/definitions/timestamp",
+ "default": null,
+ "description": "End time of the pipeline schedule"
+ },
+ "lastRunTime": {
+ "$ref": "basic.json#/definitions/timestamp",
+ "default": null,
+ "description": "Timestamp of last pipeline execution"
+ },
+ "lastRunStatus": {
+ "type": ["string", "null"],
+ "enum": ["Successful", "Failed", "Pending", "Skipped", "Running", null],
+ "default": null,
+ "description": "Status of last execution"
+ },
+ "scheduleInterval": {
+ "type": ["string", "null"],
+ "default": null,
+ "description": "Schedule interval as stored in pipeline"
+ },
+ "impactedAssetsCount": {
+ "type": "integer",
+ "default": 0,
+ "description": "Total count of tables impacted by this pipeline"
+ },
+ "impactedAssets": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "default": [],
+ "description": "List of fully qualified names of tables impacted by this pipeline"
+ }
+ },
+ "required": ["pipelineId", "pipelineName", "pipelineFqn", "serviceType", "impactedAssetsCount"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/predefinedRecognizer.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/predefinedRecognizer.json
new file mode 100644
index 000000000000..11b80965c76c
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/predefinedRecognizer.json
@@ -0,0 +1,83 @@
+{
+ "$id": "https://open-metadata.org/schema/type/predefinedRecognizer.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "PredefinedRecognizer",
+ "description": "Built-in recognizer definition. See https://github.com/microsoft/presidio/tree/04920aafbb2958b7359183bf5a72af627cdb2808/presidio-analyzer/presidio_analyzer/predefined_recognizers",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.PredefinedRecognizer",
+ "properties": {
+ "type": {
+ "const": "predefined"
+ },
+ "name": {
+ "description": "Name of the recognizer (defaults to class name if not provided)",
+ "enum": [
+ "AbaRoutingRecognizer",
+ "CreditCardRecognizer",
+ "CryptoRecognizer",
+ "DateRecognizer",
+ "EmailRecognizer",
+ "IbanRecognizer",
+ "IpRecognizer",
+ "NhsRecognizer",
+ "MedicalLicenseRecognizer",
+ "PhoneRecognizer",
+ "SgFinRecognizer",
+ "UrlRecognizer",
+ "UsBankRecognizer",
+ "UsItinRecognizer",
+ "UsLicenseRecognizer",
+ "UsPassportRecognizer",
+ "UsSsnRecognizer",
+ "EsNifRecognizer",
+ "SpacyRecognizer",
+ "StanzaRecognizer",
+ "AuAbnRecognizer",
+ "AuAcnRecognizer",
+ "AuTfnRecognizer",
+ "AuMedicareRecognizer",
+ "TransformersRecognizer",
+ "ItDriverLicenseRecognizer",
+ "ItFiscalCodeRecognizer",
+ "ItVatCodeRecognizer",
+ "ItIdentityCardRecognizer",
+ "ItPassportRecognizer",
+ "InPanRecognizer",
+ "GLiNERRecognizer",
+ "PlPeselRecognizer",
+ "AzureAILanguageRecognizer",
+ "InAadhaarRecognizer",
+ "InVehicleRegistrationRecognizer",
+ "SgUenRecognizer",
+ "InVoterRecognizer",
+ "InPassportRecognizer",
+ "FiPersonalIdentityCodeRecognizer",
+ "EsNieRecognizer",
+ "UkNinoRecognizer"
+ ],
+ "type": "string"
+ },
+ "supportedLanguage": {
+ "description": "Language supported by this recognizer",
+ "$ref": "classificationLanguages.json",
+ "default": "en"
+ },
+ "context": {
+ "description": "List of context words that can help boost confidence score",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "default": []
+ },
+ "supportedEntities": {
+ "description": "PII (Personally Identifiable Information) tags for classification and detection of sensitive data",
+ "type": "array",
+ "items": {
+ "$ref": "piiEntity.json"
+ }
+ }
+ },
+ "required": ["type", "name"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/profile.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/profile.json
new file mode 100644
index 000000000000..4a733ea2f55c
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/profile.json
@@ -0,0 +1,75 @@
+{
+ "$id": "https://open-metadata.org/schema/type/profile.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Profile",
+ "description": "This schema defines the type for a profile of a user, team, or organization.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.Profile",
+ "definitions": {
+ "messagingProvider": {
+ "javaType": "org.openmetadata.schema.type.profile.SubscriptionConfig",
+ "description": "Holds the Subscription Config for different types",
+ "type": "object",
+ "properties": {
+ "slack": {
+ "$ref": "../entity/events/webhook.json"
+ },
+ "msTeams": {
+ "$ref": "../entity/events/webhook.json"
+ },
+ "gChat": {
+ "$ref": "../entity/events/webhook.json"
+ },
+ "generic": {
+ "$ref": "../entity/events/webhook.json"
+ }
+ },
+ "additionalProperties": false
+ },
+ "imageList": {
+ "description": "Links to a list of images of varying resolutions/sizes.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.ImageList",
+ "properties": {
+ "image": {
+ "type": "string",
+ "format": "uri"
+ },
+ "image24": {
+ "type": "string",
+ "format": "uri"
+ },
+ "image32": {
+ "type": "string",
+ "format": "uri"
+ },
+ "image48": {
+ "type": "string",
+ "format": "uri"
+ },
+ "image72": {
+ "type": "string",
+ "format": "uri"
+ },
+ "image192": {
+ "type": "string",
+ "format": "uri"
+ },
+ "image512": {
+ "type": "string",
+ "format": "uri"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "images": {
+ "$ref": "#/definitions/imageList"
+ },
+ "subscription": {
+ "$ref": "#/definitions/messagingProvider"
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/queryParserData.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/queryParserData.json
new file mode 100644
index 000000000000..0a1803b56716
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/queryParserData.json
@@ -0,0 +1,87 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/data/queryParserData.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Query Parser Data",
+ "description": "This schema defines type of query parser data",
+ "type": "object",
+ "definitions": {
+ "parsedData": {
+ "properties": {
+ "tables": {
+ "description": "List of tables used in query",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "databaseName": {
+ "description": "Database associated with the table in the query",
+ "type": "string"
+ },
+ "joins": {
+ "description": "Maps each parsed table name of a query to the join information",
+ "type": "object",
+ "additionalProperties": {
+ ".{1,}": {
+ "type": "array",
+ "items": {
+ "$ref": "tableUsageCount.json#/definitions/tableColumnJoin"
+ }
+ }
+ }
+ },
+ "sql": {
+ "description": "SQL query",
+ "type": "string"
+ },
+ "dialect": {
+ "description": "SQL dialect",
+ "type": "string"
+ },
+ "query_type": {
+ "description": "SQL query type",
+ "type": "string"
+ },
+ "exclude_usage": {
+ "description": "Flag to check if query is to be excluded while processing usage",
+ "type": "boolean"
+ },
+ "serviceName": {
+ "description": "Name that identifies this database service.",
+ "type": "string"
+ },
+ "userName": {
+ "description": "Name of the user that executed the SQL query",
+ "type": "string"
+ },
+ "date": {
+ "description": "Date of execution of SQL query",
+ "type": "string"
+ },
+ "databaseSchema": {
+ "description": "Database schema of the associated with query",
+ "type": "string"
+ },
+ "duration": {
+ "description": "How long did the query took to run in milliseconds.",
+ "type": "number"
+ },
+ "cost": {
+ "description": "Cost of the query execution",
+ "type": "number"
+ }
+ },
+ "required": ["sql", "serviceName", "tables"]
+ }
+ },
+ "properties": {
+ "parsedData": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/parsedData"
+ }
+ }
+ },
+
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/reaction.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/reaction.json
new file mode 100644
index 000000000000..6b15dc4875c9
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/reaction.json
@@ -0,0 +1,43 @@
+{
+ "$id": "https://open-metadata.org/schema/type/reaction.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Reaction",
+ "description": "This schema defines the reaction to an entity or a conversation in the activity feeds.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.Reaction",
+ "definitions": {
+ "reactionList": {
+ "type": "array",
+ "items": {
+ "$ref": "reaction.json"
+ },
+ "default": null
+ },
+ "reactionType": {
+ "javaType": "org.openmetadata.schema.type.ReactionType",
+ "description": "Type of reaction.",
+ "type": "string",
+ "enum": [
+ "thumbsUp",
+ "thumbsDown",
+ "hooray",
+ "laugh",
+ "confused",
+ "heart",
+ "rocket",
+ "eyes"
+ ]
+ }
+ },
+ "properties": {
+ "reactionType": {
+ "$ref": "#/definitions/reactionType"
+ },
+ "user": {
+ "description": "User who reacted.",
+ "$ref": "entityReference.json"
+ }
+ },
+ "required": ["reactionType", "user"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/recognizer.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/recognizer.json
new file mode 100644
index 000000000000..cd89801217b8
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/recognizer.json
@@ -0,0 +1,135 @@
+{
+ "$id": "https://open-metadata.org/schema/type/recognizer.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Recognizer",
+ "description": "Configuration for automatic entity recognition and classification, supporting both pattern-based and context-aware detection methods.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.Recognizer",
+ "definitions": {
+ "recognizerException": {
+ "description": "Exception entry for entities where recognizer should not run",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.RecognizerException",
+ "properties": {
+ "entityLink": {
+ "description": "Entity link to exclude from recognition",
+ "$ref": "basic.json#/definitions/entityLink"
+ },
+ "reason": {
+ "description": "Reason for exclusion",
+ "type": "string"
+ },
+ "addedBy": {
+ "description": "User who added this exception",
+ "$ref": "entityReference.json"
+ },
+ "addedAt": {
+ "$ref": "basic.json#/definitions/timestamp"
+ },
+ "feedbackId": {
+ "description": "ID of the feedback that triggered this exception",
+ "$ref": "basic.json#/definitions/uuid"
+ }
+ },
+ "required": ["entityLink"],
+ "additionalProperties": false
+ },
+ "recognizerType": {
+ "description": "Type of recognizer to use for detection",
+ "type": "string",
+ "enum": ["pattern", "exact_terms", "context", "predefined", "custom"],
+ "default": "pattern"
+ },
+ "recognizerConfig": {
+ "description": "Complete recognizer configuration",
+ "oneOf": [
+ {"$ref": "patternRecognizer.json"},
+ {"$ref": "exactTermsRecognizer.json"},
+ {"$ref": "contextRecognizer.json"},
+ {"$ref": "customRecognizer.json"},
+ {"$ref": "predefinedRecognizer.json"}
+ ]
+ },
+ "patternRecognizerType": {
+ "$ref": "patternRecognizer.json"
+ },
+ "exactTermsRecognizerType": {
+ "$ref": "exactTermsRecognizer.json"
+ },
+ "contextRecognizerType": {
+ "$ref": "contextRecognizer.json"
+ },
+ "customRecognizerType": {
+ "$ref": "customRecognizer.json"
+ },
+ "predefinedRecognizerType": {
+ "$ref": "predefinedRecognizer.json"
+ }
+ },
+ "properties": {
+ "id": {
+ "description": "Unique identifier of the recognizer",
+ "$ref": "basic.json#/definitions/uuid"
+ },
+ "name": {
+ "description": "Name of the recognizer",
+ "$ref": "basic.json#/definitions/entityName"
+ },
+ "displayName": {
+ "description": "Display name for the recognizer",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of what this recognizer detects",
+ "$ref": "basic.json#/definitions/markdown"
+ },
+ "enabled": {
+ "description": "Whether this recognizer is enabled",
+ "type": "boolean",
+ "default": true
+ },
+ "isSystemDefault": {
+ "description": "Whether this is a system default recognizer",
+ "type": "boolean",
+ "default": false
+ },
+ "recognizerConfig": {
+ "$ref": "#/definitions/recognizerConfig"
+ },
+ "confidenceThreshold": {
+ "description": "Minimum confidence score required for detection",
+ "type": "number",
+ "minimum": 0.0,
+ "maximum": 1.0,
+ "default": 0.6
+ },
+ "exceptionList": {
+ "description": "Entity links where this recognizer should NOT run (based on user feedback)",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/recognizerException"
+ },
+ "default": []
+ },
+ "version": {
+ "description": "Version of the recognizer configuration",
+ "$ref": "entityHistory.json#/definitions/entityVersion"
+ },
+ "updatedAt": {
+ "description": "Last update time in Unix epoch time milliseconds",
+ "$ref": "basic.json#/definitions/timestamp"
+ },
+ "updatedBy": {
+ "description": "User who made the update",
+ "type": "string"
+ },
+ "target": {
+ "type": "string",
+ "enum": ["content", "column_name"],
+ "default": "content",
+ "description": "What the recognizer will analyze for classification. `column_name` means it classifies based on the column's name, `content` uses sample data from the column instead."
+ }
+ },
+ "required": ["name", "recognizerConfig"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/recognizerFeedback.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/recognizerFeedback.json
new file mode 100644
index 000000000000..ea51f2011c4b
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/recognizerFeedback.json
@@ -0,0 +1,120 @@
+{
+ "$id": "https://open-metadata.org/schema/type/recognizerFeedback.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "RecognizerFeedback",
+ "description": "User feedback on auto-applied tags from recognizers",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.RecognizerFeedback",
+ "properties": {
+ "id": {
+ "description": "Unique identifier of the feedback",
+ "$ref": "basic.json#/definitions/uuid"
+ },
+ "entityLink": {
+ "description": "Link to the specific field where the tag was incorrectly applied (e.g., <#E::table::customers::columns::company_name>)",
+ "$ref": "basic.json#/definitions/entityLink"
+ },
+ "tagFQN": {
+ "description": "Fully qualified name of the incorrectly applied tag",
+ "$ref": "basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "feedbackType": {
+ "description": "Type of feedback",
+ "type": "string",
+ "enum": [
+ "FALSE_POSITIVE",
+ "INCORRECT_CLASSIFICATION",
+ "OVERLY_BROAD",
+ "CONTEXT_SPECIFIC"
+ ],
+ "default": "FALSE_POSITIVE"
+ },
+ "userReason": {
+ "description": "User-selected reason for reporting",
+ "type": "string",
+ "enum": [
+ "NOT_SENSITIVE_DATA",
+ "WRONG_DATA_TYPE",
+ "INTERNAL_IDENTIFIER",
+ "PUBLIC_INFORMATION",
+ "TEST_DATA",
+ "ENCRYPTED_DATA",
+ "OTHER"
+ ]
+ },
+ "userComments": {
+ "description": "Additional context from the user",
+ "type": "string"
+ },
+ "suggestedTag": {
+ "description": "Tag the user thinks should be applied instead (optional)",
+ "$ref": "basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "sampleValues": {
+ "description": "Example values from this field that triggered the false positive (anonymized)",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "recognizerInfo": {
+ "description": "Information about which recognizer triggered this",
+ "type": "object",
+ "properties": {
+ "recognizerId": {
+ "$ref": "basic.json#/definitions/uuid"
+ },
+ "recognizerName": {
+ "type": "string"
+ },
+ "matchPattern": {
+ "description": "The pattern that matched (for debugging)",
+ "type": "string"
+ },
+ "confidenceScore": {
+ "type": "number"
+ }
+ }
+ },
+ "createdBy": {
+ "description": "User who provided the feedback",
+ "$ref": "entityReference.json"
+ },
+ "createdAt": {
+ "$ref": "basic.json#/definitions/timestamp"
+ },
+ "status": {
+ "description": "Processing status",
+ "type": "string",
+ "enum": ["PENDING", "REVIEWED", "APPLIED", "REJECTED"],
+ "default": "PENDING"
+ },
+ "resolution": {
+ "description": "How this feedback was resolved",
+ "type": "object",
+ "properties": {
+ "action": {
+ "type": "string",
+ "enum": [
+ "ADDED_TO_EXCEPTION_LIST",
+ "PATTERN_ADJUSTED",
+ "THRESHOLD_INCREASED",
+ "RECOGNIZER_DISABLED_FOR_ENTITY",
+ "NO_ACTION_NEEDED"
+ ]
+ },
+ "resolvedBy": {
+ "$ref": "entityReference.json"
+ },
+ "resolvedAt": {
+ "$ref": "basic.json#/definitions/timestamp"
+ },
+ "resolutionNotes": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "required": ["entityLink", "tagFQN", "feedbackType"],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/recognizerMetadata.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/recognizerMetadata.json
new file mode 100644
index 000000000000..334c97f332f6
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/recognizerMetadata.json
@@ -0,0 +1,62 @@
+{
+ "$id": "https://open-metadata.org/schema/type/recognizerMetadata.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "RecognizerMetadata",
+ "description": "Metadata about the recognizer that applied a tag, including scoring and pattern information.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.RecognizerMetadata",
+ "properties": {
+ "recognizerId": {
+ "description": "Unique identifier of the recognizer that applied this tag",
+ "$ref": "basic.json#/definitions/uuid"
+ },
+ "recognizerName": {
+ "description": "Human-readable name of the recognizer",
+ "type": "string"
+ },
+ "score": {
+ "description": "Confidence score assigned by the recognizer (0.0 to 1.0)",
+ "type": "number",
+ "minimum": 0.0,
+ "maximum": 1.0
+ },
+ "target": {
+ "description": "What the recognizer analyzed to apply this tag",
+ "type": "string",
+ "enum": ["content", "column_name"]
+ },
+ "patterns": {
+ "description": "Details of patterns that matched during recognition",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/patternMatch"
+ }
+ }
+ },
+ "required": ["recognizerId", "recognizerName", "score"],
+ "additionalProperties": false,
+ "definitions": {
+ "patternMatch": {
+ "type": "object",
+ "description": "Information about a pattern that matched during recognition",
+ "properties": {
+ "name": {
+ "description": "Name of the pattern that matched",
+ "type": "string"
+ },
+ "regex": {
+ "description": "Regular expression or pattern definition",
+ "type": "string"
+ },
+ "score": {
+ "description": "Confidence score for this specific pattern match",
+ "type": "number",
+ "minimum": 0.0,
+ "maximum": 1.0
+ }
+ },
+ "required": ["name", "score"],
+ "additionalProperties": false
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/recognizers/patterns.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/recognizers/patterns.json
new file mode 100644
index 000000000000..62c280a8008a
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/recognizers/patterns.json
@@ -0,0 +1,27 @@
+{
+ "$id": "https://open-metadata.org/schema/type/recognizers/pattern.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Pattern",
+ "description": "Pattern objects used for PatternRecognizers",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.recognizers.Pattern",
+ "properties": {
+ "name": {
+ "description": "Name of the pattern",
+ "type": "string"
+ },
+ "regex": {
+ "description": "Regular expression pattern",
+ "type": "string"
+ },
+ "score": {
+ "description": "Confidence score for this pattern (0.0 to 1.0)",
+ "type": "number",
+ "minimum": 0.0,
+ "maximum": 1.0,
+ "default": 0.8
+ }
+ },
+ "additionalProperties": false,
+ "required": ["name", "regex"]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/recognizers/regexFlags.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/recognizers/regexFlags.json
new file mode 100644
index 000000000000..23f8cc41021b
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/recognizers/regexFlags.json
@@ -0,0 +1,26 @@
+{
+ "$id": "https://open-metadata.org/schema/type/recognizers/regexFlags.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "RegexFlags",
+ "description": "Regex flags used for PatternRecognizers",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.recognizers.RegexFlags",
+ "properties": {
+ "dotAll": {
+ "description": "DOTALL flag - `.` matches newlines",
+ "type": "boolean",
+ "default": true
+ },
+ "multiline": {
+ "description": "MULTILINE flag - `^` and `$` match line boundaries",
+ "type": "boolean",
+ "default": true
+ },
+ "ignoreCase": {
+ "description": "IGNORECASE flag - case insensitive matching",
+ "type": "boolean",
+ "default": true
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/regexMode.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/regexMode.json
new file mode 100644
index 000000000000..13b0ed874c8c
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/regexMode.json
@@ -0,0 +1,17 @@
+{
+ "$id": "https://open-metadata.org/schema/type/regexMode.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "RegexMode",
+ "description": "Controls how regex filters are applied when listing entities. 'include' returns entities matching the pattern, 'exclude' returns entities that do not match.",
+ "type": "string",
+ "javaType": "org.openmetadata.schema.type.RegexMode",
+ "enum": ["include", "exclude"],
+ "javaEnums": [
+ {
+ "name": "INCLUDE"
+ },
+ {
+ "name": "EXCLUDE"
+ }
+ ]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/reviewPayload.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/reviewPayload.json
new file mode 100644
index 000000000000..4098f1495fa1
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/reviewPayload.json
@@ -0,0 +1,83 @@
+{
+ "$id": "https://open-metadata.org/schema/type/reviewPayload.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "ReviewPayload",
+ "description": "Payload for Review tasks (Pipeline Review, Data Quality Review).",
+ "javaType": "org.openmetadata.schema.type.ReviewPayload",
+ "type": "object",
+ "definitions": {
+ "reviewCriterion": {
+ "javaType": "org.openmetadata.schema.type.ReviewCriterion",
+ "description": "A single review criterion with status.",
+ "type": "object",
+ "properties": {
+ "criterion": {
+ "description": "Name of the criterion.",
+ "type": "string"
+ },
+ "status": {
+ "description": "Status of this criterion.",
+ "type": "string",
+ "enum": ["Pending", "Passed", "Failed", "NotApplicable"]
+ },
+ "notes": {
+ "description": "Notes about this criterion.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "reviewAttachment": {
+ "javaType": "org.openmetadata.schema.type.ReviewAttachment",
+ "description": "An attachment for a review.",
+ "type": "object",
+ "properties": {
+ "name": {
+ "description": "Name of the attachment.",
+ "type": "string"
+ },
+ "url": {
+ "description": "URL to the attachment.",
+ "$ref": "basic.json#/definitions/href"
+ },
+ "description": {
+ "description": "Description of the attachment.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "reviewType": {
+ "description": "Type of review.",
+ "type": "string",
+ "enum": ["Pipeline", "DataQuality", "Schema", "Documentation", "Security", "Custom"]
+ },
+ "reviewCriteria": {
+ "description": "Criteria to be reviewed.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/reviewCriterion"
+ }
+ },
+ "findings": {
+ "description": "Review findings and observations.",
+ "type": "string"
+ },
+ "recommendation": {
+ "description": "Reviewer's recommendation.",
+ "type": "string",
+ "enum": ["Approve", "Reject", "NeedsWork", "Defer"]
+ },
+ "attachments": {
+ "description": "Supporting documents or evidence.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/reviewAttachment"
+ }
+ }
+ },
+ "required": ["reviewType"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/samplingConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/samplingConfig.json
new file mode 100644
index 000000000000..5bc87d8d5a44
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/samplingConfig.json
@@ -0,0 +1,34 @@
+{
+ "$id": "https://open-metadata.org/schema/type/samplingConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SamplingConfig",
+ "description": "Sampling configuration types for the profiler.",
+ "definitions": {
+ "profileSampleConfig": {
+ "title": "Profile Sample Config",
+ "javaType": "org.openmetadata.schema.type.ProfileSampleConfig",
+ "description": "Profile sample configuration supporting static and dynamic sampling strategies.",
+ "type": "object",
+ "properties": {
+ "sampleConfigType": {
+ "title": "Sample Config Type",
+ "description": "Type of sampling to apply. STATIC: fixed sample size. DYNAMIC: sample size determined at runtime based on row count thresholds.",
+ "type": "string",
+ "enum": ["STATIC", "DYNAMIC"],
+ "default": "STATIC"
+ },
+ "config": {
+ "oneOf": [
+ {
+ "$ref": "./dynamicSamplingConfig.json"
+ },
+ {
+ "$ref": "./staticSamplingConfig.json"
+ }
+ ]
+ }
+ },
+ "additionalProperties": false
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/schedule.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/schedule.json
new file mode 100644
index 000000000000..d6cc1d883c8a
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/schedule.json
@@ -0,0 +1,19 @@
+{
+ "$id": "https://open-metadata.org/schema/type/schedule.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Schedule",
+ "description": "This schema defines the type used for the schedule. The schedule has a start time and repeat frequency.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.Schedule",
+ "properties": {
+ "startDate": {
+ "description": "Start date and time of the schedule.",
+ "$ref": "basic.json#/definitions/dateTime"
+ },
+ "repeatFrequency": {
+ "description": "Repeat frequency in ISO 8601 duration format. Example - 'P23DT23H'.",
+ "$ref": "basic.json#/definitions/duration"
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/schema.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/schema.json
new file mode 100644
index 000000000000..6d67da26a9e7
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/schema.json
@@ -0,0 +1,142 @@
+{
+ "$id": "https://open-metadata.org/schema/type/schema.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Topic",
+ "$comment": "@om-entity-type",
+ "description": "This schema defines the Topic entity. A topic is a feed into which message are published to by publishers and read from by consumers in a messaging service.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.MessageSchema",
+ "definitions": {
+ "schemaType": {
+ "description": "Schema type used for the message.",
+ "javaType": "org.openmetadata.schema.type.SchemaType",
+ "enum": [
+ "Avro",
+ "Protobuf",
+ "JSON",
+ "Other",
+ "None"
+ ],
+ "javaEnums": [
+ {
+ "name": "Avro"
+ },
+ {
+ "name": "Protobuf"
+ },
+ {
+ "name": "JSON"
+ },
+ {
+ "name": "Other"
+ },
+ {
+ "name": "None"
+ }
+ ]
+ },
+ "dataTypeTopic": {
+ "javaType": "org.openmetadata.schema.type.FieldDataType",
+ "description": "This enum defines the type of data defined in schema.",
+ "type": "string",
+ "enum": [
+ "RECORD",
+ "NULL",
+ "BOOLEAN",
+ "INT",
+ "LONG",
+ "BYTES",
+ "FLOAT",
+ "DOUBLE",
+ "TIMESTAMP",
+ "TIMESTAMPZ",
+ "TIME",
+ "DATE",
+ "STRING",
+ "ARRAY",
+ "MAP",
+ "ENUM",
+ "UNION",
+ "FIXED",
+ "ERROR",
+ "UNKNOWN"
+ ]
+ },
+ "fieldName": {
+ "description": "Local name (not fully qualified name) of the field. ",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "field": {
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.Field",
+ "javaInterfaces": ["org.openmetadata.schema.FieldInterface"],
+ "description": "This schema defines the nested object to capture protobuf/avro/jsonschema of topic's schema.",
+ "properties": {
+ "name": {
+ "$ref": "#/definitions/fieldName"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this field name.",
+ "type": "string"
+ },
+ "dataType": {
+ "description": "Data type of the field (int, date etc.).",
+ "$ref": "#/definitions/dataTypeTopic"
+ },
+ "dataTypeDisplay": {
+ "description": "Display name used for dataType. This is useful for complex types, such as `array`, `map`, `struct<>`, and union types.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of the column.",
+ "$ref": "basic.json#/definitions/markdown"
+ },
+ "fullyQualifiedName": {
+ "$ref": "basic.json#/definitions/fullyQualifiedEntityName"
+ },
+ "tags": {
+ "description": "Tags associated with the column.",
+ "type": "array",
+ "items": {
+ "$ref": "tagLabel.json"
+ },
+ "default": null
+ },
+ "children": {
+ "description": "Child fields if dataType or arrayDataType is `map`, `record`, `message`",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/field"
+ },
+ "default": null
+ }
+ },
+ "required": [
+ "name",
+ "dataType"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "schemaText": {
+ "description": "Schema used for message serialization. Optional as some topics may not have associated schemas.",
+ "type": "string"
+ },
+ "schemaType": {
+ "description": "Schema used for message serialization.",
+ "$ref": "#/definitions/schemaType",
+ "default": "None"
+ },
+ "schemaFields": {
+ "description": "Columns in this schema.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/field"
+ },
+ "default": []
+ }
+ }
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/staticSamplingConfig.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/staticSamplingConfig.json
new file mode 100644
index 000000000000..7816104b117c
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/staticSamplingConfig.json
@@ -0,0 +1,25 @@
+{
+ "$id": "https://open-metadata.org/schema/type/staticSamplingConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "StaticSamplingConfig",
+ "javaType": "org.openmetadata.schema.type.StaticSamplingConfig",
+ "description": "Configuration for static sampling based on table row count.",
+ "type": "object",
+ "properties": {
+ "profileSample": {
+ "description": "Percentage of data or no. of rows used to compute the profiler metrics and run data quality tests",
+ "type": "number",
+ "default": null,
+ "title": "Profile Sample"
+ },
+ "profileSampleType": {
+ "$ref": "./basic.json#/definitions/profileSampleType",
+ "title": "Profile Sample Type"
+ },
+ "samplingMethodType": {
+ "$ref": "./basic.json#/definitions/samplingMethodType",
+ "title": "Sampling Method Type"
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/status.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/status.json
new file mode 100644
index 000000000000..c699ce75b8fb
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/status.json
@@ -0,0 +1,18 @@
+{
+ "$id": "https://open-metadata.org/schema/type/status.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "EntityStatus",
+ "description": "Status of an entity. It is used for governance and is applied to all the entities in the catalog.",
+ "type": "string",
+ "javaType": "org.openmetadata.schema.type.EntityStatus",
+ "enum": [
+ "Draft",
+ "In Review",
+ "Approved",
+ "Archived",
+ "Deprecated",
+ "Rejected",
+ "Unprocessed"
+ ],
+ "default": "Unprocessed"
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/suggestionPayload.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/suggestionPayload.json
new file mode 100644
index 000000000000..3994ca2947e3
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/suggestionPayload.json
@@ -0,0 +1,44 @@
+{
+ "$id": "https://open-metadata.org/schema/type/suggestionPayload.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "SuggestionPayload",
+ "description": "Payload for Suggestion tasks.",
+ "javaType": "org.openmetadata.schema.type.SuggestionPayload",
+ "type": "object",
+ "properties": {
+ "suggestionType": {
+ "description": "Type of suggestion.",
+ "type": "string",
+ "enum": ["Description", "Tag", "Owner", "Tier", "Domain", "CustomProperty"]
+ },
+ "fieldPath": {
+ "description": "Path to the field being updated (e.g., 'columns.customer_id.description').",
+ "type": "string"
+ },
+ "currentValue": {
+ "description": "Current value of the field.",
+ "type": "string"
+ },
+ "suggestedValue": {
+ "description": "Suggested new value for the field.",
+ "type": "string"
+ },
+ "confidence": {
+ "description": "Confidence score for AI-generated suggestions (0-100).",
+ "type": "number",
+ "minimum": 0,
+ "maximum": 100
+ },
+ "source": {
+ "description": "Source of the suggestion.",
+ "type": "string",
+ "enum": ["User", "Agent", "AutoPilot", "Ingestion"]
+ },
+ "reasoning": {
+ "description": "Explanation of why this suggestion was made.",
+ "type": "string"
+ }
+ },
+ "required": ["suggestionType", "fieldPath", "suggestedValue"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/tableQuery.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/tableQuery.json
new file mode 100644
index 000000000000..b0bb2b8a785d
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/tableQuery.json
@@ -0,0 +1,80 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/data/tableQuery.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Table Queries",
+ "description": "This schema defines structure of table query",
+ "type": "object",
+ "definitions": {
+ "tableQuery": {
+ "properties": {
+ "query": {
+ "description": "SQL query",
+ "type": "string"
+ },
+ "query_type": {
+ "description": "SQL query type",
+ "type": "string"
+ },
+ "exclude_usage": {
+ "description": "Flag to check if query is to be excluded while processing usage",
+ "type": "boolean"
+ },
+ "dialect": {
+ "description": "SQL dialect",
+ "type": "string"
+ },
+ "userName": {
+ "description": "Name of the user that executed the SQL query",
+ "type": "string"
+ },
+ "startTime": {
+ "description": "Start time of execution of SQL query",
+ "type": "string"
+ },
+ "endTime": {
+ "description": "End time of execution of SQL query",
+ "type": "string"
+ },
+ "analysisDate": {
+ "description": "Date of execution of SQL query",
+ "$ref": "./basic.json#/definitions/dateTime"
+ },
+ "aborted": {
+ "description": "Flag to check if query was aborted during execution",
+ "type": "boolean"
+ },
+ "serviceName": {
+ "description": "Name that identifies this database service.",
+ "type": "string"
+ },
+ "databaseName": {
+ "description": "Database associated with the table in the query",
+ "type": "string"
+ },
+ "databaseSchema": {
+ "description": "Database schema of the associated with query",
+ "type": "string"
+ },
+ "duration": {
+ "description": "How long did the query took to run in milliseconds.",
+ "type": "number"
+ },
+ "cost": {
+ "description": "Cost of the query execution",
+ "type": "number"
+ }
+ },
+ "required": ["query", "serviceName"]
+ }
+ },
+ "properties": {
+ "queries": {
+ "description": "Date of execution of SQL query",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/tableQuery"
+ }
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/tableUsageCount.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/tableUsageCount.json
new file mode 100644
index 000000000000..02a23248cb8c
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/tableUsageCount.json
@@ -0,0 +1,118 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/data/tableUsageCount.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Table Usage Count",
+ "description": "This model is the linking between the usage stage and bulk sink steps",
+ "type": "object",
+ "definitions": {
+ "tableColumn": {
+ "type": "object",
+ "properties": {
+ "table": {
+ "description": "Name of the table",
+ "type": "string"
+ },
+ "column": {
+ "description": "Name of the column",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "tableColumnJoin": {
+ "type": "object",
+ "properties": {
+ "tableColumn": {
+ "description": "Source table column",
+ "$ref": "#/definitions/tableColumn"
+ },
+ "joinedWith": {
+ "description": "List of table columns with which the table is joined with",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/tableColumn"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "queryCostWrapper": {
+ "type": "object",
+ "properties": {
+ "cost": {
+ "description": "Avg query cost per execution",
+ "type": "number"
+ },
+ "count": {
+ "description": "Number of times the query was executed",
+ "type": "number"
+ },
+ "date": {
+ "description": "Date of execution of SQL query",
+ "type": "string"
+ },
+ "queryHash": {
+ "description": "Hash of the query",
+ "type": "string"
+ },
+ "query": {
+ "description": "SQL query",
+ "type": "string"
+ },
+ "dialect": {
+ "description": "SQL dialect",
+ "type": "string"
+ },
+ "totalDuration": {
+ "description": "Total duration of the query",
+ "type": "number"
+ }
+ },
+ "required": ["cost", "count"],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "table": {
+ "description": "Name of the table",
+ "type": "string"
+ },
+ "date": {
+ "description": "Date of execution of SQL query",
+ "type": "string"
+ },
+ "databaseName": {
+ "description": "Database associated with the table in the query",
+ "type": "string"
+ },
+ "count": {
+ "description": "Usage count of table",
+ "type": "integer",
+ "default": 1
+ },
+ "databaseSchema": {
+ "description": "Database schema of the associated with table",
+ "type": "string"
+ },
+ "sqlQueries": {
+ "description": "List of SQL Queries associated with table",
+ "type": "array",
+ "items": {
+ "$ref": "../api/data/createQuery.json"
+ }
+ },
+ "joins": {
+ "description": "List of joins associated with table",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/tableColumnJoin"
+ }
+ },
+ "serviceName": {
+ "description": "Name that identifies this database service.",
+ "type": "string"
+ }
+ },
+ "required": ["table", "date", "serviceName"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/tagLabel.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/tagLabel.json
new file mode 100644
index 000000000000..79aab5d0e556
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/tagLabel.json
@@ -0,0 +1,77 @@
+{
+ "$id": "https://open-metadata.org/schema/type/tagLabel.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "TagLabel",
+ "description": "This schema defines the type for labeling an entity with a Tag.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.TagLabel",
+ "definitions": {
+ "tagFQN": {
+ "type": "string"
+ },
+ "TagSource": {
+ "type": "string",
+ "default": "Classification",
+ "enum": ["Classification", "Glossary"]
+ }
+ },
+ "properties": {
+ "tagFQN": {
+ "$ref": "#/definitions/tagFQN"
+ },
+ "name": {
+ "description": "Name of the tag or glossary term.",
+ "type": "string"
+ },
+ "displayName": {
+ "description": "Display Name that identifies this tag.",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description for the tag label.",
+ "$ref": "../type/basic.json#/definitions/markdown"
+ },
+ "style": {
+ "$ref": "../type/basic.json#/definitions/style"
+ },
+ "source": {
+ "description": "Label is from Tags or Glossary.",
+ "$ref": "#/definitions/TagSource"
+ },
+ "labelType": {
+ "description": "Label type describes how a tag label was applied. 'Manual' indicates the tag label was applied by a person. 'Derived' indicates a tag label was derived using the associated tag relationship (see Classification.json for more details). 'Propagated` indicates a tag label was propagated from upstream based on lineage. 'Automated' is used when a tool was used to determine the tag label.",
+ "type": "string",
+ "enum": ["Manual", "Propagated", "Automated", "Derived", "Generated"],
+ "default": "Manual"
+ },
+ "state": {
+ "description": "'Suggested' state is used when a tag label is suggested by users or tools. Owner of the entity must confirm the suggested labels before it is marked as 'Confirmed'.",
+ "type": "string",
+ "enum": ["Suggested", "Confirmed"],
+ "default": "Confirmed"
+ },
+ "href": {
+ "description": "Link to the tag resource.",
+ "$ref": "basic.json#/definitions/href"
+ },
+ "reason": {
+ "type": "string",
+ "description": "An explanation of why this tag was proposed, specially for autoclassification tags"
+ },
+ "appliedAt": {
+ "type": "string",
+ "format": "date-time",
+ "description": "Timestamp when this tag was applied in ISO 8601 format"
+ },
+ "appliedBy": {
+ "type": "string",
+ "description": "Who it is that applied this tag (e.g: a bot, AI or a human)"
+ },
+ "metadata": {
+ "description": "Additional metadata associated with this tag label, such as recognizer information for automatically applied tags.",
+ "$ref": "tagLabelMetadata.json"
+ }
+ },
+ "required": ["tagFQN", "source", "labelType", "state"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/tagLabelMetadata.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/tagLabelMetadata.json
new file mode 100644
index 000000000000..00dc5c61cde1
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/tagLabelMetadata.json
@@ -0,0 +1,20 @@
+{
+ "$id": "https://open-metadata.org/schema/type/tagLabelMetadata.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "TagLabelMetadata",
+ "description": "Additional metadata associated with a tag label, including information about how the tag was applied.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.TagLabelMetadata",
+ "properties": {
+ "recognizer": {
+ "description": "Metadata about the recognizer that automatically applied this tag",
+ "$ref": "tagLabelRecognizerMetadata.json"
+ },
+ "expiryDate": {
+ "description": "Epoch time in milliseconds when the certification tag expires",
+ "type": "integer",
+ "format": "utc-millisec"
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/tagLabelRecognizerMetadata.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/tagLabelRecognizerMetadata.json
new file mode 100644
index 000000000000..ec3e4bb3e855
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/tagLabelRecognizerMetadata.json
@@ -0,0 +1,62 @@
+{
+ "$id": "https://open-metadata.org/schema/type/tagLabelRecognizerMetadata.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "TagLabelRecognizerMetadata",
+ "description": "Metadata about the recognizer that applied a tag, including scoring and pattern information.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.TagLabelRecognizerMetadata",
+ "properties": {
+ "recognizerId": {
+ "description": "Unique identifier of the recognizer that applied this tag",
+ "$ref": "basic.json#/definitions/uuid"
+ },
+ "recognizerName": {
+ "description": "Human-readable name of the recognizer",
+ "type": "string"
+ },
+ "score": {
+ "description": "Confidence score assigned by the recognizer (0.0 to 1.0)",
+ "type": "number",
+ "minimum": 0.0,
+ "maximum": 1.0
+ },
+ "target": {
+ "description": "What the recognizer analyzed to apply this tag",
+ "type": "string",
+ "enum": ["content", "column_name"]
+ },
+ "patterns": {
+ "description": "Details of patterns that matched during recognition",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/patternMatch"
+ }
+ }
+ },
+ "required": ["recognizerId", "recognizerName", "score"],
+ "additionalProperties": false,
+ "definitions": {
+ "patternMatch": {
+ "type": "object",
+ "description": "Information about a pattern that matched during recognition",
+ "properties": {
+ "name": {
+ "description": "Name of the pattern that matched",
+ "type": "string"
+ },
+ "regex": {
+ "description": "Regular expression or pattern definition",
+ "type": "string"
+ },
+ "score": {
+ "description": "Confidence score for this specific pattern match",
+ "type": "number",
+ "minimum": 0.0,
+ "maximum": 1.0
+ }
+ },
+ "required": ["name", "score"],
+ "additionalProperties": false
+ }
+ }
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/tagUpdatePayload.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/tagUpdatePayload.json
new file mode 100644
index 000000000000..b524f7b4f37c
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/tagUpdatePayload.json
@@ -0,0 +1,54 @@
+{
+ "$id": "https://open-metadata.org/schema/type/tagUpdatePayload.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "TagUpdatePayload",
+ "description": "Payload for Tag Update tasks.",
+ "javaType": "org.openmetadata.schema.type.TagUpdatePayload",
+ "type": "object",
+ "properties": {
+ "fieldPath": {
+ "description": "Path to the field being tagged (e.g., 'columns.customer_id' or empty for entity-level).",
+ "type": "string"
+ },
+ "operation": {
+ "description": "Type of tag operation.",
+ "type": "string",
+ "enum": ["Add", "Remove", "Replace"],
+ "default": "Add"
+ },
+ "currentTags": {
+ "description": "Current tags on the field/entity.",
+ "type": "array",
+ "items": {
+ "$ref": "tagLabel.json"
+ }
+ },
+ "tagsToAdd": {
+ "description": "Tags to be added.",
+ "type": "array",
+ "items": {
+ "$ref": "tagLabel.json"
+ }
+ },
+ "tagsToRemove": {
+ "description": "Tags to be removed.",
+ "type": "array",
+ "items": {
+ "$ref": "tagLabel.json"
+ }
+ },
+ "source": {
+ "description": "Source of the tag update.",
+ "type": "string",
+ "enum": ["User", "Agent", "AutoPilot", "Classification"],
+ "default": "User"
+ },
+ "confidence": {
+ "description": "Confidence score for AI-generated tag suggestions (0-100).",
+ "type": "number",
+ "minimum": 0,
+ "maximum": 100
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/termRelation.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/termRelation.json
new file mode 100644
index 000000000000..052f9d361fa0
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/termRelation.json
@@ -0,0 +1,22 @@
+{
+ "$id": "https://open-metadata.org/schema/type/termRelation.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "TermRelation",
+ "description": "This schema defines the TermRelation type used for establishing typed semantic relationships between glossary terms.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.TermRelation",
+ "properties": {
+ "relationType": {
+ "description": "Type of the relation (e.g., 'broader', 'narrower', 'synonym', 'relatedTo'). Defaults to 'relatedTo' for backward compatibility.",
+ "type": "string",
+ "pattern": "^[a-zA-Z][a-zA-Z0-9]*$",
+ "default": "relatedTo"
+ },
+ "term": {
+ "description": "Reference to the related glossary term.",
+ "$ref": "entityReference.json"
+ }
+ },
+ "required": ["term"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/testCaseResolutionPayload.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/testCaseResolutionPayload.json
new file mode 100644
index 000000000000..7e3f66dbb4fb
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/testCaseResolutionPayload.json
@@ -0,0 +1,37 @@
+{
+ "$id": "https://open-metadata.org/schema/type/testCaseResolutionPayload.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "TestCaseResolutionPayload",
+ "description": "Payload for Test Case Resolution tasks. Links to the TestCaseResolutionStatus workflow via stateId.",
+ "javaType": "org.openmetadata.schema.type.TestCaseResolutionPayload",
+ "type": "object",
+ "properties": {
+ "testCaseResolutionStatusId": {
+ "description": "State ID linking to the TestCaseResolutionStatus workflow. This groups all status updates for a single incident lifecycle.",
+ "$ref": "basic.json#/definitions/uuid"
+ },
+ "testCaseResult": {
+ "description": "Reference to the failed test case result.",
+ "$ref": "entityReference.json"
+ },
+ "severity": {
+ "description": "Severity of the incident.",
+ "type": "string",
+ "enum": ["Severity1", "Severity2", "Severity3", "Severity4", "Severity5"]
+ },
+ "failureReason": {
+ "description": "Reason for the test failure.",
+ "type": "string"
+ },
+ "resolution": {
+ "description": "How the failure was resolved.",
+ "type": "string"
+ },
+ "rootCause": {
+ "description": "Root cause analysis.",
+ "type": "string"
+ }
+ },
+ "required": ["testCaseResolutionStatusId"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/tierUpdatePayload.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/tierUpdatePayload.json
new file mode 100644
index 000000000000..089983096bc2
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/tierUpdatePayload.json
@@ -0,0 +1,24 @@
+{
+ "$id": "https://open-metadata.org/schema/type/tierUpdatePayload.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "TierUpdatePayload",
+ "description": "Payload for Tier Update tasks.",
+ "javaType": "org.openmetadata.schema.type.TierUpdatePayload",
+ "type": "object",
+ "properties": {
+ "currentTier": {
+ "description": "Current tier of the entity.",
+ "$ref": "tagLabel.json"
+ },
+ "newTier": {
+ "description": "Proposed new tier for the entity.",
+ "$ref": "tagLabel.json"
+ },
+ "reason": {
+ "description": "Reason for the tier change.",
+ "type": "string"
+ }
+ },
+ "required": ["newTier"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/usageDetails.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/usageDetails.json
new file mode 100644
index 000000000000..0a7444c25311
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/usageDetails.json
@@ -0,0 +1,50 @@
+{
+ "$id": "https://open-metadata.org/schema/type/usageDetails.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "UsageDetails",
+ "description": "This schema defines the type for usage details. Daily, weekly, and monthly aggregation of usage is computed along with the percentile rank based on the usage for a given day.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.UsageDetails",
+ "definitions": {
+ "usageStats": {
+ "description": "Type used to return usage statistics.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.UsageStats",
+ "properties": {
+ "count": {
+ "description": "Usage count of a data asset on the start date.",
+ "type": "integer",
+ "minimum": 0
+ },
+ "percentileRank": {
+ "description": "Optional daily percentile rank data asset use when relevant.",
+ "type": "number",
+ "minimum": 0,
+ "maximum": 100
+ }
+ },
+ "required": ["count"],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "dailyStats": {
+ "description": "Daily usage stats of a data asset on the start date.",
+ "$ref": "#/definitions/usageStats"
+ },
+ "weeklyStats": {
+ "description": "Weekly (last 7 days) rolling usage stats of a data asset on the start date.",
+ "$ref": "#/definitions/usageStats"
+ },
+ "monthlyStats": {
+ "description": "Monthly (last 30 days) rolling usage stats of a data asset on the start date.",
+ "$ref": "#/definitions/usageStats"
+ },
+ "date": {
+ "description": "Date in UTC.",
+ "$ref": "basic.json#/definitions/date"
+ }
+ },
+ "required": ["dailyStats", "date"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/usageRequest.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/usageRequest.json
new file mode 100644
index 000000000000..aa9066cb2032
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/usageRequest.json
@@ -0,0 +1,20 @@
+{
+ "$id": "https://open-metadata.org/schema/entity/data/usageRequest.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Usage Request",
+ "description": "This schema defines type of table usage request used to publish the usage count on a particular date",
+ "javaType": "org.openmetadata.schema.type.UsageRequest",
+ "type": "object",
+ "properties": {
+ "date": {
+ "description": "Date of execution of SQL query",
+ "type": "string"
+ },
+ "count": {
+ "description": "Usage count of table",
+ "type": "integer"
+ }
+ },
+ "required": ["date", "count"],
+ "additionalProperties": false
+}
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/votes.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/votes.json
new file mode 100644
index 000000000000..14c8e90a73a2
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/votes.json
@@ -0,0 +1,41 @@
+{
+ "$id": "https://open-metadata.org/schema/type/votes.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Votes",
+ "description": "This schema defines the Votes for a Data Asset.",
+ "type": "object",
+ "javaType": "org.openmetadata.schema.type.Votes",
+ "definitions": {
+ "voteType": {
+ "description": "Vote Type",
+ "type": "string",
+ "enum": [
+ "votedUp",
+ "votedDown",
+ "unVoted"
+ ],
+ "default": "unVoted"
+ }
+ },
+ "properties": {
+ "upVotes": {
+ "description": "Total up-votes the entity has",
+ "type": "integer",
+ "default": 0
+ },
+ "downVotes": {
+ "description": "Total down-votes the entity has",
+ "type": "integer",
+ "default": 0
+ },
+ "upVoters": {
+ "description": "List of all the Users who upVoted",
+ "$ref": "./entityReferenceList.json"
+ },
+ "downVoters": {
+ "description": "List of all the Users who downVoted",
+ "$ref": "./entityReferenceList.json"
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/json/schema/type/workflowTriggerFields.json b/openmetadata-spec/bin/src/main/resources/json/schema/type/workflowTriggerFields.json
new file mode 100644
index 000000000000..aef712623bd0
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/json/schema/type/workflowTriggerFields.json
@@ -0,0 +1,42 @@
+{
+ "$id": "https://open-metadata.org/schema/type/workflowTriggerFields.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "WorkflowTriggerFields",
+ "description": "Fields that can trigger workflow execution when changed",
+ "type": "string",
+ "javaType": "org.openmetadata.schema.type.WorkflowTriggerFields",
+ "enum": [
+ "name",
+ "displayName",
+ "fullyQualifiedName",
+ "description",
+ "owners",
+ "reviewers",
+ "tags",
+ "certification",
+ "domains",
+ "dataProducts",
+ "extension",
+ "deleted",
+ "synonyms",
+ "relatedTerms",
+ "references",
+ "glossary",
+ "parent",
+ "children",
+ "experts",
+ "style",
+ "lifeCycle",
+ "schema",
+ "semantics",
+ "qualityExpectations",
+ "termsOfUse",
+ "security",
+ "sla",
+ "testSuite",
+ "latestResult",
+ "consumesFrom",
+ "providesTo",
+ "lifecycleStage"
+ ]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/rdf/contexts/base.jsonld b/openmetadata-spec/bin/src/main/resources/rdf/contexts/base.jsonld
new file mode 100644
index 000000000000..796cd6499ce2
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/rdf/contexts/base.jsonld
@@ -0,0 +1,241 @@
+{
+ "@context": {
+ "@version": 1.1,
+ "om": "https://open-metadata.org/ontology/",
+ "dcat": "http://www.w3.org/ns/dcat#",
+ "prov": "http://www.w3.org/ns/prov#",
+ "skos": "http://www.w3.org/2004/02/skos/core#",
+ "void": "http://rdfs.org/ns/void#",
+ "dct": "http://purl.org/dc/terms/",
+ "rdfs": "http://www.w3.org/2000/01/rdf-schema#",
+ "xsd": "http://www.w3.org/2001/XMLSchema#",
+ "owl": "http://www.w3.org/2002/07/owl#",
+ "foaf": "http://xmlns.com/foaf/0.1/",
+
+ "id": "@id",
+ "type": "@type",
+ "name": {
+ "@id": "rdfs:label",
+ "@type": "xsd:string"
+ },
+ "displayName": {
+ "@id": "skos:prefLabel",
+ "@type": "xsd:string"
+ },
+ "fullyQualifiedName": {
+ "@id": "om:fullyQualifiedName",
+ "@type": "xsd:string"
+ },
+ "description": {
+ "@id": "dct:description",
+ "@type": "xsd:string"
+ },
+ "version": {
+ "@id": "dct:hasVersion",
+ "@type": "xsd:decimal"
+ },
+ "updatedAt": {
+ "@id": "dct:modified",
+ "@type": "xsd:dateTime"
+ },
+ "updatedBy": {
+ "@id": "dct:contributor",
+ "@type": "@id"
+ },
+ "href": {
+ "@id": "rdfs:seeAlso",
+ "@type": "@id"
+ },
+ "deleted": {
+ "@id": "om:isDeleted",
+ "@type": "xsd:boolean"
+ },
+ "provider": {
+ "@id": "dct:publisher",
+ "@type": "xsd:string"
+ },
+ "disabled": {
+ "@id": "om:isDisabled",
+ "@type": "xsd:boolean"
+ },
+ "retentionPeriod": {
+ "@id": "om:retentionPeriod",
+ "@type": "xsd:string"
+ },
+ "extension": {
+ "@id": "om:hasExtension",
+ "@type": "@id"
+ },
+ "sourceUrl": {
+ "@id": "dct:source",
+ "@type": "@id"
+ },
+ "domain": {
+ "@id": "om:belongsToDomain",
+ "@type": "@id"
+ },
+ "dataProducts": {
+ "@id": "om:hasDataProduct",
+ "@type": "@id",
+ "@container": "@set"
+ },
+ "votes": {
+ "@id": "om:hasVotes",
+ "@type": "@id"
+ },
+ "lifeCycle": {
+ "@id": "om:hasLifeCycle",
+ "@type": "@id"
+ },
+ "tags": {
+ "@id": "om:hasTag",
+ "@type": "@id",
+ "@container": "@set"
+ },
+ "customProperties": {
+ "@id": "om:hasCustomProperty",
+ "@type": "@id",
+ "@container": "@set"
+ },
+ "changeDescription": {
+ "@id": "om:hasChangeDescription",
+ "@type": "@id"
+ },
+ "owners": {
+ "@id": "om:hasOwner",
+ "@type": "@id",
+ "@container": "@set"
+ },
+ "experts": {
+ "@id": "om:hasExpert",
+ "@type": "@id",
+ "@container": "@set"
+ },
+ "followers": {
+ "@id": "om:hasFollower",
+ "@type": "@id",
+ "@container": "@set"
+ },
+ "children": {
+ "@id": "om:hasChild",
+ "@type": "@id",
+ "@container": "@list"
+ },
+ "hasGlossaryTerm": {
+ "@id": "om:hasGlossaryTerm",
+ "@type": "@id"
+ },
+ "Tag": "om:Tag",
+ "TagLabel": "om:TagLabel",
+ "labelType": "om:labelType",
+ "tagState": "om:tagState",
+ "tagSource": "om:tagSource",
+
+ "ChangeDescription": "om:ChangeDescription",
+ "previousVersion": {
+ "@id": "om:previousVersion",
+ "@type": "xsd:decimal"
+ },
+ "fieldsAdded": {
+ "@id": "om:fieldsAdded",
+ "@type": "@id",
+ "@container": "@set"
+ },
+ "fieldsUpdated": {
+ "@id": "om:fieldsUpdated",
+ "@type": "@id",
+ "@container": "@set"
+ },
+ "fieldsDeleted": {
+ "@id": "om:fieldsDeleted",
+ "@type": "@id",
+ "@container": "@set"
+ },
+
+ "FieldChange": "om:FieldChange",
+ "fieldName": {
+ "@id": "om:fieldName",
+ "@type": "xsd:string"
+ },
+ "oldValue": {
+ "@id": "om:oldValue",
+ "@type": "xsd:string"
+ },
+ "newValue": {
+ "@id": "om:newValue",
+ "@type": "xsd:string"
+ },
+
+ "Votes": "om:Votes",
+ "upVotes": {
+ "@id": "om:upVotes",
+ "@type": "xsd:integer"
+ },
+ "downVotes": {
+ "@id": "om:downVotes",
+ "@type": "xsd:integer"
+ },
+ "upVoters": {
+ "@id": "om:upVoters",
+ "@type": "@id",
+ "@container": "@set"
+ },
+ "downVoters": {
+ "@id": "om:downVoters",
+ "@type": "@id",
+ "@container": "@set"
+ },
+
+ "LifeCycle": "om:LifeCycle",
+ "created": {
+ "@id": "om:lifecycleCreated",
+ "@type": "@id"
+ },
+ "updated": {
+ "@id": "om:lifecycleUpdated",
+ "@type": "@id"
+ },
+ "accessed": {
+ "@id": "om:lifecycleAccessed",
+ "@type": "@id"
+ },
+
+ "AccessDetails": "om:AccessDetails",
+ "timestamp": {
+ "@id": "om:accessTimestamp",
+ "@type": "xsd:dateTime"
+ },
+ "accessedBy": {
+ "@id": "om:accessedBy",
+ "@type": "@id"
+ },
+ "accessedByAProcess": {
+ "@id": "om:accessedByProcess",
+ "@type": "@id"
+ },
+
+ "CustomProperty": "om:CustomProperty",
+ "propertyName": {
+ "@id": "om:propertyName",
+ "@type": "xsd:string"
+ },
+ "propertyValue": {
+ "@id": "om:propertyValue",
+ "@type": "xsd:string"
+ },
+ "propertyType": {
+ "@id": "om:propertyType",
+ "@type": "xsd:string"
+ },
+
+ "Extension": "om:Extension",
+ "extensionKey": {
+ "@id": "om:extensionKey",
+ "@type": "xsd:string"
+ },
+ "extensionValue": {
+ "@id": "om:extensionValue",
+ "@type": "xsd:string"
+ }
+ }
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/rdf/contexts/dataAsset-complete.jsonld b/openmetadata-spec/bin/src/main/resources/rdf/contexts/dataAsset-complete.jsonld
new file mode 100644
index 000000000000..d4b825ba39ad
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/rdf/contexts/dataAsset-complete.jsonld
@@ -0,0 +1,421 @@
+{
+ "@context": [
+ "./base.jsonld",
+ {
+ "Table": {
+ "@id": "om:Table",
+ "@type": ["om:DataAsset", "dcat:Dataset"]
+ },
+ "Database": {
+ "@id": "om:Database",
+ "@type": ["om:DataAsset", "dcat:Catalog"]
+ },
+ "DatabaseSchema": {
+ "@id": "om:DatabaseSchema",
+ "@type": ["om:DataAsset", "dcat:Catalog"]
+ },
+ "StoredProcedure": {
+ "@id": "om:StoredProcedure",
+ "@type": ["om:DataAsset", "dcat:Dataset"]
+ },
+ "Query": {
+ "@id": "om:Query",
+ "@type": ["om:DataAsset", "dcat:Dataset"]
+ },
+ "Pipeline": {
+ "@id": "om:Pipeline",
+ "@type": ["om:DataAsset", "dcat:DataService"]
+ },
+ "Task": {
+ "@id": "om:Task",
+ "@type": ["om:DataAsset", "dcat:Dataset"]
+ },
+ "Dashboard": {
+ "@id": "om:Dashboard",
+ "@type": ["om:DataAsset", "dcat:Dataset"]
+ },
+ "Chart": {
+ "@id": "om:Chart",
+ "@type": ["om:DataAsset", "dcat:Dataset"]
+ },
+ "DashboardDataModel": {
+ "@id": "om:DashboardDataModel",
+ "@type": ["om:DataAsset", "dcat:Dataset"]
+ },
+ "Report": {
+ "@id": "om:Report",
+ "@type": ["om:DataAsset", "dcat:Dataset"]
+ },
+ "Topic": {
+ "@id": "om:Topic",
+ "@type": ["om:DataAsset", "dcat:Dataset"]
+ },
+ "Container": {
+ "@id": "om:Container",
+ "@type": ["om:DataAsset", "dcat:Dataset"]
+ },
+ "MlModel": {
+ "@id": "om:MlModel",
+ "@type": ["om:DataAsset", "dcat:Dataset"]
+ },
+ "Metric": {
+ "@id": "om:Metric",
+ "@type": ["om:DataAsset", "dcat:Dataset"]
+ },
+ "SearchIndex": {
+ "@id": "om:SearchIndex",
+ "@type": ["om:DataAsset", "dcat:Dataset"]
+ },
+ "APICollection": {
+ "@id": "om:APICollection",
+ "@type": ["om:DataAsset", "dcat:DataService"]
+ },
+ "APIEndpoint": {
+ "@id": "om:APIEndpoint",
+ "@type": ["om:DataAsset", "dcat:DataService"]
+ },
+ "Directory": {
+ "@id": "om:Directory",
+ "@type": ["om:DataAsset", "dcat:Dataset"]
+ },
+ "File": {
+ "@id": "om:File",
+ "@type": ["om:DataAsset", "dcat:Distribution"]
+ },
+ "Spreadsheet": {
+ "@id": "om:Spreadsheet",
+ "@type": ["om:DataAsset", "dcat:Dataset"]
+ },
+ "Worksheet": {
+ "@id": "om:Worksheet",
+ "@type": ["om:DataAsset", "dcat:Dataset"]
+ },
+ "columns": {
+ "@id": "om:hasColumn",
+ "@type": "@id",
+ "@container": "@list"
+ },
+ "database": {
+ "@id": "om:belongsToDatabase",
+ "@type": "@id"
+ },
+ "databaseSchema": {
+ "@id": "om:belongsToSchema",
+ "@type": "@id"
+ },
+ "service": {
+ "@id": "om:belongsToService",
+ "@type": "@id"
+ },
+ "serviceType": {
+ "@id": "om:hasServiceType",
+ "@type": "xsd:string"
+ },
+ "tableType": {
+ "@id": "om:hasTableType",
+ "@type": "xsd:string"
+ },
+ "columnNames": {
+ "@id": "om:hasColumnName",
+ "@type": "xsd:string",
+ "@container": "@list"
+ },
+ "tablePartition": {
+ "@id": "om:hasPartition",
+ "@type": "@json"
+ },
+ "tableConstraints": {
+ "@id": "om:hasConstraint",
+ "@type": "@json",
+ "@container": "@list"
+ },
+ "sampleData": {
+ "@id": "om:hasSampleData",
+ "@type": "@json"
+ },
+ "tableProfile": {
+ "@id": "om:hasProfile",
+ "@type": "@json"
+ },
+ "location": {
+ "@id": "om:hasLocation",
+ "@type": "xsd:string"
+ },
+ "schemaDefinition": {
+ "@id": "om:hasSchemaDefinition",
+ "@type": "xsd:string"
+ },
+ "dataModel": {
+ "@id": "om:hasDataModel",
+ "@type": "@json"
+ },
+ "fileFormat": {
+ "@id": "om:hasFileFormat",
+ "@type": "xsd:string"
+ },
+ "dataLength": {
+ "@id": "om:hasDataLength",
+ "@type": "xsd:integer"
+ },
+ "isPartitioned": {
+ "@id": "om:isPartitioned",
+ "@type": "xsd:boolean"
+ },
+ "numberOfObjects": {
+ "@id": "void:entities",
+ "@type": "xsd:integer"
+ },
+ "size": {
+ "@id": "dcat:byteSize",
+ "@type": "xsd:double"
+ },
+ "storedProcedureCode": {
+ "@id": "om:hasProcedureCode",
+ "@type": "xsd:string"
+ },
+ "query": {
+ "@id": "om:hasQueryText",
+ "@type": "xsd:string"
+ },
+ "queryUsedIn": {
+ "@id": "om:queryUsedIn",
+ "@type": "@id",
+ "@container": "@set"
+ },
+ "queryDate": {
+ "@id": "om:queryExecutedAt",
+ "@type": "xsd:dateTime"
+ },
+ "duration": {
+ "@id": "om:queryDuration",
+ "@type": "xsd:integer"
+ },
+ "users": {
+ "@id": "om:executedBy",
+ "@type": "@id",
+ "@container": "@set"
+ },
+ "apiDefinition": {
+ "@id": "om:hasAPIDefinition",
+ "@type": "@json"
+ },
+ "endpointURL": {
+ "@id": "om:hasEndpointURL",
+ "@type": "@id"
+ },
+ "requestMethod": {
+ "@id": "om:hasRequestMethod",
+ "@type": "xsd:string"
+ },
+ "requestBody": {
+ "@id": "om:hasRequestBody",
+ "@type": "@json"
+ },
+ "responseSchema": {
+ "@id": "om:hasResponseSchema",
+ "@type": "@json"
+ },
+ "apiCollection": {
+ "@id": "om:belongsToAPICollection",
+ "@type": "@id"
+ },
+ "path": {
+ "@id": "om:hasPath",
+ "@type": "xsd:string"
+ },
+ "mimeType": {
+ "@id": "dcat:mediaType",
+ "@type": "xsd:string"
+ },
+ "parent": {
+ "@id": "om:hasParent",
+ "@type": "@id"
+ },
+ "children": {
+ "@id": "om:hasChild",
+ "@type": "@id",
+ "@container": "@list"
+ },
+ "directoryType": {
+ "@id": "om:hasDirectoryType",
+ "@type": "xsd:string"
+ },
+ "fileSize": {
+ "@id": "dcat:byteSize",
+ "@type": "xsd:long"
+ },
+ "fileChecksum": {
+ "@id": "om:hasChecksum",
+ "@type": "xsd:string"
+ },
+ "worksheets": {
+ "@id": "om:hasWorksheet",
+ "@type": "@id",
+ "@container": "@list"
+ },
+ "spreadsheet": {
+ "@id": "om:belongsToSpreadsheet",
+ "@type": "@id"
+ },
+ "rows": {
+ "@id": "om:hasRowCount",
+ "@type": "xsd:integer"
+ },
+ "fields": {
+ "@id": "om:hasField",
+ "@type": "@json",
+ "@container": "@list"
+ },
+ "indexType": {
+ "@id": "om:hasIndexType",
+ "@type": "xsd:string"
+ },
+ "searchIndexSettings": {
+ "@id": "om:hasIndexSettings",
+ "@type": "@json"
+ },
+ "mlFeatures": {
+ "@id": "om:hasMLFeature",
+ "@type": "@json",
+ "@container": "@list"
+ },
+ "mlHyperParameters": {
+ "@id": "om:hasMLHyperParameter",
+ "@type": "@json"
+ },
+ "mlStore": {
+ "@id": "om:hasMLStore",
+ "@type": "@json"
+ },
+ "algorithm": {
+ "@id": "om:hasAlgorithm",
+ "@type": "xsd:string"
+ },
+ "target": {
+ "@id": "om:hasTarget",
+ "@type": "xsd:string"
+ },
+ "dashboard": {
+ "@id": "om:hasMLDashboard",
+ "@type": "@id"
+ },
+ "server": {
+ "@id": "om:hasServer",
+ "@type": "@json"
+ },
+ "pipelineStatus": {
+ "@id": "om:hasPipelineStatus",
+ "@type": "@json"
+ },
+ "pipelineUrl": {
+ "@id": "om:hasPipelineURL",
+ "@type": "@id"
+ },
+ "tasks": {
+ "@id": "om:hasTask",
+ "@type": "@id",
+ "@container": "@list"
+ },
+ "startDate": {
+ "@id": "om:hasStartDate",
+ "@type": "xsd:dateTime"
+ },
+ "scheduleInterval": {
+ "@id": "om:hasScheduleInterval",
+ "@type": "xsd:string"
+ },
+ "topicConfig": {
+ "@id": "om:hasTopicConfig",
+ "@type": "@json"
+ },
+ "partitions": {
+ "@id": "om:hasPartition",
+ "@type": "xsd:integer"
+ },
+ "replicationFactor": {
+ "@id": "om:hasReplicationFactor",
+ "@type": "xsd:integer"
+ },
+ "retentionTime": {
+ "@id": "om:hasRetentionTime",
+ "@type": "xsd:long"
+ },
+ "messageSchema": {
+ "@id": "om:hasMessageSchema",
+ "@type": "@json"
+ },
+ "cleanupPolicies": {
+ "@id": "om:hasCleanupPolicy",
+ "@type": "xsd:string",
+ "@container": "@list"
+ },
+ "containerPrefix": {
+ "@id": "om:hasContainerPrefix",
+ "@type": "xsd:string"
+ },
+ "containerParent": {
+ "@id": "om:hasContainerParent",
+ "@type": "@id"
+ },
+ "objectStore": {
+ "@id": "om:belongsToObjectStore",
+ "@type": "@id"
+ },
+ "metricType": {
+ "@id": "om:hasMetricType",
+ "@type": "xsd:string"
+ },
+ "unitOfMeasurement": {
+ "@id": "om:hasUnitOfMeasurement",
+ "@type": "xsd:string"
+ },
+ "metricExpression": {
+ "@id": "om:hasMetricExpression",
+ "@type": "@json"
+ },
+ "granularity": {
+ "@id": "om:hasGranularity",
+ "@type": "xsd:string"
+ },
+ "relatedMetrics": {
+ "@id": "om:hasRelatedMetric",
+ "@type": "@id",
+ "@container": "@set"
+ },
+ "chartType": {
+ "@id": "om:hasChartType",
+ "@type": "xsd:string"
+ },
+ "chartUrl": {
+ "@id": "om:hasChartURL",
+ "@type": "@id"
+ },
+ "chartOf": {
+ "@id": "om:belongsToDashboard",
+ "@type": "@id"
+ },
+ "dashboardUrl": {
+ "@id": "om:hasDashboardURL",
+ "@type": "@id"
+ },
+ "charts": {
+ "@id": "om:hasChart",
+ "@type": "@id",
+ "@container": "@set"
+ },
+ "dataModels": {
+ "@id": "om:hasDataModel",
+ "@type": "@id",
+ "@container": "@set"
+ },
+ "project": {
+ "@id": "om:belongsToProject",
+ "@type": "xsd:string"
+ },
+ "reportType": {
+ "@id": "om:hasReportType",
+ "@type": "xsd:string"
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/rdf/contexts/dataAsset.jsonld b/openmetadata-spec/bin/src/main/resources/rdf/contexts/dataAsset.jsonld
new file mode 100644
index 000000000000..ae05e2b05ed5
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/rdf/contexts/dataAsset.jsonld
@@ -0,0 +1,123 @@
+{
+ "@context": [
+ "./base.jsonld",
+ {
+ "Table": {
+ "@id": "om:Table",
+ "@type": ["om:DataAsset", "dcat:Dataset"]
+ },
+ "Database": {
+ "@id": "om:Database",
+ "@type": ["om:DataAsset", "dcat:Catalog"]
+ },
+ "DatabaseSchema": {
+ "@id": "om:DatabaseSchema",
+ "@type": ["om:DataAsset", "dcat:Catalog"]
+ },
+ "Pipeline": {
+ "@id": "om:Pipeline",
+ "@type": ["om:DataAsset", "dcat:DataService"]
+ },
+ "Dashboard": {
+ "@id": "om:Dashboard",
+ "@type": ["om:DataAsset", "dcat:Dataset"]
+ },
+ "Topic": {
+ "@id": "om:Topic",
+ "@type": ["om:DataAsset", "dcat:Dataset"]
+ },
+ "Container": {
+ "@id": "om:Container",
+ "@type": ["om:DataAsset", "dcat:Dataset"]
+ },
+ "MlModel": {
+ "@id": "om:MlModel",
+ "@type": ["om:DataAsset", "dcat:Dataset"]
+ },
+ "columns": {
+ "@id": "om:hasColumn",
+ "@type": "@id",
+ "@container": "@list"
+ },
+ "database": {
+ "@id": "om:belongsToDatabase",
+ "@type": "@id"
+ },
+ "databaseSchema": {
+ "@id": "om:belongsToSchema",
+ "@type": "@id"
+ },
+ "service": {
+ "@id": "om:belongsToService",
+ "@type": "@id"
+ },
+ "serviceType": {
+ "@id": "om:hasServiceType",
+ "@type": "xsd:string"
+ },
+ "tableType": {
+ "@id": "om:hasTableType",
+ "@type": "xsd:string"
+ },
+ "columns": {
+ "@id": "om:hasColumn",
+ "@type": "@id",
+ "@container": "@list"
+ },
+ "columnNames": {
+ "@id": "om:hasColumnName",
+ "@type": "xsd:string",
+ "@container": "@list"
+ },
+ "tablePartition": {
+ "@id": "om:hasPartition",
+ "@type": "@json"
+ },
+ "tableConstraints": {
+ "@id": "om:hasConstraint",
+ "@type": "@json",
+ "@container": "@list"
+ },
+ "sampleData": {
+ "@id": "om:hasSampleData",
+ "@type": "@json"
+ },
+ "tableProfile": {
+ "@id": "om:hasProfile",
+ "@type": "@json"
+ },
+ "location": {
+ "@id": "om:hasLocation",
+ "@type": "xsd:string"
+ },
+ "schemaDefinition": {
+ "@id": "om:hasSchemaDefinition",
+ "@type": "xsd:string"
+ },
+ "dataModel": {
+ "@id": "om:hasDataModel",
+ "@type": "@json"
+ },
+ "fileFormat": {
+ "@id": "om:hasFileFormat",
+ "@type": "xsd:string"
+ },
+ "dataLength": {
+ "@id": "om:hasDataLength",
+ "@type": "xsd:integer"
+ },
+ "isPartitioned": {
+ "@id": "om:isPartitioned",
+ "@type": "xsd:boolean"
+ },
+ "numberOfObjects": {
+ "@id": "void:entities",
+ "@type": "xsd:integer"
+ },
+ "size": {
+ "@id": "dcat:byteSize",
+ "@type": "xsd:double"
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/rdf/contexts/entityRelationship.jsonld b/openmetadata-spec/bin/src/main/resources/rdf/contexts/entityRelationship.jsonld
new file mode 100644
index 000000000000..08ecce082492
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/rdf/contexts/entityRelationship.jsonld
@@ -0,0 +1,108 @@
+{
+ "@context": [
+ "./base.jsonld",
+ {
+ "EntityRelationship": "om:EntityRelationship",
+ "fromId": {
+ "@id": "om:relationshipFrom",
+ "@type": "@id"
+ },
+ "fromEntity": {
+ "@id": "om:fromEntity",
+ "@type": "@id"
+ },
+ "fromFQN": {
+ "@id": "om:fromFQN",
+ "@type": "xsd:string"
+ },
+ "toId": {
+ "@id": "om:relationshipTo",
+ "@type": "@id"
+ },
+ "toEntity": {
+ "@id": "om:toEntity",
+ "@type": "@id"
+ },
+ "toFQN": {
+ "@id": "om:toFQN",
+ "@type": "xsd:string"
+ },
+ "relationshipType": {
+ "@id": "om:hasRelationshipType",
+ "@type": "xsd:string"
+ },
+ "relation": {
+ "@id": "om:relationValue",
+ "@type": "xsd:integer"
+ },
+ "contains": {
+ "@id": "om:contains",
+ "@type": "@id"
+ },
+ "createdBy": {
+ "@id": "prov:wasGeneratedBy",
+ "@type": "@id"
+ },
+ "uses": {
+ "@id": "prov:used",
+ "@type": "@id"
+ },
+ "owns": {
+ "@id": "om:owns",
+ "@type": "@id"
+ },
+ "parentOf": {
+ "@id": "om:parentOf",
+ "@type": "@id"
+ },
+ "childOf": {
+ "@id": "om:childOf",
+ "@type": "@id"
+ },
+ "relatedTo": {
+ "@id": "om:relatedTo",
+ "@type": "@id"
+ },
+ "appliedTo": {
+ "@id": "om:appliedTo",
+ "@type": "@id"
+ },
+ "testedBy": {
+ "@id": "om:testedBy",
+ "@type": "@id"
+ },
+ "mentionedIn": {
+ "@id": "om:mentionedIn",
+ "@type": "@id"
+ },
+ "reacts": {
+ "@id": "om:reacts",
+ "@type": "@id"
+ },
+ "voted": {
+ "@id": "om:voted",
+ "@type": "@id"
+ },
+ "follows": {
+ "@id": "om:follows",
+ "@type": "@id"
+ },
+ "upstream": {
+ "@id": "prov:wasDerivedFrom",
+ "@type": "@id"
+ },
+ "downstream": {
+ "@id": "prov:wasInfluencedBy",
+ "@type": "@id"
+ },
+ "joinedWith": {
+ "@id": "om:joinedWith",
+ "@type": "@id"
+ },
+ "processedBy": {
+ "@id": "prov:wasGeneratedBy",
+ "@type": "@id"
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/rdf/contexts/governance.jsonld b/openmetadata-spec/bin/src/main/resources/rdf/contexts/governance.jsonld
new file mode 100644
index 000000000000..a87d08e14353
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/rdf/contexts/governance.jsonld
@@ -0,0 +1,144 @@
+{
+ "@context": [
+ "./base.jsonld",
+ {
+ "Glossary": {
+ "@id": "om:Glossary",
+ "@type": ["om:Entity", "skos:ConceptScheme"]
+ },
+ "GlossaryTerm": {
+ "@id": "om:GlossaryTerm",
+ "@type": ["om:Entity", "skos:Concept"]
+ },
+ "Classification": {
+ "@id": "om:Classification",
+ "@type": ["om:Entity", "skos:ConceptScheme"]
+ },
+ "Tag": {
+ "@id": "om:Tag",
+ "@type": ["om:Entity", "skos:Concept"]
+ },
+ "DataContract": {
+ "@id": "om:DataContract",
+ "@type": "om:Entity"
+ },
+ "DataProduct": {
+ "@id": "om:DataProduct",
+ "@type": ["om:Entity", "dcat:Dataset"]
+ },
+ "Domain": {
+ "@id": "om:Domain",
+ "@type": "om:Entity"
+ },
+ "Persona": {
+ "@id": "om:Persona",
+ "@type": "om:Entity"
+ },
+ "glossary": {
+ "@id": "om:belongsToGlossary",
+ "@type": "@id"
+ },
+ "synonyms": {
+ "@id": "skos:altLabel",
+ "@type": "xsd:string",
+ "@container": "@set"
+ },
+ "relatedTerms": {
+ "@id": "skos:related",
+ "@type": "@id",
+ "@container": "@set"
+ },
+ "references": {
+ "@id": "om:hasReference",
+ "@type": "@json",
+ "@container": "@list"
+ },
+ "mutuallyExclusive": {
+ "@id": "om:isMutuallyExclusive",
+ "@type": "xsd:boolean"
+ },
+ "tagFQN": {
+ "@id": "om:tagFQN",
+ "@type": "xsd:string"
+ },
+ "classification": {
+ "@id": "om:belongsToClassification",
+ "@type": "@id"
+ },
+ "usageCount": {
+ "@id": "om:usageCount",
+ "@type": "xsd:integer"
+ },
+ "tagCategoryType": {
+ "@id": "om:tagCategoryType",
+ "@type": "xsd:string"
+ },
+ "associatedTags": {
+ "@id": "om:hasAssociatedTag",
+ "@type": "xsd:string",
+ "@container": "@set"
+ },
+ "contract": {
+ "@id": "om:hasContract",
+ "@type": "@json"
+ },
+ "entityName": {
+ "@id": "om:contractForEntity",
+ "@type": "xsd:string"
+ },
+ "domainType": {
+ "@id": "om:domainType",
+ "@type": "xsd:string"
+ },
+ "subDomains": {
+ "@id": "om:hasSubDomain",
+ "@type": "@id",
+ "@container": "@set"
+ },
+ "parentDomain": {
+ "@id": "om:hasParentDomain",
+ "@type": "@id"
+ },
+ "dataProducts": {
+ "@id": "om:hasDataProduct",
+ "@type": "@id",
+ "@container": "@set"
+ },
+ "assets": {
+ "@id": "om:hasAsset",
+ "@type": "@id",
+ "@container": "@set"
+ },
+ "style": {
+ "@id": "om:hasStyle",
+ "@type": "@json"
+ },
+ "entityFQN": {
+ "@id": "om:appliesToEntity",
+ "@type": "xsd:string"
+ },
+ "entityType": {
+ "@id": "om:appliesToEntityType",
+ "@type": "xsd:string"
+ },
+ "status": {
+ "@id": "om:hasStatus",
+ "@type": "xsd:string"
+ },
+ "reviewers": {
+ "@id": "om:hasReviewer",
+ "@type": "@id",
+ "@container": "@set"
+ },
+ "childTerms": {
+ "@id": "skos:narrower",
+ "@type": "@id",
+ "@container": "@set"
+ },
+ "termType": {
+ "@id": "om:termType",
+ "@type": "xsd:string"
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/rdf/contexts/lineage.jsonld b/openmetadata-spec/bin/src/main/resources/rdf/contexts/lineage.jsonld
new file mode 100644
index 000000000000..540479340277
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/rdf/contexts/lineage.jsonld
@@ -0,0 +1,97 @@
+{
+ "@context": [
+ "./base.jsonld",
+ {
+ "Lineage": {
+ "@id": "om:Lineage",
+ "@type": "om:Entity"
+ },
+ "LineageEdge": {
+ "@id": "om:LineageEdge",
+ "@type": "prov:Derivation"
+ },
+ "ColumnLineage": {
+ "@id": "om:ColumnLineage",
+ "@type": "prov:Derivation"
+ },
+
+ "entity": {
+ "@id": "om:lineageEntity",
+ "@type": "@id"
+ },
+ "nodes": {
+ "@id": "om:hasLineageNode",
+ "@type": "@id",
+ "@container": "@set"
+ },
+ "upstreamEdges": {
+ "@id": "prov:wasDerivedFrom",
+ "@type": "@id",
+ "@container": "@set"
+ },
+ "downstreamEdges": {
+ "@id": "prov:wasInfluencedBy",
+ "@type": "@id",
+ "@container": "@set"
+ },
+
+ "fromEntity": {
+ "@id": "prov:entity",
+ "@type": "@id"
+ },
+ "toEntity": {
+ "@id": "prov:hadDerivation",
+ "@type": "@id"
+ },
+ "lineageDetails": {
+ "@id": "om:hasLineageDetails",
+ "@type": "@id"
+ },
+
+ "sqlQuery": {
+ "@id": "om:sqlQuery",
+ "@type": "xsd:string"
+ },
+ "source": {
+ "@id": "om:lineageSource",
+ "@type": "xsd:string"
+ },
+ "pipeline": {
+ "@id": "prov:wasGeneratedBy",
+ "@type": "@id"
+ },
+ "description": {
+ "@id": "dct:description",
+ "@type": "xsd:string"
+ },
+
+ "columnsLineage": {
+ "@id": "om:hasColumnLineage",
+ "@type": "@id",
+ "@container": "@set"
+ },
+ "fromColumns": {
+ "@id": "om:fromColumns",
+ "@type": "xsd:string",
+ "@container": "@list"
+ },
+ "toColumn": {
+ "@id": "om:toColumn",
+ "@type": "xsd:string"
+ },
+ "function": {
+ "@id": "om:transformFunction",
+ "@type": "xsd:string"
+ },
+
+ "upstream": {
+ "@id": "om:upstream",
+ "@type": "@id"
+ },
+ "downstream": {
+ "@id": "om:downstream",
+ "@type": "@id"
+ }
+ }
+ ]
+}
diff --git a/openmetadata-spec/bin/src/main/resources/rdf/contexts/operations.jsonld b/openmetadata-spec/bin/src/main/resources/rdf/contexts/operations.jsonld
new file mode 100644
index 000000000000..09ebec37fac3
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/rdf/contexts/operations.jsonld
@@ -0,0 +1,259 @@
+{
+ "@context": [
+ "./base.jsonld",
+ {
+ "IngestionPipeline": {
+ "@id": "om:IngestionPipeline",
+ "@type": "om:Entity"
+ },
+ "Workflow": {
+ "@id": "om:Workflow",
+ "@type": "om:Entity"
+ },
+ "WorkflowDefinition": {
+ "@id": "om:WorkflowDefinition",
+ "@type": "om:Entity"
+ },
+ "WorkflowInstance": {
+ "@id": "om:WorkflowInstance",
+ "@type": "om:Entity"
+ },
+ "WorkflowInstanceState": {
+ "@id": "om:WorkflowInstanceState",
+ "@type": "om:Entity"
+ },
+ "EventSubscription": {
+ "@id": "om:EventSubscription",
+ "@type": "om:Entity"
+ },
+ "KPI": {
+ "@id": "om:KPI",
+ "@type": "om:Entity"
+ },
+ "DataInsightChart": {
+ "@id": "om:DataInsightChart",
+ "@type": "om:Entity"
+ },
+ "DataInsightCustomChart": {
+ "@id": "om:DataInsightCustomChart",
+ "@type": "om:Entity"
+ },
+ "WebAnalyticEvent": {
+ "@id": "om:WebAnalyticEvent",
+ "@type": "om:Entity"
+ },
+ "App": {
+ "@id": "om:App",
+ "@type": "om:Entity"
+ },
+ "AppMarketPlaceDefinition": {
+ "@id": "om:AppMarketPlaceDefinition",
+ "@type": "om:Entity"
+ },
+ "Document": {
+ "@id": "om:Document",
+ "@type": "om:Entity"
+ },
+ "Page": {
+ "@id": "om:Page",
+ "@type": "om:Entity"
+ },
+ "pipelineType": {
+ "@id": "om:pipelineType",
+ "@type": "xsd:string"
+ },
+ "sourceConfig": {
+ "@id": "om:hasSourceConfig",
+ "@type": "@json"
+ },
+ "openMetadataServerConnection": {
+ "@id": "om:hasServerConnection",
+ "@type": "@json"
+ },
+ "airflowConfig": {
+ "@id": "om:hasAirflowConfig",
+ "@type": "@json"
+ },
+ "loggerLevel": {
+ "@id": "om:hasLoggerLevel",
+ "@type": "xsd:string"
+ },
+ "deployed": {
+ "@id": "om:isDeployed",
+ "@type": "xsd:boolean"
+ },
+ "enabled": {
+ "@id": "om:isEnabled",
+ "@type": "xsd:boolean"
+ },
+ "pipelineStatuses": {
+ "@id": "om:hasPipelineStatus",
+ "@type": "@json"
+ },
+ "workflowType": {
+ "@id": "om:workflowType",
+ "@type": "xsd:string"
+ },
+ "workflowDefinition": {
+ "@id": "om:hasWorkflowDefinition",
+ "@type": "@id"
+ },
+ "workflowState": {
+ "@id": "om:hasWorkflowState",
+ "@type": "xsd:string"
+ },
+ "startedAt": {
+ "@id": "om:startedAt",
+ "@type": "xsd:dateTime"
+ },
+ "endedAt": {
+ "@id": "om:endedAt",
+ "@type": "xsd:dateTime"
+ },
+ "response": {
+ "@id": "om:hasResponse",
+ "@type": "@json"
+ },
+ "request": {
+ "@id": "om:hasRequest",
+ "@type": "@json"
+ },
+ "status": {
+ "@id": "om:hasStatus",
+ "@type": "xsd:string"
+ },
+ "alertType": {
+ "@id": "om:alertType",
+ "@type": "xsd:string"
+ },
+ "trigger": {
+ "@id": "om:hasTrigger",
+ "@type": "@json"
+ },
+ "filteringRules": {
+ "@id": "om:hasFilteringRule",
+ "@type": "@json"
+ },
+ "destinations": {
+ "@id": "om:hasDestination",
+ "@type": "@json",
+ "@container": "@list"
+ },
+ "batchSize": {
+ "@id": "om:batchSize",
+ "@type": "xsd:integer"
+ },
+ "timeout": {
+ "@id": "om:timeout",
+ "@type": "xsd:integer"
+ },
+ "readTimeout": {
+ "@id": "om:readTimeout",
+ "@type": "xsd:integer"
+ },
+ "subscriptionType": {
+ "@id": "om:subscriptionType",
+ "@type": "xsd:string"
+ },
+ "subscriptionConfig": {
+ "@id": "om:hasSubscriptionConfig",
+ "@type": "@json"
+ },
+ "metricType": {
+ "@id": "om:metricType",
+ "@type": "xsd:string"
+ },
+ "targetValue": {
+ "@id": "om:targetValue",
+ "@type": "xsd:double"
+ },
+ "startDate": {
+ "@id": "om:startDate",
+ "@type": "xsd:dateTime"
+ },
+ "endDate": {
+ "@id": "om:endDate",
+ "@type": "xsd:dateTime"
+ },
+ "kpiResult": {
+ "@id": "om:hasKPIResult",
+ "@type": "@json"
+ },
+ "chartDetails": {
+ "@id": "om:hasChartDetails",
+ "@type": "@json"
+ },
+ "chartDataModel": {
+ "@id": "om:hasChartDataModel",
+ "@type": "@json"
+ },
+ "chartUrl": {
+ "@id": "om:hasChartUrl",
+ "@type": "@id"
+ },
+ "chartType": {
+ "@id": "om:chartType",
+ "@type": "xsd:string"
+ },
+ "appType": {
+ "@id": "om:appType",
+ "@type": "xsd:string"
+ },
+ "appConfiguration": {
+ "@id": "om:hasAppConfiguration",
+ "@type": "@json"
+ },
+ "appSchedule": {
+ "@id": "om:hasAppSchedule",
+ "@type": "@json"
+ },
+ "bot": {
+ "@id": "om:hasBot",
+ "@type": "@id"
+ },
+ "appPrivateConfig": {
+ "@id": "om:hasAppPrivateConfig",
+ "@type": "@json"
+ },
+ "documentType": {
+ "@id": "om:documentType",
+ "@type": "xsd:string"
+ },
+ "entityType": {
+ "@id": "om:documentForEntityType",
+ "@type": "xsd:string"
+ },
+ "entityId": {
+ "@id": "om:documentForEntity",
+ "@type": "@id"
+ },
+ "data": {
+ "@id": "om:hasDocumentData",
+ "@type": "@json"
+ },
+ "pages": {
+ "@id": "om:hasPage",
+ "@type": "@id",
+ "@container": "@list"
+ },
+ "pageType": {
+ "@id": "om:pageType",
+ "@type": "xsd:string"
+ },
+ "layout": {
+ "@id": "om:hasLayout",
+ "@type": "@json"
+ },
+ "personas": {
+ "@id": "om:hasPersona",
+ "@type": "@id",
+ "@container": "@set"
+ },
+ "knowledgePanels": {
+ "@id": "om:hasKnowledgePanel",
+ "@type": "@json",
+ "@container": "@list"
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/rdf/contexts/quality.jsonld b/openmetadata-spec/bin/src/main/resources/rdf/contexts/quality.jsonld
new file mode 100644
index 000000000000..5ab725f4701f
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/rdf/contexts/quality.jsonld
@@ -0,0 +1,153 @@
+{
+ "@context": [
+ "./base.jsonld",
+ {
+ "TestDefinition": {
+ "@id": "om:TestDefinition",
+ "@type": "om:Entity"
+ },
+ "TestSuite": {
+ "@id": "om:TestSuite",
+ "@type": "om:Entity"
+ },
+ "TestCase": {
+ "@id": "om:TestCase",
+ "@type": "om:Entity"
+ },
+ "TestCaseResult": {
+ "@id": "om:TestCaseResult",
+ "@type": "om:Entity"
+ },
+ "TestCaseResolutionStatus": {
+ "@id": "om:TestCaseResolutionStatus",
+ "@type": "om:Entity"
+ },
+ "entityLink": {
+ "@id": "om:testsEntity",
+ "@type": "@id"
+ },
+ "entityFQN": {
+ "@id": "om:testsEntityFQN",
+ "@type": "xsd:string"
+ },
+ "testSuite": {
+ "@id": "om:belongsToTestSuite",
+ "@type": "@id"
+ },
+ "testDefinition": {
+ "@id": "om:hasTestDefinition",
+ "@type": "@id"
+ },
+ "parameterValues": {
+ "@id": "om:hasParameterValue",
+ "@type": "@json",
+ "@container": "@list"
+ },
+ "testCaseStatus": {
+ "@id": "om:hasTestCaseStatus",
+ "@type": "xsd:string"
+ },
+ "testCaseResult": {
+ "@id": "om:hasTestResult",
+ "@type": "@json"
+ },
+ "testResultValue": {
+ "@id": "om:hasResultValue",
+ "@type": "@json",
+ "@container": "@list"
+ },
+ "passedRows": {
+ "@id": "om:passedRows",
+ "@type": "xsd:integer"
+ },
+ "failedRows": {
+ "@id": "om:failedRows",
+ "@type": "xsd:integer"
+ },
+ "passedRowsPercentage": {
+ "@id": "om:passedRowsPercentage",
+ "@type": "xsd:double"
+ },
+ "failedRowsPercentage": {
+ "@id": "om:failedRowsPercentage",
+ "@type": "xsd:double"
+ },
+ "testSuiteType": {
+ "@id": "om:testSuiteType",
+ "@type": "xsd:string"
+ },
+ "testCases": {
+ "@id": "om:hasTestCase",
+ "@type": "@id",
+ "@container": "@set"
+ },
+ "executable": {
+ "@id": "om:isExecutable",
+ "@type": "xsd:boolean"
+ },
+ "executableEntityReference": {
+ "@id": "om:executableOn",
+ "@type": "@id"
+ },
+ "pipelines": {
+ "@id": "om:executedByPipeline",
+ "@type": "@id",
+ "@container": "@set"
+ },
+ "summary": {
+ "@id": "om:hasSummary",
+ "@type": "@json"
+ },
+ "testPlatform": {
+ "@id": "om:hasTestPlatform",
+ "@type": "xsd:string"
+ },
+ "testCaseType": {
+ "@id": "om:hasTestCaseType",
+ "@type": "xsd:string"
+ },
+ "supportedDataTypes": {
+ "@id": "om:supportsDataType",
+ "@type": "xsd:string",
+ "@container": "@set"
+ },
+ "testCaseParameterDefinition": {
+ "@id": "om:hasParameterDefinition",
+ "@type": "@json",
+ "@container": "@list"
+ },
+ "testCaseDescription": {
+ "@id": "om:hasTestCaseDescription",
+ "@type": "xsd:string"
+ },
+ "entityType": {
+ "@id": "om:appliesToEntityType",
+ "@type": "xsd:string"
+ },
+ "resolved": {
+ "@id": "om:isResolved",
+ "@type": "xsd:boolean"
+ },
+ "testCaseFailureReason": {
+ "@id": "om:hasFailureReason",
+ "@type": "xsd:string"
+ },
+ "testCaseFailureComment": {
+ "@id": "om:hasFailureComment",
+ "@type": "xsd:string"
+ },
+ "resolvedBy": {
+ "@id": "om:resolvedBy",
+ "@type": "@id"
+ },
+ "severity": {
+ "@id": "om:hasSeverity",
+ "@type": "xsd:string"
+ },
+ "incidentId": {
+ "@id": "om:hasIncidentId",
+ "@type": "xsd:string"
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/rdf/contexts/service.jsonld b/openmetadata-spec/bin/src/main/resources/rdf/contexts/service.jsonld
new file mode 100644
index 000000000000..fc8a3c7dc77a
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/rdf/contexts/service.jsonld
@@ -0,0 +1,68 @@
+{
+ "@context": [
+ "./base.jsonld",
+ {
+ "Service": "om:Service",
+ "DatabaseService": {
+ "@id": "om:DatabaseService",
+ "@type": ["om:Service", "dcat:DataService"]
+ },
+ "DashboardService": {
+ "@id": "om:DashboardService",
+ "@type": ["om:Service", "dcat:DataService"]
+ },
+ "MessagingService": {
+ "@id": "om:MessagingService",
+ "@type": ["om:Service", "dcat:DataService"]
+ },
+ "PipelineService": {
+ "@id": "om:PipelineService",
+ "@type": ["om:Service", "dcat:DataService"]
+ },
+ "MLModelService": {
+ "@id": "om:MLModelService",
+ "@type": ["om:Service", "dcat:DataService"]
+ },
+ "StorageService": {
+ "@id": "om:StorageService",
+ "@type": ["om:Service", "dcat:DataService"]
+ },
+ "SearchService": {
+ "@id": "om:SearchService",
+ "@type": ["om:Service", "dcat:DataService"]
+ },
+ "MetadataService": {
+ "@id": "om:MetadataService",
+ "@type": ["om:Service", "dcat:DataService"]
+ },
+ "APIService": {
+ "@id": "om:APIService",
+ "@type": ["om:Service", "dcat:DataService"]
+ },
+ "ReportingService": {
+ "@id": "om:ReportingService",
+ "@type": ["om:Service", "dcat:DataService"]
+ },
+ "QualityService": {
+ "@id": "om:QualityService",
+ "@type": ["om:Service", "dcat:DataService"]
+ },
+ "ObservabilityService": {
+ "@id": "om:ObservabilityService",
+ "@type": ["om:Service", "dcat:DataService"]
+ },
+ "DriveService": {
+ "@id": "om:DriveService",
+ "@type": ["om:Service", "dcat:DataService"]
+ },
+ "serviceType": {
+ "@id": "om:serviceType",
+ "@type": "xsd:string"
+ },
+ "connection": {
+ "@id": "om:hasConnection",
+ "@type": "@json"
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/rdf/contexts/team.jsonld b/openmetadata-spec/bin/src/main/resources/rdf/contexts/team.jsonld
new file mode 100644
index 000000000000..bdd3db1c9dbe
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/rdf/contexts/team.jsonld
@@ -0,0 +1,103 @@
+{
+ "@context": [
+ "./base.jsonld",
+ {
+ "Team": {
+ "@id": "om:Team",
+ "@type": ["om:Entity", "prov:Agent", "foaf:Group"]
+ },
+ "User": {
+ "@id": "om:User",
+ "@type": ["om:Entity", "prov:Agent", "foaf:Person"]
+ },
+ "Bot": {
+ "@id": "om:Bot",
+ "@type": ["om:Entity", "prov:Agent"]
+ },
+ "Role": {
+ "@id": "om:Role",
+ "@type": "om:Entity"
+ },
+ "Policy": {
+ "@id": "om:Policy",
+ "@type": "om:Entity"
+ },
+ "email": {
+ "@id": "foaf:mbox",
+ "@type": "xsd:string"
+ },
+ "isAdmin": {
+ "@id": "om:isAdmin",
+ "@type": "xsd:boolean"
+ },
+ "isBot": {
+ "@id": "om:isBot",
+ "@type": "xsd:boolean"
+ },
+ "profile": {
+ "@id": "om:hasProfile",
+ "@type": "@json"
+ },
+ "timezone": {
+ "@id": "om:timezone",
+ "@type": "xsd:string"
+ },
+ "teams": {
+ "@id": "om:memberOf",
+ "@type": "@id",
+ "@container": "@set"
+ },
+ "roles": {
+ "@id": "om:hasRole",
+ "@type": "@id",
+ "@container": "@set"
+ },
+ "owns": {
+ "@id": "om:owns",
+ "@type": "@id",
+ "@container": "@set"
+ },
+ "follows": {
+ "@id": "om:follows",
+ "@type": "@id",
+ "@container": "@set"
+ },
+ "teamType": {
+ "@id": "om:teamType",
+ "@type": "xsd:string"
+ },
+ "users": {
+ "@id": "om:hasMember",
+ "@type": "@id",
+ "@container": "@set"
+ },
+ "childrenCount": {
+ "@id": "om:childrenCount",
+ "@type": "xsd:integer"
+ },
+ "userCount": {
+ "@id": "om:userCount",
+ "@type": "xsd:integer"
+ },
+ "isJoinable": {
+ "@id": "om:isJoinable",
+ "@type": "xsd:boolean"
+ },
+ "defaultRoles": {
+ "@id": "om:hasDefaultRole",
+ "@type": "@id",
+ "@container": "@set"
+ },
+ "parents": {
+ "@id": "om:hasParent",
+ "@type": "@id",
+ "@container": "@set"
+ },
+ "policies": {
+ "@id": "om:hasPolicy",
+ "@type": "@id",
+ "@container": "@set"
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/rdf/contexts/thread.jsonld b/openmetadata-spec/bin/src/main/resources/rdf/contexts/thread.jsonld
new file mode 100644
index 000000000000..5ff9f4e8b217
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/rdf/contexts/thread.jsonld
@@ -0,0 +1,93 @@
+{
+ "@context": [
+ "./base.jsonld",
+ {
+ "Thread": {
+ "@id": "om:Thread",
+ "@type": "om:Entity"
+ },
+ "Post": {
+ "@id": "om:Post",
+ "@type": "om:Entity"
+ },
+ "message": {
+ "@id": "om:message",
+ "@type": "xsd:string"
+ },
+ "postTs": {
+ "@id": "om:postedAt",
+ "@type": "xsd:dateTime"
+ },
+ "from": {
+ "@id": "om:postedBy",
+ "@type": "@id"
+ },
+ "reactions": {
+ "@id": "om:hasReaction",
+ "@type": "@json",
+ "@container": "@list"
+ },
+ "posts": {
+ "@id": "om:containsPosts",
+ "@type": "@id",
+ "@container": "@list"
+ },
+ "postsCount": {
+ "@id": "om:postsCount",
+ "@type": "xsd:integer"
+ },
+ "threadTs": {
+ "@id": "om:threadCreatedAt",
+ "@type": "xsd:dateTime"
+ },
+ "about": {
+ "@id": "om:isAbout",
+ "@type": "@id"
+ },
+ "entityId": {
+ "@id": "om:aboutEntity",
+ "@type": "@id"
+ },
+ "entityType": {
+ "@id": "om:aboutEntityType",
+ "@type": "xsd:string"
+ },
+ "addressedTo": {
+ "@id": "om:addressedTo",
+ "@type": "@id"
+ },
+ "createdBy": {
+ "@id": "om:createdBy",
+ "@type": "@id"
+ },
+ "updatedBy": {
+ "@id": "om:editedBy",
+ "@type": "@id"
+ },
+ "resolved": {
+ "@id": "om:isResolved",
+ "@type": "xsd:boolean"
+ },
+ "task": {
+ "@id": "om:hasTask",
+ "@type": "@json"
+ },
+ "announcement": {
+ "@id": "om:hasAnnouncement",
+ "@type": "@json"
+ },
+ "type": {
+ "@id": "om:threadType",
+ "@type": "xsd:string"
+ },
+ "feedInfo": {
+ "@id": "om:hasFeedInfo",
+ "@type": "@json"
+ },
+ "fieldOperation": {
+ "@id": "om:hasFieldOperation",
+ "@type": "@json"
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/rdf/ontology/openmetadata-prov.ttl b/openmetadata-spec/bin/src/main/resources/rdf/ontology/openmetadata-prov.ttl
new file mode 100644
index 000000000000..dc7d781c1218
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/rdf/ontology/openmetadata-prov.ttl
@@ -0,0 +1,142 @@
+@prefix om: .
+@prefix prov: .
+@prefix xsd: .
+@prefix rdfs: .
+@prefix dcterms: .
+
+# OpenMetadata PROV-O Extension
+# Extends PROV-O for detailed data lineage tracking
+
+# Pipeline Execution as Activity
+om:PipelineExecution a rdfs:Class ;
+ rdfs:label "Pipeline Execution" ;
+ rdfs:subClassOf prov:Activity ;
+ rdfs:comment "A specific run/execution of a data pipeline" .
+
+# Properties for Pipeline Execution
+om:executionId a rdf:Property ;
+ rdfs:label "execution ID" ;
+ rdfs:domain om:PipelineExecution ;
+ rdfs:range xsd:string .
+
+om:executionStatus a rdf:Property ;
+ rdfs:label "execution status" ;
+ rdfs:domain om:PipelineExecution ;
+ rdfs:range xsd:string ;
+ rdfs:comment "Status: running, success, failed, cancelled" .
+
+om:rowsProcessed a rdf:Property ;
+ rdfs:label "rows processed" ;
+ rdfs:domain om:PipelineExecution ;
+ rdfs:range xsd:integer .
+
+om:bytesProcessed a rdf:Property ;
+ rdfs:label "bytes processed" ;
+ rdfs:domain om:PipelineExecution ;
+ rdfs:range xsd:long .
+
+# Data Transformation Details
+om:Transformation a rdfs:Class ;
+ rdfs:label "Transformation" ;
+ rdfs:subClassOf prov:Activity ;
+ rdfs:comment "A specific data transformation within a pipeline" .
+
+om:transformationType a rdf:Property ;
+ rdfs:label "transformation type" ;
+ rdfs:domain om:Transformation ;
+ rdfs:range xsd:string ;
+ rdfs:comment "Type: filter, aggregate, join, pivot, etc." .
+
+om:transformationLogic a rdf:Property ;
+ rdfs:label "transformation logic" ;
+ rdfs:domain om:Transformation ;
+ rdfs:range xsd:string ;
+ rdfs:comment "SQL query or transformation code" .
+
+# Version tracking
+om:DataVersion a rdfs:Class ;
+ rdfs:label "Data Version" ;
+ rdfs:subClassOf prov:Entity ;
+ rdfs:comment "A specific version of a data asset" .
+
+om:versionNumber a rdf:Property ;
+ rdfs:label "version number" ;
+ rdfs:domain om:DataVersion ;
+ rdfs:range xsd:string .
+
+om:checksum a rdf:Property ;
+ rdfs:label "checksum" ;
+ rdfs:domain om:DataVersion ;
+ rdfs:range xsd:string ;
+ rdfs:comment "Hash of the data for integrity checking" .
+
+# Quality Assessment as Activity
+om:QualityAssessment a rdfs:Class ;
+ rdfs:label "Quality Assessment" ;
+ rdfs:subClassOf prov:Activity ;
+ rdfs:comment "Data quality test execution" .
+
+om:testSuite a rdf:Property ;
+ rdfs:label "test suite" ;
+ rdfs:domain om:QualityAssessment ;
+ rdfs:range xsd:string .
+
+om:testsPassed a rdf:Property ;
+ rdfs:label "tests passed" ;
+ rdfs:domain om:QualityAssessment ;
+ rdfs:range xsd:integer .
+
+om:testsFailed a rdf:Property ;
+ rdfs:label "tests failed" ;
+ rdfs:domain om:QualityAssessment ;
+ rdfs:range xsd:integer .
+
+# Detailed Usage Relationships
+om:ColumnLineage a rdfs:Class ;
+ rdfs:label "Column Lineage" ;
+ rdfs:subClassOf prov:Usage ;
+ rdfs:comment "Column-level lineage tracking" .
+
+om:sourceColumn a rdf:Property ;
+ rdfs:label "source column" ;
+ rdfs:domain om:ColumnLineage ;
+ rdfs:range om:Column .
+
+om:targetColumn a rdf:Property ;
+ rdfs:label "target column" ;
+ rdfs:domain om:ColumnLineage ;
+ rdfs:range om:Column .
+
+om:transformationExpression a rdf:Property ;
+ rdfs:label "transformation expression" ;
+ rdfs:domain om:ColumnLineage ;
+ rdfs:range xsd:string ;
+ rdfs:comment "Expression used to transform source to target" .
+
+# Example Usage:
+# :PipelineRun123 a om:PipelineExecution ;
+# prov:startedAtTime "2024-01-15T10:00:00Z"^^xsd:dateTime ;
+# prov:endedAtTime "2024-01-15T10:15:00Z"^^xsd:dateTime ;
+# prov:wasAssociatedWith :AirflowService ;
+# prov:wasAssociatedWith :DataEngTeam ;
+# om:executionId "airflow-run-123" ;
+# om:executionStatus "success" ;
+# om:rowsProcessed 1234567 ;
+# prov:used :CustomerTableV1 ;
+# prov:used :TransformScriptV2 ;
+# prov:generated :CustomerTableV2 ;
+# prov:hadActivity :FilterTransform1 ;
+# prov:hadActivity :AggregateTransform2 .
+
+# :FilterTransform1 a om:Transformation ;
+# om:transformationType "filter" ;
+# om:transformationLogic "WHERE created_date > '2024-01-01'" ;
+# prov:used :CustomerTableV1 ;
+# prov:generated :TempTable1 .
+
+# :CustomerTableV2 a om:DataVersion ;
+# prov:wasGeneratedBy :PipelineRun123 ;
+# prov:wasDerivedFrom :CustomerTableV1 ;
+# om:versionNumber "2.0" ;
+# om:checksum "sha256:abcd1234..." ;
+# prov:generatedAtTime "2024-01-15T10:15:00Z"^^xsd:dateTime .
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/main/resources/rdf/ontology/openmetadata.ttl b/openmetadata-spec/bin/src/main/resources/rdf/ontology/openmetadata.ttl
new file mode 100644
index 000000000000..074798175812
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/rdf/ontology/openmetadata.ttl
@@ -0,0 +1,1576 @@
+@prefix om: .
+@prefix owl: .
+@prefix rdf: .
+@prefix rdfs: .
+@prefix xsd: .
+@prefix dcat: .
+@prefix prov: .
+@prefix skos: .
+@prefix dct: .
+@prefix void: .
+@prefix foaf: .
+@prefix spdx: .
+@prefix adms: .
+@prefix dprod: .
+@prefix vcard: .
+@prefix dqv: .
+@prefix oa: .
+@prefix dctype: .
+@prefix locn: .
+@prefix time: .
+@prefix odrl: .
+@prefix qb: .
+@prefix csvw: .
+
+# OpenMetadata Complete Ontology
+om: a owl:Ontology ;
+ owl:versionInfo "1.0.0" ;
+ dct:title "OpenMetadata Ontology" ;
+ dct:description "Complete ontology for OpenMetadata covering all entities and relationships" ;
+ dct:creator "OpenMetadata Team" ;
+ dct:created "2025-08-24"^^xsd:date ;
+ dct:license ;
+ owl:imports dcat: , prov: , skos: .
+
+#################################################################
+# Base Classes
+#################################################################
+
+om:Entity a owl:Class ;
+ rdfs:label "Entity" ;
+ rdfs:comment "Base class for all OpenMetadata entities" ;
+ rdfs:subClassOf dcat:Resource .
+
+om:DataAsset a owl:Class ;
+ rdfs:label "Data Asset" ;
+ rdfs:comment "Base class for all data assets" ;
+ rdfs:subClassOf om:Entity, dcat:Resource ;
+ owl:equivalentClass dcat:Dataset .
+
+om:Service a owl:Class ;
+ rdfs:label "Service" ;
+ rdfs:comment "Base class for all services" ;
+ rdfs:subClassOf om:Entity .
+
+#################################################################
+# Service Classes
+#################################################################
+
+om:DatabaseService a owl:Class ;
+ rdfs:label "Database Service" ;
+ rdfs:subClassOf om:Service, dcat:DataService .
+
+om:DashboardService a owl:Class ;
+ rdfs:label "Dashboard Service" ;
+ rdfs:subClassOf om:Service, dcat:DataService .
+
+om:MessagingService a owl:Class ;
+ rdfs:label "Messaging Service" ;
+ rdfs:subClassOf om:Service, dcat:DataService .
+
+om:PipelineService a owl:Class ;
+ rdfs:label "Pipeline Service" ;
+ rdfs:comment "ETL Service" ;
+ rdfs:subClassOf om:Service, dcat:DataService .
+
+om:MLModelService a owl:Class ;
+ rdfs:label "ML Model Service" ;
+ rdfs:subClassOf om:Service, dcat:DataService .
+
+om:StorageService a owl:Class ;
+ rdfs:label "Storage Service" ;
+ rdfs:subClassOf om:Service, dcat:DataService .
+
+om:SearchService a owl:Class ;
+ rdfs:label "Search Service" ;
+ rdfs:subClassOf om:Service, dcat:DataService .
+
+om:MetadataService a owl:Class ;
+ rdfs:label "Metadata Service" ;
+ rdfs:subClassOf om:Service, dcat:DataService .
+
+om:APIService a owl:Class ;
+ rdfs:label "API Service" ;
+ rdfs:subClassOf om:Service, dcat:DataService .
+
+om:ReportingService a owl:Class ;
+ rdfs:label "Reporting Service" ;
+ rdfs:subClassOf om:Service, dcat:DataService .
+
+om:QualityService a owl:Class ;
+ rdfs:label "Quality Service" ;
+ rdfs:subClassOf om:Service, dcat:DataService .
+
+om:ObservabilityService a owl:Class ;
+ rdfs:label "Observability Service" ;
+ rdfs:subClassOf om:Service, dcat:DataService .
+
+om:DriveService a owl:Class ;
+ rdfs:label "Drive Service" ;
+ rdfs:comment "File and document storage service" ;
+ rdfs:subClassOf om:Service, dcat:DataService .
+
+#################################################################
+# Data Asset Classes
+#################################################################
+
+om:Database a owl:Class ;
+ rdfs:label "Database" ;
+ rdfs:subClassOf om:DataAsset, dcat:Catalog .
+
+om:DatabaseSchema a owl:Class ;
+ rdfs:label "Database Schema" ;
+ rdfs:subClassOf om:DataAsset .
+
+om:Table a owl:Class ;
+ rdfs:label "Table" ;
+ rdfs:subClassOf om:DataAsset, dcat:Dataset .
+
+om:StoredProcedure a owl:Class ;
+ rdfs:label "Stored Procedure" ;
+ rdfs:subClassOf om:DataAsset .
+
+om:Query a owl:Class ;
+ rdfs:label "Query" ;
+ rdfs:subClassOf om:DataAsset .
+
+om:Dashboard a owl:Class ;
+ rdfs:label "Dashboard" ;
+ rdfs:comment "Dashboard for data visualization" ;
+ rdfs:subClassOf om:DataAsset .
+
+om:Chart a owl:Class ;
+ rdfs:label "Chart" ;
+ rdfs:subClassOf om:DataAsset .
+
+om:Report a owl:Class ;
+ rdfs:label "Report" ;
+ rdfs:comment "Report as a specific representation of data" ;
+ rdfs:subClassOf om:DataAsset, dcat:Distribution .
+
+om:Metric a owl:Class ;
+ rdfs:label "Metric" ;
+ rdfs:subClassOf om:DataAsset .
+
+om:Pipeline a owl:Class ;
+ rdfs:label "Pipeline" ;
+ rdfs:subClassOf om:DataAsset, dcat:DataService .
+
+om:Task a owl:Class ;
+ rdfs:label "Task" ;
+ rdfs:subClassOf om:DataAsset .
+
+om:Topic a owl:Class ;
+ rdfs:label "Topic" ;
+ rdfs:comment "Message topic providing streaming data access" ;
+ rdfs:subClassOf om:DataAsset, dcat:DataService .
+
+om:MLModel a owl:Class ;
+ rdfs:label "ML Model" ;
+ rdfs:comment "Machine learning model providing inference service" ;
+ rdfs:subClassOf om:DataAsset, dcat:DataService .
+
+om:Container a owl:Class ;
+ rdfs:label "Container" ;
+ rdfs:comment "Storage container organizing multiple datasets" ;
+ rdfs:subClassOf om:DataAsset, dcat:Catalog .
+
+om:SearchIndex a owl:Class ;
+ rdfs:label "Search Index" ;
+ rdfs:subClassOf om:DataAsset .
+
+om:APICollection a owl:Class ;
+ rdfs:label "API Collection" ;
+ rdfs:comment "Collection of API endpoints" ;
+ rdfs:subClassOf om:DataAsset, dcat:Catalog .
+
+om:APIDocumentation a owl:Class ;
+ rdfs:label "API Documentation" ;
+ rdfs:comment "Documentation for API endpoints" ;
+ rdfs:subClassOf foaf:Document .
+
+om:APIEndpoint a owl:Class ;
+ rdfs:label "API Endpoint" ;
+ rdfs:comment "API endpoint providing data access service" ;
+ rdfs:subClassOf om:DataAsset, dcat:DataService .
+
+om:Directory a owl:Class ;
+ rdfs:label "Directory" ;
+ rdfs:comment "File system directory" ;
+ rdfs:subClassOf om:DataAsset, dcat:Dataset .
+
+om:File a owl:Class ;
+ rdfs:label "File" ;
+ rdfs:comment "Individual file" ;
+ rdfs:subClassOf om:DataAsset, dcat:Distribution .
+
+om:Spreadsheet a owl:Class ;
+ rdfs:label "Spreadsheet" ;
+ rdfs:comment "Spreadsheet document" ;
+ rdfs:subClassOf om:DataAsset, dcat:Dataset .
+
+om:Worksheet a owl:Class ;
+ rdfs:label "Worksheet" ;
+ rdfs:comment "Worksheet within a spreadsheet" ;
+ rdfs:subClassOf om:DataAsset .
+
+#################################################################
+# Metadata & Governance Classes
+#################################################################
+
+om:Glossary a owl:Class ;
+ rdfs:label "Glossary" ;
+ rdfs:subClassOf om:Entity, skos:ConceptScheme .
+
+om:GlossaryTerm a owl:Class ;
+ rdfs:label "Glossary Term" ;
+ rdfs:subClassOf om:Entity, skos:Concept .
+
+om:Classification a owl:Class ;
+ rdfs:label "Classification" ;
+ rdfs:comment "Tag Category" ;
+ rdfs:subClassOf om:Entity, skos:ConceptScheme .
+
+om:Tag a owl:Class ;
+ rdfs:label "Tag" ;
+ rdfs:subClassOf om:Entity, skos:Concept .
+
+#################################################################
+# Glossary Term Relation Properties (Business-oriented)
+#################################################################
+
+# Associative Relations
+om:relatedTo a owl:ObjectProperty ;
+ rdfs:label "related to" ;
+ rdfs:comment "General associative relationship between terms that are conceptually connected" ;
+ rdfs:subPropertyOf skos:related ;
+ a owl:SymmetricProperty ;
+ rdfs:domain om:GlossaryTerm ;
+ rdfs:range om:GlossaryTerm .
+
+om:synonym a owl:ObjectProperty ;
+ rdfs:label "synonym" ;
+ rdfs:comment "Terms that have the same or nearly identical meaning and can be used interchangeably" ;
+ rdfs:subPropertyOf skos:exactMatch ;
+ a owl:SymmetricProperty ;
+ rdfs:domain om:GlossaryTerm ;
+ rdfs:range om:GlossaryTerm .
+
+om:seeAlso a owl:ObjectProperty ;
+ rdfs:label "see also" ;
+ rdfs:comment "Reference to a related term that may provide additional context" ;
+ rdfs:subPropertyOf rdfs:seeAlso ;
+ a owl:SymmetricProperty ;
+ rdfs:domain om:GlossaryTerm ;
+ rdfs:range om:GlossaryTerm .
+
+# Hierarchical Relations (Classification)
+om:typeOf a owl:ObjectProperty ;
+ rdfs:label "type of" ;
+ rdfs:comment "Classification where the subject is a specific type of the object (e.g., 'Premium Customer' typeOf 'Customer')" ;
+ rdfs:subPropertyOf rdfs:subClassOf ;
+ owl:inverseOf om:hasTypes ;
+ a owl:TransitiveProperty ;
+ rdfs:domain om:GlossaryTerm ;
+ rdfs:range om:GlossaryTerm .
+
+om:hasTypes a owl:ObjectProperty ;
+ rdfs:label "has types" ;
+ rdfs:comment "Inverse of 'Type Of'. The subject has specific types (e.g., 'Customer' hasTypes 'Premium Customer')" ;
+ owl:inverseOf om:typeOf ;
+ a owl:TransitiveProperty ;
+ rdfs:domain om:GlossaryTerm ;
+ rdfs:range om:GlossaryTerm .
+
+# Hierarchical Relations (Composition)
+om:componentOf a owl:ObjectProperty ;
+ rdfs:label "component of" ;
+ rdfs:comment "The subject is a component or part of the object (e.g., 'Product Revenue' componentOf 'Total Revenue')" ;
+ owl:inverseOf om:composedOf ;
+ rdfs:domain om:GlossaryTerm ;
+ rdfs:range om:GlossaryTerm .
+
+om:composedOf a owl:ObjectProperty ;
+ rdfs:label "composed of" ;
+ rdfs:comment "The subject is composed of or includes the object (e.g., 'Total Revenue' composedOf 'Product Revenue')" ;
+ owl:inverseOf om:componentOf ;
+ rdfs:domain om:GlossaryTerm ;
+ rdfs:range om:GlossaryTerm .
+
+# Derivation Relations (for Metrics/KPIs)
+om:calculatedFrom a owl:ObjectProperty ;
+ rdfs:label "calculated from" ;
+ rdfs:comment "The subject metric is calculated or derived from the object (e.g., 'ARR' calculatedFrom 'MRR')" ;
+ rdfs:subPropertyOf prov:wasDerivedFrom ;
+ owl:inverseOf om:usedToCalculate ;
+ rdfs:domain om:GlossaryTerm ;
+ rdfs:range om:GlossaryTerm .
+
+om:usedToCalculate a owl:ObjectProperty ;
+ rdfs:label "used to calculate" ;
+ rdfs:comment "The subject is used to calculate the object metric (e.g., 'MRR' usedToCalculate 'ARR')" ;
+ owl:inverseOf om:calculatedFrom ;
+ rdfs:domain om:GlossaryTerm ;
+ rdfs:range om:GlossaryTerm .
+
+om:DataContract a owl:Class ;
+ rdfs:label "Data Contract" ;
+ rdfs:subClassOf om:Entity .
+
+om:DataProduct a owl:Class ;
+ rdfs:label "Data Product" ;
+ rdfs:subClassOf om:Entity .
+
+om:Domain a owl:Class ;
+ rdfs:label "Domain" ;
+ rdfs:subClassOf om:Entity .
+
+#################################################################
+# Teams & Users Classes
+#################################################################
+
+om:Team a owl:Class ;
+ rdfs:label "Team" ;
+ rdfs:subClassOf om:Entity, prov:Agent, foaf:Group .
+
+om:User a owl:Class ;
+ rdfs:label "User" ;
+ rdfs:subClassOf om:Entity, prov:Agent, foaf:Person .
+
+om:Bot a owl:Class ;
+ rdfs:label "Bot" ;
+ rdfs:subClassOf om:Entity, prov:Agent .
+
+om:Role a owl:Class ;
+ rdfs:label "Role" ;
+ rdfs:subClassOf om:Entity .
+
+om:Policy a owl:Class ;
+ rdfs:label "Policy" ;
+ rdfs:subClassOf om:Entity .
+
+#################################################################
+# Quality & Testing Classes
+#################################################################
+
+om:TestDefinition a owl:Class ;
+ rdfs:label "Test Definition" ;
+ rdfs:subClassOf om:Entity .
+
+om:TestSuite a owl:Class ;
+ rdfs:label "Test Suite" ;
+ rdfs:subClassOf om:Entity .
+
+om:TestCase a owl:Class ;
+ rdfs:label "Test Case" ;
+ rdfs:subClassOf om:Entity .
+
+#################################################################
+# DCAT 3 Alignment Classes
+#################################################################
+
+om:DatasetSeries a owl:Class ;
+ rdfs:label "Dataset Series" ;
+ rdfs:comment "Collection of related datasets, e.g., time series or versions" ;
+ rdfs:subClassOf dcat:DatasetSeries, om:Entity .
+
+om:CatalogRecord a owl:Class ;
+ rdfs:label "Catalog Record" ;
+ rdfs:comment "Metadata about when/how an entity was cataloged" ;
+ rdfs:subClassOf dcat:CatalogRecord, om:Entity .
+
+om:QualifiedRelationship a owl:Class ;
+ rdfs:label "Qualified Relationship" ;
+ rdfs:comment "Relationship with additional context like role, time, etc." ;
+ rdfs:subClassOf dcat:Relationship .
+
+om:Distribution a owl:Class ;
+ rdfs:label "Distribution" ;
+ rdfs:comment "Specific representation of a dataset" ;
+ rdfs:subClassOf dcat:Distribution, om:Entity .
+
+om:DataService a owl:Class ;
+ rdfs:label "Data Service" ;
+ rdfs:comment "Service that provides access to data" ;
+ rdfs:subClassOf dcat:DataService, om:Service .
+
+om:Catalog a owl:Class ;
+ rdfs:label "Catalog" ;
+ rdfs:comment "Curated collection of metadata about resources" ;
+ rdfs:subClassOf dcat:Catalog, om:Entity .
+
+om:Resource a owl:Class ;
+ rdfs:label "Resource" ;
+ rdfs:comment "Any resource cataloged in OpenMetadata" ;
+ rdfs:subClassOf dcat:Resource .
+
+om:Organization a owl:Class ;
+ rdfs:label "Organization" ;
+ rdfs:comment "Organization entity" ;
+ rdfs:subClassOf foaf:Organization, prov:Agent, om:Entity .
+
+om:Location a owl:Class ;
+ rdfs:label "Location" ;
+ rdfs:comment "Spatial region or location" ;
+ rdfs:subClassOf dct:Location .
+
+om:PeriodOfTime a owl:Class ;
+ rdfs:label "Period of Time" ;
+ rdfs:comment "Time period specification" ;
+ rdfs:subClassOf dct:PeriodOfTime .
+
+om:Frequency a owl:Class ;
+ rdfs:label "Frequency" ;
+ rdfs:comment "Update frequency specification" ;
+ rdfs:subClassOf dct:Frequency .
+
+om:LicenseDocument a owl:Class ;
+ rdfs:label "License Document" ;
+ rdfs:comment "Legal document giving permissions" ;
+ rdfs:subClassOf dct:LicenseDocument .
+
+om:RightsStatement a owl:Class ;
+ rdfs:label "Rights Statement" ;
+ rdfs:comment "Statement about intellectual property rights" ;
+ rdfs:subClassOf dct:RightsStatement .
+
+om:Standard a owl:Class ;
+ rdfs:label "Standard" ;
+ rdfs:comment "Technical standard or specification" ;
+ rdfs:subClassOf dct:Standard .
+
+om:MediaType a owl:Class ;
+ rdfs:label "Media Type" ;
+ rdfs:comment "Media type or format" ;
+ rdfs:subClassOf dct:MediaType .
+
+#################################################################
+# Communication Classes
+#################################################################
+
+om:Thread a owl:Class ;
+ rdfs:label "Thread" ;
+ rdfs:subClassOf om:Entity .
+
+om:Post a owl:Class ;
+ rdfs:label "Post" ;
+ rdfs:subClassOf om:Entity .
+
+#################################################################
+# Object Properties - All Relationship Types
+#################################################################
+
+om:contains a owl:ObjectProperty ;
+ rdfs:label "contains" ;
+ rdfs:comment "Hierarchical containment relationship" .
+
+om:createdBy a owl:ObjectProperty ;
+ rdfs:label "created by" ;
+ rdfs:subPropertyOf prov:wasGeneratedBy .
+
+om:repliedTo a owl:ObjectProperty ;
+ rdfs:label "replied to" ;
+ rdfs:domain om:Post ;
+ rdfs:range om:Post .
+
+om:isAbout a owl:ObjectProperty ;
+ rdfs:label "is about" ;
+ rdfs:comment "Thread or post is about an entity" .
+
+om:addressedTo a owl:ObjectProperty ;
+ rdfs:label "addressed to" ;
+ rdfs:domain om:Post ;
+ rdfs:range prov:Agent .
+
+om:mentionedIn a owl:ObjectProperty ;
+ rdfs:label "mentioned in" ;
+ rdfs:comment "Entity is mentioned in a post or thread" .
+
+om:testedBy a owl:ObjectProperty ;
+ rdfs:label "tested by" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range om:TestCase .
+
+om:uses a owl:ObjectProperty ;
+ rdfs:label "uses" ;
+ rdfs:subPropertyOf prov:used .
+
+om:owns a owl:ObjectProperty ;
+ rdfs:label "owns" ;
+ rdfs:domain prov:Agent ;
+ rdfs:range om:Entity .
+
+om:parentOf a owl:ObjectProperty ;
+ rdfs:label "parent of" ;
+ rdfs:comment "Hierarchical parent relationship" .
+
+om:has a owl:ObjectProperty ;
+ rdfs:label "has" ;
+ rdfs:comment "General possession relationship" .
+
+om:follows a owl:ObjectProperty ;
+ rdfs:label "follows" ;
+ rdfs:domain prov:Agent ;
+ rdfs:range om:Entity .
+
+om:joinedWith a owl:ObjectProperty ;
+ rdfs:label "joined with" ;
+ rdfs:comment "Join relationship between tables" ;
+ rdfs:domain om:Table ;
+ rdfs:range om:Table .
+
+om:upstream a owl:ObjectProperty ;
+ rdfs:label "upstream" ;
+ rdfs:comment "Data lineage upstream relationship" ;
+ rdfs:subPropertyOf prov:wasDerivedFrom ;
+ owl:equivalentProperty dcat:qualifiedRelation ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range om:DataAsset .
+
+om:downstream a owl:ObjectProperty ;
+ rdfs:label "downstream" ;
+ rdfs:comment "Data lineage downstream relationship" ;
+ owl:inverseOf om:upstream .
+
+om:appliedTo a owl:ObjectProperty ;
+ rdfs:label "applied to" ;
+ rdfs:comment "Tag or classification applied to entity" ;
+ rdfs:domain om:Tag ;
+ rdfs:range om:Entity .
+
+om:relatedTo a owl:ObjectProperty ;
+ rdfs:label "related to" ;
+ rdfs:comment "General relationship between entities" .
+
+om:reviews a owl:ObjectProperty ;
+ rdfs:label "reviews" ;
+ rdfs:domain prov:Agent ;
+ rdfs:range om:Entity .
+
+om:reactedTo a owl:ObjectProperty ;
+ rdfs:label "reacted to" ;
+ rdfs:domain prov:Agent ;
+ rdfs:range om:Post .
+
+om:voted a owl:ObjectProperty ;
+ rdfs:label "voted" ;
+ rdfs:domain prov:Agent ;
+ rdfs:range om:Entity .
+
+om:expert a owl:ObjectProperty ;
+ rdfs:label "expert" ;
+ rdfs:comment "User is expert on entity" ;
+ rdfs:domain om:User ;
+ rdfs:range om:Entity .
+
+om:editedBy a owl:ObjectProperty ;
+ rdfs:label "edited by" ;
+ rdfs:domain om:Entity ;
+ rdfs:range prov:Agent .
+
+om:defaultsTo a owl:ObjectProperty ;
+ rdfs:label "defaults to" ;
+ rdfs:comment "Default value relationship" .
+
+om:relatesTo a owl:ObjectProperty ;
+ rdfs:label "relates to" ;
+ rdfs:comment "Alternative spelling of relatedTo" ;
+ owl:equivalentProperty om:relatedTo .
+
+#################################################################
+# Additional Important Properties
+#################################################################
+
+om:belongsToDatabase a owl:ObjectProperty ;
+ rdfs:label "belongs to database" ;
+ rdfs:subPropertyOf dct:isPartOf ;
+ rdfs:domain om:Table ;
+ rdfs:range om:Database .
+
+om:belongsToSchema a owl:ObjectProperty ;
+ rdfs:label "belongs to schema" ;
+ rdfs:subPropertyOf dct:isPartOf ;
+ rdfs:domain om:Table ;
+ rdfs:range om:DatabaseSchema .
+
+om:belongsToService a owl:ObjectProperty ;
+ rdfs:label "belongs to service" ;
+ rdfs:subPropertyOf dcat:accessService ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range om:Service .
+
+om:Column a owl:Class ;
+ rdfs:label "Column" ;
+ rdfs:comment "Column in a table" ;
+ rdfs:subClassOf om:Entity .
+
+om:hasColumn a owl:ObjectProperty ;
+ rdfs:label "has column" ;
+ rdfs:domain om:Table ;
+ rdfs:range om:Column .
+
+om:hasTag a owl:ObjectProperty ;
+ rdfs:label "has tag" ;
+ rdfs:domain om:Entity ;
+ rdfs:range om:Tag .
+
+om:hasGlossaryTerm a owl:ObjectProperty ;
+ rdfs:label "has glossary term" ;
+ rdfs:subPropertyOf dct:subject ;
+ rdfs:domain om:Entity ;
+ rdfs:range om:GlossaryTerm .
+
+om:hasOwner a owl:ObjectProperty ;
+ rdfs:label "has owner" ;
+ rdfs:subPropertyOf dcat:contactPoint ;
+ rdfs:comment "Agent responsible for the entity" ;
+ rdfs:domain om:Entity ;
+ rdfs:range prov:Agent .
+
+om:memberOf a owl:ObjectProperty ;
+ rdfs:label "member of" ;
+ rdfs:domain om:User ;
+ rdfs:range om:Team .
+
+om:creates a owl:ObjectProperty ;
+ rdfs:label "creates" ;
+ rdfs:domain om:User ;
+ rdfs:range om:Thread .
+
+om:containsPosts a owl:ObjectProperty ;
+ rdfs:label "contains posts" ;
+ rdfs:domain om:Thread ;
+ rdfs:range om:Post .
+
+#################################################################
+# DCAT 3 Properties - Core Dataset Properties
+#################################################################
+
+om:inSeries a owl:ObjectProperty ;
+ rdfs:label "in series" ;
+ rdfs:subPropertyOf dcat:inSeries ;
+ rdfs:comment "Links a dataset to its series" ;
+ rdfs:domain om:Table ;
+ rdfs:range om:DatasetSeries .
+
+om:servesDataset a owl:ObjectProperty ;
+ rdfs:label "serves dataset" ;
+ rdfs:subPropertyOf dcat:servesDataset ;
+ rdfs:comment "Links a data service to datasets it serves" ;
+ rdfs:domain om:Service ;
+ rdfs:range om:DataAsset .
+
+om:distribution a owl:ObjectProperty ;
+ rdfs:label "distribution" ;
+ rdfs:subPropertyOf dcat:distribution ;
+ rdfs:comment "Available distribution of the dataset" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range om:Distribution .
+
+om:landingPage a owl:ObjectProperty ;
+ rdfs:label "landing page" ;
+ rdfs:subPropertyOf dcat:landingPage ;
+ rdfs:comment "Web page providing access and information" ;
+ rdfs:domain om:Entity ;
+ rdfs:range foaf:Document .
+
+om:theme a owl:ObjectProperty ;
+ rdfs:label "theme" ;
+ rdfs:subPropertyOf dcat:theme ;
+ rdfs:comment "Main category of the dataset" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range skos:Concept .
+
+om:keyword a owl:DatatypeProperty ;
+ rdfs:label "keyword" ;
+ rdfs:subPropertyOf dcat:keyword ;
+ rdfs:comment "Keywords describing the dataset" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range xsd:string .
+
+om:contactPoint a owl:ObjectProperty ;
+ rdfs:label "contact point" ;
+ rdfs:subPropertyOf dcat:contactPoint ;
+ rdfs:comment "Contact information for the dataset" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range vcard:Kind .
+
+om:temporal a owl:ObjectProperty ;
+ rdfs:label "temporal coverage" ;
+ rdfs:subPropertyOf dcat:temporal ;
+ rdfs:comment "Temporal period covered by the dataset" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range om:PeriodOfTime .
+
+om:spatial a owl:ObjectProperty ;
+ rdfs:label "spatial coverage" ;
+ rdfs:subPropertyOf dcat:spatial ;
+ rdfs:comment "Spatial area covered by the dataset" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range om:Location .
+
+om:accrualPeriodicity a owl:ObjectProperty ;
+ rdfs:label "accrual periodicity" ;
+ rdfs:subPropertyOf dcat:accrualPeriodicity ;
+ rdfs:comment "Frequency of dataset updates" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range om:Frequency .
+
+om:language a owl:ObjectProperty ;
+ rdfs:label "language" ;
+ rdfs:subPropertyOf dcat:language ;
+ rdfs:comment "Language of the dataset" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range dct:LinguisticSystem .
+
+om:publisher a owl:ObjectProperty ;
+ rdfs:label "publisher" ;
+ rdfs:subPropertyOf dcat:publisher ;
+ rdfs:comment "Entity responsible for making the dataset available" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range prov:Agent .
+
+om:issued a owl:DatatypeProperty ;
+ rdfs:label "issued" ;
+ rdfs:subPropertyOf dcat:issued ;
+ rdfs:comment "Date of formal issuance" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range xsd:dateTime .
+
+om:license a owl:ObjectProperty ;
+ rdfs:label "license" ;
+ rdfs:subPropertyOf dcat:license ;
+ rdfs:comment "License under which the dataset is available" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range om:LicenseDocument .
+
+om:rights a owl:ObjectProperty ;
+ rdfs:label "rights" ;
+ rdfs:subPropertyOf dcat:rights ;
+ rdfs:comment "Rights statement for the dataset" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range om:RightsStatement .
+
+om:accessRights a owl:ObjectProperty ;
+ rdfs:label "access rights" ;
+ rdfs:subPropertyOf dcat:accessRights ;
+ rdfs:comment "Information about access restrictions" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range dct:RightsStatement .
+
+om:endpointURL a owl:DatatypeProperty ;
+ rdfs:label "endpoint URL" ;
+ rdfs:subPropertyOf dcat:endpointURL ;
+ rdfs:domain om:Service ;
+ rdfs:range xsd:anyURI .
+
+om:endpointDescription a owl:DatatypeProperty ;
+ rdfs:label "endpoint description" ;
+ rdfs:subPropertyOf dcat:endpointDescription ;
+ rdfs:domain om:Service ;
+ rdfs:range xsd:string .
+
+#################################################################
+# DCAT Distribution Properties
+#################################################################
+
+om:accessURL a owl:ObjectProperty ;
+ rdfs:label "access URL" ;
+ rdfs:subPropertyOf dcat:accessURL ;
+ rdfs:comment "URL to access the distribution" ;
+ rdfs:domain om:Distribution ;
+ rdfs:range rdfs:Resource .
+
+om:downloadURL a owl:ObjectProperty ;
+ rdfs:label "download URL" ;
+ rdfs:subPropertyOf dcat:downloadURL ;
+ rdfs:comment "Direct download URL" ;
+ rdfs:domain om:Distribution ;
+ rdfs:range rdfs:Resource .
+
+om:format a owl:ObjectProperty ;
+ rdfs:label "format" ;
+ rdfs:subPropertyOf dcat:format ;
+ rdfs:comment "File format of the distribution" ;
+ rdfs:domain om:Distribution ;
+ rdfs:range om:MediaType .
+
+om:mediaType a owl:ObjectProperty ;
+ rdfs:label "media type" ;
+ rdfs:subPropertyOf dcat:mediaType ;
+ rdfs:comment "Media type of the distribution" ;
+ rdfs:domain om:Distribution ;
+ rdfs:range om:MediaType .
+
+om:byteSize a owl:DatatypeProperty ;
+ rdfs:label "byte size" ;
+ rdfs:subPropertyOf dcat:byteSize ;
+ rdfs:comment "Size in bytes" ;
+ rdfs:domain om:Distribution ;
+ rdfs:range xsd:nonNegativeInteger .
+
+om:compressFormat a owl:ObjectProperty ;
+ rdfs:label "compression format" ;
+ rdfs:subPropertyOf dcat:compressFormat ;
+ rdfs:comment "Compression format of the distribution" ;
+ rdfs:domain om:Distribution ;
+ rdfs:range om:MediaType .
+
+om:packageFormat a owl:ObjectProperty ;
+ rdfs:label "package format" ;
+ rdfs:subPropertyOf dcat:packageFormat ;
+ rdfs:comment "Package format of the distribution" ;
+ rdfs:domain om:Distribution ;
+ rdfs:range om:MediaType .
+
+#################################################################
+# DCAT Catalog Properties
+#################################################################
+
+om:dataset a owl:ObjectProperty ;
+ rdfs:label "dataset" ;
+ rdfs:subPropertyOf dcat:dataset ;
+ rdfs:comment "Dataset that is part of the catalog" ;
+ rdfs:domain om:Catalog ;
+ rdfs:range om:DataAsset .
+
+om:service a owl:ObjectProperty ;
+ rdfs:label "service" ;
+ rdfs:subPropertyOf dcat:service ;
+ rdfs:comment "Service that is part of the catalog" ;
+ rdfs:domain om:Catalog ;
+ rdfs:range om:DataService .
+
+om:catalog a owl:ObjectProperty ;
+ rdfs:label "catalog" ;
+ rdfs:subPropertyOf dcat:catalog ;
+ rdfs:comment "Sub-catalog" ;
+ rdfs:domain om:Catalog ;
+ rdfs:range om:Catalog .
+
+om:themeTaxonomy a owl:ObjectProperty ;
+ rdfs:label "theme taxonomy" ;
+ rdfs:subPropertyOf dcat:themeTaxonomy ;
+ rdfs:comment "Knowledge organization system for categorizing datasets" ;
+ rdfs:domain om:Catalog ;
+ rdfs:range skos:ConceptScheme .
+
+om:homepage a owl:ObjectProperty ;
+ rdfs:label "homepage" ;
+ rdfs:subPropertyOf foaf:homepage ;
+ rdfs:comment "Homepage of the catalog" ;
+ rdfs:domain om:Catalog ;
+ rdfs:range foaf:Document .
+
+om:temporalResolution a owl:DatatypeProperty ;
+ rdfs:label "temporal resolution" ;
+ rdfs:subPropertyOf dcat:temporalResolution ;
+ rdfs:comment "Minimum time period resolvable in the dataset" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range xsd:duration .
+
+om:spatialResolution a owl:DatatypeProperty ;
+ rdfs:label "spatial resolution" ;
+ rdfs:subPropertyOf dcat:spatialResolutionInMeters ;
+ rdfs:comment "Minimum spatial separation resolvable in the dataset" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range xsd:decimal .
+
+#################################################################
+# DCAT Quality Properties
+#################################################################
+
+om:hasQualityMeasurement a owl:ObjectProperty ;
+ rdfs:label "has quality measurement" ;
+ rdfs:subPropertyOf dcat:hasQualityMeasurement ;
+ rdfs:comment "Quality measurement for the dataset" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range dqv:QualityMeasurement .
+
+om:hasQualityAnnotation a owl:ObjectProperty ;
+ rdfs:label "has quality annotation" ;
+ rdfs:subPropertyOf dcat:hasQualityAnnotation ;
+ rdfs:comment "Quality annotation for the dataset" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range oa:Annotation .
+
+om:conformsToStandard a owl:ObjectProperty ;
+ rdfs:label "conforms to standard" ;
+ rdfs:subPropertyOf dcat:conformsTo ;
+ rdfs:comment "Standard the dataset conforms to" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range om:Standard .
+
+om:checksum a owl:ObjectProperty ;
+ rdfs:label "checksum" ;
+ rdfs:comment "Checksum for data integrity verification" ;
+ rdfs:domain om:File ;
+ rdfs:range spdx:Checksum .
+
+om:hadRole a owl:ObjectProperty ;
+ rdfs:label "had role" ;
+ rdfs:subPropertyOf dcat:hadRole ;
+ rdfs:comment "Role in a qualified relationship" ;
+ rdfs:domain om:QualifiedRelationship ;
+ rdfs:range dcat:Role .
+
+om:qualifiedRelation a owl:ObjectProperty ;
+ rdfs:label "qualified relation" ;
+ rdfs:subPropertyOf dcat:qualifiedRelation ;
+ rdfs:comment "Link to a qualified relationship" ;
+ rdfs:domain om:Entity ;
+ rdfs:range om:QualifiedRelationship .
+
+#################################################################
+# DCAT Versioning Properties
+#################################################################
+
+om:version a owl:DatatypeProperty ;
+ rdfs:label "version" ;
+ rdfs:subPropertyOf dcat:version ;
+ rdfs:comment "Version identifier" ;
+ rdfs:domain om:Entity ;
+ rdfs:range xsd:string .
+
+om:versionNotes a owl:DatatypeProperty ;
+ rdfs:label "version notes" ;
+ rdfs:subPropertyOf adms:versionNotes ;
+ rdfs:comment "Notes about this version" ;
+ rdfs:domain om:Entity ;
+ rdfs:range xsd:string .
+
+om:isVersionOf a owl:ObjectProperty ;
+ rdfs:label "is version of" ;
+ rdfs:subPropertyOf dcat:isVersionOf ;
+ rdfs:comment "Links to the non-versioned or abstract dataset" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range om:DataAsset .
+
+om:hasVersion a owl:ObjectProperty ;
+ rdfs:label "has version" ;
+ rdfs:subPropertyOf dcat:hasVersion ;
+ owl:inverseOf om:isVersionOf ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range om:DataAsset .
+
+om:previousVersion a owl:ObjectProperty ;
+ rdfs:label "previous version" ;
+ rdfs:subPropertyOf dcat:previousVersion ;
+ rdfs:comment "Link to previous version" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range om:DataAsset .
+
+om:first a owl:ObjectProperty ;
+ rdfs:label "first" ;
+ rdfs:subPropertyOf dcat:first ;
+ rdfs:comment "First dataset in a series" ;
+ rdfs:domain om:DatasetSeries ;
+ rdfs:range om:DataAsset .
+
+om:last a owl:ObjectProperty ;
+ rdfs:label "last" ;
+ rdfs:subPropertyOf dcat:last ;
+ rdfs:comment "Last dataset in a series" ;
+ rdfs:domain om:DatasetSeries ;
+ rdfs:range om:DataAsset .
+
+om:prev a owl:ObjectProperty ;
+ rdfs:label "previous" ;
+ rdfs:subPropertyOf dcat:prev ;
+ rdfs:comment "Previous dataset in a series" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range om:DataAsset .
+
+om:next a owl:ObjectProperty ;
+ rdfs:label "next" ;
+ rdfs:subPropertyOf dcat:next ;
+ rdfs:comment "Next dataset in a series" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range om:DataAsset .
+
+#################################################################
+# Catalog-specific Properties
+#################################################################
+
+om:record a owl:ObjectProperty ;
+ rdfs:label "record" ;
+ rdfs:subPropertyOf dcat:record ;
+ rdfs:comment "Links catalog to its records" ;
+ rdfs:domain om:Database ;
+ rdfs:range om:CatalogRecord .
+
+om:primaryTopic a owl:ObjectProperty ;
+ rdfs:label "primary topic" ;
+ rdfs:subPropertyOf foaf:primaryTopic ;
+ rdfs:comment "Main entity described by this record" ;
+ rdfs:domain om:CatalogRecord ;
+ rdfs:range om:Entity .
+
+om:cataloged a owl:DatatypeProperty ;
+ rdfs:label "cataloged" ;
+ rdfs:comment "Date when entity was added to catalog" ;
+ rdfs:domain om:CatalogRecord ;
+ rdfs:range xsd:dateTime .
+
+om:conformsTo a owl:ObjectProperty ;
+ rdfs:label "conforms to" ;
+ rdfs:subPropertyOf dct:conformsTo ;
+ rdfs:comment "Standard or schema that the resource conforms to" ;
+ rdfs:domain om:Entity ;
+ rdfs:range dct:Standard .
+
+#################################################################
+# DCAT Provenance Properties
+#################################################################
+
+om:wasGeneratedBy a owl:ObjectProperty ;
+ rdfs:label "was generated by" ;
+ rdfs:subPropertyOf prov:wasGeneratedBy ;
+ rdfs:comment "Activity that generated the dataset" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range prov:Activity .
+
+om:wasDerivedFrom a owl:ObjectProperty ;
+ rdfs:label "was derived from" ;
+ rdfs:subPropertyOf prov:wasDerivedFrom ;
+ rdfs:comment "Source dataset this was derived from" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range om:DataAsset .
+
+om:qualifiedAttribution a owl:ObjectProperty ;
+ rdfs:label "qualified attribution" ;
+ rdfs:subPropertyOf prov:qualifiedAttribution ;
+ rdfs:comment "Detailed attribution with roles" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range prov:Attribution .
+
+om:qualifiedDerivation a owl:ObjectProperty ;
+ rdfs:label "qualified derivation" ;
+ rdfs:subPropertyOf prov:qualifiedDerivation ;
+ rdfs:comment "Detailed derivation with transformation info" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range prov:Derivation .
+
+om:provenance a owl:ObjectProperty ;
+ rdfs:label "provenance" ;
+ rdfs:subPropertyOf dct:provenance ;
+ rdfs:comment "Provenance statement" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range dct:ProvenanceStatement .
+
+om:source a owl:ObjectProperty ;
+ rdfs:label "source" ;
+ rdfs:subPropertyOf dct:source ;
+ rdfs:comment "Source of the dataset" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range om:DataAsset .
+
+#################################################################
+# Datatype Properties
+#################################################################
+
+om:fullyQualifiedName a owl:DatatypeProperty ;
+ rdfs:label "fully qualified name" ;
+ rdfs:subPropertyOf dct:identifier ;
+ rdfs:comment "Unique identifier for the entity within OpenMetadata" ;
+ rdfs:domain om:Entity ;
+ rdfs:range xsd:string .
+
+om:serviceType a owl:DatatypeProperty ;
+ rdfs:label "service type" ;
+ rdfs:subPropertyOf dct:type ;
+ rdfs:domain om:Service ;
+ rdfs:range xsd:string .
+
+om:description a owl:DatatypeProperty ;
+ rdfs:label "description" ;
+ rdfs:subPropertyOf dct:description ;
+ rdfs:domain om:Entity ;
+ rdfs:range xsd:string .
+
+om:created a owl:DatatypeProperty ;
+ rdfs:label "created" ;
+ rdfs:subPropertyOf dct:created ;
+ rdfs:domain om:Entity ;
+ rdfs:range xsd:dateTime .
+
+om:modified a owl:DatatypeProperty ;
+ rdfs:label "modified" ;
+ rdfs:subPropertyOf dct:modified ;
+ rdfs:domain om:Entity ;
+ rdfs:range xsd:dateTime .
+
+#################################################################
+# CSVW Tabular Data Metadata (for Tables)
+#################################################################
+
+om:rowCount a owl:DatatypeProperty ;
+ rdfs:label "row count" ;
+ rdfs:comment "Number of rows in the table" ;
+ rdfs:domain om:Table ;
+ rdfs:range xsd:integer .
+
+om:columnCount a owl:DatatypeProperty ;
+ rdfs:label "column count" ;
+ rdfs:comment "Number of columns in the table" ;
+ rdfs:domain om:Table ;
+ rdfs:range xsd:integer .
+
+om:columnDataType a owl:DatatypeProperty ;
+ rdfs:label "column data type" ;
+ rdfs:subPropertyOf csvw:datatype ;
+ rdfs:comment "Data type of the column" ;
+ rdfs:domain om:Column ;
+ rdfs:range xsd:string .
+
+om:columnDescription a owl:DatatypeProperty ;
+ rdfs:label "column description" ;
+ rdfs:comment "Description of what the column contains" ;
+ rdfs:domain om:Column ;
+ rdfs:range xsd:string .
+
+om:isPrimaryKey a owl:DatatypeProperty ;
+ rdfs:label "is primary key" ;
+ rdfs:comment "Whether this column is a primary key" ;
+ rdfs:domain om:Column ;
+ rdfs:range xsd:boolean .
+
+om:isNullable a owl:DatatypeProperty ;
+ rdfs:label "is nullable" ;
+ rdfs:subPropertyOf csvw:null ;
+ rdfs:comment "Whether this column can contain null values" ;
+ rdfs:domain om:Column ;
+ rdfs:range xsd:boolean .
+
+om:sampleData a owl:ObjectProperty ;
+ rdfs:label "sample data" ;
+ rdfs:comment "Sample data from the table" ;
+ rdfs:domain om:Table ;
+ rdfs:range csvw:TableGroup .
+
+#################################################################
+# Enhanced Lineage Properties (PROV-O aligned)
+#################################################################
+
+om:lineageSource a owl:DatatypeProperty ;
+ rdfs:label "lineage source" ;
+ rdfs:comment "How the lineage was created (Manual, Pipeline, Query, etc.)" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range xsd:string .
+
+om:sqlQuery a owl:DatatypeProperty ;
+ rdfs:label "SQL query" ;
+ rdfs:comment "SQL query used in transformation" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range xsd:string .
+
+om:transformationFunction a owl:DatatypeProperty ;
+ rdfs:label "transformation function" ;
+ rdfs:comment "Function applied to transform data" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range xsd:string .
+
+om:fromColumn a owl:ObjectProperty ;
+ rdfs:label "from column" ;
+ rdfs:subPropertyOf prov:used ;
+ rdfs:comment "Source column used in transformation" ;
+ rdfs:domain om:Column ;
+ rdfs:range om:Column .
+
+om:toColumn a owl:ObjectProperty ;
+ rdfs:label "to column" ;
+ rdfs:subPropertyOf prov:wasGeneratedBy ;
+ rdfs:comment "Target column created by transformation" ;
+ rdfs:domain om:Column ;
+ rdfs:range om:Column .
+
+om:lineageCreatedBy a owl:ObjectProperty ;
+ rdfs:label "lineage created by" ;
+ rdfs:subPropertyOf prov:wasAttributedTo ;
+ rdfs:comment "User who created the lineage" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range prov:Agent .
+
+om:lineageCreatedAt a owl:DatatypeProperty ;
+ rdfs:label "lineage created at" ;
+ rdfs:subPropertyOf prov:generatedAtTime ;
+ rdfs:comment "When the lineage was created" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range xsd:dateTime .
+
+om:pipeline a owl:ObjectProperty ;
+ rdfs:label "pipeline" ;
+ rdfs:subPropertyOf prov:wasGeneratedBy ;
+ rdfs:comment "Pipeline that processes the data" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range om:Pipeline .
+
+#################################################################
+# Data Product Properties (DPROD aligned)
+#################################################################
+
+om:InputPort a owl:Class ;
+ rdfs:label "Input Port" ;
+ rdfs:comment "Input port of a data product for consuming data" ;
+ rdfs:subClassOf dprod:InputPort, dcat:DataService .
+
+om:OutputPort a owl:Class ;
+ rdfs:label "Output Port" ;
+ rdfs:comment "Output port of a data product for exposing data" ;
+ rdfs:subClassOf dprod:OutputPort, dcat:DataService .
+
+om:DataProductSLA a owl:Class ;
+ rdfs:label "Data Product SLA" ;
+ rdfs:comment "Service Level Agreement for a data product" ;
+ rdfs:subClassOf dprod:ServiceLevelAgreement .
+
+om:dataProductAssets a owl:ObjectProperty ;
+ rdfs:label "data product assets" ;
+ rdfs:comment "Assets that are part of this data product" ;
+ rdfs:domain om:DataProduct ;
+ rdfs:range om:DataAsset .
+
+om:dataProductDomain a owl:ObjectProperty ;
+ rdfs:label "data product domain" ;
+ rdfs:comment "Domain this data product belongs to" ;
+ rdfs:domain om:DataProduct ;
+ rdfs:range om:Domain .
+
+om:dataProductOwner a owl:ObjectProperty ;
+ rdfs:label "data product owner" ;
+ rdfs:subPropertyOf dcat:contactPoint ;
+ rdfs:comment "Owner of the data product" ;
+ rdfs:domain om:DataProduct ;
+ rdfs:range prov:Agent .
+
+om:dataProductExpert a owl:ObjectProperty ;
+ rdfs:label "data product expert" ;
+ rdfs:comment "Expert for this data product" ;
+ rdfs:domain om:DataProduct ;
+ rdfs:range prov:Agent .
+
+om:hasInputPort a owl:ObjectProperty ;
+ rdfs:label "has input port" ;
+ rdfs:subPropertyOf dprod:hasInputPort ;
+ rdfs:comment "Input port of the data product" ;
+ rdfs:domain om:DataProduct ;
+ rdfs:range om:InputPort .
+
+om:hasOutputPort a owl:ObjectProperty ;
+ rdfs:label "has output port" ;
+ rdfs:subPropertyOf dprod:hasOutputPort ;
+ rdfs:comment "Output port of the data product" ;
+ rdfs:domain om:DataProduct ;
+ rdfs:range om:OutputPort .
+
+om:portName a owl:DatatypeProperty ;
+ rdfs:label "port name" ;
+ rdfs:comment "Name of the port" ;
+ rdfs:domain [ a owl:Class ; owl:unionOf ( om:InputPort om:OutputPort ) ] ;
+ rdfs:range xsd:string .
+
+om:portProtocol a owl:DatatypeProperty ;
+ rdfs:label "port protocol" ;
+ rdfs:comment "Protocol used by the port (REST, GRPC, KAFKA, etc.)" ;
+ rdfs:domain [ a owl:Class ; owl:unionOf ( om:InputPort om:OutputPort ) ] ;
+ rdfs:range xsd:string .
+
+om:portFormat a owl:DatatypeProperty ;
+ rdfs:label "port format" ;
+ rdfs:comment "Data format supported by the port (JSON, CSV, PARQUET, etc.)" ;
+ rdfs:domain [ a owl:Class ; owl:unionOf ( om:InputPort om:OutputPort ) ] ;
+ rdfs:range xsd:string .
+
+om:portEndpoint a owl:DatatypeProperty ;
+ rdfs:label "port endpoint" ;
+ rdfs:subPropertyOf dcat:endpointURL ;
+ rdfs:comment "Endpoint URL or connection string for the port" ;
+ rdfs:domain [ a owl:Class ; owl:unionOf ( om:InputPort om:OutputPort ) ] ;
+ rdfs:range xsd:anyURI .
+
+om:portDataAsset a owl:ObjectProperty ;
+ rdfs:label "port data asset" ;
+ rdfs:comment "Data asset exposed through this port" ;
+ rdfs:domain [ a owl:Class ; owl:unionOf ( om:InputPort om:OutputPort ) ] ;
+ rdfs:range om:DataAsset .
+
+om:lifecycleStage a owl:DatatypeProperty ;
+ rdfs:label "lifecycle stage" ;
+ rdfs:comment "Current lifecycle stage (IDEATION, DESIGN, DEVELOPMENT, TESTING, PRODUCTION, DEPRECATED, RETIRED)" ;
+ rdfs:domain om:DataProduct ;
+ rdfs:range xsd:string .
+
+om:hasSLA a owl:ObjectProperty ;
+ rdfs:label "has SLA" ;
+ rdfs:comment "Service Level Agreement for the data product" ;
+ rdfs:domain om:DataProduct ;
+ rdfs:range om:DataProductSLA .
+
+om:slaTier a owl:DatatypeProperty ;
+ rdfs:label "SLA tier" ;
+ rdfs:comment "SLA tier level (GOLD, SILVER, BRONZE)" ;
+ rdfs:domain om:DataProductSLA ;
+ rdfs:range xsd:string .
+
+om:slaAvailability a owl:DatatypeProperty ;
+ rdfs:label "SLA availability" ;
+ rdfs:comment "Expected availability percentage" ;
+ rdfs:domain om:DataProductSLA ;
+ rdfs:range xsd:decimal .
+
+om:slaResponseTime a owl:DatatypeProperty ;
+ rdfs:label "SLA response time" ;
+ rdfs:comment "Expected response time in milliseconds" ;
+ rdfs:domain om:DataProductSLA ;
+ rdfs:range xsd:integer .
+
+om:slaDataFreshness a owl:DatatypeProperty ;
+ rdfs:label "SLA data freshness" ;
+ rdfs:comment "Maximum data staleness in minutes" ;
+ rdfs:domain om:DataProductSLA ;
+ rdfs:range xsd:integer .
+
+om:slaDataQuality a owl:DatatypeProperty ;
+ rdfs:label "SLA data quality" ;
+ rdfs:comment "Minimum data quality score" ;
+ rdfs:domain om:DataProductSLA ;
+ rdfs:range xsd:decimal .
+
+om:consumesFrom a owl:ObjectProperty ;
+ rdfs:label "consumes from" ;
+ rdfs:subPropertyOf dprod:consumesFrom ;
+ rdfs:comment "Data products that this product consumes data from" ;
+ rdfs:domain om:DataProduct ;
+ rdfs:range om:DataProduct .
+
+om:providesTo a owl:ObjectProperty ;
+ rdfs:label "provides to" ;
+ rdfs:subPropertyOf dprod:providesTo ;
+ rdfs:comment "Data products that consume data from this product" ;
+ rdfs:domain om:DataProduct ;
+ rdfs:range om:DataProduct .
+
+#################################################################
+# Additional DCAT Dataset Properties
+#################################################################
+
+om:identifier a owl:DatatypeProperty ;
+ rdfs:label "identifier" ;
+ rdfs:subPropertyOf dct:identifier ;
+ rdfs:comment "Unique identifier of the dataset" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range rdfs:Literal .
+
+om:title a owl:DatatypeProperty ;
+ rdfs:label "title" ;
+ rdfs:subPropertyOf dct:title ;
+ rdfs:comment "Title of the dataset" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range rdfs:Literal .
+
+om:creator a owl:ObjectProperty ;
+ rdfs:label "creator" ;
+ rdfs:subPropertyOf dct:creator ;
+ rdfs:comment "Entity primarily responsible for creating the dataset" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range prov:Agent .
+
+om:contributor a owl:ObjectProperty ;
+ rdfs:label "contributor" ;
+ rdfs:subPropertyOf dct:contributor ;
+ rdfs:comment "Entity responsible for contributions to the dataset" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range prov:Agent .
+
+om:type a owl:ObjectProperty ;
+ rdfs:label "type" ;
+ rdfs:subPropertyOf dct:type ;
+ rdfs:comment "Nature or genre of the dataset" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range rdfs:Class .
+
+om:isReferencedBy a owl:ObjectProperty ;
+ rdfs:label "is referenced by" ;
+ rdfs:subPropertyOf dct:isReferencedBy ;
+ rdfs:comment "Related resource that references this dataset" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range rdfs:Resource .
+
+om:relation a owl:ObjectProperty ;
+ rdfs:label "relation" ;
+ rdfs:subPropertyOf dct:relation ;
+ rdfs:comment "Related resource" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range rdfs:Resource .
+
+om:hasPolicy a owl:ObjectProperty ;
+ rdfs:label "has policy" ;
+ rdfs:subPropertyOf odrl:hasPolicy ;
+ rdfs:comment "ODRL policy associated with the dataset" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range odrl:Policy .
+
+om:qualifiedAccess a owl:ObjectProperty ;
+ rdfs:label "qualified access" ;
+ rdfs:comment "Qualified access information including authentication and authorization" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range dcat:Relationship .
+
+#################################################################
+# Data Quality Properties
+#################################################################
+
+om:accuracy a owl:DatatypeProperty ;
+ rdfs:label "accuracy" ;
+ rdfs:comment "Degree of data accuracy" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range xsd:decimal .
+
+om:completeness a owl:DatatypeProperty ;
+ rdfs:label "completeness" ;
+ rdfs:comment "Degree of data completeness" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range xsd:decimal .
+
+om:consistency a owl:DatatypeProperty ;
+ rdfs:label "consistency" ;
+ rdfs:comment "Degree of data consistency" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range xsd:decimal .
+
+om:timeliness a owl:DatatypeProperty ;
+ rdfs:label "timeliness" ;
+ rdfs:comment "How current the data is" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range xsd:string .
+
+om:validity a owl:DatatypeProperty ;
+ rdfs:label "validity" ;
+ rdfs:comment "Degree to which data conforms to defined rules" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range xsd:decimal .
+
+om:uniqueness a owl:DatatypeProperty ;
+ rdfs:label "uniqueness" ;
+ rdfs:comment "Degree of uniqueness in the data" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range xsd:decimal .
+
+#################################################################
+# Geospatial Properties (DCAT-aligned)
+#################################################################
+
+om:bbox a owl:DatatypeProperty ;
+ rdfs:label "bounding box" ;
+ rdfs:subPropertyOf dcat:bbox ;
+ rdfs:comment "Geographic bounding box" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range rdfs:Literal .
+
+om:centroid a owl:DatatypeProperty ;
+ rdfs:label "centroid" ;
+ rdfs:subPropertyOf dcat:centroid ;
+ rdfs:comment "Geographic center point" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range rdfs:Literal .
+
+om:geometry a owl:DatatypeProperty ;
+ rdfs:label "geometry" ;
+ rdfs:subPropertyOf locn:geometry ;
+ rdfs:comment "Geometry of the spatial area" ;
+ rdfs:domain om:Location ;
+ rdfs:range rdfs:Literal .
+
+#################################################################
+# Temporal Properties (DCAT-aligned)
+#################################################################
+
+om:startDate a owl:DatatypeProperty ;
+ rdfs:label "start date" ;
+ rdfs:subPropertyOf dcat:startDate ;
+ rdfs:comment "Start of the temporal period" ;
+ rdfs:domain om:PeriodOfTime ;
+ rdfs:range xsd:dateTime .
+
+om:endDate a owl:DatatypeProperty ;
+ rdfs:label "end date" ;
+ rdfs:subPropertyOf dcat:endDate ;
+ rdfs:comment "End of the temporal period" ;
+ rdfs:domain om:PeriodOfTime ;
+ rdfs:range xsd:dateTime .
+
+om:hasBeginning a owl:ObjectProperty ;
+ rdfs:label "has beginning" ;
+ rdfs:subPropertyOf time:hasBeginning ;
+ rdfs:comment "Beginning instant of the temporal period" ;
+ rdfs:domain om:PeriodOfTime ;
+ rdfs:range time:Instant .
+
+om:hasEnd a owl:ObjectProperty ;
+ rdfs:label "has end" ;
+ rdfs:subPropertyOf time:hasEnd ;
+ rdfs:comment "Ending instant of the temporal period" ;
+ rdfs:domain om:PeriodOfTime ;
+ rdfs:range time:Instant .
+
+#################################################################
+# Statistical Properties (STAT-DCAT aligned)
+#################################################################
+
+om:numberOfRecords a owl:DatatypeProperty ;
+ rdfs:label "number of records" ;
+ rdfs:comment "Number of records in the dataset" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range xsd:integer .
+
+om:numberOfColumns a owl:DatatypeProperty ;
+ rdfs:label "number of columns" ;
+ rdfs:comment "Number of columns in the dataset" ;
+ rdfs:domain om:Table ;
+ rdfs:range xsd:integer .
+
+om:statisticalUnit a owl:ObjectProperty ;
+ rdfs:label "statistical unit" ;
+ rdfs:comment "Unit of observation in the dataset" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range skos:Concept .
+
+om:dimension a owl:ObjectProperty ;
+ rdfs:label "dimension" ;
+ rdfs:comment "Dimension represented in the dataset" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range qb:DimensionProperty .
+
+om:measure a owl:ObjectProperty ;
+ rdfs:label "measure" ;
+ rdfs:comment "Measure represented in the dataset" ;
+ rdfs:domain om:DataAsset ;
+ rdfs:range qb:MeasureProperty .
+
+#################################################################
+# Service-specific Properties
+#################################################################
+
+om:serviceEndpoint a owl:ObjectProperty ;
+ rdfs:label "service endpoint" ;
+ rdfs:comment "Endpoint for accessing the service" ;
+ rdfs:domain om:DataService ;
+ rdfs:range rdfs:Resource .
+
+om:serviceStatus a owl:DatatypeProperty ;
+ rdfs:label "service status" ;
+ rdfs:comment "Operational status of the service" ;
+ rdfs:domain om:DataService ;
+ rdfs:range xsd:string .
+
+om:serviceLevel a owl:DatatypeProperty ;
+ rdfs:label "service level" ;
+ rdfs:comment "Service level agreement details" ;
+ rdfs:domain om:DataService ;
+ rdfs:range xsd:string .
+
+om:apiDocumentation a owl:ObjectProperty ;
+ rdfs:label "API documentation" ;
+ rdfs:comment "Link to API documentation" ;
+ rdfs:domain om:DataService ;
+ rdfs:range foaf:Document .
diff --git a/openmetadata-spec/bin/src/main/resources/rdf/shapes/openmetadata-shapes.ttl b/openmetadata-spec/bin/src/main/resources/rdf/shapes/openmetadata-shapes.ttl
new file mode 100644
index 000000000000..e8de71665729
--- /dev/null
+++ b/openmetadata-spec/bin/src/main/resources/rdf/shapes/openmetadata-shapes.ttl
@@ -0,0 +1,299 @@
+@prefix sh: .
+@prefix om: .
+@prefix xsd: .
+@prefix rdfs: .
+@prefix dcat: .
+@prefix dcterms: .
+
+# SHACL Shapes for OpenMetadata Entities
+# These shapes define validation constraints for RDF data
+
+# Base Entity Shape
+om:EntityShape a sh:NodeShape ;
+ sh:targetClass om:Entity ;
+ sh:property [
+ sh:path om:id ;
+ sh:datatype xsd:string ;
+ sh:minCount 1 ;
+ sh:maxCount 1 ;
+ sh:message "Entity must have exactly one ID"@en ;
+ ] ;
+ sh:property [
+ sh:path om:name ;
+ sh:datatype xsd:string ;
+ sh:minCount 1 ;
+ sh:maxCount 1 ;
+ sh:pattern "^[a-zA-Z0-9_-]+$" ;
+ sh:message "Entity must have exactly one name with alphanumeric characters, hyphens, or underscores"@en ;
+ ] ;
+ sh:property [
+ sh:path om:fullyQualifiedName ;
+ sh:datatype xsd:string ;
+ sh:minCount 1 ;
+ sh:maxCount 1 ;
+ sh:message "Entity must have exactly one fully qualified name"@en ;
+ ] ;
+ sh:property [
+ sh:path om:description ;
+ sh:datatype xsd:string ;
+ sh:maxCount 1 ;
+ sh:message "Entity can have at most one description"@en ;
+ ] ;
+ sh:property [
+ sh:path om:version ;
+ sh:datatype xsd:decimal ;
+ sh:minInclusive 0.1 ;
+ sh:message "Version must be a positive decimal number"@en ;
+ ] .
+
+# Table Shape
+om:TableShape a sh:NodeShape ;
+ sh:targetClass om:Table ;
+ sh:property [
+ sh:path om:hasColumn ;
+ sh:class om:Column ;
+ sh:minCount 1 ;
+ sh:message "Table must have at least one column"@en ;
+ ] ;
+ sh:property [
+ sh:path om:belongsTo ;
+ sh:class om:DatabaseSchema ;
+ sh:minCount 1 ;
+ sh:maxCount 1 ;
+ sh:message "Table must belong to exactly one database schema"@en ;
+ ] ;
+ sh:property [
+ sh:path om:tableType ;
+ sh:datatype xsd:string ;
+ sh:in ("Regular" "External" "View" "SecureView" "MaterializedView" "Iceberg" "DatalakeTable") ;
+ sh:message "Table type must be one of the allowed values"@en ;
+ ] .
+
+# Column Shape
+om:ColumnShape a sh:NodeShape ;
+ sh:targetClass om:Column ;
+ sh:property [
+ sh:path om:dataType ;
+ sh:datatype xsd:string ;
+ sh:minCount 1 ;
+ sh:maxCount 1 ;
+ sh:message "Column must have exactly one data type"@en ;
+ ] ;
+ sh:property [
+ sh:path om:ordinalPosition ;
+ sh:datatype xsd:integer ;
+ sh:minInclusive 0 ;
+ sh:message "Ordinal position must be a non-negative integer"@en ;
+ ] ;
+ sh:property [
+ sh:path om:constraint ;
+ sh:datatype xsd:string ;
+ sh:in ("NULL" "NOT_NULL" "UNIQUE" "PRIMARY_KEY") ;
+ sh:message "Column constraint must be one of the allowed values"@en ;
+ ] .
+
+# Database Shape
+om:DatabaseShape a sh:NodeShape ;
+ sh:targetClass om:Database ;
+ sh:property [
+ sh:path om:hasSchema ;
+ sh:class om:DatabaseSchema ;
+ sh:message "Database can only contain database schemas"@en ;
+ ] ;
+ sh:property [
+ sh:path om:belongsTo ;
+ sh:class om:DatabaseService ;
+ sh:minCount 1 ;
+ sh:maxCount 1 ;
+ sh:message "Database must belong to exactly one database service"@en ;
+ ] .
+
+# Database Schema Shape
+om:DatabaseSchemaShape a sh:NodeShape ;
+ sh:targetClass om:DatabaseSchema ;
+ sh:property [
+ sh:path om:hasTable ;
+ sh:class om:Table ;
+ sh:message "Database schema can only contain tables"@en ;
+ ] ;
+ sh:property [
+ sh:path om:belongsTo ;
+ sh:class om:Database ;
+ sh:minCount 1 ;
+ sh:maxCount 1 ;
+ sh:message "Database schema must belong to exactly one database"@en ;
+ ] .
+
+# Pipeline Shape
+om:PipelineShape a sh:NodeShape ;
+ sh:targetClass om:Pipeline ;
+ sh:property [
+ sh:path om:hasTask ;
+ sh:class om:Task ;
+ sh:message "Pipeline can only contain tasks"@en ;
+ ] ;
+ sh:property [
+ sh:path om:pipelineType ;
+ sh:datatype xsd:string ;
+ sh:in ("airflow" "glue" "airbyte" "fivetran" "dagster" "nifi" "dbtCloud" "domoPipeline" "kafka" "kafkaConnect" "kinesis" "matillion" "domo" "flink" "databricksPipeline" "spline" "spark" "openLineage" "stitch" "dbt") ;
+ sh:message "Pipeline type must be one of the allowed values"@en ;
+ ] .
+
+# Dashboard Shape
+om:DashboardShape a sh:NodeShape ;
+ sh:targetClass om:Dashboard ;
+ sh:property [
+ sh:path om:hasChart ;
+ sh:class om:Chart ;
+ sh:message "Dashboard can only contain charts"@en ;
+ ] ;
+ sh:property [
+ sh:path om:dashboardType ;
+ sh:datatype xsd:string ;
+ sh:in ("tableau" "looker" "superset" "redash" "metabase" "powerbi" "mode" "sigma" "lightdash" "mstr" "qlikSense" "quickSight" "domo" "databricks") ;
+ sh:message "Dashboard type must be one of the allowed values"@en ;
+ ] .
+
+# Lineage Validation
+om:LineageShape a sh:NodeShape ;
+ sh:targetClass om:DataAsset ;
+ sh:sparql [
+ a sh:SPARQLConstraint ;
+ sh:message "Data asset cannot have cyclic lineage (be both upstream and downstream of the same asset)"@en ;
+ sh:prefixes [ sh:declare [
+ sh:prefix "om" ;
+ sh:namespace "https://open-metadata.org/ontology/"^^xsd:anyURI ;
+ ] ] ;
+ sh:select """
+ SELECT $this ?other
+ WHERE {
+ $this om:upstream ?other .
+ $this om:downstream ?other .
+ }
+ """ ;
+ ] .
+
+# Ownership Validation
+om:OwnershipShape a sh:NodeShape ;
+ sh:targetClass om:Entity ;
+ sh:property [
+ sh:path om:ownedBy ;
+ sh:or (
+ [ sh:class om:User ]
+ [ sh:class om:Team ]
+ ) ;
+ sh:maxCount 1 ;
+ sh:message "Entity can be owned by at most one user or team"@en ;
+ ] .
+
+# Tag Application Shape
+om:TagApplicationShape a sh:NodeShape ;
+ sh:targetClass om:Entity ;
+ sh:property [
+ sh:path om:taggedWith ;
+ sh:class om:Tag ;
+ sh:message "Entity can only be tagged with valid tags"@en ;
+ ] ;
+ sh:property [
+ sh:path om:classifiedAs ;
+ sh:class om:Classification ;
+ sh:message "Entity can only be classified with valid classifications"@en ;
+ ] .
+
+# Domain Membership Shape
+om:DomainMembershipShape a sh:NodeShape ;
+ sh:targetClass om:DataAsset ;
+ sh:property [
+ sh:path om:inDomain ;
+ sh:class om:Domain ;
+ sh:maxCount 1 ;
+ sh:message "Data asset can belong to at most one domain"@en ;
+ ] .
+
+# Data Quality Shape
+om:DataQualityShape a sh:NodeShape ;
+ sh:targetClass om:Table ;
+ sh:property [
+ sh:path om:dataQualityScore ;
+ sh:datatype xsd:decimal ;
+ sh:minInclusive 0.0 ;
+ sh:maxInclusive 100.0 ;
+ sh:message "Data quality score must be between 0 and 100"@en ;
+ ] ;
+ sh:property [
+ sh:path om:testCasePassed ;
+ sh:datatype xsd:integer ;
+ sh:minInclusive 0 ;
+ sh:message "Number of passed test cases must be non-negative"@en ;
+ ] ;
+ sh:property [
+ sh:path om:testCaseFailed ;
+ sh:datatype xsd:integer ;
+ sh:minInclusive 0 ;
+ sh:message "Number of failed test cases must be non-negative"@en ;
+ ] .
+
+# Service Connection Shape
+om:ServiceConnectionShape a sh:NodeShape ;
+ sh:targetClass om:Service ;
+ sh:property [
+ sh:path om:serviceType ;
+ sh:datatype xsd:string ;
+ sh:minCount 1 ;
+ sh:maxCount 1 ;
+ sh:message "Service must have exactly one service type"@en ;
+ ] ;
+ sh:property [
+ sh:path om:connectionConfig ;
+ sh:minCount 1 ;
+ sh:maxCount 1 ;
+ sh:message "Service must have exactly one connection configuration"@en ;
+ ] .
+
+# Glossary Term Shape
+om:GlossaryTermShape a sh:NodeShape ;
+ sh:targetClass om:GlossaryTerm ;
+ sh:property [
+ sh:path om:belongsTo ;
+ sh:class om:Glossary ;
+ sh:minCount 1 ;
+ sh:maxCount 1 ;
+ sh:message "Glossary term must belong to exactly one glossary"@en ;
+ ] ;
+ sh:property [
+ sh:path om:synonymOf ;
+ sh:class om:GlossaryTerm ;
+ sh:message "Synonym must reference another glossary term"@en ;
+ ] ;
+ sh:property [
+ sh:path om:antonymOf ;
+ sh:class om:GlossaryTerm ;
+ sh:message "Antonym must reference another glossary term"@en ;
+ ] .
+
+# Team Hierarchy Shape
+om:TeamHierarchyShape a sh:NodeShape ;
+ sh:targetClass om:Team ;
+ sh:sparql [
+ a sh:SPARQLConstraint ;
+ sh:message "Team cannot be its own parent"@en ;
+ sh:prefixes [ sh:declare [
+ sh:prefix "om" ;
+ sh:namespace "https://open-metadata.org/ontology/"^^xsd:anyURI ;
+ ] ] ;
+ sh:select """
+ SELECT $this
+ WHERE {
+ $this om:isPartOf+ $this .
+ }
+ """ ;
+ ] .
+
+# User Team Membership Shape
+om:UserTeamMembershipShape a sh:NodeShape ;
+ sh:targetClass om:User ;
+ sh:property [
+ sh:path om:memberOf ;
+ sh:class om:Team ;
+ sh:message "User can only be member of valid teams"@en ;
+ ] .
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/test/resources/json/dim_location/v1.json b/openmetadata-spec/bin/src/test/resources/json/dim_location/v1.json
new file mode 100644
index 000000000000..daf83ebe92b0
--- /dev/null
+++ b/openmetadata-spec/bin/src/test/resources/json/dim_location/v1.json
@@ -0,0 +1,53 @@
+{
+ "instance": {
+ "name": "dim_location",
+ "id": "25f2c29c-bc32-4a54-a014-c0a6ded20165",
+ "documentation": "this is the table to hold data on dim_location",
+ "owner": {
+ "id": "05612b35-e1ee-4067-83c5-830dcb5ed5b2",
+ "name": "user5655",
+ "ownerType": "user"
+ },
+ "href": "http://localhost:8585/api/v1/databases/null/tables/dim_location"
+ },
+ "tableType": "REGULAR",
+ "fullyQualifiedName": "hive.dim_location",
+ "tier": "unknown",
+ "columns": [
+ {
+ "name": "location_id",
+ "columnDataType": "NUMERIC",
+ "documentation": "The ID of the Shopify POS. This column is the primary key for the locations table. The location_id is null for orders not placed through Shopify POS, such as those placed through the online store.",
+ "piiTags": [
+ "pii"
+ ],
+ "columnConstraint": "NULL",
+ "ordinalPosition": 1
+ },
+ {
+ "name": "shop_id",
+ "columnDataType": "NUMERIC",
+ "documentation": "The ID of the store. This column is a foreign key reference to the shop_id column in the shops table.",
+ "piiTags": [
+ "pii"
+ ],
+ "columnConstraint": "NULL",
+ "ordinalPosition": 1
+ },
+ {
+ "name": "name",
+ "columnDataType": "VARCHAR",
+ "documentation": "Name of the POS location as provided by the merchant. For example, 150 Elgin Street or Downtown Boutique.",
+ "piiTags": [
+ "pii"
+ ],
+ "columnConstraint": "NULL",
+ "ordinalPosition": 1
+ }
+ ],
+ "tableConstraints": [],
+ "usage": {
+ "usageCount": 46420,
+ "percentileRank": 8.797669437407297
+ }
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/test/resources/json/dim_location/v2.json b/openmetadata-spec/bin/src/test/resources/json/dim_location/v2.json
new file mode 100644
index 000000000000..a9da1d1d53e0
--- /dev/null
+++ b/openmetadata-spec/bin/src/test/resources/json/dim_location/v2.json
@@ -0,0 +1,57 @@
+{
+ "instance": {
+ "name": "dim_location",
+ "id": "25f2c29c-bc32-4a54-a014-c0a6ded20165",
+ "documentation": "This is the table to hold data on dim_location.",
+ "owner": {
+ "id": "05612b35-e1ee-4067-83c5-830dcb5ed5b2",
+ "name": "user5655",
+ "ownerType": "user"
+ },
+ "href": "http://localhost:8585/api/v1/databases/null/tables/dim_location"
+ },
+ "tableType": "REGULAR",
+ "fullyQualifiedName": "hive.dim_location",
+ "tier": "unknown",
+ "columns": [
+ {
+ "name": "location_id",
+ "columnDataType": "NUMERIC",
+ "documentation": "The ID of the Shopify POS. This column is the primary key for the locations table. The location_id is null for orders not placed through Shopify POS, such as those placed through the online store.",
+ "columnConstraint": "NULL",
+ "ordinalPosition": 1
+ },
+ {
+ "name": "shop_id",
+ "columnDataType": "NUMERIC",
+ "documentation": "The ID of the store. This column is a foreign key reference to the shop_id column in the shops table.",
+ "columnConstraint": "NULL",
+ "ordinalPosition": 1
+ },
+ {
+ "name": "name",
+ "columnDataType": "VARCHAR",
+ "documentation": "Name of the POS location as provided by the merchant. For example, 150 Elgin Street or Downtown Boutique.",
+ "piiTags": [
+ "pii"
+ ],
+ "columnConstraint": "NULL",
+ "ordinalPosition": 1
+ },
+ {
+ "name": "created_on",
+ "columnDataType": "VARCHAR",
+ "documentation": "Date when this shop was created.",
+ "piiTags": [
+ "pii"
+ ],
+ "columnConstraint": "NULL",
+ "ordinalPosition": 1
+ }
+ ],
+ "tableConstraints": [],
+ "usage": {
+ "usageCount": 56420,
+ "percentileRank": 9.79
+ }
+}
\ No newline at end of file
diff --git a/openmetadata-spec/bin/src/test/resources/json/entity/testEntity.json b/openmetadata-spec/bin/src/test/resources/json/entity/testEntity.json
new file mode 100644
index 000000000000..9f80ae8cd41b
--- /dev/null
+++ b/openmetadata-spec/bin/src/test/resources/json/entity/testEntity.json
@@ -0,0 +1,39 @@
+{
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Test entity",
+ "description": "Test entity json defintion",
+ "type": "object",
+
+ "definitions": {
+ "uri": {
+ "description": "Type used for UUID",
+ "type": "string",
+ "format": "uri"
+ }
+ },
+
+ "properties" : {
+ "stringProperty": {
+ "description": "Locally defined property in test",
+ "type": "string"
+ },
+
+ "uriProperty": {
+ "description": "Locally defined property in test",
+ "$ref": "#/definitions/uri"
+ },
+
+ "uuidProperty" : {
+ "description": "Type referenced from another json file",
+ "$ref" : "../type/basic.json#/definitions/uuid"
+ },
+
+ "objectTypeProperty" : {
+ "description": "Object type referenced from another json file",
+ "$ref" : "../type/objectType.json"
+ }
+ },
+
+ "required": ["stringProperty"]
+}
+
diff --git a/openmetadata-spec/bin/src/test/resources/json/type/basic.json b/openmetadata-spec/bin/src/test/resources/json/type/basic.json
new file mode 100644
index 000000000000..16afa1a1ad3b
--- /dev/null
+++ b/openmetadata-spec/bin/src/test/resources/json/type/basic.json
@@ -0,0 +1,14 @@
+{
+ "$id": "https://streaminlinedata.ai/type/common.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Common types",
+ "description": "Common reusable types",
+ "definitions": {
+ "uuid": {
+ "description": "Type used for UUID",
+ "type": "string",
+ "format": "uuid"
+ }
+ }
+}
+
diff --git a/openmetadata-spec/bin/src/test/resources/json/type/objectType.json b/openmetadata-spec/bin/src/test/resources/json/type/objectType.json
new file mode 100644
index 000000000000..657375419605
--- /dev/null
+++ b/openmetadata-spec/bin/src/test/resources/json/type/objectType.json
@@ -0,0 +1,19 @@
+{
+ "$id": "https://streaminlinedata.ai/type/objectType.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Test object type",
+ "description": "Test object type",
+ "type": "object",
+ "properties": {
+ "ot1": {
+ "description": "Driver class to use for the JDBC connection",
+ "type": "string"
+ },
+ "ot2": {
+ "description": "URL to connect to JDBC server",
+ "type": "string"
+ }
+ },
+
+ "required": ["ot1", "ot2"]
+}