我應不應該給相關文章正式作個 Widget 呢?1可是這個 Plugin 的功能應該是搜尋耶…
-
目前是作了自己在用啦! ↩
昨天整理 WordPress 資料庫時發現, Bigram Full-Text Search 如果設定可在迴響中搜尋,好像會殘留下一些垃圾迴響?今天想來修這個 bug ,才發現更嚴重的 bug ——目前根本就不會產生迴響的 N-gram 啊! orz (原因只是打錯一個變數)所以到底會不會殘留垃圾迴響… 還有待觀察。我最近完全沒有任何 Spam ,不知道是因為裝了 Comment Timeout 還是 Downtown Host 自動幫我擋下這些異常流量。
本來只想修好這個 bug 就好,但是只改一行感覺不夠誠意,所以低調的寫了一些其他更新:
有興趣試用的話,可以從 Google Code 下載最新版本:
Update: 突然想到關於 " 的處理方式… 或許可以改成輸入「+"搜尋字詞"」自動轉換為「+"搜尋 尋字 字詞"」,不過這樣會有中英文交雜的問題——目前 N-gram 是將歐文取出來放在最後。
r31 是修正一個新發現的 bug :以 “Полюшко-поле” 這篇文章為例,這篇文章中所出現的 “Полюшко” 都是大寫字首。而這個 plug-in 為了解決 Bi-gram 會被 MySQL 認為太短而省略的問題,會將 Bi-gram 資料編碼為 UTF-8 (Hex) , “Полюшко” 也不例外的被編碼了,導致搜尋 “полюшко-поле” 時會找不到任何東西,因此 r31 中修改為不編碼歐文字元。(簡單一句來說就是:以前的版本會區分特殊歐文字元的大小寫,現在不會了)
另外順便在這邊提一下… 本 Plug-in 遇到阿拉伯文、希伯來文、亞拉姆文、喬治亞文、印度文、泰文、藏文等會直接省略,因為在下對這些文字實在一點概念也沒有… orz
其實跟 rev.18 一樣,差別只有搜尋迴響的功能完成了。
INSERT LOW_PRIORITY 改成 INSERT DELAYED ,這好像才真的對效能有所幫助array_search() 第二個參數型態錯誤之類的… 不過這個訊息只會出現一次,而且不影響更新。bfs_GetRelatedEntries() ,在 Theme 中加上 <ul><?php bfs_GetRelatedEntries(); ?></ul> 即可。wp_comments_ngram 表格此版內容已正式包含進 0.21 ,請更新。
這是一個給 WordPress 使用的搜尋外掛。
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.
採用 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 ,因此需要一點時間。