ruvector/crates/ruvector-hybrid
rUv e188a613a9
research(nightly): hybrid sparse-dense search — BM25 + ANN with RRF and RSF (ADR-256) (#576)
* research: add nightly survey for hybrid-sparse-dense

Three-pass research survey selecting hybrid sparse-dense (BM25 + ANN +
RRF/RSF) as nightly topic.  Covers SOTA, gap analysis vs. ruvector-core,
industry comparison (Qdrant, Weaviate, Milvus, Vespa, LanceDB), practical
and exotic applications, deep research notes, benchmark methodology, and
full reference list.

Co-Authored-By: claude-flow <ruv@ruv.net>
Claude-Session: https://claude.ai/code/session_01NFp4fjSarGCp2xpqJtqP2Z

* feat: add ruvector-hybrid crate with BM25 + ANN + RRF/RSF fusion

New standalone crate implementing three hybrid sparse-dense search
strategies: ScoreFusion (backward-compat with ruvector-core), RRF
(Cormack 2009, k=60, rank-only), and RSF (Weaviate-style per-list
min-max + configurable α).

BM25 pre-computes TF at index time (O(|q|×P) query) fixing the
re-tokenisation-at-query-time bug in ruvector-core (O(N×|d|)).

Benchmark: 10K docs × 128-D, 20 topics, 500 queries, k=10.
  BM25:  77.3% recall@10,  57,174 QPS
  RSF:   76.6% recall@10,     360 QPS
  RRF:   50.5% recall@10,     360 QPS
  Score: 68.8% recall@10,     357 QPS
  Dense:  7.5% recall@10,     371 QPS

No unsafe code. Compiles to WASM. 19 unit tests.

Co-Authored-By: claude-flow <ruv@ruv.net>
Claude-Session: https://claude.ai/code/session_01NFp4fjSarGCp2xpqJtqP2Z

* docs: add ADR-256 for hybrid sparse-dense search (RRF and RSF)

Architecture Decision Record for adding Reciprocal Rank Fusion and
Relative Score Fusion to RuVector's hybrid search infrastructure.

Documents: gap in ruvector-core (global normalisation + re-tokenisation
bug), industry comparison, benchmark evidence, three-phase implementation
plan, failure modes, security considerations, and migration path.

Status: proposed. PoC in crates/ruvector-hybrid.

Co-Authored-By: claude-flow <ruv@ruv.net>
Claude-Session: https://claude.ai/code/session_01NFp4fjSarGCp2xpqJtqP2Z

* docs: add SEO gist for hybrid-sparse-dense research

Public technical article covering RRF and RSF hybrid search fusion in
Rust.  Includes feature comparison table, Mermaid architecture diagram,
real benchmark results, comparison with 9 vector databases, 8 practical
+ 8 exotic applications, deep research notes on BM25 dominance and
normalisation theory, usage guide, optimization guide, and roadmap.

Co-Authored-By: claude-flow <ruv@ruv.net>
Claude-Session: https://claude.ai/code/session_01NFp4fjSarGCp2xpqJtqP2Z

* fix(ruvector-hybrid): clippy + fmt for CI

- centres[t] loop index → iter().enumerate()
- percentile cast: drop .max(0) (usize is never negative, clippy::unnecessary_min_or_max)
- percentile cast: #[allow] remaining cast lints (intentional saturating cast)
- print_row: &mut Vec → &mut [_]
- fusion.rs: 3.14 → 3.0 (clippy::approx_constant)
- cargo fmt on entire crate

Co-Authored-By: claude-flow <ruv@ruv.net>

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: ruvnet <ruvnet@gmail.com>
2026-06-18 23:28:08 -04:00
..
src research(nightly): hybrid sparse-dense search — BM25 + ANN with RRF and RSF (ADR-256) (#576) 2026-06-18 23:28:08 -04:00
Cargo.toml research(nightly): hybrid sparse-dense search — BM25 + ANN with RRF and RSF (ADR-256) (#576) 2026-06-18 23:28:08 -04:00