2009-09-21 64 views
1

我必須破解一個內容管理系統來支持包含特殊字符的語言的全文搜索。這些以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

回答

1

爲什麼你使用HTML實體?只需切換到utf8。

否則嘗試再次引用您的搜索字符串像(「‘搜索’」)。 不幸的是不會工作 - http://bugs.mysql.com/bug.php?id=26265有一個長期懸掛的bug。我想唯一的辦法是:

而最後的方法是將附加列只是代之以所有口音的搜索目的。

+0

嘿,該添加引號的提示工作!即使存在&符號。順便說一句:我使用MySQL版本5.0.51a – craesh 2009-09-21 10:14:24

0

您可以使用全文搜索引擎。 Apache Lucene功能強大,但有點難學。 Apache Solr更容易學習,並且可能非常有用。 Sphinx以其與MySQL的輕鬆集成而聞名。我相信他們都很好地處理國際化。

+0

對不起,但我不會重新實現一個CMS的整個搜索引擎,只是爲了使它與特殊字符一起工作。 – craesh 2009-09-21 10:15:50