VectorFilter
VectorFilter is a fluent API for filtering vector store queries by metadata. It applies to IVectorStore.SearchAsync, HybridSearchAsync, and RAG queries.
Basic Equality
var filter = new VectorFilter()
.Where("source", "manual.pdf")
.Where("language", "en");
Comparison Operators
var filter = new VectorFilter()
.WhereGreaterThan("date", "2024-01-01")
.WhereLessThanOrEqual("priority", "3")
.WhereNot("status", "archived");
| Method | SQL Equivalent |
|---|---|
.Where(key, value) |
key = value |
.WhereNot(key, value) |
key != value |
.WhereGreaterThan(key, value) |
key > value |
.WhereGreaterThanOrEqual(key, value) |
key >= value |
.WhereLessThan(key, value) |
key < value |
.WhereLessThanOrEqual(key, value) |
key <= value |
.WhereLike(key, pattern) |
key LIKE pattern |
Set Membership
var filter = new VectorFilter()
.WhereIn("category", "legal", "compliance", "policy")
.WhereNotIn("type", "draft", "archived");
Key Existence
var filter = new VectorFilter()
.WhereExists("reviewed_by") // Key must be present
.WhereNotExists("deprecated"); // Key must be absent
Logical Grouping (AND / OR)
Conditions at the same level are combined with AND by default. Use .Or() to create OR groups:
var filter = new VectorFilter()
.Where("source", "manual.pdf")
.Or(f => f
.Where("type", "urgent")
.Where("priority", "high")
);
// source = "manual.pdf" AND (type = "urgent" OR priority = "high")
Nested AND:
var filter = new VectorFilter()
.Or(f => f
.And(a => a.Where("lang", "en").Where("region", "us"))
.And(a => a.Where("lang", "ko").Where("region", "kr"))
);
// (lang = "en" AND region = "us") OR (lang = "ko" AND region = "kr")
Score Threshold
var filter = new VectorFilter()
.Where("source", "faq.pdf")
.WithMinScore(0.75);
Using with Vector Store
var filter = new VectorFilter()
.Where("document_type", "contract")
.WhereGreaterThan("year", "2023");
var results = await vectorStore.SearchAsync(
queryVector: embedding,
topK: 5,
filter: filter
);
Using with RAG
Pass as StoreFilter in RagQueryOptions:
var options = new RagQueryOptions
{
StoreFilter = new VectorFilter()
.Where("source", "product-manual.pdf")
.WithMinScore(0.7)
};
var response = await ragService.GetCompletionAsync("How do I reset the device?", options);
Merging Filters
Use AppendConditionsFrom to combine two filters (e.g., merging a pipeline-level filter with a per-query filter):
var baseFilter = new VectorFilter().Where("tenant", "acme");
var queryFilter = new VectorFilter().Where("language", "en");
baseFilter.AppendConditionsFrom(queryFilter);
// baseFilter now has both conditions