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