Как заставить работать search с русским языком?

Главные вкладки

Аватар пользователя qman qman 9 ноября 2004 в 12:27

Устанавливаю drupal 4.5 на win 2000 (так начальник требует) использую сервер apache 1.3.31, mysql 3.23.
3. Включил search. Запустил cron.php. Обнаружил что английские слова ищет, а русские нет.
Подскажите, что поправить чтобы заработал поиск?
Начал разбираться, обнаружил что drupal работает в кодировке UTF8 а MySQL хранит по умолчанию данные ISO-8859-1 (Latin1) В настройках MySQL нашел переменную --default-character-set, но среди ее значений нашел cp1251, koi8_ru, win1251, а UTF8 нет. Что проще сделать: перевести сайт на koi8-ru, win1251 или MYSQL на UTF8?

Комментарии

Аватар пользователя axel axel 9 ноября 2004 в 21:01

MySQL умеет хранить UTF8 только с 4ой версии. Но это в данном случае не имеет значения, поскольку поиск в Drupal реализуется исключительно средствами PHP, ему все равно в каком виде это лежит в базе. Кодировка БД не важна. Если не ищет русских слов - это скорее связано с настройками PHP. Вообще, по умолчанию - на русском или других языках ищется, но с некоторыми ограничениями. Скажем всегда различается регистр букв. Несколько улучшить поиск можно включением mbstring в PHP. См. темы на drupal.ru где упоминается mbstring.

--
Axel

Аватар пользователя Basielienis Basielienis 10 ноября 2004 в 1:52

search module из CVS сильно переработан на предмет поддержки UTF-8. Кто-нибудь пробовал? Фича помечена как законченная, так что можно дерзать. Имхо лучше брать одну из текущих или ранних версий, потому что потом это может стать несовместимым с 4.5. А может, и бэкпорт сделают?

Аватар пользователя qman qman 19 ноября 2004 в 22:38

Поставил php 4.3.9 и mysql 4.1.x. Настроил кодировку UTF-8. php ругается что вкомпилированный клиент для версии 3.х MYSQL.
Где мне взять dll файлы для 4.x клиента?
К сожалению я использую винду.

Аватар пользователя qman qman 20 ноября 2004 в 0:16

Забыл добавить, что система выдает следующее

"Client does not support authentication protocol requested by server; consider upgrading MySQL client"

Покопался www.mysql.com там есть рекомендация использовать при запуске mysql опцию "--old-passwords"
Но это не помогло.
Подскажите какую версию php+mysql лучше использовать под винду?

P.S. Ранее пробовал MySQL 3.x проблемы были с поиском. Поставил Mysql 4.1 только из за поддержки UTF8. Теперь оказывается, что php 4.3.9 под винду имеет вкомпилированый клиент mysql версии 3.х

Аватар пользователя Basielienis Basielienis 20 ноября 2004 в 3:09

База осталась старой от 3 версии?

Заново создать пользователей mysql и задать привилегии на базы.

Или, это делалось как-то вроде UPDATE mysql.user и потом FLUSH PRIVILEGES, надо просто скормить полный текст ошибки googl'у.

Дейсвовать в стандартном windows-way: все снести под ноль и заново поставить.

Ставил foxserver и Denver c последующим апгрейдом поверху apache/mysql/php-4.3.2, приходилось слегка править конфиги, кое-что все равно не работало, но такой проблемы не припомню.

Для винды лучше найти какой-нибудь готовый собранный комплекс из apache/php/mysql последних версий. Были хорошие вещи, типа вышеуказанных foxserver и denver, но какие там сейчас версии и не заброшены ли проекты - не знаю. Но этого добра вроде полно было.

Если честно: drupal на apache под win - это была последняя капля, заставившая меня окончательно перейти на нормальную OS :-D.

Аватар пользователя axel axel 12 ноября 2004 в 10:45

Точнее ее отсутствием. Насколько понимаю он ничего не индексирует, просто использует like, а это всегда практически полный скан по таблице.
Уверен, на больших базах это сдохнет.

--
Axel

Аватар пользователя arsart arsart 20 ноября 2004 в 0:11

как определить большая ли база? (1700 нодов - большая? из которых 800 требуемых к индексации, остальное хлам и картинки)

Аватар пользователя Basielienis Basielienis 10 ноября 2004 в 2:05

Так и не получилось в свое время заставить работать поиск под win, но и особой надобности не было.
Подозреваю, виной были мои кривые руки и другие названия локалей в win, стоит поискать названия локалей и выставить их (не знаю, где).
Пробелма, конечно, решилась форматированием NTFS под ext3... Smile

Надо смотреть напрямую таблицу индексов поиска, какая там кодировка. Если там utf-8, но в словах пропущены буквы (чаще всего "л") - то mbstring в помощь, если каша - разбираться с кодировками.

А так, конечно - если нагрузка небольшая, лучше поставить tripsearch и не мучиться.

Аватар пользователя qman qman 20 ноября 2004 в 2:10

Поиск под win всетаки заработал. Используется apache 1.3.
php 4.3.9 mysql 3.23.58. Кодировка в Mysql стоит по умолчанию = latin1 (это где то должно выйти боком, наверно при сортировке по алфавиту.)

Аватар пользователя edhel edhel 25 марта 2005 в 8:09

У меня тоже не работал русский поиск, посмотрел табличку search_index, а там русских слов вообще нет, но много пустых слов. Вообще с русским косяк. Начал в zend studio дебагить cron.php и search_cron (файл search.module) и обнаружил, что строки портятся функцией strtolower. Взял да поменял везде (2 места) strtolower на mb_strtolower(..., 'UTF-8') и все заработало, в том числе поиск без учета регистра(!)

Аватар пользователя Fix Fix 16 сентября 2006 в 17:26

Я поправил в search.module strtolower на mb_strtolower(…, ‘UTF-8’), в 4-х местах (везде где нашел), но поиск все равно результатов не дает. Может быть сразу это работать и не должно, а cron должен что-то выполнить?

P.S. Ага, таки нужно было 3 раза дернуть cron и 100% контента проиндексировано.. Поиск заработал, ура!! Smile

Аватар пользователя shtrlz shtrlz 25 января 2008 в 14:24

а вот у меня на двух разных сайтах не ищет вообще ничего... ни на русском ни на eng
вообще не пойму от чего это... помогите чайничку, где копать?

версия установлена последняя 5.6

Аватар пользователя Splinter Splinter 26 мая 2008 в 21:24

Приветсвую, почему то у меня не проходит индексация, нажимаю, никаких ошибок не пишет, а как было N страниц готовых к индексации так они и остаются! Помогите настроить, может код подправить надо? друпал стоит 5.7