Поиск на русском в WordPress… (+)

Эх-хе-хе продолжаю биться с вордпрессом… Эта какой-то ужась.:)

Теперь поиск.
Поиск на русском работает очень странно и плохо, в гугль гуппах это уже обсуждалось, но ничем не кончилось.
Суть проблемы там кстати не совсем верно описана.
WordPress все-таки ищет в русских записях, но!, во-первых выдает помимо правильного поста (который выдает первым в списке) ещё пачку вообще не релевантных, во-вторых чем длинее русское слово (причем если длинее скажем шести символов уже лучше, а вот если короче то выдает почти все русские посты на блоге) тем меньше постов выдается, и иногда (если слово совсем длинное типа "деметилгидрозин") выдает правильный единственный пост в которым было это слово…

На вашем сайте между прочим тоже самое, проверьте. Я только что проверил на нескольких блогах подряд и всюду одинаковая ситуация, поиск глючит.

Вот такие дела, это надо как-то решать.

Могу сказать, что WordPress выполшняет поиск ка и положено – через базу данных. Использует "стандартный" SQL-запрос с LIKE. Всё как и в любой другой базе данных.

Поэтому проблемы с поиском WordPress’а – это проблемы с поиском в самой базе данных. Если вы посмотрите поиск на моем сайте, то убедитесь, что он вполдне корректен. Введите для примера слово "кошелек" и убедитесь, что поиск выполняется верно, и при этом регистронезависим.

Причина проста – база данных и блог работают в одной кодировке. При использовании UTF-8 в блоге, база данных хоть и позволяет выдавать корректный текст, но вот с сортировкой и LIKE, похоже, существуют какие-то проблемы. Каким образом это решается я не знаю. Скорее всего нужно как-то настраивать MySQL.

Тут мне подсказали, что можно попробовать установить для MySQL нужные параметры кодировки перед работой с ней. Я проверил, вроде все работает :). Правда, все тексты пришлось переконвертировать заново.

Хак в следующем. Открываем файл wp-db.php и в самом конце, перед ?> пишем:

$wpdb->query("SET NAMES 'utf8'");
$wpdb->query("SET COLLATION_CONNECTION='utf8_general_ci'");
$wpdb->query("SET COLLATION_SERVER='utf8_general_ci'");
$wpdb->query("SET CHARACTER_SET_CLIENT='utf8'");
$wpdb->query("SET CHARACTER_SET_CONNECTION='utf8'");
$wpdb->query("SET CHARACTER_SET_RESULTS='utf8'");
$wpdb->query("SET CHARACTER_SET_SERVER='utf8'");

После этого MySQL полностью начинает работать в UTF-8, включая и регистронезависимый поиск ;).

Да действительно, прошу простить, сейчас ещё раз проверил на коротких словах все релевантно, видимо я с каким-то другим блогом перепутал.

А по теме, сейчас пытаюсь разобраться с хостером, о успехах сообщу.

Дело в том что проверил по самой базе и выяснил что с базой происходит именно такая пакость какая была зарегистрирована с поиском в якобы wordpress. Т.е. сам wordpress как вы сказали честно выдает ту бяку которая формирует для него база… Вот такая вот клюква.

Спасибо за помощь.

Вот те на, страница в кеше застряла!:)
А вы уже ответили!

Спасибо сейчас обязательно попробую.
А что имееться ввиду под переконвертировать заново?

Да и про базу, как у меня происходит при поиске через phpmyadmin, вот пишу "уголька" (только в одном посте есть это слово), он мне выдает чуть ли не 40 результатов(прчем часть из них даже не в таблице постов базы!), или задаю то самое длинное слово типа "эволюционировали", он выдает правильный пост!
Хостер был немного удмвлен.:)

Данные хоста:

Версия Apache 1.3.36 (Unix)
Версия MySQL 4.0.27-standard
Версия PostgreSQL 8.0.8
Версия PHP 4.4.2
Версия PERL 5.8.6

===

Хммм вот что выдал wordpress:

WordPress database error: [Unknown system variable ‘NAMES’]
SET NAMES ‘utf8’

WordPress database error: [Unknown system variable ‘COLLATION_CONNECTION’]
SET COLLATION_CONNECTION=’utf8_general_ci’

WordPress database error: [Unknown system variable ‘COLLATION_SERVER’]
SET COLLATION_SERVER=’utf8_general_ci’

WordPress database error: [Unknown system variable ‘CHARACTER_SET_CLIENT’]
SET CHARACTER_SET_CLIENT=’utf8′

WordPress database error: [Unknown system variable ‘CHARACTER_SET_CONNECTION’]
SET CHARACTER_SET_CONNECTION=’utf8′

WordPress database error: [Unknown system variable ‘CHARACTER_SET_RESULTS’]
SET CHARACTER_SET_RESULTS=’utf8′

WordPress database error: [Unknown system variable ‘CHARACTER_SET_SERVER’]
SET CHARACTER_SET_SERVER=’utf8′

Судя по всему, здесь проблемы с версией MySQL. Если смотреть документацию, то команда SET * появилась в 4.1.0 (http://dev.mysql.com/doc/refman/4.1/en/set-option.html). Так, что тут селяви…

Dr. 4004, а у Вас в PhpMyAdmin сами тексты постов отображаются по-русски или в перекодированном состоянии?
У меня вот утф-скими крокозабрами. Вчера попыталась поискать какое-нибудь слово этими крокозябрами – ищет нормально. Тогда попробовала в коде вордпресса прописать, чтобы перед запросом в базу он слово перекодировал бы в утф – ничего не находит тогда.
Проблема конечно же в MySQL. У меня версия 4.0, хостер – мастерхост.
Правда, вот говорят, что скоро не будет бесплатной поддержки MySQL этой версии, может это заставит хостеров обновиться.
Только поиск прямо сейчас нужен 🙁

Ладно будем бодаться с хостингом, доложусь как там оно пройдет, может быть тоже чего посоветуют.
Все равно огромное спасибо за помощь!

2yantar
У меня собственно сама база в UTF-8 и при переключении в кодировку UTF в самом phpMyAdmin все выглядит внятно и совершенно по русски. Тут кажеться никаких проблем нет.

2yantar

Тоже была мысль конвертировать искомое слово перед запросом к БД, но пока ничего не получается. Тут видимо нужно правильно сообразить из какой кодировки в какую нужно выполнять преобразование. Не факт, что нужно преобразовывать в UTF8: если MySQL работает в cp1251, то логичней преобразовывать именно в нее…

Как правильно переконвертировать базу, чтобы все работало?

Пытался почитать это http://www.phpfaq.ru/charset#recode , но пока не осилил. Может есть алгоритм решения без изучения этой статьи?

Оригинальный способ изменения кривой кодировки в ваших базах mysql
и комменты тоже читайте

Anonymous
Отправить
Ответ на: