提到 Ragic 資料庫中最快速又最方便的搜尋工具,大概就是「全文檢索」了!只要輸入關鍵字,就能找到相關的資料。但是,你是不是常遇到「明明輸入了關鍵字,也確定有這個資料,但卻搜尋不到任何資料」的情況呢?尤其當你的編號都是英數混合的時候,你可能很熟悉這樣的情況,例如我有一筆產品資料,產品編號是CHO331343-GERMANY,但如果我在全文檢索搜尋框中輸入「331343」,是怎麼樣也搜尋不到的!
這是為什麼呢?今天就來個全文檢索運作大解密,了解之後,你就不會再對這個功能有所誤會,也可以更加善用,或甚至是找到更適合你的搜尋方式!
Ragic 的全文檢索功能並不是由 Ragic 自己發明的搜尋引擎所開發的工具,而是採用第三方搜尋引擎工具「Lucene」,這是一套用於全文檢索和搜尋的開放原始碼程式庫。
無論是像 Google 一樣自行開發搜尋引擎,或是像 Ragic 這樣採用第三方工具,單就「搜尋引擎」來看,其實大架構上運作邏輯都是相似的。一般來說,搜尋引擎會先針對整個資料庫中既有的內容,以像是在閱讀文章一樣的方式,把資料庫內容裡,每一個系統認定的「字」,做成「索引」(index)——這些建立好的「索引」集結起來,就像一本字典,這個字典會是之後搜尋引擎運作的依據。
當你在輸入關鍵字(key word)的時候,搜尋引擎實際上做的事,就是從這本字典裡,找找看有沒有跟關鍵字一模一樣的「索引」,有的話把這個索引所在的那筆資料找出來。沒有被做成索引、不在字典裡的東西,就不會被叫出來。
系統怎麼認定誰是「一個字」,進而決定誰要做成「索引」呢?不同語言的判斷邏輯可能就不太一樣。以英文來說,由於英文不像中文可以容易的辨識出怎樣算是「一個字」,很多時候採取的判斷基準就會是「空格」,例如「Ragic Database」就會根據中間的空格,被判定是兩個字。
而以 Ragic 系統來說,「空格」一樣被系統認為是區隔字與字之間的依據,而破折號( - )、英數混合字串中英文與數字的區隔則不被電腦系統認為是區隔字與字之間的依據,所以「SO-20191219-01」會因為中間沒有任何空格,只是破折號,會被看作一個字;「CHO331343」也因為中間沒有空格,只是英數字元而不會被拆開看待。
回頭來看,如果我的資料內容是像前面案例提到的「CHO331343-GERMANY」,對於系統來說,它一樣因為中間沒有空格,只有就是「一個字」,不會將「CHO331343」以及「GERMANY」視為兩個不同的字,也因此,你要找這個資料時,需要輸入完整的內容「CHO331343-GERMANY」來進行搜尋,你沒有辦法只輸入片段的內容「CHO331343」或「HO」,或是「331343」,又甚至是「GERMANY」來搜尋到你要的內容,因為以上這些片段字串並沒有被建立成索引,存在字典中。
對系統來說,這就像你想找蘋果的英文「APPLE」,你是沒有辦法單用「PP」作為關鍵字來搜尋的,除非你搭配使用正規表示法寫條件來輸入你的關鍵字。
這就是為什麼假如要搜尋產品編號是「CHO331343-GERMANY」的資料,在全文檢索輸入「331343」就搜尋不到的原因——字典裡只有「CHO331343-GERMANY」這個索引(字),沒有「331343」這個索引(字)。
如果你非得要系統可以在你輸入「331343」的時候就找到這個產品編號,你的編號就得按照電腦系統的規矩來,以空格區分字串,例如存成「CHO 331343 GERMANY」。
當然,不同的軟體,可能會針對各自特定的一些應用及需求,去調整一些細部的判斷方式,來決定「怎樣算是一個字」。例如, Google 搜尋引擎會特別針對英文字的複數/時態變化做處理,許多英文字不管有沒有加「s」,都判斷為同一個。
你可能會問,「若無法搜尋到『不完整』的關鍵字,為什麼我在輸入關鍵字、尚未完整輸入這個字的同時,系統卻知道我可能要打的是什麼,出現提示的畫面呢?」(如下)
這個是許多檢索機制都會提供的功能,我們可以叫它「搜尋建議」,目的是根據你現階段輸入的資訊,找出包含你可能要輸入的「完整關鍵字」、以及包含可能關鍵字的相關資料,列在檢索欄的下方。
以 Ragic 的全文檢索功能來說,會列出三筆「建議關鍵字」,以及最多五筆「相關資料」(你已輸入的資訊會被標成紅色),目的都是要給你一些提示,讓你即使記不得最完整的關鍵字,也有可能找到你要的資料。只要以滑鼠或快捷鍵點選系統提示的「建議關鍵字」或「相關資料」,系統就會代替你輸入這個完整的關鍵字,就可以不用自己手動全部打出完整的關鍵字來才能搜尋了!
但是,「搜尋建議」並不代表搜尋結果,所以,如果在輸入到一半、又沒有點選搜尋建議的情況下,按到「Enter」(或點放大鏡圖示)的話,仍然不會看到任何內容。(除非剛好有另一個被建為索引的「字」,正好等於你輸入到一半的內容)
以上面的例子來說,輸入了「CHO3313」來搜尋,在搜尋框下方看到了搜尋建議,但假如你不點選、直接在這個狀態下 Enter 的話,仍然搜尋不到任何內容。
另外,出現「搜尋建議」的前提是,你所輸入的部分字串,要剛好是從系統中關鍵字的字首開始打,這樣系統才能判斷你可能想要輸入的內容,進而做出提示。如果是從關鍵字的中間段開始打,例如要找 「CHO331343-GERMANY」 ,你輸入 GERMANY 的話,仍然不會因為這樣而出現對應的搜尋建議喔!
要提醒的是,有時候從「搜尋建議」看起來,有時似乎會出現跟上面說明不同的結果——只是輸入了關鍵字的中間段字串,沒有從字首開始,系統似乎就幫我找到關鍵字並且把中間那一段標記上紅色了。例如下圖,輸入 GERMANY ,搜尋建議的相關資料上出現了「CAN331330-GERMANY」為編號的資料,其中「GERMANY」還標成紅色。
這其實是系統字串上色造成的誤會。從上圖資料來看,實際上系統將某些資料列在搜尋建議裡,並不是因為這些資料的「編號」欄位是「CAN331330-GERMANY」,而是因為這些資料有其他欄位(以這裡為例,是因為 Country of Origin 這個欄位)的欄位值剛好是Germany。
只是在顯示出結果時,「標記紅色」這件事是另一段處理、另一種邏輯,在顯示出相關資料時,系統不是依照前面的字首字尾邏輯決定要幫哪些字串上色,而是會將所有相關資料中跟你輸入的字串 GERMANY 相同的地方都上色,這個部分有時會讓一些使用者誤會了。
你在用 Ragic 的全文檢索時可能還會有以下幾個需求:
1. 如果我真的只記得片段的字串怎麼辦?
那就用用Ragic其他搜尋及篩選的工具吧!除了用關鍵字搜尋的全文檢索以外,Ragic也有提供表單的左側搜尋以及欄位標頭搜尋,讓你可以針對指定的欄位做精準的篩選,有需要的話還可以一次針對多個欄位下條件。詳細的功能說明可以參考我們的這篇文件。
2. 全文檢索有沒有支援什麼語法,讓我可以根據指定的規則一次輸入多個關鍵字來找資料,例如"Chocolate"但不能是"White Chocolate"的資料呢?
Ragic也有支援相關的語法功能!當你在Ragic搜尋時,可以寫一些搜尋列的語法來結合不同的字詞,或是使用布林運算子建立較複雜的查詢來找到特定的資料,這與Google的語法相似。詳細說明可以參考我們的這篇文件內容。
3. 全文檢索的搜尋引擎看起來好像壞掉了,無論怎麼搜尋都找不到資料?
系統每隔一陣子就會自動幫你重建一次索引,但有可能在你新增資料後沒有辦法立即找到新的資料,或是可能有其他原因導致搜尋引擎沒有作用,有需要的話,你也可以手動重建搜尋引擎索引來解決此問題。
另外,由於目前全文檢索只能搜尋表單頁的內容,如果在表單頁將某個欄位設定為隱藏時,即使設定列表頁顯示該欄位,該欄位的內容便無法用全文檢索搜尋到,因此如果找不到資料時,也可以確認一下是否在表單頁隱藏了該資料欄位。