Skip to content

Search Settings UI suggests wrong field path for Certification Term Boost (certification.tagFQN vs certification.tagLabel.tagFQN) #26414

@meltscheminov-brex

Description

@meltscheminov-brex

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

  1. Go to Settings > Preferences > Search > Term Boost
  2. Click "Add Term Boost"
  3. Start typing cer in the field selector -- the autocomplete suggests Certification.Gold under certification.tagFQN
  4. Select it, set boost to any value (e.g. 100), save
  5. Search for a term that matches both certified and non-certified entities (e.g. "ACCOUNTS")
  6. 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

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

Status

No status

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions