Whoosh:纯 Python 全文搜索库

Whoosh 在 GitHub 上拿到 661 Star。

这是一个用纯 Python 实现的全文索引和搜索库。开发者可以用它给应用或网站加上搜索功能,而且每个组件都能按需扩展或替换。

正文顶部截图

1、这玩意儿是干嘛的

Whoosh 只做一件事:全文搜索。你给文档建立索引,然后按关键词检索,它返回按相关性排序的结果。

跟 Java 生态里的 Lucene 类似,但 Whoosh 完全用 Python 写成。不需要编译,不需要处理二进制依赖,pip 装完就能用。索引文件也是纯文本格式,出问题可以直接打开看。

README区域截图

2、为什么要用它

做过搜索功能的人都知道,接入 Solr 或 Elasticsearch 意味着要维护一套独立服务。部署、调优、监控,每一项都是成本。

Whoosh 走的是另一条路:纯 Python,零外部依赖,直接集成进项目。你的应用不需要额外部署 JVM,不需要配置集群,几行代码就能跑起来搜索。

对于中小型项目,或者不想引入重型基础设施的场景,这种轻量方案更实际。而且因为是纯 Python,遇到 bug 可以自己跟代码,不需要翻 C 扩展的调用栈。

3、核心特性

Whoosh 的能力覆盖面很全:

  • Pythonic API,写起来自然
  • 纯 Python,无需编译
  • 支持字段化索引和搜索
  • 可插拔评分算法,包括 BM25F
  • 支持文本分析、存储、posting 格式定制
  • 查询语言功能完整
  • 自带纯 Python 拼写检查

索引和检索速度在纯 Python 方案里算快的。BM25F 这种现代评分算法的支持,也让它在相关性排序上不落后。

4、安装使用

用 pip 直接装:

pip install Whoosh

快速示例,创建索引并搜索:

from whoosh.index import create_in
from whoosh.fields import *
from whoosh.qparser import QueryParser

schema = Schema(title=TEXT(stored=True), path=ID(stored=True), content=TEXT)
ix = create_in("indexdir", schema)

writer = ix.writer()
writer.add_document(title="First doc", path="/a", content="Hello world")
writer.commit()

with ix.searcher() as searcher:
    query = QueryParser("content", ix.schema).parse("hello")
    results = searcher.search(query)
    print(results[0]['title'])

字段定义、分析器、评分函数都可以替换。默认配置能跑,想深入定制也有接口。

5、适合哪些人用

  • 需要给 Python 项目加搜索功能,又不想引入外部服务的开发者
  • 在纯 Python 环境里工作,无法或不想装 Java 依赖的团队
  • 把搜索当研究平台用,需要灵活替换底层算法的人
  • 做教学或原型验证,希望代码好读懂、好修改的场景

这个项目最初由 Matt Chaput 开发,最早是给 Side Effects Software 的 Houdini 软件做在线帮助系统的搜索。后来公司同意开源,代码以 BSD 协议放出。虽然 Star 数不算高,但代码质量和设计思路在 Python 搜索库里是值得一提的。

做在线帮助系统的搜索。后来公司同意开源,代码以 BSD 协议放出。虽然 Star 数不算高,但代码质量和设计思路在 Python 搜索库里是值得一提的。

更多推荐