全文檢索(full text search)到底是什麼意思。
latest #18
從 SQL 的下法,應該是包含所有的欄位,進行檢索。
如果有關聯到另一張表格,另一張表格的欄位,也得包含進來。
這樣 SQL 中的 Where 語法,就會包很多欄位名稱。
最近學到,「全文檢索」的另一個實作方法。就是「分詞」。
「分詞」雖然可用 SQL 的語法,但還必須透過外部函式來輔助才能完成分詞的動作(to_tsvector)。
如果「分詞」與「檢索」動作同時進行,效率會變得很慢。所以必須對「欄位」的所有內容,進行過一次分詞,這樣,進行比對的時候,才會比較快。
檢索的時候,除了用一個詞彙來找尋之外,還可以用二個以上的詞彙來進行檢索。
從分詞的函式(to_tsvector)的應用方式,還可以用整段文字,拿來進行檢索。
口 拿分詞後的結果,進行檢索條件。
這感覺有點像是 or 的用法。只要有符合條件的,都納進來。
回歸到原先問的,到底「全文檢索」是什麼意思呢?
我覺得,全文檢索,所檢索的範圍,在預設上,應該是一張表格裡的所有欄位,而不用特別在 where 的子句中,再度加入欄位名稱。
但是,我學習到的 SQL 的撰法結果,好像不是這樣。這跟我接觸之前的想像,很不一樣。
所以,有可能,全文檢索的「檢索範圍」,應該就只有撰寫者所指定的特定欄位內容,而非整張表格的欄位內容。
啊哈哈。 ^^; 如果我沒弄錯(弄錯請指正),SQL標準中沒有「全文檢索」。「全文檢索」是MySQL 4.1後新增的,自己命名的功能。「全文檢索」既不是標準功能,就沒有公認的定義,純從字義上了解是沒有意義的,要看MySQL的文件才知道是什麼。
依MySQL文件所述,全文檢索比較接近「Semantic Search」,不只像一般LIKE或REGEX的字串比對,而是透過搜尋演算法、關鍵字頻率統計等,找出你想要的結果。
例如說,如果你搜尋「HELP」,其中A record出現381次,B record出現6次,那B record會比較接近你想要的結果。A record因為頻率太高,會被認定為不具搜尋特殊性這樣。
back to top