Skip to content

Conversation

@aniketpalu
Copy link
Contributor

What this PR does / why we need it:

  1. Return all matching tags instead of just the first one
  • Previously, when multiple tags matched a query, only one was returned
  • Now all matching tags (both exact and fuzzy) are collected and returned
  1. Changed matched_tag to matched_tags as a flat dictionary
  • Before: "matched_tag": {"key": "value"} (single match)
  • After: "matched_tags": {"key1": "value1", "key2": "value2"} (all matches)
  1. Made matched_tags a mandatory field in all search results
  • When query matches name/description, any matching tags are also returned
  • When query is empty, all tags are included in matched_tags
  • Empty {} when no tags match

Response Example for query = 'at'

{
  "query": "at",
  "projects_searched": [
    "test_project"
  ],
  "results": [
    {
      "type": "featureView",
      "name": "user_features",
      "description": "User demographic features",
      "project": "test_project",
      "matched_tags": {
        "team": "data"
      },
      "match_score": 100
    },
    {
      "type": "featureView",
      "name": "product_features",
      "description": "Product catalog features",
      "project": "test_project",
      "matched_tags": {},
      "match_score": 100
    },
    {
      "type": "featureView",
      "name": "transaction_features",
      "description": "Transaction payment features",
      "project": "test_project",
      "matched_tags": {},
      "match_score": 100
    },
    {
      "type": "featureView",
      "name": "user_on_demand_features",
      "description": "On-demand features combining user features with real-time data",
      "project": "test_project",
      "matched_tags": {
        "team": "data"
      },
      "match_score": 100
    },
    {
      "type": "feature",
      "name": "category",
      "description": "",
      "project": "test_project",
      "featureView": "product_features",
      "matched_tags": {},
      "match_score": 100
    },
    {
      "type": "savedDataset",
      "name": "user_training_dataset",
      "description": "",
      "project": "test_project",
      "matched_tags": {
        "team": "data"
      },
      "match_score": 100
    },
    {
      "type": "entity",
      "name": "user",
      "description": "User entity for customer data",
      "project": "test_project",
      "matched_tags": {
        "team": "data"
      },
      "match_score": 80
    },
    {
      "type": "entity",
      "name": "product",
      "description": "Product entity for catalog data",
      "project": "test_project",
      "matched_tags": {},
      "match_score": 80
    },
    {
      "type": "entity",
      "name": "transaction",
      "description": "Transaction entity for payment data",
      "project": "test_project",
      "matched_tags": {},
      "match_score": 80
    },
    {
      "type": "featureService",
      "name": "user_service",
      "description": "Service for user-related features",
      "project": "test_project",
      "matched_tags": {
        "team": "data"
      },
      "match_score": 80
    },
    {
      "type": "featureService",
      "name": "product_service",
      "description": "Service for product catalog features",
      "project": "test_project",
      "matched_tags": {},
      "match_score": 80
    }
  ],
  "pagination": {
    "page": 1,
    "limit": 50,
    "totalCount": 11,
    "totalPages": 1
  },
  "errors": []
}

Which issue(s) this PR fixes:

RHOAIENG-44611

Misc

Signed-off-by: Aniket Paluskar <apaluska@redhat.com>
@aniketpalu aniketpalu requested a review from a team as a code owner January 12, 2026 21:21
Copy link
Collaborator

@jyejare jyejare left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, but looks like tests are not really testing the multiple tags. Please add that.

aniketpalu and others added 2 commits January 13, 2026 17:06
@aniketpalu aniketpalu requested a review from jyejare January 13, 2026 11:44
@Srihari1192
Copy link
Contributor

lgtm Thanks

Copy link
Member

@ntkathole ntkathole left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks

@ntkathole ntkathole merged commit de37f66 into feast-dev:master Jan 13, 2026
19 checks passed
franciscojavierarceo pushed a commit that referenced this pull request Jan 16, 2026
# [0.59.0](v0.58.0...v0.59.0) (2026-01-16)

### Bug Fixes

* Add get_table_query_string_with_alias() for PostgreSQL subquery aliasing ([#5811](#5811)) ([11122ce](11122ce))
* Add hybrid online store to ONLINE_STORE_CLASS_FOR_TYPE mapping ([#5810](#5810)) ([678589b](678589b))
* Add possibility to overwrite send_receive_timeout for clickhouse offline store ([#5792](#5792)) ([59dbb33](59dbb33))
* Denial by default to all resources when no permissions set  ([#5663](#5663)) ([1524f1c](1524f1c))
* Make operator include full OIDC secret in repo config ([#5676](#5676)) ([#5809](#5809)) ([a536bc2](a536bc2))
* Populate Postgres `registry.path` during `feast init` ([#5785](#5785)) ([f293ae8](f293ae8))
* **redis:** Preserve millisecond timestamp precision for Redis online store ([#5807](#5807)) ([9e3f213](9e3f213))
* Search API to return all matching tags in matched_tags field ([#5843](#5843)) ([de37f66](de37f66))
* Spark Materialization Engine Cannot Infer Schema ([#5806](#5806)) ([58d0325](58d0325)), closes [#5594](#5594) [#5594](#5594)
* Support arro3 table schema with newer deltalake packages ([#5799](#5799)) ([103c5e9](103c5e9))
* Timestamp formatting and lakehouse-type connector for trino_offline_store. ([#5846](#5846)) ([c2ea7e9](c2ea7e9))
* Update model_validator to use instance method signature (Pydantic v2.12 deprecation) ([#5825](#5825)) ([3c10b6e](3c10b6e))

### Features

* Add dbt integration for importing models as FeatureViews ([#5827](#5827)) ([b997361](b997361)), closes [#3335](#3335) [#3335](#3335) [#3335](#3335)
* Add GCS registry store in Go feature server ([#5818](#5818)) ([1dc2be5](1dc2be5))
* Add progress bar to CLI from feast apply ([#5867](#5867)) ([ab3562b](ab3562b))
* Add RBAC blog post to website ([#5861](#5861)) ([b1844a3](b1844a3))
* Add skip_feature_view_validation parameter to FeatureStore.apply() and plan() ([#5859](#5859)) ([5482a0e](5482a0e))
* Added batching to feature server /push to offline store ([#5683](#5683)) ([#5729](#5729)) ([ce35ce6](ce35ce6))
* Enable static artifacts for feature server that can be used in Feature Transformations ([#5787](#5787)) ([edefc3f](edefc3f))
* Improve lambda materialization engine ([#5829](#5829)) ([f6116f9](f6116f9))
* Offline Store historical features retrieval based on datetime range in Ray ([#5738](#5738)) ([e484c12](e484c12))
* Read, Save docs and chat fixes ([#5865](#5865)) ([2081b55](2081b55))
* Resolve pyarrow >21 installation with ibis-framework ([#5847](#5847)) ([8b9bb50](8b9bb50))
* Support staging for spark materialization ([#5671](#5671)) ([#5797](#5797)) ([5b787af](5b787af))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants