:::

QNAP的全文搜尋引擎Qsirch居然只能索引docx等文件檔 / QNAP’s Full-Text Search Engine Qsirch Can Only Index Document Files Such as Docx

6月 24, 2024 , , , 0 Comments Edit Copy Download

2024-0121-165024.png

Qsirch不能索引txt跟html真是讓我十分震驚。

It's really shocking to me that Qsirch cannot index txt and html files.


QNAP的全文檢索引擎Qsirch / Qsirch: The full-text search engine in QNAP

2024-0121-145406.png

當我們需要從大量檔案中找到特定想要的資訊時,我們要的就是全文檢索引擎技術(full-text search engine)。全文檢索引擎是一種用於電腦系統中的搜尋技術,其功能在於快速有效地從大量文件檔案中檢索出包含特定關鍵詞的檔案。不同於傳統的檔案搜尋,全文檢索引擎可以搜尋檔案內容,而非僅僅侷限於檔案名稱或後設資料(metadata)。這種技術會建立可供搜尋的索引檔案,使得搜尋過程更為高效。使用者可以透過輸入關鍵字,快速找到包含這些字詞的檔案,大幅提升資訊檢索的速度和準確度。

https://www.qnap.com/zh-tw/software/qsirch

https://www.qnap.com/zh-tw/software/qsirch 

Qsirch是由QNAP (Quality Network Appliance Provider)開發的全文檢索引擎。QNAP是一家專門從事網路附加儲存(Network Attached Storage, NAS)設備和相關軟件開發的公司。Qsirch專為QNAP的NAS設備設計,以提升在這些設備上儲存的大量檔案的搜尋效率。透過Qsirch,使用者可以在QNAP NAS中快速找到需要的檔案,無論是Office或PDF文件、圖片還是影音檔案,都能輕鬆搜尋。Qsirch的特色在於其深度整合於QNAP NAS系統中,當使用者存放資料到NAS系統之後,Qsirch就會即時建立索引以提供使用者隨時搜尋。

此外,Qsirch不僅支持關鍵字搜尋,還包含了多種進階搜尋功能,如模糊搜尋、布林搜尋和搜尋歷史紀錄等,進一步豐富了使用者的搜尋體驗。對於需要管理大量檔案的使用者來說,Qsirch提供了一個強大且便利的工具,以提高工作效率和數據管理的便利性。

儘管如此,實際上使用Qsirch的時候卻會遭遇到索引跟全文抽取的問題。以下就來讓我們看看這背後的可能原因為何。


Qsirch的索引問題 / The indexing issue of Qsirch

2024-0121-150417.png

作為一個消費級的產品,Qsirch僅提供了最基本的功能,這使得實際使用Qsirch時常常找不到自己想要的文件。

其中一個比較大的問題是索引建立過程中的斷詞方式。根據我的觀察,Qsirch在處理中文的時候大概是使用了某種斷詞技術。舉例來說,「文件全文搜尋」可能會被拆分為「文件」、「全文搜尋」。當使用者在搜尋「文件」或「全文搜尋」的時候,文件能夠順利找出來。但當使用者搜尋的是「文件全文」的時候,反而是什麼都找不到。更不用說的是使用者要搜尋的是只有中間的文字「件全文」,當然也是不可能找得到。

也許這樣的表現很違反一般人對於全文檢索引擎的想象,但全文檢索引擎的表現程度其實取決於系統設計者對於使用者的資訊需求以及保存文件內容的理解,這是一門很複雜的技術。

2024-0121-152121.png

https://www.slideshare.net/AshishKumar207/introducing-elasticsearch-ashish 

目前我會比較建議用包含Apache Solr在內大多全文檢索引擎都會預設採用的標準斷詞器Standard Tokenizer的做法。如果是英文或是有空格的語言,採用空格斷詞。如果是中文、日文、韓文,則採用單詞斷詞,不考慮多詞的情況。如此一來,儘管索引檔案的體積會增加、智慧關鍵字功能會比較難實作,但「件全文」這種奇怪的查詢語句就能夠被順利找到。


Qsirch的全文抽取問題 / The full-text extraction issue of Qsirch

2024-0121-152203.png

Qsirch另一個問題是能夠全文索引的檔案類型十分有限。撇除掉不具備文字的圖片、影片、音樂檔案,Qsirch能夠進行全文索引的文件類型只有PDF、Email (需要搭配Qmail Agent使用)、以及Microsoft Office系列的Word、Excel跟Power Point。

是的,開放文件格式(open document format, ODF)太小眾了沒有受到Qsirch青睞我還能理解,但是就連程式開發者常用的txt、csv、html都不能被全文索引,這就讓人感到十分困擾了。

我知道這時候業務應該會跑過來說:「就算沒有全文索引,但是還是可以搜尋檔案名稱啊。」但是我要的功能就是全文檢索,而不是搜尋檔案名稱。這是兩個不同層次的問題。

2024-0121-153144.png

https://blog.pulipuli.info/2017/03/apache-tika-using-apache-tika-extract.html

很久以前我就在「使用Apache Tika指令列抽取文件的內文」介紹過如何從各種文件檔案裡面抽取全文來建立索引的做法。這樣不僅僅是能夠取得txt、csv、html等純文字檔案的內容,甚至能夠抽取出ODF的odt、ods跟odp等文件檔案的全文內容,這樣就能為各種檔案類型建立全文檢索的索引了。附帶一提,當時Apache Tika處理圖片跟影片的時候只能抽取出後設資料的資訊,不過現在Tika也可以結合預訓練深度學習模型來識別物件了呢。


將文件轉換成docx來讓Qsirch索引 / Converting documents to docx format to enable indexing by Qsirch

https://www.npmjs.com/package/html-to-docx

https://www.npmjs.com/package/html-to-docx 

既然目前沒有時間建立其他的全文搜尋引擎,也只好先繼續使用Qsirch吧。Qsirch的索引斷詞不是我能解決的問題,但至少我得要讓txt或html的內容轉換成Qsirch能夠索引的docx檔案才行。我曾經試過直接將.html檔案重新命名為.docx,但Qsirch看起來是無動於衷。

2024-0121-154354.png

https://github.com/privateOmega/html-to-docx/blob/master/example/example-node.js 

在伺服器端,我找到的方案是Node.js的html-to-docx套件。使用時請參考example-node.js的寫法來建立docx檔案。但這個套件只能用於伺服器端,不能在瀏覽器運作。

2024-0121-154520.png

https://codepen.io/dolanmiu/pen/RwNeObg 

在瀏覽器端,我使用的是DOCX方案。它雖然也有伺服器端的處理方式,但是建立docx檔案時必須遵循它的語法,使用起來門檻很高。要單純地將HTML轉換成docx的內容,並不是這麼容易。

https://github.com/evidenceprime/html-docx-js/blob/master/test/sample.html

https://github.com/evidenceprime/html-docx-js/blob/master/test/sample.html 

網路還有很多其他知名的套件,例如html-docx-js套件,不過這些我就沒有繼續研究了。可以的話,我希望盡可能推廣的是ODF開放文件格式, 鼓勵大家多使用LibreOffice

至於為什麼不是轉換成PDF而是轉換成docx呢?這是因為我後續還要編輯檔案的內容,如果轉換成PDF就比較不容易進行後續處理了。


結語 / In closing

很多人是為了整理大量檔案和文件才購買了NAS。但從上面的分析來看,要找到存放在NAS裡面的檔案和文件,可能沒有你想象中的容易。購買NAS之前,可能有必要再好好地確認你的需求跟NAS能夠提供的功能。

特別是全文檢索引擎,很多人都把全文檢索想得太簡單了。實際上它是一門遠比一般人認知到的還要複雜的技術。

cover.png

https://www.google.com/books/edition/_/HbyAAAAACAAJ?sa=X&ved=2ahUKEwi60Yfrju6DAxXyiq8BHaOYA_0Q7_IDegQIGhAC

如果對全文檢索有興趣的話,我推薦可以閱讀「Modern information retrieval: the concepts and technology behind search」這本書。作者Baeza-Yates跟Ribeiro-Neto對檢索背後的原理有相當多的解釋。


那麼這篇關於Qsirch的討論就到此為止了。文章的最後要來問大家的是:你是怎麽搜尋文件的呢?

1. 放到雲端硬碟裡面,用雲端硬碟的文件搜尋。

2. 電腦上直接搜尋。

3. 那個文件就在A資料夾裡面的B資料夾裡面的C資料夾裡面的D資料夾裡面啊。

4. 「媽,我那份檔案放到哪裡去了?」

5. 其他:歡迎在下面留言分享喔。