从零开始:如何用 C# 开发一款媲美 “AnyTxt” 的文件内容搜索工具

news/2025/10/16 15:17:37/文章来源:https://www.cnblogs.com/luojin765/p/19145746

从零开始:如何用 C# 开发一款媲美 “AnyTxt” 的文件内容搜索工具

说起文件内容搜索工具,那么不得不提到“AnyTxt”,号称本地知识库检索的终极答案。唯一的不足可能就是索引更新机制,不能实时监视文件更改从而更新索引,最小定期更新间隔为半小时,容易导致cpu占用率高,毕竟是全盘全文件类型索引。

很多时候,其实我们对文件内容的搜索,是一个简单文档管理需求,我们期望能的是快速定位文件,而不仅仅是信息。这时候对文件夹以及文件类型的限制就很重要了。还有就是有可能我们会对比如CAD图纸(.dwg、.dxf)的图签或者文件数据库(.db)的表名等特殊文件格式的自定义内容感兴趣。这时候就需要自己来实现扩展了。再加上很多时候,磁盘的信息都是敏感数据,一定要保证软件程序的安全。

因此,我们决定用C#开发一款开源的Windows平台全文搜索工具-TDSContent,并将整个开发过程中的思路与遇到的“坑”记录下来。最终代码与实现已完全开源。https://github.com/LdotJdot/TDSContent

TDSContent_Intro

我们接下来将对标AnyTxt的核心功能来TDSContent的技术实现。

二、从对标AnyTxt特性来设计TDSContent技术实现

在网上搜集了AnyTxt的特性与技术优势后,对应地对TDSContent在各个环节的实现进行了分析。具体如下:
image

2.1 对标AnyTxt(速度): 1 秒内出结果,自建索引,检索延迟 < 100 ms

文件全文关键词检索的方式大致分两种:

  • 直接检索,先枚举出候选文件,在文件中查询出结果,返回对应文件信息。
  • 索引检索,在索引中匹配关键词,生成索引匹配结果,返回索引匹配结果对应的文件信息。

直接检索适合于纯文本类的高效搜索,此时信息的读取成本低,即从文件中读取文本与转化速度都快。比较有代表性的就是ripgrep这类工具,直接开多个线程快速扫描所有;
索引检索适合信息量较大、信息的读取成本较高的场景,例如文件读取速度较慢或读取后存在较耗时文本解析过程。此时就需要提取解析文件,将文本索引存储好,提高后续搜索速度。比较有代表性的就是ElasticSearch这类工具。

为了更好支持更多类型文件内容搜索,TDSContent选择的是索引检索这种模式,采用了与ElasticSearch同样的Lucene的.net移植版本Lucene.net作为索引架构。该架构提供了完整的查询引擎和索引引擎,内部通过倒排索引查询,速度响应非常快。对于每个目标文件夹,我们都将单独进行索引创建维护,这样在近实时的更新写入与读取时都有非常好的性能。
现使用是Lucene.Net.Analysis.SmartCn(4.8.0-beta00017,要勾选预览版本才能在Nuget中搜得到),自带了支持中文分词的Analyzer。

2.2 对标AnyTxt(格式):100+ 文档类型,包括 Office/WPS/PDF/EPUB/MOBI/CHM/HTML/TXT/代码/思维导图等

文件内容的检索主要对象就是文本。对文档格式的支持无非就是将文件转换为我们感兴趣的文本信息部分。对于纯文本文件可以直接读取即可,如果是其他类型则需要进行解析转换。
TDSContent默认内置的转换器用开源库实现了几种常用格式的解析:

  • PDF: 选择PDFiumCore(Apache-2.0 license),它是对PDFium(BSD-3-Clause license)的封装,可从Nuget直接拉取,提供了.NET的接口,可以直接提取出可读的string文本无需额外转换。其他试过的还有貌似效果更好的iTextSharp,但他的协议AGPL v3,怕有风险。
  • docx,pptx: 用Open-XML-SDK(MIT),Nuget直接拉取简单易用。
  • dwg: 用ACadSharp(MIT)。现在dwg的解析库已经相对成熟了(遥想几年前dwg的解析还是个难题,还得用Teigha转dxf后再处理)。
  • dxf: 用netDxf(MIT),可从Nuget直接拉取。ACadSharp也能解析dxf,但实测下来部分dxf会报错,而netDxf兼容性更好。
  • 纯文本: 直接用C#代码读取,包括txt,md,json,log,ini等。

大家可以通过实现项目中的IFileToStringConverter接口,实现自己的格式解析器。

   public interface IFileToStringConverter : IDisposable{string Extension { get; }string Convert(string filepath);}

2.3 对标AnyTxt(OCR):图片 & 扫描件可搜,支持 JPG/PNG/扫描 PDF,内嵌 CPU/GPU 双引擎

TDSContent中对于图片OCR解析转换暂无相关计划,有需要的话可以自己实现。可以考虑使用Tesseract实现本地图片的解析。

2.4 对标AnyTxt(搜索语法):支持精准 / 模糊 / 正则,AND/OR/NOT、通配符、二次结果内筛选

由于基于的是Lucene索引框架,因此TDSContent能支持Lucene的所有查询方式,主要包括:

查询方式 意义
TermQuery 精确查询
TermRangeQuery 查询一个范围
PrefixQuery 前缀匹配查询
WildcardQuery 通配符查询
BooleanQuery 多条件查询
PhraseQuery 短语查询
FuzzyQuery 模糊查询
TDSContent默认的是采用”短语查询“,其他查询方式未UI中还未开放,但内部基本已实现。

2.5 对标AnyTxt(预览):右侧浮窗高亮关键词,无需打开源文件即可复制文本、翻译、跳转目录

尽管我们在Lucene引擎中,对每个文件的文本内容是通过索引的方式执行了全文存入的。但是我们没有做预览窗口。为了简洁,仅在目标结果文件下方做了最多5行的高亮匹配文本展示。

results

其他如翻译功能也没实现。

2.6 对标AnyTxt(索引策略):实时监控 + SSD 优化,自动增量更新,AES-256 加密缓存,支持网络共享盘

TDSContent没有实时监控线程。因此文件的更新是通过索引项目的USN日志实现。基于USN的好处是,哪怕用户在程序关闭状态下执行内容修改、重命名、文件夹修改、路径移动等操作,当下一次程序启动时,会依照记录自动实现对应索引结构更新。这样会非常经济且高效,不会有严重的卡顿以及频繁扫盘等问题,尤其不影响笔记本续航,缺点就是必须依赖USN。

2.7 对标AnyTxt(扩展性)

本项目为开源免费软件,可任意扩展。

三、其他

关于UI的优化及界面的实现可以参考这一篇。其他的关于数据组织及存储更新机制,感兴趣的可关注微信公众号萤火初芒,我们会在后面和大家详细分享。

如果你对这款工具有任何建议或想法,欢迎随时交流!项目已在 GitHub 完全开源 https://github.com/LdotJdot/TDSContent

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/938283.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

医疗公有云市场第一!

近日,国际数据公司IDC发布《中国医疗云IaaS+PaaS市场份额,2024:智能云时代》(Doc#CHC53772125,2025年9月)权威报告。报告显示,中国电信天翼云凭借在医疗云领域的深度布局与技术沉淀,以领先优势在2024年中国医疗…

11 继承--super和方法重写

11 继承--super和方法重写继承---super和方法重写 Super 子类中调用父类的方法/成员变量 私有的东西无法使用super调用 #调用父类的name属性: super.name#调用父类的方法 super.show()子类的无参构造中会隐含一个父类的…

2025手持光谱仪/光谱分析仪/便携式光谱仪、矿石/元素分析仪、合金/金属/不锈钢/铝合金、贵金属、三元催化、赛普斯、IF光谱仪推荐榜

手持式光谱仪作为现代工业检测与分析的重要工具,在合金成分分析、矿石勘探、土壤重金属检测等领域发挥着关键作用。随着技术的不断进步,手持式XRF光谱仪的性能和精度得到了显著提升,为各行业提供了更加便捷、高效的…

DC-1靶机通关

DC-1靶机 靶机地址:https://www.vulnhub.com/entry/dc-1,292/ 难度: 低 目标: 获得 root 权限 + 5个flag DC-1是VulnHub平台上的一个Linux渗透测试靶机,主要用于模拟Web应用安全场景,包含Drupal CMS漏洞利用、提权…

长视频理解与生成技术突破

本文介绍了在CVPR 2023会议上展示的四项关于长视频理解与生成的前沿研究,包括基于电影元数据的场景表示学习、选择性结构化状态空间模型、多模态模型动态推理和图像协调技术,这些技术显著提升了视频内容分析的效率和…

在 Android 11 上构建 WiFi 热点并发协助(同时开启 STA + AP 模式)

在 Android 11 上构建 WiFi 热点并发协助(同时开启 STA + AP 模式)2025-10-16 15:11 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto …

27 LCA模拟赛3T3 三等分的数组 题解

三等分的数组 题面 小 Y 有一个长度为 \(n\) 的数组,数组中的每个数都是一个 \(1 \sim m\) 之间的正整数。 小 Y 决定将这个数组分成若干个三元组:每个三元组要么由三个相同的数字组成,要么由三个连续的数字组成。换…

26 LCA模拟赛3T2 连边 题解

连边 题面 给定一张初始 \(n\) 个点,没有边的图。 给定 \(m\) 表示有 \(m\) 个时刻,第 \(i\) 个时刻会将 \(gcd(a,b) = m - i + 1\) 某些点连起来。 有 \(q\) 个询问,每次询问给定 \(x, y\),你需要回答 \(x, y\) 最…

28 S2模拟赛T2 开会council 题解

council 题面 给定一棵 \(n\) 个节点的树,每个节点有黑白两种颜色,还有 \(k\) 个特殊节点。 设距离表示两个点间路径上边权的最大值。 我们每次指定一个白点,对于每个黑点,设 \(disb\) 表示其到任意一个特殊点距离…

25 LCA模拟赛3T1 ROI 2012马赛克 题解

马赛克 题面 题解 这道题想了很久如何快速求出一个点最右边或者最左边的不相容点,但是没有什么思路。 我们将题目中给定的有序对抽象为 \((a,b)\)。 最后 xpigeon 带神给出了一个结论,就是一段序列中只要出现了两个互…

实验记录2025/10/14

我现在是把picsize从640变化到了960,而且把原先7000张的训练数据集精简成了3600张的数据集 下面是跑出来的结果: Validating runs/detect/yolo11-tea-yolo11s36/weights/best.pt... Ultralytics 8.3.182 🚀 Python…

个人微信开发框架

个人微信开发框架、微信二次开发api、个人微信开发api接口,微信个人号开发API WTAPI开放平台是基于微信开放平台的二次封装API服务,开发者可以使用本服务来处理微信中的各种事件,并可以通过后台调用对应的 API 来驱…

投资指标技术分析

投资指标技术分析指数平滑移动平均线(MACD) 移动平均线收敛差异(MACD)是一种振荡类型的指标,该指标被交易者广泛用于技术分析(TA)中。MACD是一种趋势跟踪工具,利用移动平均线来确定股票、加密货币或其他可交易…

linux源码编译python

1. 下载python源码 python官网(https://www.python.org/)下载源码包 例如python3.8: Index of /ftp/python/3.8.9/ 2. 安装依赖yum install -y zlib zlib-devel sqlite-devel libffi-devel gcc openssl-devel libff…

uni-app x开发商城系统,Swiper 轮播图

一、概述 该组件一般用于导航轮播,广告展示等场景,可开箱即用,具有如下特点:自定义指示器模式,可配置指示器样式 3D轮播图效果,满足不同的开发需求 可配置显示标题,涵盖不同的应用场景 具有设置加载状态和嵌入视…

昂瑞微OM6651A:国产车规级蓝牙芯片的破局者

OM6651A——第二颗车规级低功耗蓝牙芯片,成功通过涵盖机械应力、温湿度循环等7大类共41项极限测试,斩获赛宝实验室颁发的AEC Q-100 Grade1认证(-40~125℃)。这颗采用3x2.7x0.5mm极薄LGA封装的芯片,以超低功耗与越…

2025年中央空调/锅炉房/机房运维服务厂家最新权威推荐榜:专业托管与维修外包一体化解决方案精选

2025年中央空调/锅炉房/机房运维服务厂家最新权威推荐榜:专业托管与维修外包一体化解决方案精选随着我国工业化和城市化进程的加速推进,暖通空调及动力设备运维服务行业迎来了前所未有的发展机遇。作为建筑能源系统的…

【终极解决方案】api-ms-win-core-path-l1-1-0.dll 缺失?Win7/Win10/Win11完整修复教程

许多用户在运行游戏、设计软件或系统程序时,遇到“api-ms-win-core-path-l1-1-0.dll 缺失”错误提示。本文详细解析该 DLL 文件的作用、报错原因,并提供三种高效修复方案:一键DLL修复工具、手动注册方法以及 Win7 专…

2025 年最新推荐分切机实力厂家权威榜单:覆盖全自动高速、铝箔、薄膜、高精度等机型,为软包装企业精选优质设备

随着软包装行业不断升级,分切机作为核心生产设备,其品质与性能直接关系到企业的生产效率、产品质量及市场竞争力。当前市场上,分切机厂家数量繁杂,部分厂家设备存在精度不足、材料适配性差、售后服务缺失等问题,导…

打破应用跳转流失困局,提升推广链接转化率

在移动互联网生态中,应用是用户高频使用的核心入口,而跳转应用是连接用户需求与服务落地的核心桥梁,能够提升用户活跃度与留存。传统流程需先跳转网页再手动引导至应用市场,多一步操作导致流失率增加,尤其影响广告…