Permalink Redirect 是一個用來統一文章連結的 WordPress Plugin ,可避免讓搜尋引擎索引到重複的內容。例如目前這篇文章的連結就有兩個:
- http://blog.bcse.info/?p=407
- http://blog.bcse.info/wordpress-permalink-redirect/
而使用此 Plugin 後,第一個網址會以 301 Permanently Moved 方式轉址到第二個網址。此 Plugin 同時也提供舊連結格式轉換為新連結格式的處理方案,其實這才是我想用這 Plugin 的最大原因,但是很可惜的是無法適用於本站。因為我本來是採用文章的 primary key 作為網址,而且只有這個參數,現在想改為文章標題,但系統無法判斷 http://blog.bcse.info/407 這樣一個網址中的 407 到底是 primary key 還是標題…
所以現在我只好把舊文章的 post slug 全部改成與 primary key 相同,這樣的話就算依照新的格式,產生的網址也還是一樣的。下 SQL 直接修改很快,只消一句 query :
UPDATE `wp_posts` SET `post_name` = `ID` WHERE `post_type` = 'post';
簡介
這是一個給 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 PRIORITY DELAYED 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
從石頭閒語看到,原來 closure 翻譯為「封絕」,感覺好像某種招式名稱 XD
Update: 我想起來了… 封絕是《灼眼的夏娜》中一個類似結界的自在法…
- 封絕
- 與世界「因果論」相離的的事物,其內部是靜止的,外部是隱藏起來的無形空間,被稱爲「因果孤立空間」。進行封絕的話會卷走周圍的陽炎之壁,在地面出現以奇怪文字組成的紋章,天才自在師「螺旋的風琴」而編寫的自在法。「紅世使徒」吞噬「存在之力」時隱藏身體。而火霧戰士與「徒」是在戰場上實現封絕的。封絕內部的世界是靜止的,但不影響「徒」與火霧戰士的行動。
-
— 節錄自 Wikipedia: 灼眼的夏娜名詞解釋
今年本格再度參加了 CSS Naked Day ,但不同於上次,這次本格會脫滿48小時。
(因為各地時差的不同,4月5日共有48小時)
Prologue
我本來以為可以待在 DreamHost 更久,但大約一個月前發生了一件事,只好被迫搬出來,情況跟 XDite.net 發生的差不多。於是這個月我的網管相關知識增進了不少,真得感謝 DreamHost… orz
Blog 的資料庫我有作每日備份,所以我到 Gmail 信箱取得備份後資料救回來了, Gmail 資料庫備份真是惠我良多,平常資料庫爆炸時也都是靠它救回來的。我的 bcse.info 網域名稱並非放在 DreamHost ,原因很簡單的只是懶得從先前的主機商 Burning-G 那裡 transfer 過去,之前其實曾經考慮過要 transfer 過去的,但是想一想就忘了,所以算是運氣不錯 XD
Domain Name
趁著這次事件,我順便也去向 Burning-G 要求自行管理 domain name , Burning-G 使用的是 eNom 系統,只要我在 eNom 或 eNom 任何一個下線註冊好帳號, Burning-G 便能把管理權限 push 給我,這個 push 的動作只是在 eNom 系統內部的轉移權限,不算 transfer ,所以不需額外付費,如果我是要轉移到其他 registrar ,例如 Go Daddy, Network Solutions 等,就需要付 transfer 的費用,也等於是在新的 registrar 上續約。(老實說這一段我不確定)
Read More »