Enable Semantic Search
Prerequisites
- OpenSearch or Elasticsearch as your search backend
- An external embedding provider: OpenAI, AWS Bedrock, Google, or DJL for HuggingFace models.
- Network access from the OpenMetadata server to the embedding provider API (unless using DJL)
Overview
Semantic Search enhances OpenMetadata’s search capabilities by using vector embeddings to understand the meaning behind queries, rather than relying solely on keyword matching. This means users and AI agents can search using natural language — for example, “tables with customer demographics and purchase history” — and get meaningful results even if those exact words don’t appear in the metadata.Semantic Search supports both OpenSearch and Elasticsearch as the search backend. The OpenSearch-specific hybrid search pipeline (which blends keyword and semantic scores server-side) is not available on Elasticsearch. Core vector/KNN search works the same on both backends.
How It Works
1
Text Construction
For each entity, a structured text representation is constructed from its metadata — including name, description,
entity type, tags, glossary terms, owners, and other relevant fields.
2
Embedding Generation & Vector Indexing
The text is sent to the configured embedding provider to generate a numerical vector (embedding), which is stored
in a dedicated
dataAssetEmbeddings index (<clusterAlias>_dataAssetEmbeddings if you’ve set a cluster alias) using the HNSW algorithm with cosine similarity. At query time,
the search text is also embedded and a KNN (K-Nearest Neighbor) similarity search finds the most relevant results.3
Automatic Lifecycle Management
Embeddings follow the same lifecycle as the entities themselves. When entities are created, updated, deleted, or
restored, their embeddings are automatically kept in sync using the same indexing strategies the platform already
uses for search. No manual intervention is required after initial setup.
Supported Entity Types
table, glossary, glossaryTerm, chart, dashboard, dashboardDataModel, database, databaseSchema,
dataProduct, pipeline, mlmodel, metric, apiEndpoint, apiCollection, page, storedProcedure,
searchIndex, topic, contextMemory, container, testSuite, testCase, llmModel, aiApplication,
promptTemplate, mcpServer, aiGovernancePolicy, aiGovernanceFramework
Configuration
Semantic Search settings are split across two sections ofopenmetadata.yaml. The master switch stays under
elasticsearch.naturalLanguageSearch, while the embedding provider, model, and credentials live under
llmConfiguration — the same section used for platform-wide LLM completions. All settings can be overridden with
environment variables.
LLM_ENABLED and LLM_PROVIDER configure the platform’s chat completion client. They do not enable or select
Semantic Search’s vector embeddings — that’s controlled by SEMANTIC_SEARCH_ENABLED and
llmConfiguration.embeddings.provider instead.Enable Semantic Search
Embedding Providers
Choose one of the following embedding providers and configure it accordingly.- OpenAI
- AWS Bedrock
- Google
- DJL
Supports both OpenAI and Azure OpenAI endpoints. Credentials live under
llmConfiguration.openai, shared with
the platform’s chat completion config; the embedding model and dimension live under
llmConfiguration.embeddings.openai.Docker Deployment
To enable Semantic Search in a Docker deployment, set the required environment variables in yourdocker-compose override
or .env file:
Kubernetes Deployment
For Kubernetes deployments using the OpenMetadata Helm chart, add the environment variables to yourvalues.yaml:
Validating the Configuration
After configuring your embedding provider, you can verify that everything is set up correctly by navigating toSettings > Preferences > Health in the OpenMetadata UI. This page shows the status of the embedding provider
connection and will flag any misconfiguration.
The Semantic Search health card only appears once
SEMANTIC_SEARCH_ENABLED is set to true. It won’t show up if
semantic search is still disabled.Generating Embeddings
Once Semantic Search is enabled, embeddings are generated and kept in sync automatically as entities are created or updated. To generate embeddings for all existing entities, run a Reindex from the OpenMetadata UI (Settings > Applications > Search Indexing).
Every Reindex operation computes embeddings taking a fingerprint into account — if the text representation of an entity
has not changed since its last embedding, the embedding is not recomputed. This avoids unnecessary calls to the
embedding provider and makes re-indexing efficient even for large catalogs.
OpenSearch only: as a faster, dedicated alternative to a full Reindex, use the reembed CLI command. It
initializes the vector service and processes entities in batches, applying the same fingerprint check described
above — entities whose content hasn’t changed are skipped, and the existing vector index is not dropped or
recreated. The speedup over a UI Reindex comes from running as a standalone, multithreaded batch job with
configurable batch size and producer/consumer thread counts:
API Reference
Semantic Search exposes a REST API endpoint for vector queries:POST /api/v1/search/vector/query
Performs a semantic search against the vector index.
Request Body:
Results are deduplicated by parent entity, so you will receive at most
size distinct entities even if an entity has
multiple text chunks.
Troubleshooting
Semantic Search returns no results
- Verify that
SEMANTIC_SEARCH_ENABLEDis set totrueand the server has been restarted. - Confirm your search backend (OpenSearch or Elasticsearch) is reachable and correctly configured.
- Check that the
dataAssetEmbeddingsindex (or<clusterAlias>_dataAssetEmbeddingsif you’ve set a cluster alias) exists in your search backend. - Run a Reindex to generate embeddings for existing entities.
Embedding generation fails
- Verify network connectivity from the OpenMetadata server to your embedding provider.
- Check that API keys and credentials are correct.
- Review the OpenMetadata server logs for detailed error messages.