Expand description
Filter expression parsing and evaluation. Filter expression module for EdgeVec.
This module provides a powerful filtering system for vector search queries, allowing users to filter results based on metadata fields.
§Architecture
The filter subsystem consists of:
- AST (
ast.rs): 27-variantFilterExprenum representing parsed filter expressions - Parser (
parser.rs): Pest-based parser converting filter strings to AST - Evaluator (
evaluator.rs): Recursive evaluator with short-circuit optimization - Error (
error.rs): Comprehensive error types with position information
§Example
use std::collections::HashMap;
use edgevec::filter::{parse, evaluate, FilterExpr};
use edgevec::metadata::MetadataValue;
// Parse a filter expression
let expr = parse("category = \"gpu\" AND price < 500").unwrap();
// Evaluate against metadata
let mut metadata = HashMap::new();
metadata.insert("category".to_string(), MetadataValue::String("gpu".to_string()));
metadata.insert("price".to_string(), MetadataValue::Integer(450));
let result = evaluate(&expr, &metadata).unwrap();
assert!(result);§Grammar
The filter syntax supports:
- Comparison operators:
=,!=,<,<=,>,>= - String operators:
CONTAINS,STARTS_WITH,ENDS_WITH,LIKE - Array operators:
IN,NOT IN,ANY,ALL,NONE - Range operator:
BETWEEN - Logical operators:
AND,OR,NOT - Null checks:
IS NULL,IS NOT NULL
§Implementation Status
- W23.1.1: FilterExpr AST enum (27 variants)
- W23.1.2: Pest grammar file
- W23.1.3: AST builder from parse tree
- W23.1.4: Error handling with positions
- W23.2.1: Core evaluate() function
- W23.2.2: Comparison operators
- W23.2.3: String operators
- W23.2.4: Array operators
- W23.3.1: FilterStrategy enum
- W23.3.2: Selectivity estimation (estimate_selectivity)
- W23.3.3: FilteredSearcher API (search_filtered)
- W23.3.4: Tautology/contradiction detection
Re-exports§
pub use ast::FilterExpr;pub use error::FilterError;pub use evaluator::evaluate;pub use filtered_search::FilteredSearchError;pub use filtered_search::FilteredSearchResult;pub use filtered_search::FilteredSearcher;pub use filtered_search::VectorMetadataStore;pub use parser::parse;pub use strategy::estimate_selectivity;pub use strategy::FilterStrategy;pub use strategy::MetadataStore;pub use strategy::SelectivityEstimate;