bm25s

用 Numpy 加速的 BM25 检索,快如闪电,轻松集成 RAG。

bm25s 是一个基于 Python 的快速 BM25 搜索引擎库,利用 Numpy 和 Numba 实现高性能的文本检索。它解决了传统 BM25 实现在处理大规模语料时速度慢、内存占用高的问题,通过稀疏矩阵存储和向量化计算,显著提升索引构建和查询速度。核心能力包括:支持多种 BM25 变体(如 BM25+、BM25L)、内置分词器、支持中英文等多语言、提供简单易用的 API 用于索引和检索、支持从 Hugging Face 数据集直接加载语料、可导出为内存映射格式以节省内存。bm25s 特别适合作为 RAG(检索增强生成)系统的检索组件,或用于中小规模文档集的快速搜索。

开源 free 搜索知识
访问官网 ↗ GitHub ↗ 文档 ↗
GitHub 星标 ★ 1790
维护状态 活跃
是否开源 是
定价模式 free

项目数据

分类搜索知识
开发团队xhluca
所属国家
定价模式free
价格说明开源项目,MIT许可证,完全免费,无付费版本。
访问状态
是否开源是
开源协议MIT
主要语言Python
技术栈/模型bm25,bm25-l,bm25-plus,information-retrieval,lexical-search,okapi-bm25,rag,retrieval,robertson,search
GitHub 星标★ 1790
30天Star增速
HF 下载量
上线时间2024-04-10 00:00:00
最近更新2026-09-22 00:00:00
维护状态活跃
中文支持
访问方式
移动端支持
综合评分
收录时间2026-08-09
浏览次数2

使用教程

难度:入门 约 10 分钟 部署方式:库/依赖 7 步

环境要求

  • Python 环境(README 未指定最低版本,建议 3.9+)
  • pip 或 uv 包管理工具
  • 如需 MCP 服务接入 Claude Desktop,需安装 uv 并准备好本地索引目录
  • 如需低内存检索,磁盘可存放导出的索引文件

安装与启动步骤

  1. 1安装 bm25s

    用 pip 安装 bm25s 本体,这是最小安装,只包含 numpy 等最基础依赖。

    pip install bm25s
  2. 2安装核心依赖

    README 强烈推荐,包含 json 加载、进度条、词干提取与 JIT 编译等核心能力。

    pip install "bm25s[core]"
  3. 3可选安装词干提取

    如果只想用词干提取提升检索效果,可单独安装 PyStemmer。

    pip install PyStemmer
  4. 4可选安装全部扩展

    安装所有额外依赖,体积更大但功能最全;也可单独装 CLI 扩展获得彩色交互选择器。

    pip install "bm25s[full]"
    pip install "bm25s[cli]"
  5. 5验证导入

    导入 bm25s 不报错即表示库安装成功;若失败请检查 Python 环境与 pip 版本。

    python -c "import bm25s"
  6. 6加载索引检索

    用 BM25HF 从 Hugging Face Hub 加载索引与语料,mmap=True 走内存映射以显著降低内存占用。

    import bm25s
    import Stemmer  # optional: for stemming
    
    retriever = bm25s.BM25HF.load_from_hub(
        f"{user}/bm25s-animals", load_corpus=True, mmap=True
    )
  7. 7配置 MCP 服务

    先安装 mcp 扩展,再把配置写入 Claude Desktop 的 claude_desktop_config.json,路径需全部替换为绝对路径。

    uv pip install "bm25s[mcp]"

关键配置

配置项必填说明示例
mcpServers.bm25s.command是uv 可执行文件的绝对路径,终端执行 which uv 获取/absolute/path/to/uv
mcpServers.bm25s.args是启动 bm25 MCP 服务的参数数组["--directory", "/ABSOLUTE/PATH/TO/PARENT/FOLDER/bm25s", "ru
--index-dir是MCP 服务读取的 BM25 索引所在目录/absolute/path/to/your/index
load_corpus否load_from_hub 时是否同时加载语料True
mmap否是否以内存映射方式加载索引,用于节省内存True

如何确认成功

终端执行 python -c "import bm25s" 无报错即安装成功;能加载他人共享的 BM25HF 索引并返回检索结果说明可用。

常见问题

Q:应该装哪个安装命令?

A:先用 pip install bm25s 即可跑通;README 推荐再装 pip install "bm25s[core]",它包含 json 加载、进度条、词干提取与 JIT 编译等核心依赖。

Q:想要更好的检索效果怎么办?

A:安装词干提取器 pip install PyStemmer,并在代码中 import Stemmer,然后在索引/检索时启用词干提取。

Q:大索引内存占用太高怎么办?

A:加载索引时设置 mmap=True 使用内存映射。README 在 NQ、MSMARCO 数据集上显示该方式可将加载后内存从数 GB 降到 1GB 左右。

Q:怎么让 Claude Desktop 用上 bm25s?

A:安装 bm25s[mcp],在 claude_desktop_config.json 的 mcpServers 中加入 bm25s 条目,command 指向 uv 绝对路径,args 中指定项目目录与 --index-dir。

注意事项

  • README 的 Quickstart 代码片段不完整,完整 API 用法请参考官网 bm25s.github.io 与仓库示例目录。
  • f"{user}/bm25s-animals" 中的 {user} 需替换为实际的 Hugging Face 用户或组织名。
  • 磁盘占用参考:仅 bm25s 约 51MB,安装 bm25s[core] 约 188MB,远小于 pyserini(约 6976MB)。
  • MCP 配置中的目录与 uv 路径必须写成绝对路径,克隆到哪就以哪为准。

核心亮点

  • 索引构建和查询速度比传统 BM25 库快数倍,内存占用更低
  • 支持 BM25+、BM25L 等变体,适配不同检索场景
  • API 简洁,支持从 Hugging Face 数据集直接加载,便于快速实验

不足之处

  • 依赖 Numba,初次编译有额外开销,且对 Python 版本兼容性有限
  • 文档和社区生态相对薄弱,高级用法需自行摸索

适用场景

  • RAG 系统中的文档检索模块
  • 中小规模文档集的快速关键词搜索
  • 学术研究中 BM25 基线对比实验

替代项目

rank-bm25、Elasticsearch、Whoosh

项目介绍

bm25s 是搜索知识领域的开源项目,由 xhluca 开发,2024 年首次发布。

在全站 13,090 个收录项目中,它的 GitHub 星标数(1,790)位列前 30%,在搜索知识分类中处于中上游。

近 42 天,它的 GitHub 星标从 1,763 增加到 1,790,净增 27。

项目目前处于活跃维护状态,最近一次代码更新于 2026-09-22。MIT许可证,完全免费,无付费版本。

它主要面向的使用场景是:RAG系统中的文档检索模块。同类可对比的替代方案包括 rank-bm25、Elasticsearch、Whoosh。

上一篇:RAG-Survey

下一篇:raptor

同类项目推荐

firecrawl 开源

网页抓取像喝水一样简单,开发者省下整周加班

The web data API to search, scrape, and interact at scale.

★ 183325 2026-08-09
contoso-chat 开源

一键跑通 Azure RAG 应用,从代码到评估部署全流程

This sample has the full End2End process of creating RAG application with Prompty an···

★ 766 2026-08-09
graphify 开源

整个代码库画成一张图,找问题一眼定位

Turn any codebase, with its docs, SQL schemas, configs, and PDFs, into a queryable k···

★ 120493 2026-08-09
ragflow 开源

让大模型用上你的私有知识,搭建可靠的企业级RAG应用

RAGFlow is a leading open-source Retrieval-Augmented Generation (RAG) engine that fu···

★ 91170 2026-08-09