关于 dowse
dowse 是面向 Windows 的开源本地全文搜索工具,可索引文件名、文档正文、代码及截图中的文字。它使用 jieba 进行中文分词,并通过 MCP 服务向 AI Agent 开放只读搜索。
主要功能
- 01文件名与文档内容的持久索引
- 02PDF、Office 与代码文本搜索
- 03离线图片 OCR(Windows.Media.Ocr)
- 04jieba 中文分词与 GBK 编码检测
- 05增量索引与文件监视
- 06只读 MCP 服务(search、preview 等工具)
适用场景
- 01在 Windows 本地查找包含特定中文词语的文档
- 02检索截图中的文字内容
- 03让 AI Agent 在本机索引中搜索并读取文件片段
MCP 相关
dowse 通过 dowse mcp 以 stdio 方式运行只读 MCP 服务,向客户端暴露 search、preview、read_file_chunk 和 index_status 等工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
English | 简体中文 | 日本語 | 한국어 | Español | Italiano
dowse
面向 Windows 的开源本地文件内容搜索工具。通过一个热键,即可查找文件名、PDF 和 Office 内容、源代码以及截图中的文字。
网站 · 英文产品页面 · Windows 文件内容搜索指南(中文)
这个名字源自探测棒。

动机
目前没有任何 Windows 工具能同时满足以下三点:
- 持续维护文件内容索引,而不只是文件名(Everything 可以按需扫描内容,但其即时索引主要针对名称和路径)
- 无需 Copilot+ 设备,就能在普通 Windows 电脑上识别并索引图像中的文字
- 一个热键即可唤出,全键盘操作,几乎感觉不到延迟
最接近的开源实现是 sist2,但它面向 Linux(在 Windows 上只能通过 Docker 运行),会将中文文本视为三元组,而且该项目已停止维护。dowse 是一款原生 Windows 实现,围绕这三点构建。
功能
| 🔍 文件名搜索 | 即时搜索,输入时实时显示结果 |
| 📄 文档内容搜索 | 纯文本、Markdown、代码和文档格式(PDF、Word、Excel、PowerPoint) |
| 🖼️ 截图 / 图像 OCR | 完全离线识别 PNG/JPG/WebP/BMP 图像中的文字(Windows.Media.Ocr) |
| 🈶 中文分词 | jieba + BM25 排名,而非三元组;并自动检测 GBK 编码 |
| ⚡ 增量索引 | 运行时监视文件变化,启动时根据修改时间和文件大小进行核对 |
| 🤖 MCP 服务 | 通过 stdio 向 AI Agent 提供本地搜索功能 |
| 🚀 NTFS 快速通道 | 枚举 MFT + USN Journal,仅限管理员使用;否则会自动回退 |
dowse 与其他选择的比较
| dowse | Everything | Windows Search | sist2 | |
|---|---|---|---|---|
| 文件名搜索 | ✓ | ✓ | ✓ | ✓ |
| 文档内容搜索 | ✓(持久化索引) | 按需扫描 | 取决于已索引的位置和筛选条件 | ✓ |
| 截图 / 图像 OCR | ✓ | ✗ | 取决于设备 / 版本 | 有限(可选 Tesseract) |
| 正确的中文分词 | ✓(jieba) | — | 有限 | ✗(三元组) |
| 完全本地运行,不联网 | ✓ | ✓ | ✓ | ✓ |
| 全局热键浮层 | ✓ | ✓ | ✓(Win 键) | ✗(Web 界面) |
| 原生支持 Windows | ✓ | ✓ | ✓ | ✗(优先支持 Linux,在 Windows 上使用 Docker) |
中文文本处理
- 通过 jieba 进行分词,使用 BM25(tantivy 引擎)进行排序。不使用三元组。
- 自动检测文件编码(chardetng)。GBK 编码的文件会在索引前正确解码——这很重要,因为 Windows 上大量中文文档,尤其是较早的文档,仍以 GBK 而非 UTF-8 保存;假定文件为 UTF-8 的搜索工具会在不提示的情况下错误建立索引或造成乱码。
- 多词查询默认采用 AND 语义。带引号的短语查询会按精确位置匹配。内联运算符可进一步缩小范围:
path:reports、mtime:>2026-01-01、size:>10mb、在组之间使用大写OR、使用-term排除词项。 - OCR 使用 Windows 原生引擎(Windows.Media.Ocr),完全离线运行。zh-Hans 语言包也支持中英混合文本,无需额外配置。
性能
设计目标;超过目标视为缺陷。“实测”指从零开始运行 dowse 0.7.0 的基准测试(i7-13700K / 24 个逻辑核心 / 64GB RAM,单台机器,单个会话,2026-07-12),并复用 v0.6.1 第 3 轮基准测试中的逐字节相同语料,以便直接比较。完整原始输出(索引/搜索日志、JSON 结果文件)保存在基准测试工作目录中,未纳入此仓库。
| 指标 | 设计目标 | 实测(v0.7.0,2026-07-12) |
|---|---|---|
| 热键到窗口可见 | < 50ms | 未测量——仅 CLI 基准测试,未对叠加应用进行仪器化 |
| 按键到结果呈现 | < 80ms | 未测量——同上 |
| OCR,单张图片 | ~112ms / 1080p 截图 | 单独测量约 170ms(480×200 合成图片),与 v0.6.1 相同——本次发布未修改 OCR 流水线。对同一图片立即重复运行时,读数低于 30ms,反映的是 OS 级识别缓存,而非实际识别,因此不计入此处。并非实际 1080p 截图 |
| 常驻内存 | 空闲时 < 150MB | 未测量(空闲时);全语料索引期间的峰值工作集约为 327MB——这是不同的指标,与空闲目标相比并非性能回退 |
| 安装程序大小 | < 50MB(2026-07 修订——原始的 15MB 目标早于捆绑 CLI sidecar) | 14.98MB(dowse-app_0.9.0_x64-setup.exe,已发布版本) |
| 全文索引构建,10,000 个文件 / 437MB | 数秒(计划中的仅文件名快速路径) | 10.0–10.6s——当前的全内容 dowse index,并非计划中的仅文件名 MFT 路径 |
| 全文索引构建 + OCR,15,100 个文件(含 5,100 张图片) | — | 首次扫描约 46.6s,同一轮中已对全部 5,100/5,100 张图片完成 OCR——无待处理项,无需第二轮 |
| 搜索延迟,P50(5 个必测类别) | — | 在 15,100 个文档的索引上,单词 / 中文短语 / 英文短语 / 多词 AND / 无结果,延迟为 30.7–161.1ms |
| 搜索延迟,P95 | — | 39.1–172.3ms,相同的 5 个类别 |
ext: 筛选查询延迟 | — | P50 为 155.6ms,与有结果查询类别的区间相同 |
| 索引大小 ÷ 语料大小 | — | 0.36(纯文本),低于 v0.6.1 该轮的 0.54 |
全语料测试行使用与上述 v0.6.1 第 3 轮数据相同的 10,000 个文件 / 437.66MB 文本语料,加上 5,100 张合成的 480×200 OCR 图片(89.8MB);语料逐字节相同,直接复用而非重新生成。与 v0.6.1 相比,索引速度约快 2 倍,磁盘上的文本索引约小三分之一;这两项都与新分词器的效果相符(小写规范化、按拉丁词的字母数字边界拆分),从而生成更精简的词项字典。无结果查询从 135ms(v0.6.1)降至受启动噪声影响的 31ms,这与扫描更少的索引后即可确认词项不存在相符。本次发布的 OCR 识别速度没有变化,因为流水线未作改动:单张图片识别仍约为 170ms,对相同图片重复运行时低于 30ms 的读数则是 OS 级缓存造成的,并非实际识别。全语料文本加 OCR 的处理时间从 83s 降至 46.6s,得益于更快的分词器和写入路径,而非识别速度提升。
快速开始
下载——从最新版本获取安装程序(dowse-app_*_x64-setup.exe),运行后按 `Alt+`` 唤出。
安装程序未经签名,因此首次运行时 Windows SmartScreen 会发出警告。要继续操作,请点击 更多信息,然后点击 仍要运行。代码签名证书是一项持续支出,对独立项目而言很难证明其合理性;未来版本可能会重新考虑此事。
安装 CLI——库和命令行工具以一个 dowse 包的形式发布:
cargo install dowse # once published to crates.io
cargo install --path crates/dowse # from a local checkout
从源代码构建:
git clone https://github.com/ltspace/dowse && cd dowse
# CLI
cargo run -p dowse -- index D:\docs # build the index
cargo run -p dowse -- search 限流 # search
cargo run -p dowse -- search "精确短语" # phrase query
cargo run -p dowse -- add E:\projects # add another root incrementally (no full rebuild)
cargo run -p dowse -- rules show # view index rules (excluded dirs, extra extensions, size cap)
# Overlay app (Tauri 2 + Svelte 5)
cd crates/dowse-app
npm install
cargo tauri build # produces the installer under target/release/bundle
覆盖层应用:按 Alt+\`` 唤出,按 ↑↓选择,按Enter打开,按Ctrl+Enter在资源管理器中显示,按Ctrl+C复制路径,按Esc隐藏。结果按每组 50 条分页;仅在需要时显示精简的‹ 1 / N ›控件,按↓越过最后一条结果或按↑ 越过第一条结果即可切换页面。搜索栏右侧有两个几乎不可见的下拉菜单——文件类型筛选(Ctrl+P)和排序顺序(Ctrl+S,相关度/最新/最早/最大);只有选中非默认值时,两者才会保持微弱可见。右键点击结果行可打开原生的资源管理器风格上下文菜单(打开/在文件夹中显示/复制路径/复制名称)。右上角的固定切换按钮可在窗口失去焦点时保持其打开(仅限当前会话,重启后重置)。输入框为空时,覆盖层会列出最近的搜索记录(最近 10 条,存储在本地)——按 ↑↓/Enter重新使用某条记录,按Delete删除。按Ctrl+,` 打开设置面板——包括常规设置(重新绑定快捷键、开机自启动、界面语言)和索引规则(排除的目录、额外的文本扩展名、单文件大小上限)。


MCP 服务
dowse mcp 会通过标准输入输出启动一个只读 MCP 服务,将本地索引提供给 AI Agent:
claude mcp add --scope user dowse -- dowse mcp
包含四种工具:search(查询、受限的 limit/offset、按相关度/修改时间/大小排序的 sort、逗号分隔的 ext 筛选器,以及 total_hits 计数)、preview(单个命中项的长上下文和元数据)、read_file_chunk(从索引快照中读取受限的分页文本)和 index_status(文档数量、索引健康状态、当前启用的索引规则)。该服务不会触及索引写入器,也不会打开任意路径——它只会在每次调用前重新加载读取器,因此可与覆盖层应用或正在运行的 dowse watch 会话同时运行,而不会产生写入冲突。
架构
┌─────────────────────────────────────────┐
│ dowse │
│ library core: tantivy index · jieba │
│ segmentation · encoding detection · │
│ text extraction (txt/md/pdf/code/ │
│ docx/xlsx/pptx) · OCR pipeline │
│ ───────────────────────────────────── │
│ CLI + MCP server (default `cli` feature) │
└────────────────────┬────────────────────┘
│ library API
│ (default-features = false)
┌───────┴────────┐
│ dowse-app │
└────────────────┘
共有两个 crate。dowse 同时是搜索库和命令行工具:库核心提供搜索 API,而 CLI 和只读 MCP 服务则通过默认的 cli 功能集成在一个二进制文件中——CLI 用于脚本编写和调试,MCP 服务用于 AI Agent。dowse-app 是基于 Tauri 2 + Svelte 5 的常驻覆盖层应用,是一个独立 crate,仅将 dowse 作为库依赖(default-features = false,因此不会引入 CLI 及其依赖项)。
索引更新采用两层机制:运行期间,文件系统事件会驱动增量更新(500ms 防抖窗口,批量提交);启动时,则通过比较修改时间和大小来协调应用未运行期间发生的更改。在具有管理员权限的 NTFS 卷上,同样的两层机制由 MFT 枚举和 USN 日志提供支持,取代目录遍历和文件系统事件监视;两种路径会产生相同的结果,上层无法判断当前启用的是哪一种。
路线图
| # | 范围 | 状态 |
|---|---|---|
| 1 | CLI 索引和搜索:中文分词、GBK 检测、高亮 | ✅ 已完成 |
| 2 | 浮窗:全局快捷键、不透明面板、键盘导航 | ✅ 已完成 |
| 3 | 增量索引:文件监视、启动时对账 | ✅ 已完成 |
| 4 | OCR 管线:将截图文字加入索引 | ✅ 已完成 |
| 5 | MCP 服务 | ✅ 已完成 |
| 6 | NTFS MFT / USN Journal 快速通道 | ✅ 已完成(仅管理员可用的快速通道本身尚未在真实硬件上验证——请参阅设计文档中的实现说明) |
| 7 | 语义搜索(嵌入、混合排序) | 🔍 探索中 |
技术栈
Rust · tantivy · jieba · Tauri 2 · Svelte 5 · Windows.Media.Ocr · notify · Win32(MFT/USN Journal)
设计文档
- docs/DESIGN-M2-浮窗.md(浮窗设计,中文)
- docs/DESIGN-M3-增量索引.md(增量索引设计,中文)
- docs/DESIGN-M4-OCR管线.md(OCR 管线设计,中文)
- docs/DESIGN-M5-MCP.md(MCP 服务设计,中文)
- docs/DESIGN-M6-NTFS快速层.md(NTFS 快速通道设计,中文)
隐私政策
索引存储在本地(%LOCALAPPDATA%\dowse)。不访问网络,不收集遥测数据。你可以自行验证:在资源监视器或防火墙工具中监视进程,确认它没有建立任何出站连接。发布版本还附带安装程序的 SHA-256 校验和,方便你验证下载内容。
完整政策——数据收集、存储、保留期限和联系方式:PRIVACY.md。
许可证
采用 MIT 或 Apache-2.0 双重许可,你可以自行选择。
一点说明
小时候,我只有一部 Coolpad 手机。在漫长的无网时光里,我会打开 文件管理器,逐个查看文件,试着弄清它们是什么、彼此之间有什么联系;而文件散落各处,我永远 不知道它们里面装着什么,始终迷失其中。
上大学时,我买了一台 QNAP NAS,发现了 Qsirch。它确实很好用,只可惜只能在 NAS 上运行, 没有 Windows 版本。
screenpipe 抢先一步做出了它,一种原始版本的《黑镜》S1E3《你的全部历史》中那种记忆颗粒。非常未来主义,非常后现代,接近本地搜索的终极形态,但对于当下的世界来说,它实在太重了。
于是我做了 dowse。
电影《Her》读起来像一则预言:用不了多久,AI 就会运行我们的个人电脑。dowse 从这个想法中汲取灵感,提供 MCP 接口供 AI 调用,只不过它搜索的是你自己机器上的个人文件。
如果你有点强迫倾向,喜欢把东西整理得井井有条,想真正掌控自己的文件系统,那么这就是为你准备的。我同样非常在意性能和美感。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。