Expand description
§rUvector Filter
Advanced payload indexing and filtering for rUvector.
This crate provides:
- Flexible filter expressions (equality, range, geo, text, logical operators)
- Efficient payload indexing (integer, float, keyword, boolean, geo, text)
- Fast filter evaluation using indices
- Support for complex queries with AND/OR/NOT
§Examples
§Creating and Using Filters
use ruvector_filter::{FilterExpression, PayloadIndexManager, FilterEvaluator, IndexType};
use serde_json::json;
// Create index manager
let mut manager = PayloadIndexManager::new();
manager.create_index("status", IndexType::Keyword).unwrap();
manager.create_index("age", IndexType::Integer).unwrap();
// Index some payloads
manager.index_payload("v1", &json!({"status": "active", "age": 25})).unwrap();
manager.index_payload("v2", &json!({"status": "active", "age": 30})).unwrap();
manager.index_payload("v3", &json!({"status": "inactive", "age": 25})).unwrap();
// Create filter
let filter = FilterExpression::and(vec![
FilterExpression::eq("status", json!("active")),
FilterExpression::gte("age", json!(25)),
]);
// Evaluate filter
let evaluator = FilterEvaluator::new(&manager);
let results = evaluator.evaluate(&filter).unwrap();
assert_eq!(results.len(), 2);§Geo Filtering
use ruvector_filter::{FilterExpression, PayloadIndexManager, FilterEvaluator, IndexType};
use serde_json::json;
let mut manager = PayloadIndexManager::new();
manager.create_index("location", IndexType::Geo).unwrap();
manager.index_payload("v1", &json!({
"location": {"lat": 40.7128, "lon": -74.0060}
})).unwrap();
// Find all points within 1000m of a location
let filter = FilterExpression::geo_radius("location", 40.7128, -74.0060, 1000.0);
let evaluator = FilterEvaluator::new(&manager);
let results = evaluator.evaluate(&filter).unwrap();Re-exports§
pub use error::FilterError;pub use error::Result;pub use evaluator::FilterEvaluator;pub use expression::FilterExpression;pub use index::IndexType;pub use index::PayloadIndex;pub use index::PayloadIndexManager;