Module filter

Module filter 

Source
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-variant FilterExpr enum 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;

Modules§

ast
Filter expression AST for EdgeVec.
error
Filter error types for EdgeVec.
evaluator
Filter expression evaluator for EdgeVec.
filtered_search
Filtered search integration for EdgeVec.
parser
Filter expression parser for EdgeVec.
strategy
Filter strategy selection for EdgeVec.