SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 21.03.2011 13:45:34

conceive
Участник
Зарегистрирован: 28.02.2010
Сообщений: 10

Проблема с полнотекстовым поиском.

Проблема в следующем:

В целом, поиск работает нормально, но когда посылается запрос  на поиск 'wd-40', выдает совершенно не то что нужно

SELECT * , MATCH `name`, `descr` AGAINST ('wd-40' IN BOOLEAN MODE) AS `relev` FROM `catalog_table`


http://pokrovavto.com.ua/temp/mache.jpg

Если использовать LIKE, то все впорядке, не могу въехать почему?
SELECT * FROM `catalog_table` WHERE `name` LIKE '%wd-40%' LIMIT 0 , 30


http://pokrovavto.com.ua/temp/like.jpg

Отредактированно conceive (21.03.2011 13:51:12)

Неактивен

 

#2 21.03.2011 14:35:01

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Проблема с полнотекстовым поиском.

У Вас MATCH не в части WHERE, в итоге выборка по нему не производится.

SELECT *  FROM `caralog_table` WHERE MATCH `name`, `descr` AGAINST ('wd-40' IN BOOLEAN MODE) AS `relev`

Неактивен

 

#3 21.03.2011 16:08:39

conceive
Участник
Зарегистрирован: 28.02.2010
Сообщений: 10

Re: Проблема с полнотекстовым поиском.

rgbeast написал:

У Вас MATCH не в части WHERE, в итоге выборка по нему не производится.

SELECT *  FROM `caralog_table` WHERE MATCH `name`, `descr` AGAINST ('wd-40' IN BOOLEAN MODE) AS `relev`

Попробовал Ваш запрос, также вот этот:

SELECT *, MATCH (`name`) AGAINST ('WD-40*' IN BOOLEAN MODE) AS relev FROM `catalog_table` WHERE MATCH (`name`) AGAINST ('WD-40*' IN BOOLEAN MODE);


Без звездочки не находит ничего, со звездочкой 'WD-40*', находит но опять ерунду

rgbeast написал:

У Вас MATCH не в части WHERE, в итоге выборка по нему не производится.

Тем не менее, все остальное ищется без проблем.

Неактивен

 

#4 22.03.2011 08:21:51

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Проблема с полнотекстовым поиском.

Покажите SHOW CREATE TABLE `caralog_table`;

Неактивен

 

#5 22.03.2011 13:05:36

conceive
Участник
Зарегистрирован: 28.02.2010
Сообщений: 10

Re: Проблема с полнотекстовым поиском.

vasya написал:

Покажите SHOW CREATE TABLE `caralog_table`;


SHOW CREATE TABLE `catalog_table`

CREATE TABLE `catalog_table` (
`id` bigint(20) unsigned NOT NULL auto_increment,  
`id_catalog` int(11) default NULL,
`id_pos` varchar(255) collate utf8_unicode_ci default NULL,
`articul` tinytext collate utf8_unicode_ci,
`name` text collate utf8_unicode_ci,
`descr` text collate utf8_unicode_ci,
`cost` tinytext collate utf8_unicode_ci,
`cost_disc` tinytext collate utf8_unicode_ci,
`cost_wholesale` tinytext collate utf8_unicode_ci,
`items` tinytext collate utf8_unicode_ci,
`hot_pos` tinyint(1) NOT NULL default '0',
PRIMARY KEY  (`id`),
UNIQUE KEY `id_pos` (`id_pos`),
FULLTEXT KEY `name` (`name`)
) ENGINE=MyISAM AUTO_INCREMENT=6442 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
 

Неактивен

 

#6 22.03.2011 13:15:50

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Проблема с полнотекстовым поиском.

Такой запрос не правильно работатет?
SELECT * FROM `catalog_table` WHERE MATCH (`name`) AGAINST ('WD-40' IN BOOLEAN MODE);

Неактивен

 

#7 22.03.2011 13:43:44

conceive
Участник
Зарегистрирован: 28.02.2010
Сообщений: 10

Re: Проблема с полнотекстовым поиском.

vasya написал:

Такой запрос не правильно работатет?
SELECT * FROM `catalog_table` WHERE MATCH (`name`) AGAINST ('WD-40' IN BOOLEAN MODE);

MySQL вернула пустой результат (т.е. ноль строк). ( запрос занял 0.0353 сек. )

Неактивен

 

#8 22.03.2011 18:39:06

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Проблема с полнотекстовым поиском.

Понятно, сбили вы отсутствием части where в изначальном сообщении, вот слона и не заметил.

Вы используете полнотекстовый поиск IN BOOLEAN MODE, соответственно WD-40 интерпретируется как должно быть WD и не должно быть 40 smile

http://dev.mysql.com/doc/refman/5.5/en/ … olean.html

http://dev.mysql.com/doc/refman/5.5/en/ … earch.html

Неактивен

 

#9 22.03.2011 21:06:17

conceive
Участник
Зарегистрирован: 28.02.2010
Сообщений: 10

Re: Проблема с полнотекстовым поиском.

vasya написал:

Понятно, сбили вы отсутствием части where в изначальном сообщении, вот слона и не заметил.

Вы используете полнотекстовый поиск IN BOOLEAN MODE, соответственно WD-40 интерпретируется как должно быть WD и не должно быть 40 smile

http://dev.mysql.com/doc/refman/5.5/en/ … olean.html

http://dev.mysql.com/doc/refman/5.5/en/ … earch.html

Да, действительно. Спасибо. Но в каком режиме тогда искать, не пойму.

Попробовал без IN BOOLEAN MODE

SELECT * FROM `catalog_table` WHERE MATCH (`name`) AGAINST ('WD-40')

MySQL вернула пустой результат (т.е. ноль строк). ( запрос занял 0.0030 сек. )

Неактивен

 

#10 23.03.2011 00:28:11

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

Re: Проблема с полнотекстовым поиском.

Тупой вопрос — а символ «-» точно входит в символы слова? Даже упрощу вопрос —
перекомпилировали ли Вы MySQL для того, чтобы символ «-» считался словарным?
Если нет, то WD-40 — это не одно слово, а два. Более того, эти два слова имеют
длину 2, что меньше, чем разумное значение ft_min_word_len. Поэтому я думаю,
что таких слов даже нет в индексе sad

Неактивен

 

Board footer

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