從零開始:用C#開發的海量文件內容秒搜神器TDSContent——免費開源高效辦公必備!
從零開始:用C#開發的海量文件內容秒搜神器TDSContent——免費開源高效辦公必備!
還在為全文搜索煩惱嗎?是否被收費軟件的糟糕體驗困擾?是否擔心閉源程序帶來的安全隱患?是否在標準版和增強版之間糾結不已?
別擔心,新時代的開源文件內容搜索神器 TDSContent 來了!它是文件名搜索神器 TDS 的姊妹版,完全免費、MIT開源、安全,綠色無需安裝、無需聯網,直接本地運行即可
一、項目介紹
TDSContent (TDS姊妹版),是一個MIT開源的,超級簡單易用的本地全文搜索工具,幾乎可以在毫秒內,搜索出存儲在目標文件夾里所有文件的文字內容,快速為您定位重要信息。軟件使用簡單,完全免費開源安全,綠色無需安裝、聯網,直接本地運行即可。
TDS文本的搜索實現基于了開源的Lucene.Net(Apache License, Version 2.0)引擎,沒錯,就是Elasticsearch用到的那個Lucene?;谠撘?,我們默認實現了對純文本類文件(txt,json,md,ini,log)、Word文檔(docx)、PPT文檔(pptx)、PDF文檔(pdf), CAD文件(dwg,dxf)等格式的全文索引,后續還將逐漸實現更多文件格式的支持。用戶也可自行開發通過接口實現自定義的解析器。
以下是一段錄屏展示了基本的使用方法,以及對路徑、內容更新的響應。

二、使用上手
TDSContent有著簡潔易用的界面,克制且優雅,沒有任何復雜的面板。
2.1 首先需要以管理員權限啟動,初始化完成后,在下方空白處點擊右鍵,選擇"Add folder to index..." 添加文件夾后即可。
首次啟動會占用一些索引時間,正常使用時,下次啟動初始化時間會大大縮短。

2.2 選擇添加的文件夾路徑
程序默認會包含當前路徑內部所有子文件夾的所有文件。擴展名默認提供了 txt docx pptx pdf doc ppt dxf dwg,如果是純文本類的文件比如 .md .json .log 可以自行在下方 “Add extension of pain text files" 輸入擴展名,以'|'符號分隔

2.3 文件夾路徑已經添加完成
點擊確定后,程序會在后臺更新文件內容。僅首次進行所有內容的掃碼并壓縮為索引存儲在根目錄。如果有文件無法讀取,可在程序目錄的log日志中查看原因。

搜索結果展示:

2.4 文件路徑的更新
您可以添加多個文件夾作為索引目標。當文件夾內容發送變更、路徑發生變更、文件名發生變更時,一正常情況下,程序都會在下次搜索時以增量的方式異步自行處理并修正,無需您手動操作。
程序不會實時的監控系統文件變化,因此無需擔心平時您正常使用時會有性能影響。
三、疑問
3.1 文件數量很多怎么辦?性能會不會變慢?
- 文件數量主要影響在于初次檢索的速度很慢,在索引完成后進行搜索時,響應基本都是百萬量級-毫秒/秒級別響應。
3.2 為什么有的文件內容會搜索不到?
- 當前默認的搜索模式為
PhraseQuery,需要輸入完整的詞以適配分詞后的索引信息。后續將開放更多比如模糊、正則等搜索匹配模式的UI選項(可用選項包含Pharse,TermQuery,WildcardQuery,FuzzyQuery,TermRangeQuery)。 - 首先檢查文件的權限是否能被程序讀取。
- 因為Office軟件會產生大量類似命名的臨時文件,以
~和以{符號開頭的文件將被自動忽略,需要檢查您的文件是否包含以這些符號開頭的命名。 - 索引更新不及時。在特殊情況下,索引的自動更新機制可能會發生異常。這是因為程序是通過讀取USN日志實現更新監控的。如果中間操作過大文件處理較多,或者USN日志記錄中斷都可能造成更新不及時,因此可能需要進行手動的點擊"Reindex selected folders"以重建索引,耗時又索引文件夾內文件數量及大小決定。
3.3 為什么有的文件搜出來了但打開提示路徑錯誤?
- USN更新失效,需要手動的點擊“Refresh USN"重建,耗時大概20秒
3.4 還能支持更多格式嗎?比如xlsx,doc等
- 文件格式轉換由
IFileToStringConverter接口實現,理論上可以任意擴展。但考慮實用性以及開源協議的傳播性(本項目為MIT)等問題,暫時未做多選,后續會逐漸增加。 - 例如dwg、dxf的等格式解析適配已經開發完成,后續將集成到默認實現中。
- 理論上可以任意擴展類型,只要能轉化成文本。
3.5 資源占用情況大不大?
- 沒有后臺常開線程常實時監控或定時刷新系統文件變化,不會無謂的掃描全盤,只會在用戶操作時自動根據USN記錄按需觸發更新。
- USN信息存儲在內存中,由磁盤的文件數量級文件名長度共同決定,大概是每1萬條目占用400kB左右。
- 索引信息為磁盤存儲,當索引創建完成,再次啟動時內存占用將大幅度降低。索引占用情況與Lucene引擎的壓縮存儲有關,測試的壓縮比例大概為100:1甚至更小。
3.6 是否收費?
- MIT開源,好用的話請給個星星。
- 沒有基礎版、增強版,所有格式解析器后續更新的都會免費提供。
四、最后
希望TDSContent可以助您實現高效優雅的文件內容檢索。后續微信公眾號螢火初芒將會和大家分享如在C#中從零開始完成TDSContent這個項目過程中的思考、框架以及技術關鍵點。項目現階段以基礎功能實現為主,僅對關鍵代碼進行了斟酌,仍在持續更新和修復小問題,難免還有bug,我們將持續優化更新。
歡迎大家點贊關注收藏。本項目已在Github倉庫完全開源了!點個 Star ??支持一下!代碼倉庫地址 https://github.com/LdotJdot/TDSContent,其他項目可關注微信公眾號,發送消息 “TDS”,"Json"即可查看!
希望這篇文章對你有所幫助,也歡迎大家在學習過程中提出問題和建議,歡迎隨時交流!
如果github上不了,朋友們可以去百度網盤下載:
https://pan.baidu.com/s/1YIJO6m79_tcByMBdJizegg?pwd=ympy (version c1.1.0)
項目中部分組件使用Apache License, Version 2.0協議,特此聲明:
- Lucene.Net.Analysis.SmartCn: https://lucenenet.apache.org
- PDFiumCore: https://github.com/Dtronix/PDFiumCore
浙公網安備 33010602011771號