logo
0
0
WeChat Login
cnb<cnb@local>
Improve Kylin web fallback and issue logging

AllSearch

AllSearch 是一款面向内网电脑的本地离线全局文件关键词搜索软件。目标运行环境为银河麒麟 V10,重点支持 Linux ARM64/aarch64 设备,要求解压即用、无网络依赖、无复杂运行时安装。

当前源码已具备原生 GUI、Tantivy 全文索引、SQLite 文件状态库、文本/Office/WPS/PDF 抽取器、图片 OCR、扫描版 PDF OCR、CLI 和本地 Web 界面。

功能范围

  • 支持 txt、md、csv、log、Word doc/docx/wps/wpt、Excel xls/xlsx/xlsm/xlsb/ods/et/ett、PowerPoint ppt/pptx/dps/dpt、PDF、png、jpg、jpeg、bmp、tiff 等文件内容搜索。
  • 支持中文关键词搜索,针对中文做了 ngram 查询处理。
  • 支持图片 OCR 和扫描版 PDF OCR,OCR 全部离线运行。
  • 支持 Windows 开发测试,支持 Linux/银河麒麟 V10 ARM64 离线部署。
  • 索引阶段会跳过权限不足、损坏、空内容或不支持的文件,不会因单个文件失败停止。
  • GUI 和 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

运行方式

GUI

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 运行 doctorindexsearch 等命令仍会保留正常输出。 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 北京

Web 备用界面

没有桌面环境或 GUI 打不开时,可以启动本地 Web 界面:

allsearch web

程序会尝试打开浏览器,也可以按终端输出的本地地址访问。Web 界面完全离线运行,只监听 127.0.0.1,支持目录浏览、建立索引、关键词搜索、结果排序筛选、匹配预览、打开文件/目录、复制路径、删除和批量删除。

Linux/麒麟下 Web 启动浏览器时会优先尝试禁用浏览器 GPU,以避开 libEGLDRI2dri3 extension not supported 等显卡驱动问题。需要禁止自动打开浏览器时,可设置 ALLSEARCH_NO_OPEN_BROWSER=1;需要强制使用系统默认 xdg-open 行为时,可设置 ALLSEARCH_BROWSER=system

Windows 开发构建

当前仓库已经包含 vendor/ 离线依赖和 .cargo/config.toml,可以直接离线构建。

环境要求

  • Windows 10/11
  • Rust 工具链
  • PowerShell

检查环境:

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

构建 release

cargo build --release --locked --offline

生成位置:

target\release\allsearch.exe

生成 Windows 便携包

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\

Linux/麒麟 V10 ARM64 构建

推荐在麒麟 V10 ARM64 真机上构建最终包,这样生成的 allsearch 主程序就是目标架构。

环境要求

  • 银河麒麟 V10 ARM64/aarch64
  • Rust 工具链
  • bash
  • 无需联网下载 Cargo 依赖,仓库已包含 vendor/

检查架构和 Rust:

uname -m
rustc --version
cargo --version

uname -m 应为:

aarch64

离线检查和测试

cargo check --locked --offline
cargo test --locked --offline

构建 release

cargo build --release --locked --offline

生成位置:

target/release/allsearch

自检:

./target/release/allsearch doctor

注意:target/release/allsearch 只是裸二进制,它旁边没有 tools/ 目录,因此 OCR 会优先回退到系统里的 tesseractpdftoppm。要验证内置离线 OCR,请生成便携包后运行 dist/AllSearch/allsearch doctor

生成麒麟 ARM64 便携包

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

OCR 说明

图片和扫描版 PDF OCR 已接入主程序。Windows 开发包会从项目内 tools/ocr/windows 自动打进 tools/tesseracttools/popplertools/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

常见问题

GUI 打不开

先运行:

allsearch doctor

Windows 尝试:

allsearch.exe gui --renderer wgpu
allsearch.exe gui --renderer glow

Linux/麒麟尝试:

./allsearch gui --renderer wgpu
./allsearch web

如果出现 GLXBadContextTagGLXBadContextlibEGL warning: DRI2: failed to authenticateWGPU error: Parent device is lost 或核心转储,说明目标机器的 OpenGL/GLX/EGL/DRI 驱动栈不稳定。D2000 + 麒麟 V10 上遇到这类问题时,直接使用 Web 界面;echo $XDG_SESSION_TYPE 显示 x11 只能说明窗口会话是 X11,不代表 GLX/EGL 可用。

如果没有桌面环境,使用:

./allsearch web

OCR 不可用

运行:

./allsearch doctor

如果 tesseract checkpdftoppm 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 textextract failedpermission/access denied,优先在加密软件策略中放行 AllSearch 主程序,再重新创建索引。