Skip to main content

Utility suite for sparse vectorization and document reranking using zvec

Project description

zvec-db

Version Python 3.12+ License Documentation ![Tests](https://img.shields.io/badge/tests-464+ passed-brightgreen.svg)

Sparse/dense vectorization and document reranking toolkit for zvec.

zvec-db provides:

  • 🚀 Hybrid search - Combine sparse (BM25) and dense (semantic) vectors with full-text search
  • 🔄 Score fusion - Weighted fusion and Reciprocal Rank Fusion (RRF)
  • 🎯 Cross-encoder reranking - Two-stage retrieval with local or API-based rerankers
  • 📦 6 sparse embedders - BM25, BM25L, BM25+, TF-IDF, Count, DisMax
  • 🔧 Normalization - Bayesian, minmax, percentile, and arctan-based normalization
  • Native fast path - C++ acceleration for fusion rerankers

Quick Start

pip install zvec-db

Complete Example: Hybrid Search with RerankPipeline

from zvec_db import search, RerankPipeline, ScoreNormalizer, WeightedReranker
from zvec_db.rerankers import SentenceTransformerReranker
from zvec_db.embedders import BM25Embedder, SentenceTransformersEmbedder
import zvec

# 1. Open collection and initialize embedders
collection = zvec.open("./my_collection")
bm25 = BM25Embedder(max_features=4096).load("./bm25.joblib")
dense = SentenceTransformersEmbedder(model_name="all-MiniLM-L6-v2")

# 2. Create rerank pipeline with auto-detection from schema
reranker = RerankPipeline(
    normalizer=ScoreNormalizer(
        method="bayes",
        schema=collection.schema,  # Auto-detect metrics (COSINE, L2, IP)
    ),
    fusion=WeightedReranker(
        weights={"sparse": 0.5, "dense": 0.3, "text": 0.2},
        topk=16,  # Top 16 after fusion
    ),
    cross_encoder=SentenceTransformerReranker(
        model_name="cross-encoder/ms-marco-MiniLM-L-6-v2",
        topk=8,  # Top 8 after cross-encoder
    ),
)

# 3. Search with full pipeline
results = search(
    collection=collection,
    query="neural networks",
    sparse_fields={"sparse": bm25},
    dense_fields={"dense": dense},
    fts_fields="text",
    reranker=reranker,
    topk=32,  # Fetch 32 candidates
)

for doc in results:
    print(f"{doc.fields['text']} (score: {doc.score:.4f})")

Simple Search (No Reranking)

from zvec_db import search

results = search(
    collection=collection,
    query="neural networks",
    sparse_fields={"sparse": bm25},
    dense_fields={"dense": dense},
    topk=10,
)

Custom Fusion Only

from zvec_db.rerankers import WeightedReranker

# List weights enable C++ fast path (2-5x faster)
reranker = WeightedReranker(weights=[0.7, 0.3])

results = search(
    collection=collection,
    query="neural networks",
    sparse_fields={"sparse": bm25},
    dense_fields={"dense": dense},
    reranker=reranker,
)

API Reference

search() Parameters

Parameter Type Description
collection zvec.Collection Collection to search
query str Query text
sparse_fields dict[str, Embedder] Sparse fields (e.g., {"sparse": bm25})
dense_fields dict[str, Embedder] Dense fields (e.g., {"dense": dense})
fts_fields str | list[str] FTS fields
reranker Reranker Reranker instance
topk int Results to return
output_fields list[str] Fields to include

Reranker Types

Type Description
WeightedReranker(weights={...}) Weighted fusion
RrfReranker() Reciprocal Rank Fusion
SentenceTransformerReranker() Cross-encoder
RerankPipeline(normalizer=..., fusion=..., cross_encoder=...) Full pipeline

Embedders

Sparse (lexical): BM25Embedder (recommended), BM25LEmbedder, BM25PlusEmbedder, TfidfEmbedder, CountEmbedder, DisMaxEmbedder

Dense (semantic): SentenceTransformersEmbedder, OpenAIEmbedder, VllmEmbedder

from zvec_db import BM25Embedder, SentenceTransformersEmbedder

bm25 = BM25Embedder(max_features=4096).load("./bm25.joblib")
dense = SentenceTransformersEmbedder(model_name="all-MiniLM-L6-v2")

bm25.save("bm25.joblib")

Rerankers

Fusion: WeightedReranker (weighted sum), RrfReranker (rank-based)

Cross-Encoder: SentenceTransformerReranker, OpenAIReranker

Pipeline: RerankPipeline (normalization + fusion + cross-encoder)

from zvec_db import RerankPipeline, ScoreNormalizer, WeightedReranker
from zvec_db.rerankers import SentenceTransformerReranker

# Full pipeline with schema auto-detection
pipeline = RerankPipeline(
    normalizer=ScoreNormalizer(method="bayes", schema=collection.schema),
    fusion=WeightedReranker(weights={"sparse": 0.7, "dense": 0.3}),
    cross_encoder=SentenceTransformerReranker(topk=10),
)

Performance tip: Use list weights for C++ fast path: WeightedReranker(weights=[0.7, 0.3])


Documentation


License

MIT License

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

zvec_db-0.12.0.tar.gz (80.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

zvec_db-0.12.0-py3-none-any.whl (101.9 kB view details)

Uploaded Python 3

File details

Details for the file zvec_db-0.12.0.tar.gz.

File metadata

  • Download URL: zvec_db-0.12.0.tar.gz
  • Upload date:
  • Size: 80.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for zvec_db-0.12.0.tar.gz
Algorithm Hash digest
SHA256 ee63b22e84645b5ea04460bd4c327b25402fb644248dfc67dc2bae50d60332fd
MD5 e2f12f873ec66a1ba0b29c1136244fee
BLAKE2b-256 44428f0a97ae7b2cca4575b961012b0ebf4d23fc55f96dc1642f87f341ec5bba

See more details on using hashes here.

File details

Details for the file zvec_db-0.12.0-py3-none-any.whl.

File metadata

  • Download URL: zvec_db-0.12.0-py3-none-any.whl
  • Upload date:
  • Size: 101.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for zvec_db-0.12.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3edfcbaed3ce18714f242642eebaf222ae3e6b038857895e693133213fc26e2b
MD5 2db8c35369691e59e7648afc89ad35db
BLAKE2b-256 9914b7b588d9e246c4533919515ca17c40316f9d26f1ba074f3b2160f9cbd9a1

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page