MySQL полнотекстовый поиск для объектов HTML - PullRequest
1 голос
/ 21 сентября 2009

Мне нужно взломать систему управления контентом для поддержки полнотекстового поиска для языка, содержащего специальные символы. Они хранятся в базе данных как HTML-сущности. Из коробки CMS не поддерживает это. Об ошибке сообщили давно, но, видимо, она не имеет приоритета. Я придерживаюсь этой CMS, клиент ждет моего решения, поэтому я должен взломать его. Блин ...

Хорошо ... CMS хранит свой контент, переводя специальные символы в html-сущности (на самом деле это делается в комплекте редактора). Таким образом, немецкое слово «möchten» получает «m & ouml; 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») также приведет к аналогичным результатам.

Та же проблема была описана здесь .

Хорошо, ребята, мне нужна ваша помощь! Есть идеи?

Редактировать: Преобразование содержимого в UTF-8 невозможно.

Спасибо!
craesh

Ответы [ 2 ]

1 голос
/ 21 сентября 2009

Почему вы используете html-объекты? Просто переключитесь на utf8.

В противном случае попробуйте процитировать вашу строку поиска еще раз как ('' search ''). К сожалению, не будет работать - http://bugs.mysql.com/bug.php?id=26265 есть длинная ошибка зависания. Я думаю, что единственный подход:

И последний подход - сохранить дополнительный столбец только для целей поиска со всеми замененными акцентами.

0 голосов
/ 21 сентября 2009

Вы можете использовать механизм полнотекстового поиска. Apache Lucene мощный, но немного сложный в освоении. Apache Solr намного проще в изучении и может быть весьма полезным. Sphinx известен своей легкой интеграцией с MySQL. Я считаю, что все они хорошо справляются с интернационализацией.

...