Вопрос

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

ОК ... CMS хранит свой контент, переводя специальные символы в HTML -сущности (это фактически сделано в комплекте редактором). Таким образом, немецкое слово «möchten» получает «Möchten» в DB. CMS создает строку запроса как

SELECT * FROM `SiteTree` WHERE MATCH( Content ) AGAINST (<SEARCH_STRING> IN BOOLEAN MODE);

Таблица имеет тип Myisam, поле имеет полной индекс.

Если вы используете «Möchten» в качестве строки поиска, MySQL будет соответствовать каждой странице, как и оператор, который будет делать сумасшедшие вещи, если он будет присутствовать в строке поиска. Поиск не будет работать.

Следующая идея - заменить специального персонажа на * как заполнитель. Но это также соответствует нескольким словам, как только у вас будет что -то, начиная с «M», и еще одно следующее слово, заканчиваемое «chen». Я не знаю почему, но замена только амперса и звездочкой (поэтому поиск «m*ouml; chten») также приведет к аналогичным результатам.

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

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

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

Спасибо!
Крейш

Это было полезно?

Решение

Почему вы используете HTML -сущности? Просто переключитесь на UTF8.

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

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top