Typed query expressions (query algebra) for retrieval systems.
- Associativity:
And/Orare n-ary and associative. Flattening is allowed. - Duplicates:
And([A, A])is semantically equivalent toAnd([A])(set semantics), but the AST preserves them. - Empty:
And([])isTrue(universe);Or([])isFalse(empty set).
This crate is intentionally not a parser. Parsing is product-specific. The goal here is a small, stable AST for query meaning that multiple systems can compile into their own execution plans.
[dependencies]
qexpr = "0.1.0"Example:
use qexpr::{Near, Phrase, QExpr, Term};
let q = QExpr::And(vec![
QExpr::Term(Term::new("alpha")),
QExpr::Phrase(Phrase::new(vec![Term::new("new"), Term::new("york")])),
QExpr::Near(Near::new(vec![Term::new("deep"), Term::new("learning")], 5, false)),
]);
qexpr::validate(&q).unwrap();cargo test