我必須破解一個內容管理系統來支持包含特殊字符的語言的全文搜索。這些以html實體的形式存儲在數據庫中。開箱即用,CMS不支持它。這個錯誤很久以前就報道過了,但顯然它沒有優先權。我堅持這個CMS,客戶正在等待我的解決方案,所以我必須破解它。該死......MySQL全文搜索html實體
好吧...的CMS存儲是通過翻譯的特殊字符轉換成HTML實體內容(這是由actualy捆綁編輯器完成)。所以德語單詞「möchten」在DB中獲得「m&outen; chten」。 CMS創建查詢字符串,如
SELECT * FROM `SiteTree` WHERE MATCH(Content) AGAINST (<SEARCH_STRING> IN BOOLEAN MODE);
該表的類型爲MyISAM,該字段具有FULLTEXT索引。
如果使用「M & ouml; chten」作爲搜索字符串,MySQL將每個頁面匹配,爲&是一個運營商,會做瘋狂的事情,如果它出現在搜索字符串。搜索不起作用。
接下來的想法是由*作爲佔位符替換特殊字符。但是,只要你有一個以「m」開頭並且另一個以「chten」結尾的下一個單詞,這也將匹配幾個單詞。我不知道爲什麼,但只用星號替換&符號(因此搜索「m * ouml; chten」)也會導致類似的結果。
同樣的問題進行了說明here。
好吧,夥計們,我需要你們的幫助!有任何想法嗎?
編輯:無法將內容轉換爲UTF-8。
謝謝!
craesh
嘿,該添加引號的提示工作!即使存在&符號。順便說一句:我使用MySQL版本5.0.51a – craesh 2009-09-21 10:14:24