AllSearch 是一款面向内网电脑的本地离线全局文件关键词搜索软件。目标运行环境为银河麒麟 V10,重点支持 Linux ARM64/aarch64 设备,要求解压即用、无网络依赖、无复杂运行时安装。
当前源码已具备原生 GUI、Tantivy 全文索引、SQLite 文件状态库、文本/Office/WPS/PDF 抽取器、图片 OCR、扫描版 PDF OCR、CLI 和本地 Web 界面。
data/logs/index-issues-*.tsv 写出问题日志,Web 也会显示最近跳过/失败文件。src/ Rust 主程序源码
config/app.example.toml 默认配置模板
packaging/ 便携包打包脚本
docs/ 设计和开发文档
samples/ 示例文件
test/ 本地测试文件
tools/ocr/windows/ Windows 内置 OCR 工具
tools/ocr/linux-aarch64/ 麒麟/Linux ARM64 内置 OCR 工具
vendor/ Cargo 离线依赖
详细设计方案见 docs/ALLSEARCH_KYLIN_V10_DESIGN.md。
Windows:
cargo run
cargo run -- gui
便携包:
dist\AllSearch\allsearch.exe
dist\AllSearch\allsearch.exe gui
Linux/麒麟:
./dist/AllSearch/allsearch
./dist/AllSearch/allsearch gui
不带子命令时默认启动 GUI,因此双击程序也是打开图形界面。
Windows 下双击或独立启动 GUI 时会自动隐藏随程序创建的终端窗口;从 PowerShell/CMD 运行 doctor、index、search 等命令仍会保留正常输出。
GUI 会把已选择的索引目录和自动更新设置保存到 data/gui_state.toml,下次启动会自动恢复目录。目录选择优先调用系统目录选择器;系统组件不可用时会自动退回内置选择器。需要启动时自动更新上次添加的索引目录时,在 GUI 左侧将“自动更新”设为“启动时更新”。
GUI 默认最多显示相关度最高的 1000 条搜索结果,可在“结果上限”中调整;这只影响结果显示数量,不影响索引文件数量。
GUI 左侧“线程设置”可自定义扫描线程和内容抽取线程,设置会保存到 data/gui_state.toml 并在下次启动继续使用。
GUI 搜索结果按文件管理器风格紧凑单行展示文件类型、文件名、路径和评分,并支持按相关度、文件名、文件类型、路径排序;也支持按文件名、路径、摘要文本筛选,以及按文本、Word、表格、演示、PDF、图片、其他类型筛选。单击结果可查看匹配预览,双击可打开文件,右键菜单提供打开、复制文件、复制路径、删除;勾选多个结果后可以批量删除真实文件。
Windows 默认使用 WGPU 渲染,优先走 DirectX,避免 OpenGL 驱动问题。需要指定渲染器时:
cargo run -- gui --renderer wgpu
cargo run -- gui --renderer glow
Linux/麒麟默认使用 WGPU 渲染,避免部分国产显卡或 X11/GLX 驱动触发 GLXBadContextTag。需要指定渲染器时:
./dist/AllSearch/allsearch gui --renderer wgpu
Linux 下默认禁止 glow/OpenGL 直启,因为部分国产显卡驱动会在 GLX 阶段直接中止进程,程序没有机会自动兜底。只有做驱动验证时才这样运行:
ALLSEARCH_ALLOW_UNSTABLE_GLOW=1 ./dist/AllSearch/allsearch gui --renderer glow
如果目标机器的桌面图形栈不支持 WGPU,程序会自动启动本地 Web 界面;也可以手动运行 ./dist/AllSearch/allsearch web。在 D2000、麒麟 V10 或 GLX/EGL/DRI 报错的机器上,建议直接把 Web 作为主界面使用。
allsearch index <目录1> <目录2>
allsearch search <关键词>
Windows 示例:
cargo run -- index C:\projects\AllSearch\test
cargo run -- search 北京
Linux/麒麟示例:
./dist/AllSearch/allsearch index /home/user/docs
./dist/AllSearch/allsearch search 北京
没有桌面环境或 GUI 打不开时,可以启动本地 Web 界面:
allsearch web
程序会尝试打开浏览器,也可以按终端输出的本地地址访问。Web 界面完全离线运行,只监听 127.0.0.1,支持目录浏览、建立索引、关键词搜索、结果排序筛选、匹配预览、打开文件/目录、复制路径、删除和批量删除。
Linux/麒麟下 Web 启动浏览器时会优先尝试禁用浏览器 GPU,以避开 libEGL、DRI2、dri3 extension not supported 等显卡驱动问题。需要禁止自动打开浏览器时,可设置 ALLSEARCH_NO_OPEN_BROWSER=1;需要强制使用系统默认 xdg-open 行为时,可设置 ALLSEARCH_BROWSER=system。
当前仓库已经包含 vendor/ 离线依赖和 .cargo/config.toml,可以直接离线构建。
检查环境:
rustc --version
cargo --version
cargo check --locked --offline
cargo test --locked --offline
cargo run -- gui
cargo run -- index test
cargo run -- search 北京
cargo run -- doctor
cargo build --release --locked --offline
生成位置:
target\release\allsearch.exe
powershell -ExecutionPolicy Bypass -File packaging\package-portable.ps1
生成位置:
dist\AllSearch\
验证:
dist\AllSearch\allsearch.exe doctor
dist\AllSearch\allsearch.exe gui
Windows 便携包会自动复制:
tools\tesseract\
tools\poppler\
tools\tessdata\
fonts\
config\
推荐在麒麟 V10 ARM64 真机上构建最终包,这样生成的 allsearch 主程序就是目标架构。
vendor/检查架构和 Rust:
uname -m
rustc --version
cargo --version
uname -m 应为:
aarch64
cargo check --locked --offline
cargo test --locked --offline
cargo build --release --locked --offline
生成位置:
target/release/allsearch
自检:
./target/release/allsearch doctor
注意:target/release/allsearch 只是裸二进制,它旁边没有 tools/ 目录,因此 OCR 会优先回退到系统里的 tesseract、pdftoppm。要验证内置离线 OCR,请生成便携包后运行 dist/AllSearch/allsearch doctor。
chmod +x packaging/package-portable.sh
CARGO_NET_OFFLINE=true ./packaging/package-portable.sh release dist
生成位置:
dist/AllSearch/
验证:
./dist/AllSearch/allsearch doctor
./dist/AllSearch/allsearch gui
doctor 中应能看到:
tesseract: .../tools/tesseract/tesseract (packaged)
pdftoppm: .../tools/poppler/pdftoppm (packaged)
language check: ok
image OCR: enabled
scanned PDF OCR: enabled
打包脚本会根据 uname -m 自动选择:
tools/ocr/linux-aarch64/
并复制为运行目录:
dist/AllSearch/tools/tesseract/
dist/AllSearch/tools/poppler/
dist/AllSearch/tools/tessdata/
dist/AllSearch/tools/lib/
dist/AllSearch/tools/licenses/
在构建机打包完成后,把整个目录复制到目标内网电脑:
dist/AllSearch/
目标机运行:
cd AllSearch
./allsearch doctor
./allsearch gui
Linux/麒麟:
cd dist
tar -czf AllSearch-ky10-aarch64-portable.tar.gz AllSearch
目标机解压:
tar -xzf AllSearch-ky10-aarch64-portable.tar.gz
cd AllSearch
./allsearch doctor
./allsearch gui
Windows:
Compress-Archive -Path dist\AllSearch -DestinationPath dist\AllSearch-windows-portable.zip -Force
目标机解压后运行:
allsearch.exe doctor
allsearch.exe gui
Linux/麒麟便携包内包含:
allsearch.desktop
如果需要放到桌面,复制该文件后把其中的 Exec 路径改成实际 allsearch 路径,并给执行权限:
chmod +x allsearch.desktop
图片和扫描版 PDF OCR 已接入主程序。Windows 开发包会从项目内 tools/ocr/windows 自动打进 tools/tesseract、tools/poppler 和 tools/tessdata。
麒麟 V10 ARM64 包使用 tools/ocr/linux-aarch64,其中已内置 aarch64 版 Tesseract、Poppler、中文/英文 tessdata 和 tools/lib 运行库。Linux/麒麟下主程序只会给 OCR 子进程设置内置库路径,不影响 AllSearch 主程序本身。
OCR 自检:
allsearch doctor
正常时会看到:
tesseract check: ok
pdftoppm check: ok
image OCR: enabled
scanned PDF OCR: enabled
可选环境变量:
ALLSEARCH_TESSERACT 指定 tesseract 路径
ALLSEARCH_PDFTOPPM 指定 pdftoppm 路径
ALLSEARCH_OCR_LIB_DIR 指定 Linux OCR 动态库目录
TESSDATA_PREFIX 指定 tessdata 目录
ALLSEARCH_OCR_LANGS 指定 OCR 语言,默认 chi_sim+eng
GUI 会自动从程序目录 fonts/、当前目录 fonts/ 和系统字体目录查找中文字体。
如果界面中文显示为方块,可以把中文字体文件放到 fonts/ 目录,或指定:
Windows:
$env:ALLSEARCH_CJK_FONT="C:\Windows\Fonts\msyh.ttc"
allsearch.exe gui
Linux/麒麟:
export ALLSEARCH_CJK_FONT=/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc
./allsearch gui
默认会按 CPU 情况设置扫描和抽取线程数。可按机器性能调整:
Windows:
$env:ALLSEARCH_EXTRACT_THREADS="8"
$env:ALLSEARCH_SCAN_THREADS="4"
allsearch.exe index D:\docs
Linux/麒麟:
export ALLSEARCH_EXTRACT_THREADS=8
export ALLSEARCH_SCAN_THREADS=4
./allsearch index /home/user/docs
大目录首次索引耗时会比较长,后续搜索直接走本地索引。
默认数据目录:
data/
索引目录:
data/index/
可用 --data-dir 指定:
allsearch index /home/user/docs --data-dir /opt/allsearch-data
allsearch search 北京 --data-dir /opt/allsearch-data
allsearch gui --data-dir /opt/allsearch-data
也可以用环境变量:
export ALLSEARCH_DATA_DIR=/opt/allsearch-data
先运行:
allsearch doctor
Windows 尝试:
allsearch.exe gui --renderer wgpu
allsearch.exe gui --renderer glow
Linux/麒麟尝试:
./allsearch gui --renderer wgpu
./allsearch web
如果出现 GLXBadContextTag、GLXBadContext、libEGL warning: DRI2: failed to authenticate、WGPU error: Parent device is lost 或核心转储,说明目标机器的 OpenGL/GLX/EGL/DRI 驱动栈不稳定。D2000 + 麒麟 V10 上遇到这类问题时,直接使用 Web 界面;echo $XDG_SESSION_TYPE 显示 x11 只能说明窗口会话是 X11,不代表 GLX/EGL 可用。
如果没有桌面环境,使用:
./allsearch web
运行:
./allsearch doctor
如果 tesseract check 或 pdftoppm check 失败,在麒麟机器上进一步检查:
ldd tools/tesseract/tesseract
ldd tools/poppler/pdftoppm
如果提示缺库,优先确认 tools/lib/ 是否存在,并确认是从 tools/ocr/linux-aarch64 打出的包。
确认已经索引目标目录:
./allsearch index /path/to/docs
./allsearch search 关键词
GUI 中则先点“选择目录”,再点“开始索引”,索引完成后搜索。
AllSearch 会跳过无权限目录和文件,不会中断整个索引。如果必须索引某些受限目录,请用具备权限的用户运行。
如果电脑安装了透明 AES 加密软件,Office/WPS 能正常打开文件不代表 AllSearch 也能读到明文。很多加密软件只对授权进程透明解密,如果没有把 allsearch.exe 或 Linux 下的 allsearch 加入白名单,AllSearch 读到的可能是密文、空内容或被拒绝访问。
索引完成后先看问题日志:
data/logs/index-issues-*.tsv
Web 界面中也会显示“最近跳过的文件”。如果日志里大量出现 empty extracted text、extract failed、permission/access denied,优先在加密软件策略中放行 AllSearch 主程序,再重新创建索引。