Affected module
UI (Search Settings page) + Backend (Search query execution)
Describe the bug
The Search Settings UI autocomplete for Term Boost fields suggests certification.tagFQN as the field name for certification-based boosting. However, the actual OpenSearch index mapping stores the certification tag FQN at certification.tagLabel.tagFQN (nested under an extra tagLabel level). This causes any certification term boost configured via the UI to silently do nothing -- OpenSearch ignores term queries on nonexistent fields without error.
This is inconsistent with how tier works -- tier.tagFQN exists directly in the mapping and works correctly. The certification field has a different structure (certification.tagLabel.tagFQN) but the UI autocomplete doesn't reflect this.
To Reproduce
- Go to Settings > Preferences > Search > Term Boost
- Click "Add Term Boost"
- Start typing
cer in the field selector -- the autocomplete suggests Certification.Gold under certification.tagFQN
- Select it, set boost to any value (e.g. 100), save
- Search for a term that matches both certified and non-certified entities (e.g. "ACCOUNTS")
- Observe that certified entities receive no boost whatsoever
Verification via explain API
GET /api/v1/search/query?q=ACCOUNTS&index=table_search_index&explain=true
For a table with Certification.Gold applied, the explain output shows no function score for the certification term boost. Compare with tier.tagFQN boosts (Tier1=50, Tier2=30, Tier3=10) which DO appear in the explain output for tiered entities.
Root cause -- index mapping comparison
tier (boost works):
"tier": {
"properties": {
"tagFQN": { "type": "keyword" }
}
}
Field path: tier.tagFQN -- exists directly, matches what the UI suggests.
certification (boost broken):
"certification": {
"properties": {
"tagLabel": {
"properties": {
"tagFQN": { "type": "keyword" }
}
}
}
}
Field path: certification.tagLabel.tagFQN -- has an extra tagLabel nesting level. The UI suggests certification.tagFQN which does not exist in the index.
Further confirmation: the aggregation config in the same search settings uses the correct path:
{"name": "certification.tagLabel.tagFQN", "type": "terms", "field": "certification.tagLabel.tagFQN"}
Workaround
Manually edit the search settings JSON via the API (PUT /api/v1/system/settings) to change the term boost field from certification.tagFQN to certification.tagLabel.tagFQN. The UI does not allow entering arbitrary field names, only autocomplete values.
Expected behavior
The UI autocomplete should suggest certification.tagLabel.tagFQN as the field, or alternatively the backend should resolve certification.tagFQN to the correct nested path. A certification term boost configured via the UI should produce a function score in search results, identical to how tier term boosts work.
Version
- OS: Linux (AWS EKS, arm64)
- Python version: 3.10 (ingestion image)
- OpenMetadata version: 1.12.1
- OpenMetadata Ingestion package version:
openmetadata/ingestion:1.12.1
Additional context
- OpenSearch is the search backend (AWS-managed, via sigv4 proxy)
- The
tier.tagFQN term boosts (Tier1=50, Tier2=30, Tier3=10) all work correctly -- confirmed via explain API
- The
certification.tagLabel.tagFQN aggregation facet works correctly in search results, proving the field is indexed and populated
- This affects all certification types, not just custom ones -- any
Certification.* term boost configured via the UI will silently fail
Affected module
UI (Search Settings page) + Backend (Search query execution)
Describe the bug
The Search Settings UI autocomplete for Term Boost fields suggests
certification.tagFQNas the field name for certification-based boosting. However, the actual OpenSearch index mapping stores the certification tag FQN atcertification.tagLabel.tagFQN(nested under an extratagLabellevel). This causes any certification term boost configured via the UI to silently do nothing -- OpenSearch ignores term queries on nonexistent fields without error.This is inconsistent with how
tierworks --tier.tagFQNexists directly in the mapping and works correctly. Thecertificationfield has a different structure (certification.tagLabel.tagFQN) but the UI autocomplete doesn't reflect this.To Reproduce
cerin the field selector -- the autocomplete suggestsCertification.Goldundercertification.tagFQNVerification via explain API
For a table with
Certification.Goldapplied, the explain output shows no function score for the certification term boost. Compare withtier.tagFQNboosts (Tier1=50, Tier2=30, Tier3=10) which DO appear in the explain output for tiered entities.Root cause -- index mapping comparison
tier(boost works):Field path:
tier.tagFQN-- exists directly, matches what the UI suggests.certification(boost broken):Field path:
certification.tagLabel.tagFQN-- has an extratagLabelnesting level. The UI suggestscertification.tagFQNwhich does not exist in the index.Further confirmation: the aggregation config in the same search settings uses the correct path:
{"name": "certification.tagLabel.tagFQN", "type": "terms", "field": "certification.tagLabel.tagFQN"}Workaround
Manually edit the search settings JSON via the API (
PUT /api/v1/system/settings) to change the term boost field fromcertification.tagFQNtocertification.tagLabel.tagFQN. The UI does not allow entering arbitrary field names, only autocomplete values.Expected behavior
The UI autocomplete should suggest
certification.tagLabel.tagFQNas the field, or alternatively the backend should resolvecertification.tagFQNto the correct nested path. A certification term boost configured via the UI should produce a function score in search results, identical to how tier term boosts work.Version
openmetadata/ingestion:1.12.1Additional context
tier.tagFQNterm boosts (Tier1=50, Tier2=30, Tier3=10) all work correctly -- confirmed via explain APIcertification.tagLabel.tagFQNaggregation facet works correctly in search results, proving the field is indexed and populatedCertification.*term boost configured via the UI will silently fail