2021年4月16日 星期五

[套件分享] 開源檔案搜尋與全文檢索軟體:Recoll

 



在充滿資訊與知識的現代化電腦上,肯定有成千上萬的檔案保留了我們的經驗心血,若是在企業組織內,更會有驚人的巨量文件與檔案。

當面臨需要從海量檔案裡搜尋需要的資訊,除了依靠資料夾與檔名分門別類儲存之外,還有什麼好工具可以協助我們呢?





檔案搜尋

當我們還記住可能的檔名或副檔名時,有些工具可以方便我們快速搜尋:



Everything

在 Windows 作業系統上,我推薦安裝 Everything 軟體,它可以提供比內建更方便快速的搜尋能力,Everything 是免費軟體。




Spotlight

在 macOS 作業系統已經內建有 Spotlight,只要開啟它再輸入關鍵字,即可找到所要的檔名或應用程式。






Nautilus

在 Linux 相關發行版本,具有視窗介面的都會內建 File Manager (檔案管理) 程式,它也具備有搜尋檔案的功能,圖中是 Ubuntu GNOME 所搭配的 Nautilus 套件。




locate

若使用的是 Unix 及其衍生的作業系統,絕大多數都內建有 locate 這支程式,搭配 updatedb 指令更新檔案資料庫,即可快速找到所要的檔案。












全文檢索

檔案搜尋固然能解決問題,但我們的問題卻不僅止於此。有時候我們根本連檔案名稱都記不得,或是需要的資訊是在檔案內容而非檔名,該怎麼辦呢?

在 Unix 其及所衍生的作業系統內有一支 grep 程式,可以透過它搭配其它指令以管線串起來用近乎暴力方式對整個資料夾或檔案系統列舉,但這樣是非常沒有效率的事,不僅耗時,甚至可能對整個系統的效能產生重大影響。

我記得在很久以前曾經聽 Google 說過,當搜尋做的夠好,根本不需要以資料夾分別存放資料;不管是否真的說過,但好用的搜尋確實對於我們要找資料可以大大降低負擔,尤其是可以對內容進行搜尋時。

在開源軟體領域,有一套很棒的檔案搜尋及全文檢索軟體,它完全解決了我的問題。


Recoll



Recoll 是一套開源的檔案搜尋與全文檢索軟體,採用 Python 開發且支援跨平台,包括最常使用的 Linux、macOS 與 Windows。

它可以提供以下功能:
  1. 全文檢索支援大多數的檔案格式,部份的檔案格式則靠整合外部程式提供內容索引。
  2. 可以檢索多國語言,包括繁體中文。
  3. 支援使用複雜的檢索條件式,以便精確篩選到所要的檔案。
  4. 只要可以存取到的儲存路徑,都可以被 Recoll 檢索。在檔案類型部份,如文件檔、郵件與其附件檔、圖片的 EXIF、向量圖檔裡的文字、壓縮檔等等,均可處理。
  5. 提供檢索結果的結果預覽,並且可以直接呼叫本機相對應的應用程式開啟,或者使用預覽功能快速查看內容文字。
  6. 檢索結果可以採用 Web 方式輸出,因此可以很容易的調整結果顯示樣式。
  7. Recoll 是自由軟體、開源軟體,以 GPL 授權釋出。
  8. 俱備可自訂細節的各種設定,例如要排程製作索引的時間、檢索的路徑、排除檔案或路徑等等。
  9. 內建多國語系,有簡體中文但還沒有繁體中文 (我有點想動手了 XD)。



使用情境


在我的 macOS 上安裝相當簡單,下載後依據標準的安裝方式即可開始使用。第一次啟動 Recoll 時會詢問要檢索的位置等,請依據需要選用後,它即會開始製作索引。


Recoll 檢索



由上圖中可以看到使用結果,在搜尋列打入關鍵字,即可在下方出現符合結果的檔案,並且將檔案內文符合的片段預覽呈現出來,非常方便,包括 .odt (LibreOffice/OpenOffice Writer)、.docx (Microsoft Office Word)、.pdf 等等格式都可以被正確檢索與顯示。

快速預覽檔案內容



若想要用兩個以上的條件進行篩選,則可以使用 and 運算字元搭配使用,若兩個以上的條件不加 and,則表示以 or 進行篩選。


以多個關鍵字篩選



當我們要檢索特定類型的檔案,例如電子郵件時,可以在上方選取 message,再搭配關鍵字即可快速取出我們需要的資料。不管是 .eml、.msg 或者打包過的 .zip、.mbox 類型都可以被正確的進行內容檢索。
 
找出需要的電子郵件


若只想要以檔案名稱搜尋不要檢索內容時,請將搜尋列的目標類型選擇 File name,即可以傳統檔案搜尋模式找出您要的檔案。

僅對檔案名稱做搜尋





調整版面


上面使用範例圖中的檢索結果,是我已經修改過的呈現方式。

若您想要自己改變呈現的方式是相當容易的,因為它就是採用 HTML 與 CSS 的方式調整版面樣式,請到功能表的 [Preferences] > [GUI Configuration],切換至 [Result List] 頁籤,再按下 [Edit result paragraph format string],即可編輯您所要的樣式。

編輯結果清單呈現樣式






更新索引


一般我會將更新索引設為排程,安排在每天凌晨四點執行。若要變更排程作業的時間,請點選功能表的 Preferences > Indexing schedule,再按下 Cron scheduling,它會出現一個指定時間的畫面,請依據指示填入時間再按下 Enable 啟用即可。

設定排程更新索引時間


如果排程作業時間還沒到,又想要先立即更新索引,以便可以檢索到今天所放置的新檔案怎麼辦呢?

這也不難,在 Recoll 功能表的 File > Update Index 點選後,Recoll 就會立即更新索引。但要注意,更新索引會吃掉一些 CPU 與 DISK I/O 效能,若系統正在使用中需要較多效能,則要避開。








擴充類型


Recoll 預設已經可以檢索許多類型,但有些檔案類型還是需要加裝套件才能支援,以下提供建議的安裝清單,方便使用者快速安裝。


Ubuntu、Debian 系列 Linux:
# 安裝所需套件
apt install antiword
apt install libxml2-dev libxslt-dev python-dev
apt install exiftool
apt install libxslt1-dev
apt install python-libxml2
apt install python-rarfile
apt install python-libxlst1


macOS:
# 安裝所需套件
pip3 install lxml
pip3 install mutagen
pip3 install rarfile
pip3 install py7zr
pip3 install py7lzma
pip3 install chm
pip3 install libxslt1
brew install poppler
brew install pdftotext
brew install xpdf
brew install unrtf 
brew install ghostscript




使用指令


儘管 Recoll 已經提供了方便的 GUI,但若想要使用指令方式檢索呢?Recoll 完全支援以指令操作。

# 以指令檢索檔案內容
recollq 'proxmox -報價 application/pdf'

以上方的指令為例,可在命令列找出 PDF 檔案內含有「proxmox」,但不要有「報價」的結果,如果再搭配 script 做自動化,可以衍生更多的應用場景。






使用網頁


Recoll 做為一個安裝使用且有 GUI 的軟體,自然必需在本機才能順利操作。若今天需要從其它電腦連線過來檢索,可以搭配另一個專案組合,即可經由瀏覽器連線後,檢索另一部電腦裡的檔案。

Recoll WebUI


相關的安裝與使用方式,可參考文末的 Recoll WebUI 安裝手冊連結。






Windows 如何安裝?


我們提到 Recoll 支援跨平台,除了前面的 macOS 使用畫面,其它平台的執行畫面如下:


在 Ubuntu Linux 使用 Recoll




在 Windows 使用 Recoll


不過,當您實際想要在 Windows 上安裝使用的時候,您是無法在官網上找到下載點的。

針對這一點,作者在網站上有提到原因,雖然 Recoll 是自由與開源軟體,但作者自己不使用 Windows 作業系統,所以他為了打包可以在 Windows 上順利安裝與執行 Recoll 花了很大的功夫(尤其是開發環境的建置),所以希望要使用 Windows 版本的朋友支付一點點的費用,以支持作者辛苦的工作。

這個版本相當乾淨,不會有廣告也不會回傳資料到官方網站,可以放心安裝使用,而且它是一次性支付永久使用,沒有約期或訂閱收費的綁定問題。



付款支持 Recoll 開發


身為自由與開源軟體支持與推廣者,我認為對於好的自由與開源軟體付費是合情合理,例如開源虛擬化平台 Proxmox VE 我也有每年購買約期技術服務。

只有讓這些開發團隊有更大的動力與支持繼續下去,才是使用者最大的回饋,長此以往終將形成良性循環。










結論

Recoll 提供了強大的全文檢索能力,不僅程式碼開源更是支援格式眾多,在許多企業應用場景可以解決許多困擾著 IT 單位的問題。

Recoll 的其中一種應用,是把 Recoll 裝在 Windows 或 Linux 建置的檔案伺服器上面,經由它建立好索引之後,提供系統管理者在需要撈取檔案時極大的幫助。

試想一個場景,企業經常遇到公司同事忘記檔案在那裡找不到檔案,只記得有那些內文關鍵字拜託 IT 人員協助尋找,但 IT 人員在沒有全文檢索軟體的情況下,要怎麼快速的解決使用者拋出來的難題呢?採用 Recoll 之後,這些問題全都迎刃而解。

如果想要檢索的檔案放在 NAS 主機上又該怎麼辦?簡單,Recoll 當然也可以檢索它,請到功能表的 Perferences 裡的 Index configuration 裡面,在 External Indexes 的區塊中將 mount 進來的 NAS 路徑加入即可。











參考資料