Skip to content

[Feature Request] Add runtime filter support to MilvusEmbeddingRetriever - #68

Closed
kukjun wants to merge 1 commit into
milvus-io:mainfrom
kukjun:main
Closed

[Feature Request] Add runtime filter support to MilvusEmbeddingRetriever#68
kukjun wants to merge 1 commit into
milvus-io:mainfrom
kukjun:main

Conversation

@kukjun

@kukjun kukjun commented Oct 28, 2025

Copy link
Copy Markdown
Contributor

📝 Description

This PR adds runtime filter parameter support to all retriever classes (MilvusEmbeddingRetriever, MilvusSparseEmbeddingRetriever, and MilvusHybridRetriever), enabling dynamic metadata filtering at query time.

🎯 Motivation

Previously, filters could only be set during retriever initialization. This limitation prevented users from dynamically changing filter conditions at runtime, which is a common use case in production environments where filter criteria may vary per query.

🔧 Changes

Code Changes

  • MilvusEmbeddingRetriever.run(): Added optional filters parameter
  • MilvusSparseEmbeddingRetriever.run(): Added optional filters parameter
  • MilvusHybridRetriever.run(): Added optional filters parameter

All retrievers now support both:

  1. Static filters: Set during initialization (existing behavior)
  2. Runtime filters: Pass filters parameter to run() method (new feature)

Runtime filters take precedence over static filters when both are provided.

Test Coverage

Added comprehensive test coverage with test_run_using_filters() for each retriever class:

  • TestMilvusEmbeddingTests.test_run_using_filters(): Tests dense embedding retrieval with runtime filters
  • TestMilvusSparseEmbeddingTests.test_run_using_filters(): Tests sparse embedding retrieval with runtime filters
  • TestMilvusHybridTests.test_run_using_filters(): Tests hybrid retrieval with runtime filters

📊 Example Usage

# Initialize retriever (with optional static filter)
retriever = MilvusEmbeddingRetriever(document_store)

# Apply runtime filter for specific query
filters = {"field": "category", "operator": "==", "value": "news"}
results = retriever.run(query_embedding, filters=filters)

# Different filter for next query
filters = {"field": "year", "operator": ">=", "value": 2023}
results = retriever.run(query_embedding, filters=filters)

@LuRe97

LuRe97 commented Dec 4, 2025

Copy link
Copy Markdown

I hope this gets merged soon, its really useful and also relatively short for that :)

@zc277584121

Copy link
Copy Markdown
Collaborator

/lgtm

@zc277584121

Copy link
Copy Markdown
Collaborator

@kukjun
image
seems need DCO, it means you have to append the sign-off to your commit message. Can you please check it again

Signed-off-by: Kukjun Lee <63409722+kukjun@users.noreply.github.com>
@kukjun

kukjun commented Dec 12, 2025

Copy link
Copy Markdown
Contributor Author

@zc277584121

I’ve finished it!

@zc277584121

Copy link
Copy Markdown
Collaborator

@kukjun merged at another PR #70

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.

3 participants