Skip to main content

The fastest BM25 information retrieval engine -- Python bindings

Project description

BM25 Turbo

Rust · Python · WASM · CLI

The fastest BM25 scoring engine. Period.

CI License Stars


28,217 queries/second on 8.8 million documents. 8.6ms P50 latency. Precomputed sparse BM25 with BMW pruning, memory-mapped persistence, and zero-copy index loading. Built for RAG pipelines, search applications, and ML workflows.

use bm25_turbo::{BM25Builder, Method};

let index = BM25Builder::new()
    .method(Method::Lucene)       // Robertson, Lucene, ATIRE, BM25L, BM25+
    .k1(1.5).b(0.75)
    .with_bmw(true)               // Enable BMW pruning for large corpora
    .build_from_corpus(&[
        "Rust is a systems programming language",
        "BM25 is a ranking function used in information retrieval",
        "Machine learning models benefit from fast retrieval",
    ])?;

let results = index.search("information retrieval", 10)?;
for (doc_id, score) in &results {
    println!("doc {} → {:.4}", doc_id, score);
}

Why BM25 Turbo?

Most BM25 libraries compute scores at query time — scanning inverted indexes on every request. BM25 Turbo takes the opposite approach: precompute every BM25 score at index time into a compressed sparse column (CSC) matrix. Queries become sparse vector lookups with no math at serving time.

This makes BM25 Turbo the right choice when:

  • You query the same index many times (RAG, reranking, batch evaluation)
  • You need deterministic, reproducible scores (ML pipelines, experiments)
  • You want the simplest possible API (3 lines to index, 1 line to query)
  • You're building a search feature and don't need a full search server

Performance

Benchmarked on MS MARCO (8,841,823 documents, 509,962 queries) — the standard information retrieval benchmark. BMW pruning enabled. Single-threaded.

Query Throughput

Query throughput comparison

Query Latency

Query latency comparison

Scaling Across Corpus Sizes

Latency scaling across corpus sizes

Corpus Documents P50 Latency QPS nDCG@10
SciFact 5,183 67 μs 682,127 0.665
FiQA 57,638 711 μs 50,812 0.254
MS MARCO 8,841,823 8.6 ms 28,217

Sub-millisecond on corpora under 100K docs. On multi-million document corpora, BMW pruning keeps latency competitive with inverted-index engines while maintaining the precomputed scoring advantage for batch workloads.

The Tradeoff

BM25 Turbo front-loads computation: index once, query millions of times. Indexing is slower because every BM25 score is precomputed and compressed into the CSC matrix. But every subsequent query is a sparse vector lookup — no math at serving time.

Features

5 BM25 Scoring Variants

Variant Formula Best For
Robertson Classic BM25 (Okapi) Academic benchmarks
Lucene Apache Lucene's variant Production search (default)
ATIRE IDF without +1 smoothing Research comparisons
BM25L Long document correction Corpora with varying doc lengths
BM25+ Lower-bound term frequency Penalizing non-matching terms

All variants support tunable k1, b, and delta parameters.

BMW (Block-Max WAND) Pruning

Skip non-competitive documents during top-k retrieval. Essential for million-document corpora:

let mut index = BM25Builder::new()
    .with_bmw(true)
    .build_from_corpus(&corpus)?;

// BMW automatically prunes low-scoring blocks
let results = index.search_bmw(10, "distributed systems")?;

BMW partitions the score matrix into blocks and maintains per-block upper bounds. During query evaluation, entire blocks are skipped when their maximum possible contribution can't beat the current k-th best score. This reduces the number of documents touched from millions to thousands.

Memory-Mapped Persistence

Save indexes to disk and reload them instantly with zero-copy memory mapping:

use bm25_turbo::persistence::{save_index, load_index, mmap_index};

// Save (serializes CSC matrix + vocabulary + parameters)
save_index(&index, "my_index.bm25")?;

// Standard load (deserialize into RAM)
let index = load_index("my_index.bm25")?;

// Memory-mapped load (instant, zero-copy, ideal for huge indexes)
let index = unsafe { mmap_index("my_index.bm25")? };

Memory-mapped indexes load in microseconds regardless of size. The OS pages data in on demand — a 10GB index starts serving queries immediately without waiting for the full file to be read.

Streaming Indexer

Index corpora larger than available memory by processing documents in configurable chunks:

use bm25_turbo::streaming::StreamingBuilder;

let index = StreamingBuilder::new()
    .chunk_size(100_000)          // Process 100K docs at a time
    .method(Method::Lucene)
    .build_from_iter(documents)?; // Accepts any Iterator<Item = &str>

Peak memory: O(chunk_size × avg_tokens) instead of O(total_corpus).

Write-Ahead Log (WAL)

Add and delete documents without rebuilding the entire index:

use bm25_turbo::wal::WalIndex;

let mut wal = WalIndex::new(base_index);

// Incremental updates
wal.add_documents(&["new document about Rust"])?;
wal.delete_documents(&[42, 87])?;

// Compact when the WAL grows large
wal.compact()?;

Built-in Tokenizer

17 language stemmers with configurable stopword removal:

use bm25_turbo::tokenizer::{Tokenizer, Algorithm};

let tokenizer = Tokenizer::builder()
    .stemmer(Algorithm::English)
    .stopwords(&["the", "a", "an", "is", "are"])
    .build();

let tokens = tokenizer.tokenize("Running distributed systems at scale");
// → ["run", "distribut", "system", "scale"]

Supported languages: Arabic, Danish, Dutch, English, Finnish, French, German, Greek, Hungarian, Italian, Norwegian, Portuguese, Romanian, Russian, Spanish, Swedish, Turkish.

Distributed Search (gRPC)

Shard large indexes across multiple nodes and query them as one:

use bm25_turbo::distributed::{QueryCoordinator, start_shard_server};

// Start shard servers (one per machine/core)
start_shard_server(shard_index, "[::1]:50051").await?;

// Coordinator fans out queries and merges results
let coordinator = QueryCoordinator::connect(&[
    "http://[::1]:50051",
    "http://[::1]:50052",
]).await?;

let results = coordinator.search("distributed query", 10).await?;

Interfaces

CLI

# Index a corpus
bm25-turbo index --input corpus.jsonl --output index.bm25 --format jsonl --field text

# Search
bm25-turbo search --index index.bm25 --query "information retrieval" -k 10

# Start HTTP server
bm25-turbo serve --index index.bm25 --port 8080

# Push/pull from HuggingFace Hub
bm25-turbo push --index index.bm25 --repo username/my-index
bm25-turbo pull --repo username/my-index --output index.bm25

Supports CSV, JSONL, JSON array, and plain text (one document per line). Auto-detects format when possible.

HTTP Server

$ bm25-turbo serve --index index.bm25 --port 8080
# Search
curl -X POST http://localhost:8080/search \
  -H "Content-Type: application/json" \
  -d '{"query": "machine learning", "k": 10}'

# Health check
curl http://localhost:8080/health

# Index statistics
curl http://localhost:8080/stats

MCP Server (AI Agent Integration)

Expose BM25 search as a tool for AI agents via the Model Context Protocol:

bm25-turbo serve --index index.bm25 --mcp --port 8080

The MCP server exposes two tools:

  • bm25_search — Query the index with configurable top-k
  • bm25_index_stats — Get index metadata (doc count, vocab size)

Works with Claude, ChatGPT, and any MCP-compatible agent framework.

Python Bindings

import bm25_turbo

# Build an index
index = bm25_turbo.build_index(
    ["Rust is fast", "Python is flexible", "BM25 ranks documents"],
    method="lucene",
    k1=1.5,
    b=0.75,
)

# Search
results = index.search("fast programming", k=5)
for doc_id, score in results:
    print(f"  doc {doc_id}: {score:.4f}")

# Save / load
index.save("my_index.bm25")
index = bm25_turbo.load_index("my_index.bm25")

WASM (Browser / Edge)

import init, { WasmBM25Index } from 'bm25-turbo-wasm';

await init();

const index = new WasmBM25Index("lucene", 1.5, 0.75);
index.addDocuments([
    "JavaScript runs everywhere",
    "WebAssembly enables near-native performance",
    "BM25 is a proven ranking algorithm",
]);
index.build();

const results = index.search("native performance", 5);
console.log(results); // [{doc_id: 1, score: 0.82}, ...]

Bundle size: ~1.3 MB (gzipped: ~500 KB). No server needed — runs entirely in the browser.

HuggingFace Hub

Share and discover BM25 indexes on the HuggingFace Hub:

# Push your index
bm25-turbo push --index msmarco.bm25 --repo username/msmarco-bm25-turbo

# Pull someone else's index
bm25-turbo pull --repo username/msmarco-bm25-turbo --output msmarco.bm25

Pre-built indexes for common datasets (MS MARCO, NQ, SciFact, FiQA) can be shared across teams without re-indexing.

Installation

Rust

[dependencies]
bm25-turbo = "0.1"

CLI

cargo install bm25-turbo-cli

Python

pip install bm25-turbo

Requires Python 3.8-3.13. Pre-built wheels for Linux (x86_64, aarch64), macOS (x86_64, aarch64), and Windows (x86_64).

WASM / npm

npm install bm25-turbo-wasm

Architecture

┌─────────────────────────────────────────────────────────┐
│                      BM25 Turbo                         │
├─────────────────────────────────────────────────────────┤
│                                                         │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌────────┐ │
│  │ Tokenizer│  │  Scoring  │  │   CSC    │  │  BMW   │ │
│  │ 17 langs │  │ 5 variants│  │  Matrix  │  │ Pruning│ │
│  └────┬─────┘  └────┬─────┘  └────┬─────┘  └───┬────┘ │
│       │              │             │             │      │
│  ┌────┴──────────────┴─────────────┴─────────────┴────┐ │
│  │              Index Builder / Streaming              │ │
│  └────────────────────┬───────────────────────────────┘ │
│                       │                                  │
│  ┌────────────────────┴───────────────────────────────┐ │
│  │               Persistence Layer                     │ │
│  │        Binary · Memory-Mapped · WAL · Hub           │ │
│  └─────────────────────────────────────────────────────┘ │
│                                                         │
├──────────┬──────────┬──────────┬──────────┬────────────┤
│   CLI    │  HTTP    │   MCP    │  Python  │    WASM    │
│          │  Server  │  Server  │ Bindings │   (npm)    │
└──────────┴──────────┴──────────┴──────────┴────────────┘

How It Works

  1. Tokenize — Split documents into stemmed tokens with configurable stopword removal
  2. Score — Compute BM25 scores for every (term, document) pair using the chosen variant
  3. Compress — Store scores in a Compressed Sparse Column (CSC) matrix (only non-zero entries)
  4. Serve — Queries are sparse vector dot products: look up columns for query terms, accumulate scores, return top-k

The CSC format stores only non-zero BM25 scores. For a corpus of 8.8M documents with 500K vocabulary, this typically compresses to 2-4 GB — far smaller than a dense matrix (which would be ~17 TB).

Configuration

BM25 Parameters

Parameter Default Range Effect
k1 1.5 0.0-3.0 Term frequency saturation. Higher = more weight to repeated terms
b 0.75 0.0-1.0 Length normalization. 0 = no normalization, 1 = full normalization
delta 0.5 0.0-inf BM25L/BM25+ lower bound (only used with those variants)

Choosing a Variant

  • Start with Lucene — It's the most widely used and tested variant
  • Use Robertson if you need exact comparisons with academic papers
  • Use BM25L if your corpus has extreme document length variation
  • Use BM25+ if short queries return too many irrelevant results
  • Use ATIRE if you're reproducing ATIRE research results

Benchmarks

Reproducing Our Numbers

# Clone and build
git clone https://github.com/TheSauceSuite/BM25-Turbo-Rust-Python-WASM-CLI-
cd bm25-turbo
cargo build --release -p bm25-turbo-bench

# Run on SciFact (quick, 5K docs)
cargo run -p bm25-turbo-bench --release --bin beir_bench -- --datasets scifact

# Run on MS MARCO (full, 8.8M docs — requires ~16GB RAM)
cargo run -p bm25-turbo-bench --release --bin beir_bench -- --datasets msmarco --max-queries 1000

Datasets are automatically downloaded from the BEIR benchmark suite. First run may take a few minutes to download.

BEIR Benchmark Results

Dataset Documents Vocab Index Time QPS P50 Latency nDCG@10
SciFact 5,183 19,927 223 ms 682,127 67 μs 0.665
FiQA 57,638 67,893 1.8 s 50,812 711 μs 0.254
MS MARCO 8,841,823 ~500K 66 min 28,217 8.6 ms

MS MARCO nDCG measured on the dev set (6,980 queries). QPS and latency measured on a random sample of 1,000 queries. All benchmarks single-threaded on a consumer desktop.

Use Cases

RAG (Retrieval-Augmented Generation)

BM25 Turbo is ideal as the retrieval stage in RAG pipelines. Index your knowledge base once, then retrieve relevant context for every LLM query:

let context_docs = index.search(&user_question, 5)?;
let context = context_docs.iter()
    .map(|(id, _)| &documents[*id as usize])
    .collect::<Vec<_>>()
    .join("\n\n");
// Feed context to your LLM

Hybrid Search (BM25 + Embeddings)

Combine BM25 lexical scores with dense embedding similarity for best-of-both-worlds retrieval:

// BM25 lexical retrieval
let bm25_results = index.search(query, 100)?;

// Dense retrieval (from your embedding model)
let dense_results = embedding_index.search(query_embedding, 100)?;

// Reciprocal Rank Fusion
let fused = rrf_merge(&bm25_results, &dense_results, k=60);

Batch Evaluation

Score hundreds of thousands of queries against a corpus for ML experiments:

for query in &evaluation_queries {
    let results = index.search(query, 10)?;
    // Compute nDCG, MAP, recall...
}
// At 28K QPS, 500K queries finish in ~18 seconds

Comparison with Other Tools

Feature comparison matrix

BM25 Turbo is not a full-text search engine. It's a focused BM25 scoring library. If you need phrase queries, faceted search, or query DSLs, use Tantivy or Elasticsearch. If you need the fastest possible BM25 scores with the simplest possible API — or you're migrating from bm25s and need 2,000x more speed — use BM25 Turbo.

Contributing

Contributions are welcome! Please see CONTRIBUTING.md for guidelines.

# Run tests
cargo test --workspace --exclude bm25-turbo-wasm

# Run clippy
cargo clippy --workspace --exclude bm25-turbo-wasm -- -D warnings

# Build WASM
cd bm25-turbo-wasm && wasm-pack build --target web

License

Licensed under either of:

at your option.

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

bm25_turbo-0.1.0.tar.gz (157.1 kB view details)

Uploaded Source

Built Distributions

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

bm25_turbo-0.1.0-cp313-cp313-win_amd64.whl (1.0 MB view details)

Uploaded CPython 3.13Windows x86-64

bm25_turbo-0.1.0-cp313-cp313-manylinux_2_34_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.34+ x86-64

bm25_turbo-0.1.0-cp313-cp313-macosx_11_0_arm64.whl (1.0 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

bm25_turbo-0.1.0-cp312-cp312-win_amd64.whl (1.0 MB view details)

Uploaded CPython 3.12Windows x86-64

bm25_turbo-0.1.0-cp312-cp312-manylinux_2_34_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.34+ x86-64

bm25_turbo-0.1.0-cp312-cp312-macosx_11_0_arm64.whl (1.0 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

bm25_turbo-0.1.0-cp311-cp311-win_amd64.whl (1.0 MB view details)

Uploaded CPython 3.11Windows x86-64

bm25_turbo-0.1.0-cp311-cp311-manylinux_2_34_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.34+ x86-64

bm25_turbo-0.1.0-cp311-cp311-macosx_11_0_arm64.whl (1.0 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

bm25_turbo-0.1.0-cp310-cp310-win_amd64.whl (1.0 MB view details)

Uploaded CPython 3.10Windows x86-64

bm25_turbo-0.1.0-cp310-cp310-manylinux_2_34_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.34+ x86-64

bm25_turbo-0.1.0-cp310-cp310-macosx_11_0_arm64.whl (1.0 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

Details for the file bm25_turbo-0.1.0.tar.gz.

File metadata

  • Download URL: bm25_turbo-0.1.0.tar.gz
  • Upload date:
  • Size: 157.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for bm25_turbo-0.1.0.tar.gz
Algorithm Hash digest
SHA256 12c56b14fe7485d5b46161bea99d8a35359c170ce13c8627f43be96a6dfa7379
MD5 f4aebbc2543a40ace1c4b45cafba7c73
BLAKE2b-256 7577a12b7d77186310161facf2b2f81b289b86613c5455f286b1f3248d1b6209

See more details on using hashes here.

File details

Details for the file bm25_turbo-0.1.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: bm25_turbo-0.1.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 1.0 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for bm25_turbo-0.1.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 20d883ca4061af1ecf043a36f9402d0475bce55254492c489e80be42246789a1
MD5 39ffdadabd6cf4d26e2dd80b457e6d85
BLAKE2b-256 8153721c58348a0cdfce83327d3a73a2cdcc8d90a4dcbd92926df1378509fd6f

See more details on using hashes here.

File details

Details for the file bm25_turbo-0.1.0-cp313-cp313-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for bm25_turbo-0.1.0-cp313-cp313-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 05bc13db21bf9d750c298c9e6dcfc7082fc0d9959c8cbb88302a462161a4b03a
MD5 d06be1f89132e20f46c48448bd11656b
BLAKE2b-256 6d968fec86d7dd6cb978be5de48cff10ef230807b2b6dc95e80b300c46a1c8c9

See more details on using hashes here.

File details

Details for the file bm25_turbo-0.1.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for bm25_turbo-0.1.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f83b909df6e93df51cf3a771b3d9187bad4650824f03cf50e32fc00da7f3243a
MD5 5009fe08038b5a66782f14f0161effe0
BLAKE2b-256 355b348a87493719c801a66f5799fc55cda47e03ccaad5e681a09390599125a3

See more details on using hashes here.

File details

Details for the file bm25_turbo-0.1.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: bm25_turbo-0.1.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 1.0 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for bm25_turbo-0.1.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 db31d6c60f00f545413421042b77b2cecd8b3165b3c40bd41b076fa934baf94d
MD5 d97a9a1a1a59b7f862511c8226e93677
BLAKE2b-256 124f967101ef9c2245322da991c2198fe0ec6eadd48c09875c79b2426ce07f77

See more details on using hashes here.

File details

Details for the file bm25_turbo-0.1.0-cp312-cp312-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for bm25_turbo-0.1.0-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 be994bf0b5e22f39a97d30b95fe8ed38b13029777513d33b3f5316fb81d52b2c
MD5 c224289cf933b04a416a587e4b4903ec
BLAKE2b-256 b239448759927be38ec9278e9cb11f61396065386a6a9c7ba6fdca1cf14e39f3

See more details on using hashes here.

File details

Details for the file bm25_turbo-0.1.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for bm25_turbo-0.1.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 fe7899d0d7b10bcc13d4a9c0d0be59557007f24f6d811c18521d757009c3710a
MD5 8bbe9495c18e1d9601a0af8c1007a9a2
BLAKE2b-256 5990650628aee4cf27d2a4b7cb396ff033ba4d2860e3f35b4be40f9d65cdf4d4

See more details on using hashes here.

File details

Details for the file bm25_turbo-0.1.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: bm25_turbo-0.1.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 1.0 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for bm25_turbo-0.1.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 3a618fc2496df29bec4c5ce37a72aff30180b341f882b1ee53ad985cd9760d51
MD5 5e36bd8bf8372d8dd9cc00f66c467ba8
BLAKE2b-256 a7cc43e8ed4b8bfe9905688971d0706461c21b13fd7263dee6390e0be5c620c9

See more details on using hashes here.

File details

Details for the file bm25_turbo-0.1.0-cp311-cp311-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for bm25_turbo-0.1.0-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 4f173b8eb4c0ad64a764b3f8b4db609fb6b9ffd9ac9a3deae91658a97d371825
MD5 601c0fae376ef50d62f86b08c3589eb7
BLAKE2b-256 432a218ee18217eedc4ec70a79e68966555c346afa141d5cb519c7ebbc007af3

See more details on using hashes here.

File details

Details for the file bm25_turbo-0.1.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for bm25_turbo-0.1.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6f272b03018bb1233ca5fbf66279f13c44bc7c8b81c72f570f7bf322b8e1ae7a
MD5 33cefdaf0aac61c0fd228c58029ce38e
BLAKE2b-256 3ba177e39a966436ce948a166f2d683218dd921c43b74a102eae0da1f8b557bf

See more details on using hashes here.

File details

Details for the file bm25_turbo-0.1.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: bm25_turbo-0.1.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 1.0 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for bm25_turbo-0.1.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 83edf367bdafa2e4fc30c615dbfa3d785b340f326a4468f9873bfd707e224571
MD5 a116d4f6c72157060ccd791bbaa4ffba
BLAKE2b-256 31eb6856b8d2052bfb68217e1df297398c1269bbae2512757b83d0bbef01ba0a

See more details on using hashes here.

File details

Details for the file bm25_turbo-0.1.0-cp310-cp310-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for bm25_turbo-0.1.0-cp310-cp310-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 8d079f744a842c3cdf558728f54075b557ae14ec63cb69aa1e87e504c04a8130
MD5 3334aa2d25ac3f6b8dc6474a455b07db
BLAKE2b-256 9d4292a43c4a89970a95e24aa55e7ac49e116b47c2bd2ddc5812289950d9b981

See more details on using hashes here.

File details

Details for the file bm25_turbo-0.1.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for bm25_turbo-0.1.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8999f117e59aba9612a1749baf659472b31e172d8c1937b7ba7c6df6d2283925
MD5 1ac5afcb6dc4308cf03d89f6a884749f
BLAKE2b-256 d2a4048d179135080124edaad2ef19049ebd84632812ec9dc491d7dd1b2fe687

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