
在DzzOffice网盘系统中,原生的搜索功能只能通过文件名来搜索。如果文档内容很多、很杂,这种"按文件名搜索"的方式效率很低——你可能明明记得文档里的某个关键词,却怎么也想不起文件名。
esSearch 插件正是为了解决这个问题而生:它基于 Elasticsearch 为 DzzOffice 网盘提供文件内容级全文检索能力。索引建立后,你可以直接搜索文档的正文内容,而不仅仅是文件名。
本插件主要面向自建 DzzOffice 网盘、希望提升搜索体验、且有一定技术基础的用户。
组件 | 要求 |
|---|---|
DzzOffice | 2.4.0版本及以上 |
Elasticsearch | 7.x / 8.x / 9.x(支持 HTTPS 与 Basic Auth) |
PHP | 需启用 cURL 扩展;解析 Office 文档需使用 ZipArchive 扩展 |
可选 | IK 分词器插件(推荐,用于中文分词) |
注意:解析 PDF/XLS/DOC/PPT/WPS 等格式需要容器内安装相应命令行工具,详见下文"安装可选解析工具"。
用户搜索 → explorer/searchFile.php
├─ 原生 SQL 搜索(不影响原生功能)
└─ 调用 ES 查询(关键词命中即返回结果)
│
Elasticsearch 索引
▲
│ 自动同步(Hook)
DzzOffice 文件操作
┌──────────────┬──────────────┬──────────────┐
创建/上传 编辑内容 删除 恢复
(createafter (setfilecontent (deleteafter (recoverafter
_addindex) _after) _delindex) _addindex)dzz_io.php 内置的文件操作钩子,文件创建、上传、编辑、删除、恢复后自动同步 ES(恢复依赖核心 Recover() 预留的 recoverafter_addindex 钩子)。ESFileParser 策略类按扩展名映射的解析器提取文本。searchfile_return 钩子对原生搜索结果进行 ES 增强,ES 命中时返回全文检索结果,不影响原生搜索。dzz/esSearch/
├── README.md # 说明文档
├── dzz_app_esSearch.xml # 应用市场安装配置(含内置图标)
├── enable.php / disable.php # 启用 / 停用脚本
├── uninstall.php # 卸载脚本(按配置删除 ES 索引)
├── admin.php # 后台管理页面入口
├── api.php # 后台 AJAX 接口(保存/测试/重建/状态)
├── index.php # 前台入口(状态页)
├── classes/
│ ├── ESConfig.php # 配置工具类(含解析器分类管理)
│ ├── ESClient.php # Elasticsearch HTTP 客户端(cURL 封装)
│ ├── ESFileParser.php # 文件内容解析策略类(含内置默认解析器)
│ └── ESIndexer.php # 索引构建器(全量/增量/单文档索引)
├── hooks/
│ ├── ESIndexHook.php # 文件操作自动同步钩子
│ └── ESSearchHook.php # 搜索结果增强钩子
├── language/
│ ├── zh-cn/lang.php # 简体中文语言包
│ └── en-us/lang.php # 英文语言包
└── template/
├── esSearch_setting.htm # 设置页
├── esSearch_parser.htm # 文件解析器配置页(分组折叠 + 分类管理)
├── esSearch_index.htm # 索引管理页
├── status.htm # 前台状态页
└── lyear_left.htm # 左侧树型菜单esSearch 目录上传至 DzzOffice 的 dzz 目录下。启用前必须先完成 ES 连接配置,否则会提示"无法启用插件"。
启用插件后,进入 ES全文检索 → 设置 页面:
字段 | 说明 | 是否必填 |
|---|---|---|
ES 主机地址 | Elasticsearch 地址,多个用逗号分隔,如 | 必填 |
用户名 / 密码 | ES 认证信息(开启安全认证时填写) | 视 ES 配置而定 |
索引前缀 | ES 索引名前缀,默认 | 否 |
请求超时 | ES 请求超时时间(秒),默认 10 | 否 |
连接超时 | ES 连接超时时间(秒),默认 5 | 否 |
卸载时删除索引 | 卸载插件时是否同时删除 ES 索引数据 | 否 |
关于多主机:
ES 主机地址填写多个地址时,插件每次请求会随机挑选其中一个执行(array_rand)。这是随机负载均衡,目的是把查询压力分散到多个 ES 节点;若选中的主机不可用,本次请求会直接失败,不会自动重试其他主机(无故障转移/失败切换)。如需高可用,建议在前方部署 ES 集群或反向代理做健康检查与故障转移。
配置完成后点击 测试连接 验证 ES 连通性,通过后点击 保存。

新上传的文件会自动同步到 ES,但已存在的历史文件需要手动全量重建一次:
重建完成后,之后的新增/编辑/删除/恢复文件均由钩子自动同步,无需再次全量重建。

如需检索以下文件内容,请在服务器容器内安装相应命令行工具:
格式 | 所需工具 | 安装命令(Alpine) |
|---|---|---|
PDF(pdf) | poppler-utils |
|
旧版 DOC / PPT / XLS、WPS 系列(doc/ppt/xls/wps/et/dps) | LibreOffice |
|
旧版 XLS(可选替代) | gnumeric |
|
纯文本(txt/md/js/css 等)与 Office 新格式(docx/xlsx/xlsm/pptx)无需额外工具即可解析。
解析类型 | 说明 |
|---|---|
纯文本(text) | 直接读取文本文件内容(txt/md/js/css 等),无需额外工具 |
ZIP 内 XML(zipxml) | 解析 Office 文档(docx/xlsx/xlsm/pptx)内部的 XML,支持多 sheet/多 slide 与中文 |
命令行工具(command) | 通过外部命令提取内容(如 |
LibreOffice(soffice) | 通过 LibreOffice 无头模式转换提取内容(适用于 doc/ppt/xls/wps/et/dps 等老式格式) |
解析器配置按类别分组展示,方便维护:
💡 添加新格式的正确顺序:先在"文件解析器配置"添加/修改解析器并保存,再到"索引管理"重建索引。顺序不能颠倒——只有先保存新解析器配置,重建时插件才会强制读取最新配置并用它重新解析文件。
⚠️ 常见误区
:docx/xlsx/pptx 是 ZIP 容器,应使用 zipxml 解析;doc/ppt/xls/wps 等老式二进制格式才用 soffice。配置错误会导致内容提取为空。

在 DzzOffice 资源管理器的搜索框中输入关键词,即会同时执行原生搜索与 ES 全文检索,并返回匹配的文件。
索引管理 菜单提供:
Q1:为什么搜索不到文件内容?
Q2:中文搜索不到?
Q3:为什么启用插件提示需要配置 ES?
Q4:修改了解析器配置后不生效?
Q5:添加了新文件格式但检索不到?
Q6:如何部署 Elasticsearch?
docker run -d \
--name elasticsearch \
-p 9200:9200 \
-e "discovery.type=single-node" \
-e "xpack.security.enabled=false" \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
docker.elastic.co/elasticsearch/elasticsearch:9.4.4xpack.security.enabled=true 并为内置用户设置密码。dzz/esSearch/ 目录。uninstall.php)会同时删除 ES 中的索引数据;未勾选则仅停用插件、保留索引数据,以便日后重新启用。esSearch 插件为 DzzOffice 网盘补齐了文件内容级全文检索能力,支持中文分词、多格式解析、自动索引同步、解析器分类管理等。配合 Elasticsearch,可以显著提升大文件库的检索效率,让"按内容找文件"成为可能。
如果你正在使用 DzzOffice 网盘,且希望搜索体验更进一步,这个插件是一个不错的选择。
提示:本插件基于 DzzOffice 开源协议,仅供 DzzOffice 社区使用。部署前请确保服务器环境满足要求,并已安装好 Elasticsearch。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。