免费 DocFetcher 替代方案怎么选:XERJ 作为可被 Agent 调用的文档搜索引擎对比分析

原创2026-10-17 03:05:582,241 阅读
文章标签:人工智能搜索引擎本地部署后端MCP 服务

免费 DocFetcher 替代方案怎么选:XERJ 作为可被 Agent 调用的文档搜索引擎对比分析

DocFetcher 是成熟的桌面搜索 GUI,而 XERJ 是一个单二进制文件即可运行的搜索节点,通过 HTTP 与 MCP 协议对外提供检索能力。本文以 XERJ 与 DocFetcher 的能力对比为核心,说明两者在索引、查询、便携性、Agent 可调用性上的本质差异,并给出 xerj autoindex、xerj autoindex map、match_phrase 查询与 xerj mcp 的完整实战命令,帮助你判断免费文档搜索工具究竟该选"给人用的桌面软件"还是"给程序调用的搜索引擎"。

关于本对比的诚实声明:本文没有跑过任何基准测试。我们没有冻结共享语料库,没有在 DocFetcher 旁边安装 XERJ,没有测量召回率、命中数或延迟。页面上的每一行都是"已记录的能力",不是"测出来的结果",因此不存在任何胜负数字。如果你想获得针对自己文档的答案,请用两个工具分别索引你自己的文件夹、对比两份结果列表——那才是唯一能描述你文档的对比方式。

DocFetcher 是什么

DocFetcher 是一款采用 Eclipse Public License 的开源桌面搜索应用,支持 Windows、Linux 和 macOS。当前发布版本为 1.1.27,自 1.1.26 起不再需要单独安装 Java 运行时(Windows 7 SP1 或更高、Linux 需 GTK3、macOS 11 或更高)。

它的使用方式是为每个文件夹创建一个索引,然后由 GUI 基于该索引回答问题,提供结果窗格、预览窗格与高亮匹配。过滤器可以按文件大小、文件类型和位置缩小结果列表。查询语法是常见的布尔集合,支持通配符、短语搜索、模糊搜索、邻近搜索(proximity search)与加权(boosting)。

值得注意的设计决策是:DocFetcher 默认不索引任何东西。这是项目官方页面上的立场——由用户自己选择要索引的文件夹,而不是整块磁盘。另外,多用户的 Web 界面以 DocFetcher Server 的形式单独出售,免费桌面应用本身没有这类接口。

XERJ 是什么

XERJ 是一个单一的 Rust 二进制文件,运行一个搜索节点。核心流程是:

  • xerj autoindex <folder> 读取文件夹,按内容而非文件扩展名识别每个文件所属的族(family),为每种文件形态推断一个数据集(dataset),并把文档写入节点——命令不需要配置文件,也不需要 mapping;
  • xerj autoindex map 打印"数据地图",说明文件夹变成了哪些索引、哪些字段,Agent 先读地图、再写出指向真实索引与真实字段的查询;
  • 节点对外提供 Elasticsearch 兼容的 REST API,现有 ES 客户端可以直接对接;
  • xerj mcp 在同一个二进制内以 stdio MCP 服务器方式把这些能力暴露给 Agent。

XERJ 是单节点部署:没有复制、没有故障转移。默认的嵌入器是词法特征哈希(lexical feature hashing),不是神经网络模型;神经检索需要通过 --embed-mode neural 显式开启。

从源码看 XERJ 的能力落地

上述能力并非宣传语,在仓库中有完整的实现对应:

  • xerj autoindex 的参数解析在 engine/crates/xerj-autoindex/src/cli.rs,支持 --url、--prefix、--progress、--dry-run、--workers、--max-file-mb、--watch 等运行时选项;
  • 内容嗅探与多格式解析在 engine/crates/xerj-autoindex/src/extract/ 目录,包含 PDF(pdf.rs)、DOCX(docx.rs)、CSV(csv_x.rs)、JSON/JSONL、XML、YAML、HTML、SQLite(sqlite_x.rs)、SQL 文本(sqldump.rs)、日志(logs.rs)、纯文本(txt.rs)、邮件(eml.rs、mbox.rs)、代码(code.rs)等解析器——这印证了文档中"按内容检测格式"的描述;
  • MCP 服务器的工具清单在 engine/crates/xerj-mcp/src/lib.rs。该文档最初发布时描述为 10 个工具;从当前源码看,工具列表已扩展为 16 个,其中 13 个直接 1:1 映射到 XERJ 真实的 REST 接口(xerj_search、xerj_semantic_search、xerj_vector_search、xerj_hybrid_search、xerj_memory_store、xerj_memory_recall、xerj_brain_*、xerj_map、xerj_code_search、xerj_plan 等),另 3 个 xerj_hub_* 工具执行 xerj ask 流程;
  • Agent 记忆接口实现在 engine/crates/xerj-api/src/memory_api.rs:/_memory/{namespace} 的每个命名空间由保留索引 .xerj-memory-{namespace} 支撑,存储与召回复用与文档完全相同的引擎路径。

能力对比,逐行对照

下表每一行都是每个工具"已记录的能力",没有任何一行是实测结果。

能力 DocFetcher XERJ
带预览窗格的人机 GUI 有,匹配高亮 无,仅 HTTP 与 MCP
Windows 桌面应用 有,Windows 7 SP1 及以上 服务器进程,无窗口
U 盘便携索引 有,portable 版本 数据位于节点数据目录
Outlook PST 邮件 有 无 PST 读取器;仅 mbox 与 .eml
zip、7z、rar、tar 归档 有,嵌套无上限 无归档处理器
纯图片 PDF 的 OCR 无 无
模糊与邻近操作符 有,在查询语法中 词项与短语
自动索引更新 有,应用运行期间 重新运行 xerj autoindex
格式检测 文件扩展名,带正则选项 按族进行内容嗅探
HTTP 查询 API 免费应用中没有 有,Elasticsearch REST API
供 Agent 使用的 MCP 服务器 无 有,xerj mcp,多工具
被拒绝文件的清单 GUI 中的索引报告 autoindex-catalog,每个文件一个原因
引擎内的 Agent 记忆 无 有,/_memory/{namespace}
许可证 Eclipse Public License Apache-2.0

什么时候应该选 DocFetcher

当执行搜索的是"人"时。 DocFetcher 的 GUI 经过多年打磨,带结果窗口和预览窗格,对人类读者来说比一个 API 友好得多。

在 Windows 工作站上。 它作为桌面应用安装,不需要终端、不需要节点进程、不需要 HTTP 调用。

当索引必须"随身携带"时。 portable 版本把索引放在应用文件夹内,整个文件夹可以放在 U 盘、加密卷或云盘上随行。

当数据在 Outlook PST 文件中时。 XERJ 能读 mbox 与 .eml,但没有 PST、OST 或 Maildir 的读取器——仍留在 Outlook 自有存储中的邮件永远进不了 XERJ 索引。这一限制与源码一致:engine/crates/xerj-autoindex/src/extract/ 下的邮件解析器只有 eml.rs 与 mbox.rs。

当需要处理归档文件时。 DocFetcher 能遍历 zip、7z、rar、tar 且嵌套无上限;XERJ 目前没有归档处理器。

当查询需要模糊或邻近操作符时。 XERJ 匹配词项和短语。

什么时候应该选 Recoll 或 ripgrep-all 替代

选 Recoll:当你要桌面 GUI、邮件索引、OCR 钩子和"打开到页面"能力时。这一权衡详见 Recoll 对比文章。

选 ripgrep-all:当你只需要回答"一个问题、今天就要、完全不要索引"时。它包装 ripgrep,为 PDF、Office 文档、归档和 SQLite 提供适配器。这一权衡详见 ripgrep-all 对比文章。

选 Elasticsearch:当文档必须分布在多台主机上时。XERJ 没有复制和故障转移,它只在单节点上说同一种 REST API。

什么时候 XERJ 是更合适的方案

当调用方是程序时。 免费的 DocFetcher 应用有窗口而没有 API;会讲 HTTP 或 MCP 的 Agent 可以直接调用 XERJ,无需任何包装层。

当搜索必须跑在无桌面环境时。 二进制是一个服务器进程,可以在无头主机上运行并通过网络应答。

当文件夹是混合类型时。 格式检测读的是内容而不是扩展名——一个扩展名写错的 CSV 文件照样落进带类型的数据集。

当答案必须携带出处(provenance)时。 每份文档都带有 ax_path、ax_file、ax_format 等关键字字段,Agent 可以据此引用源文件。

当同一个节点还想承载 Agent 记忆时。 /_memory/{namespace} 把持久化的 Agent 记忆放在文档旁边。

实战:用 XERJ 索引一个文档文件夹并回答短语问题

以下命令来自本文档的原始操作清单,可在 Windows 或 Linux 工作站的文档文件夹上原样执行。

第 1 步:索引文件夹。 一条命令完成全部工作,不需要配置文件、不需要 mapping:

xerj autoindex ./Documents --url http://127.0.0.1:9200 --prefix docs --progress plain

从 engine/crates/xerj-autoindex/src/cli.rs 的参数结构看,--url 指向已启动的节点,--prefix 决定生成的索引名前缀,--progress plain 让进度以纯文本输出;对于大文件夹,还可以先加 --dry-run 只打印任务规模与计划数据集而不写入任何内容,再决定是否真正执行。

第 2 步:读取数据地图。 让下一条查询能写出真实存在的索引名和字段名:

xerj autoindex map --url http://127.0.0.1:9200

第 3 步:用短语查询回答问题。 通过 HTTP 发送 match_phrase 查询,并从每条命中里读出文件路径:

curl -s -XPOST http://127.0.0.1:9200/docs-*/_search -H 'content-type: application/json' \
  -d '{"query":{"match_phrase":{"body":"purchase order"}},"size":10,"_source":["ax_path","ax_format","title"]}'

第 4 步:把同一个节点开放给 Agent。 作为 stdio MCP 服务器启动:

xerj mcp --url http://127.0.0.1:9200

MCP 服务器的实现细节可继续阅读 engine/crates/xerj-mcp/src/lib.rs:它通过 stdio 传输讲换行分隔的 JSON-RPC 2.0,所有工具都是"薄代理"——构造引擎本来就接受的请求并转发到可配置的 base URL,自身不增加任何能力;诊断信息走 stderr,stdout 只保留给 JSON-RPC 流。如果目标地址是回环地址且未显式提供认证,服务器会回退到本地节点为自身写入的管理员密钥(<data_dir>/admin.key),这与 xerj autoindex 的本地密钥发现逻辑一致,也是"零配置启动"能直接工作的原因。

XERJ 没有的东西

XERJ 没有 GUI:没有结果窗口、没有预览窗格、没有词条高亮。

XERJ 没有 OCR,也没有归档处理器。邮件读取覆盖 mbox 与 .eml,不覆盖 PST、OST 或 Maildir。它没有基于角色的访问控制,也没有单点登录。

XERJ 运行在单个节点上,没有故障转移。请为"从副本恢复"做好规划。

更完整的检索场景参考

如何阅读本文

这是一份基于两个工具各自官方文档的能力对比,不是基准测试,也不是对你文件的断言。诚实的总结很短:DocFetcher 是给 Windows 上的"人"用的更好的桌面应用;XERJ 是替你做搜索的"程序"所用的搜索引擎。 完整的 XERJ 侧实战走查见文件夹搜索教程。

登录后查看全文
xerj