此版內容已正式包含進 0.21 ,請更新。
簡介
這是一個給 WordPress 使用的搜尋外掛。
- 使用 MySQL 的 Full-Text Search 功能,取代 WordPress 內建的搜尋功能。
Full-Text Search 的好處不僅是能計算出文章關聯性,尋找出更準確的結果,速度也比 Like Search 快上數~數十倍。 - 以 N-gram 方式實作斷詞,這樣才能讓中日韓文順利使用 MySQL Full-Text Search 。
Introduction
This is an advanced search plug-in for WordPress. Only good for Chinese, Japanese and Korean. Other language users please try Advanced Search or similar plug-ins instead.
- Using MySQL full-text features to provide faster performance and a more relevant search result.
- Using N-gram-based word segmentation to support CJK glyphs in MySQL full-text.
下載 / Download
實作
採用 N-gram 方式解決雙位元字斷詞問題,這個方式需要新建一張 wp_posts_ngram 表格,儲存僅供搜尋用的關鍵字,例如「MySQL 全文搜尋」這段文字的搜尋關鍵字為「MySQL 全文 文搜 搜尋」,因此這張表格大約需佔 wp_posts 表格的 2–4 倍空間。反正現在硬碟愈來愈便宜,用空間換時間很划算 :p
搜尋時也是依照 N-gram 切割,所以搜尋子句大概長得像這樣: MATCH (post_content_ngram) AGAINST ('+MySQL +全文 +文搜 +搜尋') 。但是 MySQL Full-Text Search 有最短關鍵字限制,預設為4個字以上,所以前面的搜尋子句會被轉換為 MATCH (post_content_ngram) AGAINST ('+MySQL') 。而為了解決這個問題, N-gram 表格中的內容會經過 UTF-8 (Hex) 編碼,「MySQL 全文 文搜 搜尋」會被轉換為「MySQL E585A8E69687 E69687E6909C E6909CE5B08B」,搜尋時也是使用轉換過的 N-gram —— MATCH (post_content_ngram) AGAINST ('+MySQL +E585A8E69687 +E69687E6909C +E6909CE5B08B') ,經過如此處理,雙位元字的全文搜尋就沒問題了。
附註
- 第一次啟用時會進行安裝,包含建立
wp_posts_ngram、wp_comments_ngram表格及製作目前所有文章的 N-gram ,因此需要一點時間。 - 我使用了
LOW PRIORITYDELAYED INSERT ,因此 N-gram 可能不會與文章同步更新,而會等到資料庫不忙時才更新。
參考資料
版本紀錄
v0.2.2
- New: 設定不於迴響中搜尋時,則不更新 wp_comments_ngram 表格
- New: 支援部份 boolean full-text search operators (說明),同時也為此改變了權重計算方式
- New: 移除使用者設定的停字
- Fix: 不轉換歐文字元,這樣才能不區分大小寫搜尋
- Fix: v0.2.1 中最大的 bug ——迴響的 N-gram 根本就不會產生
- Fix: 修正 Related Entries 功能中可能發生的問題:文章標題中有 HTML Tags 的話…
- Fix: 修復一些可能出現的 Notice 和 Warning
v0.2.1
- New: 新增選項頁面
- New: 搜尋範圍可包含迴響
- Fix: 不刪除重複的 N-gram 字詞
- Fix: 改用 DELAYED INSERT
v0.1
- 初次釋出
如這篇文筆流暢的公告所言,因為 Google Code 提供了一套完整的版本管理系統、臭蟲追蹤系統(專案管理系統?),甚至還有討論群組(不過 K2 的討論區應該不會轉移過去),因此 K2 決定將原本分散的 SVN 和 Mantis 轉移到 Google Code 上。 SVN 的修訂號又要從 1 開始計算,這算是小問題,而 Mantis 上的資料就得手動轉移了。使用了 Google Code 後,新的 Bug Tracker 只需有 Google 的帳號即可參與回報錯誤或提供建議,感覺更為方便了。此外看了一下 Google Code ,覺得功能還真是完整,難怪這次沒有 Beta XD
–
專案名稱叫做 kaytwo ,之前還申請過 k2-for-wordpress ,我覺得 ktwo 比較好耶~ :p
透過 K2 SVN 更新了一下本站的模板,目前是 Revision 303 ,比較明顯的更新有上方的 Rolling Archives ,這跟 Windows Live Search 一樣好玩 >_<b 。還有最下方的 Style Info ,不過這功能兩邊都沒有什麼介紹… 讓我稍微研究了一下。除了要在你的 CSS 裡面加上他所說的註解外,還要在 K2 Scheme 中的文字欄位輸入你希望的顯示格式,我是如下輸入,僅供參考:
K2 Style: <a href="%stylelink%" title="%comments%">%style%</a> v%version% |
忘記提一點,新版 Archives 頁面我覺得更好看了。
Update: 看了一下 SVN ,才知道 Live Search 的顯示方式也大幅改變了,現在的 Live Search 結果會直接顯示在左邊,但目前與 Rolling Archives 的整合有點問題。
從 WordPress 2.0 開始, WordPress 似乎正在朝向愈來愈絢麗的方向前進,最近連 Widget 都有了(其實前陣子就已經在 WordPress.com 玩過), K2 的成長也很令人驚訝… 兩者互相影響的未來,應該會更加有趣吧!

