2026.08.31 — v1.2.0
v1.2.0
Added
- Multi-predicate index-seek intersection. A structured query with several has() filters now seeks every indexed predicate and intersects the matching id sets, instead of seeking one and scanning every seeded vertex for the rest. Filtered searches that ran for multiple seconds return in <100 ms on a 70k-vertex graph. The optimization is order-independent — it fires whether hasLabel() or a has() comes first — and any predicate on a non-indexed key falls back to a per-survivor residual check. Single-predicate and bare hasLabel() paths are unchanged.
Fixed
- has(key, lt(x)) and has(key, lte(x)) on an indexed property returned no rows — the index cursor was positioned past every matching entry before the scan began. It now walks the property's key range from the start and stops at the boundary; lte includes the boundary value. gt/gte/between/inside were already correct.