diff --git a/openmetadata-integration-tests/src/test/java/org/openmetadata/it/tests/PatchTableEmbeddingIT.java b/openmetadata-integration-tests/src/test/java/org/openmetadata/it/tests/PatchTableEmbeddingIT.java index e6b265c6f8f8..1044ef576b76 100644 --- a/openmetadata-integration-tests/src/test/java/org/openmetadata/it/tests/PatchTableEmbeddingIT.java +++ b/openmetadata-integration-tests/src/test/java/org/openmetadata/it/tests/PatchTableEmbeddingIT.java @@ -113,10 +113,11 @@ private void runEmbeddingTest(TestNamespace ns, SearchRepository searchRepo) thr updatedFingerprint, "Fingerprint should change after description update"); - String textToEmbed = getFieldFromDoc(searchClient, entityIndexName, tableId, "textToEmbed"); + String textToLLMContext = + getFieldFromDoc(searchClient, entityIndexName, tableId, "textToLLMContext"); assertTrue( - textToEmbed.contains("Revenue metrics"), - "textToEmbed should reflect the patched description"); + textToLLMContext.contains("Revenue metrics"), + "textToLLMContext should reflect the patched description"); String embeddingJson = getFieldFromDoc(searchClient, entityIndexName, tableId, "embedding"); assertNotNull(embeddingJson, "Embedding vector should exist after PATCH"); diff --git a/openmetadata-integration-tests/src/test/java/org/openmetadata/it/tests/VectorEmbeddingIntegrationIT.java b/openmetadata-integration-tests/src/test/java/org/openmetadata/it/tests/VectorEmbeddingIntegrationIT.java index 7f4e16749928..3057cc6c41fb 100644 --- a/openmetadata-integration-tests/src/test/java/org/openmetadata/it/tests/VectorEmbeddingIntegrationIT.java +++ b/openmetadata-integration-tests/src/test/java/org/openmetadata/it/tests/VectorEmbeddingIntegrationIT.java @@ -128,7 +128,7 @@ void testEntityEmbeddingCreationViaPartialUpdate() throws Exception { Map doc = getDocumentById(testTable.getId().toString()); assertNotNull(doc, "Entity document should exist"); - assertNotNull(doc.get("textToEmbed"), "Document should have text_to_embed"); + assertNotNull(doc.get("textToLLMContext"), "Document should have textToLLMContext"); assertNotNull(doc.get("embedding"), "Document should have embedding"); assertNotNull(doc.get("fingerprint"), "Document should have fingerprint"); assertEquals( @@ -323,7 +323,7 @@ void testGenerateEmbeddingFields() { assertNotNull(fields); assertNotNull(fields.get("embedding")); - assertNotNull(fields.get("textToEmbed")); + assertNotNull(fields.get("textToLLMContext")); assertNotNull(fields.get("fingerprint")); assertEquals(testTable.getId().toString(), fields.get("parentId")); assertEquals(0, fields.get("chunkIndex")); @@ -347,7 +347,7 @@ void testPatchTableDescriptionUpdatesEmbeddingForSemanticSearch() throws Excepti Map initialDoc = getDocumentById(testTable.getId().toString()); String initialFingerprint = (String) initialDoc.get("fingerprint"); - String initialTextToEmbed = (String) initialDoc.get("textToEmbed"); + String initialTextToEmbed = (String) initialDoc.get("textToLLMContext"); String patchedDescription = "Revenue metrics for quarterly financial reporting analysis"; testTable.setDescription(patchedDescription); @@ -358,15 +358,16 @@ void testPatchTableDescriptionUpdatesEmbeddingForSemanticSearch() throws Excepti Map updatedDoc = getDocumentById(testTable.getId().toString()); String updatedFingerprint = (String) updatedDoc.get("fingerprint"); - String updatedTextToEmbed = (String) updatedDoc.get("textToEmbed"); + String updatedTextToEmbed = (String) updatedDoc.get("textToLLMContext"); assertFalse( initialFingerprint.equals(updatedFingerprint), "Fingerprint should change after PATCH"); assertFalse( - initialTextToEmbed.equals(updatedTextToEmbed), "textToEmbed should change after PATCH"); + initialTextToEmbed.equals(updatedTextToEmbed), + "textToLLMContext should change after PATCH"); assertTrue( updatedTextToEmbed.contains("Revenue metrics"), - "Updated textToEmbed should reflect patched description"); + "Updated textToLLMContext should reflect patched description"); List> results = executeKnnSearch("quarterly financial revenue reporting", 10); diff --git a/openmetadata-mcp/src/test/java/org/openmetadata/mcp/tools/SemanticSearchToolTest.java b/openmetadata-mcp/src/test/java/org/openmetadata/mcp/tools/SemanticSearchToolTest.java index c486c5728705..d2021de4c727 100644 --- a/openmetadata-mcp/src/test/java/org/openmetadata/mcp/tools/SemanticSearchToolTest.java +++ b/openmetadata-mcp/src/test/java/org/openmetadata/mcp/tools/SemanticSearchToolTest.java @@ -203,7 +203,8 @@ void testHitFieldsCleaned() throws Exception { hit.put("columns", List.of(Map.of("name", "id", "dataType", "INT"))); hit.put("embedding", new float[] {0.1f, 0.2f}); hit.put("fingerprint", "abc123"); - hit.put("textToEmbed", "name: users; entityType: table | description: A short description"); + hit.put( + "textToLLMContext", "name: users; entityType: table | description: A short description"); VectorSearchResponse response = new VectorSearchResponse(10L, List.of(hit)); @@ -233,7 +234,7 @@ void testHitFieldsCleaned() throws Exception { assertTrue(!cleaned.containsKey("_score")); assertTrue(!cleaned.containsKey("embedding")); assertTrue(!cleaned.containsKey("fingerprint")); - assertTrue(!cleaned.containsKey("textToEmbed")); + assertTrue(!cleaned.containsKey("textToLLMContext")); } } diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/search/vector/VectorDocBuilder.java b/openmetadata-service/src/main/java/org/openmetadata/service/search/vector/VectorDocBuilder.java index 1de4dd39e5a3..521081dc503b 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/search/vector/VectorDocBuilder.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/search/vector/VectorDocBuilder.java @@ -8,20 +8,28 @@ import java.util.Map; import java.util.Objects; import java.util.concurrent.ConcurrentHashMap; +import java.util.function.BiConsumer; +import java.util.function.Function; import java.util.stream.Collectors; import lombok.experimental.UtilityClass; import lombok.extern.slf4j.Slf4j; import org.openmetadata.schema.EntityInterface; import org.openmetadata.schema.api.data.MetricExpression; +import org.openmetadata.schema.entity.data.APICollection; +import org.openmetadata.schema.entity.data.Container; +import org.openmetadata.schema.entity.data.Database; +import org.openmetadata.schema.entity.data.DatabaseSchema; import org.openmetadata.schema.entity.data.Glossary; import org.openmetadata.schema.entity.data.GlossaryTerm; import org.openmetadata.schema.entity.data.Metric; import org.openmetadata.schema.entity.data.Table; +import org.openmetadata.schema.entity.domains.DataProduct; import org.openmetadata.schema.type.AssetCertification; import org.openmetadata.schema.type.Column; import org.openmetadata.schema.type.EntityReference; import org.openmetadata.schema.type.TagLabel; import org.openmetadata.schema.type.TermRelation; +import org.openmetadata.service.Entity; import org.openmetadata.service.search.vector.client.EmbeddingClient; import org.openmetadata.service.search.vector.utils.TextChunkManager; @@ -51,6 +59,44 @@ public interface BodyTextExtractor { private static final Map BODY_TEXT_EXTRACTORS = new ConcurrentHashMap<>(); + private static final int MAX_CHILD_NAMES_IN_CONTEXT = 20; + + /** + * Child-entity enumeration spec for container-like types. When an entity has children on the + * object (populated during reindexing via {@code fields=*}), their names are joined into a + * short natural-language phrase and appended to the semantic body, so queries match against + * what a container actually contains. The cast inside each getter is guarded by the map key: + * an entry keyed by {@link Entity#DATABASE} is only consulted for {@link Database} entities. + */ + private record SemanticChildrenSpec( + Function> childGetter, String phrasePrefix) {} + + private static final Map SEMANTIC_CHILDREN_SPECS = + Map.of( + Entity.DATABASE, + new SemanticChildrenSpec( + e -> ((Database) e).getDatabaseSchemas(), "Contains schemas"), + Entity.DATABASE_SCHEMA, + new SemanticChildrenSpec(e -> ((DatabaseSchema) e).getTables(), "Contains tables"), + Entity.API_COLLECTION, + new SemanticChildrenSpec( + e -> ((APICollection) e).getApiEndpoints(), "Contains endpoints"), + Entity.CONTAINER, + new SemanticChildrenSpec(e -> ((Container) e).getChildren(), "Contains"), + Entity.DATA_PRODUCT, + new SemanticChildrenSpec(e -> ((DataProduct) e).getAssets(), "Contains assets")); + + /** + * Entity-type-specific enrichments appended to {@link #buildSemanticMetaLightText} after the + * shared subject/type phrase. Table-driven so new type enrichers are one map entry rather than + * another {@code instanceof} branch. + */ + private static final Map, EntityInterface>> SEMANTIC_ENRICHERS = + Map.of( + Entity.GLOSSARY_TERM, + (phrases, e) -> appendGlossaryTermPhrases(phrases, (GlossaryTerm) e), + Entity.METRIC, (phrases, e) -> appendMetricPhrases(phrases, (Metric) e)); + /** * Register a custom {@link BodyTextExtractor} for an entity type. The registry is consulted by * {@link #buildBodyText(EntityInterface, String)} before the default description-based logic, @@ -92,7 +138,12 @@ public static List> fromEntity( /** * Generate embedding fields to merge into an entity's search index document. Returns a map with: - * embedding, textToEmbed, chunkIndex, chunkCount, parentId, fingerprint. + * embedding, textToLLMContext, textToEmbed, chunkIndex, chunkCount, parentId, fingerprint. + * + *

{@code textToLLMContext} preserves the legacy rich-context format (empty fields rendered as + * {@code []}) and is consumed by agent tooling as LLM context. {@code textToEmbed} is + * the compact variant that omits empty fields and is the actual input fed to the embedding + * model. */ public static Map buildEmbeddingFields( EntityInterface entity, EmbeddingClient embeddingClient) { @@ -101,20 +152,25 @@ public static Map buildEmbeddingFields( String metaLight = buildMetaLightText(entity, entityType); String body = buildBodyText(entity, entityType); + String semanticMetaLight = buildSemanticMetaLightText(entity, entityType); + String semanticBody = buildSemanticBodyText(entity, entityType); String fingerprint = computeFingerprintForEntity(entity); List chunks = TextChunkManager.chunk(body); int chunkCount = chunks.size(); + List semanticChunks = TextChunkManager.chunk(semanticBody); - // Use the first chunk for the entity's embedding String contTag = ""; - String textToEmbed = + String textToLLMContext = String.format("%s%s%s | chunk %d/%d", metaLight, contTag, chunks.get(0), 1, chunkCount); + String semanticBodyChunk = semanticChunks.get(0); + String textToEmbed = joinSemanticParts(semanticMetaLight, semanticBodyChunk); float[] embedding = embeddingClient.embed(textToEmbed); Map fields = new HashMap<>(); fields.put("embedding", embedding); + fields.put("textToLLMContext", textToLLMContext); fields.put("textToEmbed", textToEmbed); fields.put("chunkIndex", 0); fields.put("chunkCount", chunkCount); @@ -280,6 +336,247 @@ static String buildBodyText(EntityInterface entity, String entityType) { return String.join("; ", bodyParts); } + /** + * Natural-language metadata for the semantic embedding input. Emits content as sentence-like + * phrases without {@code key: value;} label scaffolding, and drops high-noise/low-signal fields + * (FQN, entityType, serviceType, owners, customProperties, chunk marker) so the pooled vector + * isn't dominated by structural tokens that appear in every document. + */ + static String buildSemanticMetaLightText(EntityInterface entity, String entityType) { + boolean isGlossary = entity instanceof Glossary; + boolean isGlossaryTerm = entity instanceof GlossaryTerm; + + List phrases = new ArrayList<>(); + appendSubjectPhrase(phrases, entity, entityType); + + BiConsumer, EntityInterface> enricher = SEMANTIC_ENRICHERS.get(entityType); + if (enricher != null) { + enricher.accept(phrases, entity); + } + + appendTagPhrases(phrases, entity, isGlossary, isGlossaryTerm); + appendDomainPhrase(phrases, entity); + + if (!isGlossary && !isGlossaryTerm) { + appendTierAndCertificationPhrases(phrases, entity); + } + + return String.join(". ", phrases); + } + + private static void appendSubjectPhrase( + List phrases, EntityInterface entity, String entityType) { + String name = entity.getName(); + String displayName = entity.getDisplayName(); + String subject = null; + if (displayName != null && !displayName.isBlank() && !displayName.equals(name)) { + subject = (name == null || name.isBlank()) ? displayName : displayName + " (" + name + ")"; + } else if (name != null && !name.isBlank()) { + subject = name; + } + String typeLabel = humanizeEntityType(entityType); + if (!typeLabel.isEmpty() && subject != null) { + phrases.add(typeLabel + " " + subject); + } else if (!typeLabel.isEmpty()) { + phrases.add(typeLabel); + } else if (subject != null) { + phrases.add(subject); + } + } + + private static void appendTierAndCertificationPhrases( + List phrases, EntityInterface entity) { + String tier = extractTierLabel(entity); + if (tier != null) { + phrases.add(tier.replace('.', ' ')); + } + String cert = extractCertificationLabel(entity); + if (cert != null) { + phrases.add(cert.replace('.', ' ')); + } + } + + private static void appendGlossaryTermPhrases(List phrases, GlossaryTerm term) { + List synonyms = term.getSynonyms(); + if (synonyms != null && !synonyms.isEmpty()) { + phrases.add("Also known as " + String.join(", ", synonyms)); + } + List relatedTerms = term.getRelatedTerms(); + if (relatedTerms != null && !relatedTerms.isEmpty()) { + List relatedNames = + relatedTerms.stream() + .map(tr -> tr.getTerm() == null ? null : tr.getTerm().getName()) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + if (!relatedNames.isEmpty()) { + phrases.add("Related to " + String.join(", ", relatedNames)); + } + } + } + + private static void appendMetricPhrases(List phrases, Metric metric) { + List parts = new ArrayList<>(); + if (metric.getMetricType() != null) { + parts.add(metric.getMetricType().value() + " metric"); + } + if (metric.getUnitOfMeasurement() != null) { + String unit = metric.getUnitOfMeasurement().value(); + String value = + "OTHER".equals(unit) && metric.getCustomUnitOfMeasurement() != null + ? metric.getCustomUnitOfMeasurement() + : unit; + parts.add("measured in " + value); + } + if (metric.getGranularity() != null) { + parts.add("granularity " + metric.getGranularity()); + } + if (!parts.isEmpty()) { + phrases.add(String.join(", ", parts)); + } + MetricExpression expr = metric.getMetricExpression(); + if (expr != null && expr.getCode() != null) { + phrases.add(expr.getCode()); + } + } + + private static void appendTagPhrases( + List phrases, EntityInterface entity, boolean isGlossary, boolean isGlossaryTerm) { + List tagsPojo = entity.getTags() != null ? entity.getTags() : Collections.emptyList(); + List classificationTagNames = + tagsPojo.stream() + .filter(tag -> tag.getSource() == null || !"Glossary".equals(tag.getSource().value())) + .filter(tag -> !tag.getTagFQN().startsWith("Tier.")) + .map(tag -> tag.getTagFQN().replace('.', ' ')) + .collect(Collectors.toList()); + if (!classificationTagNames.isEmpty()) { + phrases.add("Tagged as " + String.join(", ", classificationTagNames)); + } + if (!isGlossary && !isGlossaryTerm) { + List glossaryTermNames = + tagsPojo.stream() + .filter(tag -> tag.getSource() != null && "Glossary".equals(tag.getSource().value())) + .map(tag -> tag.getName() != null ? tag.getName() : tag.getTagFQN()) + .collect(Collectors.toList()); + if (!glossaryTermNames.isEmpty()) { + phrases.add("Related glossary terms " + String.join(", ", glossaryTermNames)); + } + } + } + + private static void appendDomainPhrase(List phrases, EntityInterface entity) { + List domainsPojo = + entity.getDomains() != null ? entity.getDomains() : Collections.emptyList(); + List domainNames = + domainsPojo.stream() + .map(d -> d.getDisplayName() != null ? d.getDisplayName() : d.getName()) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + if (!domainNames.isEmpty()) { + phrases.add("In domain " + String.join(", ", domainNames)); + } + } + + private static String joinSemanticParts(String metaLight, String body) { + if (metaLight.isEmpty()) { + return body; + } + if (body.isEmpty()) { + return metaLight; + } + return metaLight + ". " + body; + } + + static String buildSemanticBodyText(EntityInterface entity, String entityType) { + if (entityType != null) { + BodyTextExtractor customExtractor = BODY_TEXT_EXTRACTORS.get(entityType); + if (customExtractor != null) { + try { + String custom = customExtractor.extract(entity); + if (custom != null) { + return custom; + } + } catch (Exception e) { + LOG.warn( + "Custom BodyTextExtractor failed for [{}], falling back to default", entityType, e); + } + } + } + + List bodyParts = new ArrayList<>(); + String description = removeHtml(entity.getDescription() == null ? "" : entity.getDescription()); + if (!description.isEmpty()) { + bodyParts.add(description); + } + + if (entity instanceof Table table) { + List columns = table.getColumns(); + if (columns != null && !columns.isEmpty()) { + bodyParts.add("Columns include " + columnsToString(columns)); + } + } + + String childContext = buildChildContextPhrase(entity, entityType); + if (childContext != null) { + bodyParts.add(childContext); + } + + return String.join(". ", bodyParts); + } + + /** + * Convert an entity type identifier into a natural-language label by inserting spaces at every + * lowercase→uppercase boundary. {@code dataProduct} becomes {@code "data Product"}, + * {@code databaseSchema} becomes {@code "database Schema"}, {@code table} stays {@code "table"}. + * Returns an empty string for null or blank input so callers can trivially skip the prefix. + */ + static String humanizeEntityType(String entityType) { + if (entityType == null || entityType.isBlank()) { + return ""; + } + return entityType.replaceAll("([a-z])([A-Z])", "$1 $2"); + } + + /** + * Produce a "Contains X, Y, Z" phrase listing the names of a container entity's direct + * children (database schemas, tables, endpoints, charts, etc.). The per-type getter is looked + * up in {@link #SEMANTIC_CHILDREN_SPECS} as a typed method reference, so this stays + * compile-time checked. Returns null when the entity is not a known container or when the + * child list is empty. + */ + static String buildChildContextPhrase(EntityInterface entity, String entityType) { + if (entityType == null) { + return null; + } + SemanticChildrenSpec spec = SEMANTIC_CHILDREN_SPECS.get(entityType); + if (spec == null) { + return null; + } + List childNames = readChildNames(spec.childGetter().apply(entity)); + if (childNames.isEmpty()) { + return null; + } + List limited = + childNames.size() > MAX_CHILD_NAMES_IN_CONTEXT + ? childNames.subList(0, MAX_CHILD_NAMES_IN_CONTEXT) + : childNames; + return spec.phrasePrefix() + " " + String.join(", ", limited); + } + + private static List readChildNames(List refs) { + if (refs == null || refs.isEmpty()) { + return Collections.emptyList(); + } + List names = new ArrayList<>(refs.size()); + for (EntityReference ref : refs) { + String displayName = ref.getDisplayName(); + String name = displayName != null && !displayName.isBlank() ? displayName : ref.getName(); + if (name != null && !name.isBlank()) { + names.add(name); + } + } + return names; + } + static String extractServiceType(EntityInterface entity) { try { Method method = entity.getClass().getMethod("getServiceType"); diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/search/vector/utils/AvailableEntityTypes.java b/openmetadata-service/src/main/java/org/openmetadata/service/search/vector/utils/AvailableEntityTypes.java index e838053c9f48..10c7a27560ae 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/search/vector/utils/AvailableEntityTypes.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/search/vector/utils/AvailableEntityTypes.java @@ -28,7 +28,8 @@ private AvailableEntityTypes() {} "storedProcedure", "searchIndex", "topic", - "contextMemory"); + "contextMemory", + "container"); public static final Set SET = LIST.stream().map(s -> s.toLowerCase(Locale.ROOT)).collect(Collectors.toUnmodifiableSet()); diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/search/vector/utils/DTOs.java b/openmetadata-service/src/main/java/org/openmetadata/service/search/vector/utils/DTOs.java index 6c7d60887aa5..050e7056eacf 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/search/vector/utils/DTOs.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/search/vector/utils/DTOs.java @@ -1,5 +1,6 @@ package org.openmetadata.service.search.vector.utils; +import com.fasterxml.jackson.annotation.JsonAlias; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import java.util.List; import java.util.Map; @@ -20,6 +21,8 @@ public static class VectorSearchRequest { public int size = 10; public Integer from = 0; public int k = 1_000; + + @JsonAlias("min_score") public double threshold = 0.0; } diff --git a/openmetadata-service/src/test/java/org/openmetadata/service/search/vector/VectorDocBuilderTest.java b/openmetadata-service/src/test/java/org/openmetadata/service/search/vector/VectorDocBuilderTest.java index 5f3b153aaaee..0c881b8d2012 100644 --- a/openmetadata-service/src/test/java/org/openmetadata/service/search/vector/VectorDocBuilderTest.java +++ b/openmetadata-service/src/test/java/org/openmetadata/service/search/vector/VectorDocBuilderTest.java @@ -12,6 +12,8 @@ import java.util.Map; import java.util.UUID; import org.junit.jupiter.api.Test; +import org.openmetadata.schema.EntityInterface; +import org.openmetadata.schema.entity.data.Database; import org.openmetadata.schema.entity.data.GlossaryTerm; import org.openmetadata.schema.entity.data.Table; import org.openmetadata.schema.type.Column; @@ -26,6 +28,12 @@ class VectorDocBuilderTest { private static final EmbeddingClient MOCK_CLIENT = new EmbeddingClientTest.MockEmbeddingClient(384); + static { + EntityInterface.CANONICAL_ENTITY_NAME_MAP.put("table", "table"); + EntityInterface.CANONICAL_ENTITY_NAME_MAP.put("database", "database"); + EntityInterface.CANONICAL_ENTITY_NAME_MAP.put("glossaryterm", "glossaryTerm"); + } + @Test void testBuildEmbeddingFieldsBasic() { Table table = createTestTable("test_table", "Test Table", "A test table for unit testing"); @@ -35,12 +43,153 @@ void testBuildEmbeddingFieldsBasic() { assertNotNull(fields); assertEquals(table.getId().toString(), fields.get("parentId")); assertNotNull(fields.get("embedding")); + assertNotNull(fields.get("textToLLMContext")); assertNotNull(fields.get("textToEmbed")); assertNotNull(fields.get("fingerprint")); assertEquals(0, fields.get("chunkIndex")); assertTrue((int) fields.get("chunkCount") >= 1); } + @Test + void testSemanticTextDropsStructuralScaffolding() { + Table table = createTestTable("orders", null, "Order table"); + table.setFullyQualifiedName("postgres.jaffle_shop.public.orders"); + + String semantic = VectorDocBuilder.buildSemanticMetaLightText(table, "table"); + + assertTrue(semantic.contains("orders")); + assertFalse(semantic.contains("name:")); + assertFalse(semantic.contains("displayName:")); + assertFalse(semantic.contains("entityType:")); + assertFalse(semantic.contains("serviceType:")); + assertFalse(semantic.contains("fullyQualifiedName:")); + assertFalse(semantic.contains("postgres.jaffle_shop.public.orders")); + assertFalse(semantic.contains("[]")); + assertFalse(semantic.contains(" | ")); + } + + @Test + void testSemanticTextIncludesPopulatedFieldsAsPhrases() { + Table table = createTestTable("orders", "Orders Display", "desc"); + TagLabel tag = new TagLabel(); + tag.setTagFQN("PII.Sensitive"); + tag.setName("Sensitive"); + table.setTags(List.of(tag)); + + String semantic = VectorDocBuilder.buildSemanticMetaLightText(table, "table"); + + assertTrue(semantic.contains("Orders Display")); + assertTrue(semantic.contains("orders")); + assertTrue(semantic.contains("Tagged as PII Sensitive")); + assertFalse(semantic.contains("owners")); + assertFalse(semantic.contains("user.")); + } + + @Test + void testSemanticBodyTextSkipsEmptyDescriptionAndColumns() { + Table table = createTestTable("empty", null, null); + table.setColumns(null); + + String semanticBody = VectorDocBuilder.buildSemanticBodyText(table, "table"); + + assertEquals("", semanticBody); + } + + @Test + void testSemanticTextPrependsTypeLabelWhenContentIsEmpty() { + Table table = new Table(); + table.setId(UUID.randomUUID()); + table.setName("lonely"); + table.setDeleted(false); + + Map fields = VectorDocBuilder.buildEmbeddingFields(table, MOCK_CLIENT); + String semantic = (String) fields.get("textToEmbed"); + + assertEquals("table lonely", semantic); + } + + @Test + void testSemanticTextJoinsMetaAndBodyWithPeriod() { + Table table = createTestTable("customers", "Customers dashboard", "A sample dashboard"); + + Map fields = VectorDocBuilder.buildEmbeddingFields(table, MOCK_CLIENT); + String semantic = (String) fields.get("textToEmbed"); + + assertTrue(semantic.startsWith("table Customers dashboard (customers)")); + assertTrue(semantic.contains(". A sample dashboard")); + assertFalse(semantic.contains("chunk")); + } + + @Test + void testSemanticBodyIncludesChildContextForContainers() { + Database database = new Database(); + database.setId(UUID.randomUUID()); + database.setName("customers"); + database.setDeleted(false); + + EntityReference ethereum = new EntityReference(); + ethereum.setId(UUID.randomUUID()); + ethereum.setType("databaseSchema"); + ethereum.setName("CRYPTO_ETHEREUM"); + EntityReference bitcoin = new EntityReference(); + bitcoin.setId(UUID.randomUUID()); + bitcoin.setType("databaseSchema"); + bitcoin.setName("CRYPTO_BITCOIN"); + database.setDatabaseSchemas(List.of(ethereum, bitcoin)); + + String body = VectorDocBuilder.buildSemanticBodyText(database, "database"); + + assertTrue(body.contains("Contains schemas CRYPTO_ETHEREUM, CRYPTO_BITCOIN")); + } + + @Test + void testSemanticBodySkipsChildContextForNonContainers() { + Table table = createTestTable("orders", null, "Order table"); + + String body = VectorDocBuilder.buildSemanticBodyText(table, "table"); + + assertFalse(body.contains("Contains")); + } + + @Test + void testSemanticMetaLightUsesTypeLabelForContainerWithoutName() { + Database database = new Database(); + database.setId(UUID.randomUUID()); + database.setDeleted(false); + + String metaLight = VectorDocBuilder.buildSemanticMetaLightText(database, "database"); + + assertEquals("database", metaLight); + } + + @Test + void testHumanizeEntityTypeSplitsCamelCase() { + assertEquals("", VectorDocBuilder.humanizeEntityType(null)); + assertEquals("", VectorDocBuilder.humanizeEntityType("")); + assertEquals("table", VectorDocBuilder.humanizeEntityType("table")); + assertEquals("database Schema", VectorDocBuilder.humanizeEntityType("databaseSchema")); + assertEquals("data Product", VectorDocBuilder.humanizeEntityType("dataProduct")); + assertEquals("api Collection", VectorDocBuilder.humanizeEntityType("apiCollection")); + assertEquals("glossary Term", VectorDocBuilder.humanizeEntityType("glossaryTerm")); + } + + @Test + void testTextToEmbedRemainsLegacyFormat() { + Table table = createTestTable("orders", null, "Order table"); + + Map fields = VectorDocBuilder.buildEmbeddingFields(table, MOCK_CLIENT); + String legacy = (String) fields.get("textToLLMContext"); + String semantic = (String) fields.get("textToEmbed"); + + assertTrue( + legacy.contains("displayName: []"), "legacy textToLLMContext keeps empty placeholders"); + assertTrue(legacy.contains(" | chunk 1/")); + assertFalse(semantic.contains("[]")); + assertFalse(semantic.contains("name:")); + assertTrue(semantic.contains("orders")); + assertTrue(semantic.contains("Order table")); + } + @Test void testBuildEmbeddingFieldsContainsEmbeddingVector() { Table table = createTestTable("vec_table", null, "A table with embedding"); @@ -58,10 +207,10 @@ void testBuildEmbeddingFieldsTextToEmbedContainsEntityInfo() { Map fields = VectorDocBuilder.buildEmbeddingFields(table, MOCK_CLIENT); - String textToEmbed = (String) fields.get("textToEmbed"); - assertNotNull(textToEmbed); - assertTrue(textToEmbed.contains("info_table")); - assertTrue(textToEmbed.contains("Important description")); + String textToLLMContext = (String) fields.get("textToLLMContext"); + assertNotNull(textToLLMContext); + assertTrue(textToLLMContext.contains("info_table")); + assertTrue(textToLLMContext.contains("Important description")); } @Test @@ -249,11 +398,11 @@ void testBuildEmbeddingFieldsWithGlossaryTermRelations() { assertNotNull(fields); assertNotNull(fields.get("embedding")); - assertNotNull(fields.get("textToEmbed")); - String textToEmbed = (String) fields.get("textToEmbed"); - assertTrue(textToEmbed.contains("finance.profit")); - assertTrue(textToEmbed.contains("finance.cost")); - assertTrue(textToEmbed.contains("relatedTerms:")); + assertNotNull(fields.get("textToLLMContext")); + String textToLLMContext = (String) fields.get("textToLLMContext"); + assertTrue(textToLLMContext.contains("finance.profit")); + assertTrue(textToLLMContext.contains("finance.cost")); + assertTrue(textToLLMContext.contains("relatedTerms:")); } @Test @@ -264,10 +413,10 @@ void testBuildEmbeddingFieldsWithGlossaryTermNoRelatedTerms() { Map fields = VectorDocBuilder.buildEmbeddingFields(term, MOCK_CLIENT); assertNotNull(fields); - assertNotNull(fields.get("textToEmbed")); - String textToEmbed = (String) fields.get("textToEmbed"); - assertTrue(textToEmbed.contains("relatedTerms:")); - assertFalse(textToEmbed.contains("finance.")); + assertNotNull(fields.get("textToLLMContext")); + String textToLLMContext = (String) fields.get("textToLLMContext"); + assertTrue(textToLLMContext.contains("relatedTerms:")); + assertFalse(textToLLMContext.contains("finance.")); } @Test diff --git a/openmetadata-spec/src/main/resources/elasticsearch/en/api_collection_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/en/api_collection_index_mapping.json index 15f86483f29a..c36fa4d03d72 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/en/api_collection_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/en/api_collection_index_mapping.json @@ -715,6 +715,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/en/api_endpoint_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/en/api_endpoint_index_mapping.json index a1487bdb6313..172cfb6b955b 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/en/api_endpoint_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/en/api_endpoint_index_mapping.json @@ -939,6 +939,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/en/chart_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/en/chart_index_mapping.json index bb0518c870e0..d01450a51146 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/en/chart_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/en/chart_index_mapping.json @@ -666,6 +666,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/en/container_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/en/container_index_mapping.json index 5a1975a865d9..e43a56c4874b 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/en/container_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/en/container_index_mapping.json @@ -920,6 +920,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/en/dashboard_data_model_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/en/dashboard_data_model_index_mapping.json index 039d8cf0b281..89106e3b1d2d 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/en/dashboard_data_model_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/en/dashboard_data_model_index_mapping.json @@ -774,6 +774,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/en/dashboard_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/en/dashboard_index_mapping.json index 7d4af72c6fa6..b54e245c00ad 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/en/dashboard_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/en/dashboard_index_mapping.json @@ -807,6 +807,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/en/data_products_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/en/data_products_index_mapping.json index 38bd845522d4..7c34faaa9d5c 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/en/data_products_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/en/data_products_index_mapping.json @@ -615,6 +615,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/en/database_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/en/database_index_mapping.json index 650abc2db7ba..403cc26438c6 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/en/database_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/en/database_index_mapping.json @@ -690,6 +690,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/en/database_schema_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/en/database_schema_index_mapping.json index 30bf5aab242f..6e51ed087e7b 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/en/database_schema_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/en/database_schema_index_mapping.json @@ -654,6 +654,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/en/directory_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/en/directory_index_mapping.json index 7f8da963da1b..1c167e1b8d37 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/en/directory_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/en/directory_index_mapping.json @@ -756,6 +756,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/en/file_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/en/file_index_mapping.json index da08b918c80f..d8684473b2f9 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/en/file_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/en/file_index_mapping.json @@ -808,6 +808,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/en/glossary_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/en/glossary_index_mapping.json index 0910f440a1e0..d985b9e70ac2 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/en/glossary_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/en/glossary_index_mapping.json @@ -395,6 +395,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/en/glossary_term_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/en/glossary_term_index_mapping.json index 394d51dff52f..0376916225fc 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/en/glossary_term_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/en/glossary_term_index_mapping.json @@ -548,6 +548,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/en/metric_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/en/metric_index_mapping.json index a3960d8ce0d8..08a1713c3823 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/en/metric_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/en/metric_index_mapping.json @@ -681,6 +681,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/en/mlmodel_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/en/mlmodel_index_mapping.json index 81a67db7895c..2d4f2f6a9af9 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/en/mlmodel_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/en/mlmodel_index_mapping.json @@ -815,6 +815,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/en/pipeline_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/en/pipeline_index_mapping.json index cb3039e39d64..ea5227c5ce7f 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/en/pipeline_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/en/pipeline_index_mapping.json @@ -722,6 +722,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/en/search_entity_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/en/search_entity_index_mapping.json index b6d4607d6378..c33454f4587e 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/en/search_entity_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/en/search_entity_index_mapping.json @@ -777,6 +777,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/en/spreadsheet_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/en/spreadsheet_index_mapping.json index dfa27e381d47..67337f1755c5 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/en/spreadsheet_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/en/spreadsheet_index_mapping.json @@ -797,6 +797,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/en/stored_procedure_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/en/stored_procedure_index_mapping.json index 4312342107bd..3bcc49fff2d9 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/en/stored_procedure_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/en/stored_procedure_index_mapping.json @@ -795,6 +795,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/en/table_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/en/table_index_mapping.json index 653c2a69ac9d..98bdec5352e6 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/en/table_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/en/table_index_mapping.json @@ -1039,6 +1039,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/en/tag_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/en/tag_index_mapping.json index 995662d9b0c6..d42f307ae37e 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/en/tag_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/en/tag_index_mapping.json @@ -379,6 +379,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/en/topic_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/en/topic_index_mapping.json index 89e24dc7933d..1265f2beb7cc 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/en/topic_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/en/topic_index_mapping.json @@ -802,6 +802,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/en/worksheet_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/en/worksheet_index_mapping.json index f15cbe4adec7..70703bb99111 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/en/worksheet_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/en/worksheet_index_mapping.json @@ -921,6 +921,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/jp/api_collection_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/jp/api_collection_index_mapping.json index 4d5051c8f217..e125214ddc98 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/jp/api_collection_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/jp/api_collection_index_mapping.json @@ -688,6 +688,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/jp/api_endpoint_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/jp/api_endpoint_index_mapping.json index 440fc74f0805..1b81b53e5165 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/jp/api_endpoint_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/jp/api_endpoint_index_mapping.json @@ -902,6 +902,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/jp/chart_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/jp/chart_index_mapping.json index 347ab1af12b5..8d30a8b09c3c 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/jp/chart_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/jp/chart_index_mapping.json @@ -694,6 +694,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/jp/container_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/jp/container_index_mapping.json index 0f2544c8f25a..abddb5364546 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/jp/container_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/jp/container_index_mapping.json @@ -842,6 +842,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/jp/dashboard_data_model_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/jp/dashboard_data_model_index_mapping.json index 9a3989b0fdeb..4298af04f18a 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/jp/dashboard_data_model_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/jp/dashboard_data_model_index_mapping.json @@ -727,6 +727,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/jp/dashboard_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/jp/dashboard_index_mapping.json index 045913666440..c6bbeefe036c 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/jp/dashboard_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/jp/dashboard_index_mapping.json @@ -789,6 +789,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/jp/data_products_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/jp/data_products_index_mapping.json index 9d8042d4af36..39b9818ce14b 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/jp/data_products_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/jp/data_products_index_mapping.json @@ -618,6 +618,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/jp/database_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/jp/database_index_mapping.json index 45b07b4732d4..4e8543cfc103 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/jp/database_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/jp/database_index_mapping.json @@ -681,6 +681,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/jp/database_schema_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/jp/database_schema_index_mapping.json index 2a7dbdf916c4..cbf44c10cd80 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/jp/database_schema_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/jp/database_schema_index_mapping.json @@ -645,6 +645,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/jp/directory_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/jp/directory_index_mapping.json index 8ada88658170..9a377c7b800a 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/jp/directory_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/jp/directory_index_mapping.json @@ -738,6 +738,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/jp/file_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/jp/file_index_mapping.json index 183e6f74a6ba..e3d1746cd9ca 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/jp/file_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/jp/file_index_mapping.json @@ -753,6 +753,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/jp/glossary_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/jp/glossary_index_mapping.json index e578a542ea67..b9687fb48ef8 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/jp/glossary_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/jp/glossary_index_mapping.json @@ -391,6 +391,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/jp/glossary_term_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/jp/glossary_term_index_mapping.json index 3af30efa8e63..5e52a1f95c08 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/jp/glossary_term_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/jp/glossary_term_index_mapping.json @@ -545,6 +545,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/jp/metric_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/jp/metric_index_mapping.json index 1dd076b33d76..082fa1201e6e 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/jp/metric_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/jp/metric_index_mapping.json @@ -665,6 +665,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/jp/mlmodel_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/jp/mlmodel_index_mapping.json index 7f8740b8431c..b98478bf0eea 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/jp/mlmodel_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/jp/mlmodel_index_mapping.json @@ -791,6 +791,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/jp/pipeline_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/jp/pipeline_index_mapping.json index 86ce8acc9285..ac62855eb46b 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/jp/pipeline_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/jp/pipeline_index_mapping.json @@ -679,6 +679,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/jp/search_entity_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/jp/search_entity_index_mapping.json index 9813ccb8f5ba..6ac15cffbb89 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/jp/search_entity_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/jp/search_entity_index_mapping.json @@ -764,6 +764,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/jp/spreadsheet_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/jp/spreadsheet_index_mapping.json index 6f05ba4d7224..da38cc093cde 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/jp/spreadsheet_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/jp/spreadsheet_index_mapping.json @@ -738,6 +738,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/jp/stored_procedure_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/jp/stored_procedure_index_mapping.json index 2865cb3025fe..731bbed20021 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/jp/stored_procedure_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/jp/stored_procedure_index_mapping.json @@ -871,6 +871,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/jp/table_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/jp/table_index_mapping.json index 66317765b5da..705fba021c3d 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/jp/table_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/jp/table_index_mapping.json @@ -1020,6 +1020,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/jp/tag_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/jp/tag_index_mapping.json index 992bcbfbf995..e9d180584a2e 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/jp/tag_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/jp/tag_index_mapping.json @@ -328,6 +328,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/jp/topic_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/jp/topic_index_mapping.json index 8171f4071aed..3ea0e1b164d6 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/jp/topic_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/jp/topic_index_mapping.json @@ -774,6 +774,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/jp/worksheet_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/jp/worksheet_index_mapping.json index 30be5b3cc154..996c4f730ecd 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/jp/worksheet_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/jp/worksheet_index_mapping.json @@ -811,6 +811,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/ru/api_collection_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/ru/api_collection_index_mapping.json index e0cd68dbc6e3..3a6b4292272e 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/ru/api_collection_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/ru/api_collection_index_mapping.json @@ -732,6 +732,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/ru/api_endpoint_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/ru/api_endpoint_index_mapping.json index 7bb200e7628c..57c5b1d1031f 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/ru/api_endpoint_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/ru/api_endpoint_index_mapping.json @@ -956,6 +956,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/ru/chart_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/ru/chart_index_mapping.json index 350d332333d8..c753bae4eabd 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/ru/chart_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/ru/chart_index_mapping.json @@ -683,6 +683,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/ru/container_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/ru/container_index_mapping.json index 8010edf3536f..22a1d78cbbda 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/ru/container_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/ru/container_index_mapping.json @@ -893,6 +893,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/ru/dashboard_data_model_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/ru/dashboard_data_model_index_mapping.json index 8145399e3a57..f303c44687c0 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/ru/dashboard_data_model_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/ru/dashboard_data_model_index_mapping.json @@ -746,6 +746,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/ru/dashboard_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/ru/dashboard_index_mapping.json index 00e356ed4676..a98e727084e8 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/ru/dashboard_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/ru/dashboard_index_mapping.json @@ -824,6 +824,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/ru/data_products_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/ru/data_products_index_mapping.json index bb5d64fe8769..33a36fccd183 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/ru/data_products_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/ru/data_products_index_mapping.json @@ -627,6 +627,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/ru/database_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/ru/database_index_mapping.json index 07e431ddfe44..28ddf6277ff6 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/ru/database_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/ru/database_index_mapping.json @@ -707,6 +707,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/ru/database_schema_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/ru/database_schema_index_mapping.json index 9647947a2990..1c6dc4fd99dd 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/ru/database_schema_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/ru/database_schema_index_mapping.json @@ -671,6 +671,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/ru/directory_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/ru/directory_index_mapping.json index 2c9b3850f051..be12a419f4e1 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/ru/directory_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/ru/directory_index_mapping.json @@ -639,6 +639,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/ru/file_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/ru/file_index_mapping.json index 3ad448456379..7ba08002a671 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/ru/file_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/ru/file_index_mapping.json @@ -694,6 +694,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/ru/glossary_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/ru/glossary_index_mapping.json index 33b393fd4752..08931778c2ae 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/ru/glossary_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/ru/glossary_index_mapping.json @@ -413,6 +413,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/ru/glossary_term_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/ru/glossary_term_index_mapping.json index c2b44ba71e3d..6779763ead55 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/ru/glossary_term_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/ru/glossary_term_index_mapping.json @@ -566,6 +566,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/ru/metric_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/ru/metric_index_mapping.json index 5f60aa7af3a3..d255839eb1e8 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/ru/metric_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/ru/metric_index_mapping.json @@ -651,6 +651,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/ru/mlmodel_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/ru/mlmodel_index_mapping.json index 908058f28455..1e0a0a13f43e 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/ru/mlmodel_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/ru/mlmodel_index_mapping.json @@ -832,6 +832,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/ru/pipeline_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/ru/pipeline_index_mapping.json index 16a5f719e4b8..3fbe642d2e72 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/ru/pipeline_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/ru/pipeline_index_mapping.json @@ -739,6 +739,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/ru/search_entity_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/ru/search_entity_index_mapping.json index 69c579ef390b..42be6ab4ebff 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/ru/search_entity_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/ru/search_entity_index_mapping.json @@ -794,6 +794,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/ru/spreadsheet_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/ru/spreadsheet_index_mapping.json index a7566be8076d..307909569845 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/ru/spreadsheet_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/ru/spreadsheet_index_mapping.json @@ -693,6 +693,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/ru/stored_procedure_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/ru/stored_procedure_index_mapping.json index 513535becf49..37b25ea16527 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/ru/stored_procedure_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/ru/stored_procedure_index_mapping.json @@ -812,6 +812,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/ru/table_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/ru/table_index_mapping.json index 28a1da38a158..a4da935bad97 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/ru/table_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/ru/table_index_mapping.json @@ -1026,6 +1026,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/ru/tag_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/ru/tag_index_mapping.json index f5a848c0f6f0..877ee0777cb2 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/ru/tag_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/ru/tag_index_mapping.json @@ -392,6 +392,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/ru/topic_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/ru/topic_index_mapping.json index 9e4181f99b8c..f765d3ea65cf 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/ru/topic_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/ru/topic_index_mapping.json @@ -819,6 +819,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/ru/worksheet_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/ru/worksheet_index_mapping.json index 63c9e7ab6acf..68bf9a877479 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/ru/worksheet_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/ru/worksheet_index_mapping.json @@ -753,6 +753,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/zh/api_collection_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/zh/api_collection_index_mapping.json index ca53dadfd1a3..e86da4b52861 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/zh/api_collection_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/zh/api_collection_index_mapping.json @@ -688,6 +688,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/zh/api_endpoint_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/zh/api_endpoint_index_mapping.json index db1b6d4e9dee..bf1f64a7634a 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/zh/api_endpoint_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/zh/api_endpoint_index_mapping.json @@ -903,6 +903,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/zh/chart_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/zh/chart_index_mapping.json index 5e00e8feb94e..c250ee0c43d2 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/zh/chart_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/zh/chart_index_mapping.json @@ -680,6 +680,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/zh/container_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/zh/container_index_mapping.json index a28d95517971..bf07cb257abc 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/zh/container_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/zh/container_index_mapping.json @@ -844,6 +844,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/zh/dashboard_data_model_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/zh/dashboard_data_model_index_mapping.json index eec97c2bdd01..7a4874e25f2f 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/zh/dashboard_data_model_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/zh/dashboard_data_model_index_mapping.json @@ -725,6 +725,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/zh/dashboard_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/zh/dashboard_index_mapping.json index 060113e5c720..2a0bf0b4ca0a 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/zh/dashboard_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/zh/dashboard_index_mapping.json @@ -746,6 +746,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/zh/data_products_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/zh/data_products_index_mapping.json index d3a0ae59ebfa..57b7f0c8cf59 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/zh/data_products_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/zh/data_products_index_mapping.json @@ -611,6 +611,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/zh/database_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/zh/database_index_mapping.json index 87edee06ea7e..82b79b92a0cf 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/zh/database_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/zh/database_index_mapping.json @@ -664,6 +664,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/zh/database_schema_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/zh/database_schema_index_mapping.json index 88dc8fd35372..9b5748f061ee 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/zh/database_schema_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/zh/database_schema_index_mapping.json @@ -624,6 +624,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/zh/directory_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/zh/directory_index_mapping.json index c9119fe16ef7..79048659730a 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/zh/directory_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/zh/directory_index_mapping.json @@ -711,6 +711,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/zh/file_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/zh/file_index_mapping.json index 5b9e0605d06f..b59448d76373 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/zh/file_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/zh/file_index_mapping.json @@ -726,6 +726,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/zh/glossary_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/zh/glossary_index_mapping.json index 9fd014b9f885..4b16d41c17e3 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/zh/glossary_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/zh/glossary_index_mapping.json @@ -334,6 +334,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/zh/glossary_term_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/zh/glossary_term_index_mapping.json index 70990dc9ceeb..dac786d82ed7 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/zh/glossary_term_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/zh/glossary_term_index_mapping.json @@ -508,6 +508,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/zh/metric_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/zh/metric_index_mapping.json index f78ef1ae3755..12dc8aaf3fd5 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/zh/metric_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/zh/metric_index_mapping.json @@ -657,6 +657,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/zh/mlmodel_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/zh/mlmodel_index_mapping.json index 0d697f444f9e..11c8edb1b19c 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/zh/mlmodel_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/zh/mlmodel_index_mapping.json @@ -785,6 +785,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/zh/pipeline_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/zh/pipeline_index_mapping.json index 7828c2c1cb89..23c504b3b145 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/zh/pipeline_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/zh/pipeline_index_mapping.json @@ -682,6 +682,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/zh/search_entity_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/zh/search_entity_index_mapping.json index f3be0b9ab876..e9800c7e815a 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/zh/search_entity_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/zh/search_entity_index_mapping.json @@ -748,6 +748,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/zh/spreadsheet_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/zh/spreadsheet_index_mapping.json index e15b4c52d97c..c2a609f00a7c 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/zh/spreadsheet_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/zh/spreadsheet_index_mapping.json @@ -711,6 +711,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/zh/stored_procedure_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/zh/stored_procedure_index_mapping.json index 804b2d40a099..e3d692961c18 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/zh/stored_procedure_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/zh/stored_procedure_index_mapping.json @@ -871,6 +871,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/zh/table_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/zh/table_index_mapping.json index 08e64524f9c7..5d160188175b 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/zh/table_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/zh/table_index_mapping.json @@ -1011,6 +1011,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/zh/tag_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/zh/tag_index_mapping.json index e5dffd841d1f..cbb68e2d20a7 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/zh/tag_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/zh/tag_index_mapping.json @@ -323,6 +323,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/zh/topic_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/zh/topic_index_mapping.json index 61696fad2c2c..d000c8f917fb 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/zh/topic_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/zh/topic_index_mapping.json @@ -725,6 +725,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" }, diff --git a/openmetadata-spec/src/main/resources/elasticsearch/zh/worksheet_index_mapping.json b/openmetadata-spec/src/main/resources/elasticsearch/zh/worksheet_index_mapping.json index 24d3a959be74..e6835a29fb7f 100644 --- a/openmetadata-spec/src/main/resources/elasticsearch/zh/worksheet_index_mapping.json +++ b/openmetadata-spec/src/main/resources/elasticsearch/zh/worksheet_index_mapping.json @@ -786,6 +786,9 @@ "fingerprint": { "type": "keyword" }, + "textToLLMContext": { + "type": "text" + }, "textToEmbed": { "type": "text" },