十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Hister 本地文件索引与导入实战:支持格式、目录过滤与快照机制

Hister 本地文件索引与导入实战:支持格式、目录过滤与快照机制 搜索引擎全文检索后端前端CLI【免费下载链接】histerYour own search engine项目地址https://gitcode.com/GitHub_Trending/hi/hister点击查看免费下载Hister 除了抓取网页外还可以把本地文件变成可全文检索的知识库。这篇指南围绕 文件类型与索引文档 展开覆盖indexer.directories目录索引的完整配置、PDF / DOCX / Markdown / Org / 纯文本五类文件的解析规则以及hister import file的四种输入格式与--watch快照模式。读完你既能配置一个自动跟踪、自动过滤的本地目录索引也能在服务端无法访问文件系统时用命令行客户端把文件快照安全地导入 Hister。本地文件索引Hister 支持哪些格式Hister 可以从两种途径索引本地文件一种是配置indexer.directories后由服务端自动扫描与监视的「本地文档」document.Local另一种是通过hister import file显式导入的「远程文件文档」document.RemoteFile。两条路径共用同一套文件类型处理器。五种受支持的本地文件类型文件类型扩展名索引内容标题来源PDF.pdf提取所有可读页面的纯文本文件路径兜底DOCX.docx段落文本优先 DOCX 元数据标题否则文件路径兜底Markdown.md,.markdown渲染后的 Markdown 文本优先第一个 H1 标题否则文件路径兜底Org mode.org渲染后的 Org 文本优先 OrgTITLE属性值否则文件路径兜底纯文本任意合法 UTF-8 文本文件完整文件内容文件路径兜底处理器列表与路由逻辑集中在 server/indexer/filetypes.gofileTypeHandlers依次注册了pdfFileType、docxFileType、markdownFileType、orgFileType和plainTextFileType五个实现fileTypeHandlerForPath按注册顺序匹配扩展名没有任何专用处理器匹配时一律回退到纯文本处理器plainTextFileType.Match恒返回true。各处理器在Prepare阶段做三件事解析文件字节、填充文档的Text/HTML/Title字段、写入type元数据。具体实现细节如下PDFserver/indexer/pdf.go 调用pdf.NewReader后通过GetPlainText()流式读出全部页面的纯文本解析器内部 panic 会被recover捕获并转换为普通错误避免单个损坏文件拖垮整个索引流程。提取不到任何文本时返回「pdf contains no extractable text」。DOCXserver/indexer/docx.go 使用 docxgo 打开文档优先读取元数据标题若元数据为空再识别样式为Title/Heading1的段落作为标题最后兜底取第一个非空段落。段落文本以\n\n连接后进入索引。Markdownserver/indexer/markdown.go 用 gomarkdown 把源文件渲染为 HTMLparser.CommonExtensions等标准扩展渲染后的 HTML 存入d.HTML再经sanitizer.SanitizeText清洗为纯文本用于全文检索extractMarkdownTitle逐行扫描第一个#开头的 ATX 一级标题。Org modeserver/indexer/org.go 用 go-org 解析为 HTML标题取自文档的TITLE关键字doc.Get(TITLE)。纯文本先做utf8.Valid校验非法 UTF-8 一律返回ErrBinaryFile拒绝索引合法内容整文件写入d.Text。因此规则可以概括为能匹配专用处理器就专用处理否则只要是通过过滤规则的有效 UTF-8 文本文件就按纯文本索引二进制文件直接跳过。如果只配置了目录而未声明filetypes这条回退链会覆盖所有未被其他规则排除的文件。标题与内容之外文件如何成为文档本地文件在索引时会被转成file://形式的 URL见 files/files.go 的PathToFileURL文档类型标记为document.Local。服务端在 server/indexer/files.go 的IndexFile中还会做一次幂等去重如果同一 URL 已存在且Updated修改时间一致就直接跳过重新提取只有标签发生变化时才更新标签——这也是目录自动索引能高效处理海量文件的基础。配置目录索引自动扫描与实时监视目录索引由indexer.directories配置项控制。配置完成后重启 Hister 服务端即可服务端启动时会自动扫描该目录随后通过 fsnotify 监视后续变化无需为自动跟踪手动执行hister import file。indexer: directories: - path: ~/Documents label: documents filetypes: [pdf, docx, md, txt]path支持~/开头的主目录简写files.ExpandHome会在运行时展开files/files.go。扫描与监视的实现分两层启动扫描Indexer.IndexAll/FileIndexQueue.EnqueueAll通过walkDirectoryFilesForUser递归遍历目录server/indexer/files.go逐文件应用过滤规则并回调IndexFile。变更监视files/watcher.go 基于 fsnotify 建立递归 watch内置 200ms 去抖debounceTime新增、修改、删除事件会进入FileIndexQueue由后台队列线程分别执行IndexFile或DeleteFile。即使你改的是文件内容而非路径队列也会用修改时间去重避免重复提取。值得一提的是watcher默认跳过隐藏目录以及node_modules、bower_components、jspm_packages、__pycache__、__pypackages__这类依赖/缓存目录——它们的条目数量动辄上万会迅速耗尽操作系统 watch 上限见 files/files.go 的skipDirs定义。目录过滤规则filetypes与其余规则如何共同生效被监视目录上的filetypes是一个扩展名过滤器配置时不要带前导点如md而非.md。filetypes被省略时Hister 会考虑所有通过其他目录规则的文件。filetypes的匹配逻辑可以在 config/config.go 的Directory.IsMatching中看到取文件扩展名去掉点后与filetypes列表做大小写不敏感比对。除了扩展名过滤以下目录规则仍会生效规则行为label给该目录索引出的每个文件附加同一个可检索标签include_hidden默认跳过隐藏文件与隐藏目录开启后才会包含excludes匹配到的路径直接跳过patterns设置后只有匹配的文件才会被考虑indexer.max_file_size_mb超过配置大小上限的文件被跳过sensitive_content_patterns命中的文件被拒绝除非索引路径显式允许敏感内容关于过滤链的几个实现细节值得注意规则叠加顺序IsMatching先判断隐藏文件再判断excludes然后判断filetypes扩展名最后判断patternspatterns一旦设置只有命中任一 pattern 的文件才通过。文件大小indexer.max_file_size_mb默认值为1 MB见 config/config.go 的CreateDefaultConfigMaxFileSize: 1。超过限制的文件在IndexFile/prepareLocalFile中直接返回ErrFileTooLarge空文件返回ErrEmptyFile。敏感内容默认配置自带 AWS 访问密钥、GitHub token、SSH / PGP 私钥等 6 组正则CreateDefaultConfig中的SensitiveContentPatterns。命中检查在 server/document/document.go 的ProcessWithSensitivePatternContext中执行命中即返回ErrSensitiveContent除非文档设置了SkipSensitiveCheck即「索引路径显式允许」。排除规则作用于父目录files.DirectoryMatchesPath会逐级检查根目录以下的每个父目录因为被排除或隐藏的目录在遍历时会被整棵剪枝。hister import file的四种导入格式hister import file命令按扩展名分发到不同的导入路径见 cmd/import_file.go 的importFile分支支持以下格式文件类型扩展名行为Hister JSON 导出.json导入hister export之前写出的文档7z 归档.7z导入压缩过的 Hister JSON 导出保存的 HTML 页面.html,.htm存在时提取原始页面 URL本地文件快照任意受支持的本地格式本地提取内容并提交远程文件文档判定细节.json文件会先通过isHisterJSONExport探测是否为 Hister 导出结构是则走 JSON 恢复流程否则按普通文件快照处理.html/.htm会尝试提取 canonical、OpenGraph 或 Twitter 的源 URL提取不到则同样退化为快照。ZIP、gzip 等其他归档格式必须先解压再导入纯文本必须为 UTF-8 编码——这两条限制会在导入报错信息中被明确提示fileContentImportError。快照导入文件字节永不上传除 Hister JSON 导出、7z 和带源 URL 的 HTML 外其余文件都被视为「本地文件快照」。内容提取发生在命令行客户端进程内提取出的Text/HTML等文档字段通过/api/add提交给服务端原始文件字节既不会发送到服务端也不会被服务端保留。这与 导入文档 中「仅发送提取后的文档字段」的说明完全一致也是快照模式适合「客户端能读到文件、服务端读不到」场景的根本原因——见 cmd/import_file.go 的prepareRemoteFile它复用indexer.PrepareFileContent走与本地索引完全相同的 PDF / DOCX / Markdown / Org / 纯文本处理器。快照文档的身份是remote-file://SOURCE/absolute/pathremoteFileURL构造默认SOURCE为客户端主机名建议用--source指定稳定名称避免主机名变化或多个客户端路径相同时造成身份冲突hister import file --source alice-laptop ~/notes快照同样受indexer.max_file_size_mb大小限制与敏感内容检查约束。导入目录与--watch持续跟踪不提供任何输入路径时hister import file会读取每一个已配置的监视目录并应用其全部过滤器递归导入匹配文件为这些目录创建远程文件快照。这专门用于命令行客户端可以访问、而服务端无法访问的目录# 无输入路径导入所有已配置的监视目录 hister import file # 显式指定文件与目录 hister import file ~/notes ~/Documents/report.pdfexpandImportInputs会为每个输入去重以绝对路径为键并复用files.ShouldSkipDir与Directory.IsMatching保证导入过滤与服务端目录索引行为一致。加--watch后命令在初始扫描完成后持续运行跟踪新增与变更的快照直到 CtrlC 或终止信号hister import file --watch --source alice-laptop ~/notes监视模式有几点明确行为详见 导入文档只处理远程文件快照初始扫描和后续监视都会跳过 Hister JSON 导出、7z 归档以及带源 URL 元数据的 HTML普通 JSON 和无源 URL 的 HTML 仍受支持。源文件删除不会删除已索引快照即使启用了delete_on_remove也不会删除被重命名后发现的新路径会按新路径导入。临时服务端故障会重试提取或校验失败的文件在内容再次变化时会重新尝试--skip-existing只作用于初始扫描之后的变更会覆盖已有快照。--start-date/--end-date日期过滤不能与--watch组合使用。两种文件索引方式的选择建议综合本地文档与快照文档的区别可以这样选择服务端能访问目录首选indexer.directories配置目录索引——服务端启动即扫描、fsnotify 实时监视、FileIndexQueue异步更新无需任何手动命令还附带CleanupLocalDocuments对已删除或不再匹配过滤规则的本地文档做索引清理。服务端访问不到如远程开发机、临时挂载点用hister import file [--watch]在客户端本地提取内容并提交快照原始字节不外传隐私与带宽都更可控。无论哪种方式五类格式的解析器、目录过滤规则filetypes、excludes、patterns、include_hidden、max_file_size_mb、敏感内容检查与大小/编码限制都是同一套实现行为一致迁移成本为零。赞分享搜索引擎全文检索后端前端CLI【免费下载链接】histerYour own search engine项目地址https://gitcode.com/GitHub_Trending/hi/hister点击查看免费下载相关推荐Pwndbg调试会话录制格式支持JSON与XML导出Pwndbg调试会话录制格式支持JSON与XML导出 调试会话录制是漏洞开发与逆向工程中的关键环节能够帮助开发者复现问题、协作分析和存档关键操作。Pwndb逆向工程调试器应用安全开发工具Quickwit 本地文件导入Local Ingest实战使用 quickwit tool local-ingest 将 NDJSON 文件索引进 Schemaless 索引Quickwit 本地文件导入Local Ingest实战使用 quickwit tool local ingest 将 NDJSON 文件索引进 Sch搜索引擎可观测性日志分析链路追踪后端全文检索游戏和软件频繁崩溃Visual C运行库AIO一站式解决方案游戏和软件频繁崩溃Visual C运行库AIO一站式解决方案 你是否经常遇到游戏启动后立即闪退专业软件报错缺少MSVCP140.dll或者应用程序任务调度后端消息队列创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表