SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 05.05.2009 05:48:23

Lion
Участник
Зарегистрирован: 05.05.2009
Сообщений: 3

Не работает полнотекстовый поиск в MySql 5.1

C этими же данными в версии 4 всё работает отлично, без заморочек.

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

Под 5.1 Если удалить и опять создать индекс хоть через alter table, хоть через create fulltext index, генерируется всего одно уникальное значение. Если снять дамп таблицы, удалить её из базы и залить заново через импорт формитруется всего 22 ункальных значения.

Я думал, что-то с хостером не так...

Попробовал это всё у троих разных хостеров - везде одно и то же.

Пробовал сменить кодировку таблицы с win1251 на utf8 - никакого изменения в поведении не произошо.

При этом отмечу ещё раз, что в версии 4+ всё работает как часы.

Но у всех хостеров, которые доступны и предлагают более-мене сносные условия, стит версия MySQL 5.1.+


Пожалуйста, помогите разобраться!!!

С Уважением,
lion.

Неактивен

 

#2 05.05.2009 10:48:10

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Не работает полнотекстовый поиск в MySql 5.1

А почему Вы считаете, что формируется 22 уникальных значения? Я вот создал табличку
create table fti (a text, fulltext(a)) charset=cp1251;

напихал в нее данных скриптом, и все в порядке:

Код:

[aquatica] root test > select count(*) from fti;
+----------+
| count(*) |
+----------+
|     4096 | 
+----------+
1 row in set (0,00 sec)

[aquatica] root test > select * from fti limit 700,1;
+------------+
| a          |
+------------+
| жхжгю      | 
+------------+
1 row in set (0,01 sec)

[aquatica] root test > select * from fti where match(a) against ('жхжгю');
+------------+
| a          |
+------------+
| жхжгю      | 
+------------+
1 row in set (0,00 sec)

MySQL 5.1.31

Неактивен

 

#3 05.05.2009 12:26:26

Lion
Участник
Зарегистрирован: 05.05.2009
Сообщений: 3

Re: Не работает полнотекстовый поиск в MySql 5.1

Уважаемый paulus,
Дело в том, что phpMyAdmin показывает, сколько их есть, этих уникальных значений,

Вот как это выглядит у меня по 5.1+
--------------------------------------------------------------
Имя индекса     Тип         Уникальных элементов     Поле
--------------------------------------------------------------
PRIMARY       PRIMARY       4464               ID 
Parent           INDEX         346               Parent 
St          INDEX         44               St 
cat          INDEX         88               Cat 
grp          INDEX         562               grp 
added          INDEX         22               added 
DT          INDEX         22               DT 
owner          INDEX         67               owner 
PriceZalog      INDEX         4464               PriceZalog 
ID1          INDEX         643               ID1 
Name          INDEX         4464               Name 
town          INDEX         22               town 
cnt          INDEX         346               cnt 
Descr          FULLTEXT       22             Descr 
Name_2         FULLTEXT       22               Name 
phone          FULLTEXT       22               phone 
==============================================================
А вот так под 4.3+

--------------------------------------------------------------
Имя индекса     Тип         Количество элементов     Поле
--------------------------------------------------------------
PRIMARY        PRIMARY        4464               ID 
Parent           INDEX         343               Parent 
St          INDEX         44               St 
cat          INDEX         87               Cat 
grp          INDEX         558               grp 
added          INDEX         22               added 
DT          INDEX         22               DT 
owner          INDEX         66               owner 
PriceZalog      INDEX         4464               PriceZalog 
ID1          INDEX         637               ID1 
Name          INDEX         4464               Name 
town          INDEX         22               town 
cnt          INDEX         343               cnt 
Descr          FULLTEXT       4464               Descr 
Name_2         FULLTEXT       4464               Name 
phone          FULLTEXT       4464               phone 
==============================================================

И под 4.3 полнотекстовый поиск работает, а под 5.1 почему-то (знать бы почему) не работает....

Может это как-то связано с кодировками, или с чем ещё может быть... В смысле русские слова за слова не считае, вот и не воспринимает их...

Неактивен

 

#4 05.05.2009 12:45:09

Lion
Участник
Зарегистрирован: 05.05.2009
Сообщений: 3

Re: Не работает полнотекстовый поиск в MySql 5.1

Я использую MATCH() AGAINST()...
и САМОЕ НЕПОНЯТНОЕ ДЛЯ МЕНЯ В ТОМ, ЧТО МЕСЯЦ НАЗАД Я ЕГО ОПРОБОВАЛ И ВСЁ РАБОТАЛО ПОД 5.1 (и количество уникальных элементов было правдивое),  потом просто забанил кнопку поиска в форме и работал дальше над сайтом...
Теперь сайт практически доработал, решил доделать поиск. Но не ищет теперь ни из формы, ни если ввести руками запрос в phpMyAdmin в форме ввода запросов - возвращает пустое.

И почему всего 22 уникальных - почти во всех записях есть текст в поле Descr - это описание товара. И это описание состоит из не мене 3х слов длиной более 4х символов...

Неактивен

 

#5 05.05.2009 14:27:36

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Не работает полнотекстовый поиск в MySql 5.1

Если это число, которое пишет phpMyAdmin, — cardinality, то оно выставляется правильно при
ANALYZE TABLE. С другой стороны, и без ANALYZE полнотекстовый индекс работает нормально
(ну разве что число смущает).

Что касается самого индекса, убедитесь, что таблица типа MyISAM, в однобайтовой кодировке.
Насколько я понимаю, база не боевая, поэтому можно сделать что-то типа
ALTER TABLE tablename ENGINE=MyISAM;
ALTER TABLE tablename CONVERT TO CHARSET cp1251;

P.S. И у меня cardinality проставляется нормально, так что дело не в версии:

Код:

[aquatica] root test > show index in fti;
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| fti   |          1 | a        |            1 | a           | NULL      |        4096 |     NULL | NULL   | YES  | FULLTEXT   |         | 
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
1 row in set (0,00 sec)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson