Странно выполняется запрос MySQL...

simbel

Новичок
Странно выполняется запрос MySQL...

Помогите разобраться с проблемой. Может это что-то в настройках
MySQL-сервера. Не знаю что и делать, уже всё перебрал.

Есть такой SQL-запрос:
PHP:
'SELECT * FROM `OFFERS` WHERE CatshopID=93 AND (MATCH (Optsear) AGAINST ("+JBL +Bal +alb +lbo +boa +Sub" IN BOOLEAN MODE))'
Этот запрос находит 25 записей в таблицы OFFERS, хотя по идее должен отыскать только 5 записей. Кроме правильных записей поле Optsear, которых содержит:
PHP:
'Аку кус уст сти тик ика каJ аJB JBL BLb Lba bal alb lbo boa oas asu sub'
почему-то находится ещё несколько, которые не должны находиться (эти
значения поля Optsear не содержат строку 'Sub'):
PHP:
'Аку кус уст сти тик ика каJ аJB JBL BLB LBa Bal alb lbo boa oaC aCe Cen
ent nte ter',
'Аку кус уст сти тик ика каJ аJB JBL BLB LBa Bal alb lbo boa oa1 a10 10',
'Аку кус уст сти тик ика каJ аJB JBL BLb Lba bal alb lbo boa oa3 a30 30'.
Когда вместо 'Sub' подставляю +10 или +30 или +Сenter - находится только то что нужно. При выполнении же запроса со строкой '+Sub' она просто игнорируется и в результате выдаётся те строки, которые содеожат '+JBL +Bal +alb +lbo +boa'.

Я поначалу думал глюк в скрипте, а потом решил проверить запрос на прямую
phpMyAdmin - результату удивился. Результат описан выше.

Что с этим делать? Почему так происходит? Как исправить и сделать так что
бы находились только те записи в которых найдена вся фраза из запроса?
 

simbel

Новичок
У меня в запросах может быть что угодно, могут встречаться все слова из stoplist'а, которые состоят из трёх и менее символов.
Можно как-то сделать, что бы слова из stoplist'a не игнорировались или можно как-то по другому обойти эту ситуацию? Если слова из стоп листа не будут игнорироваться, чем это чревато?
Для чего нужен дефолтный stoplist?
 

Gas

может по одной?

simbel

Новичок
А можно как-то посмотреть дефолтный stoplist? Где найти его в дистрибутиве MySQL? Или он зашит в код MySQL и отдельно его не просмотришь?
 

simbel

Новичок
Его-то я уже видел:))) .
Я немного о другом спрашиваю. Где в дестрибутиве MySQL найти stoplist? Где он расположен, в какой папке?
 

Gas

может по одной?
simbel
Зачем? Если тебе нужно его изменить, то можно изменить значение указанного параметра в my.cnf
Но если у тебя shared-хостинг, врят-ли его изменят по твоей просьбе. Чёртов mysql, ничего нельзя задать в схеме базы :)
 

simbel

Новичок
На локальном компе у меня стоит Денвер. Сайт в сети находится на выделенном сервере.
Я хочу сначала на Денвере понять, как изменить этот стоп-лист, а потом уже на выделенном сервере поменять, что бы не ошибиться.
Так, вот я смотрел my.cnf Денвера - директивы ft_stopword_file
я там не нашёл.
Я так понимаю: в том случае, когда эта директива не указана используется дефолтный стоп-лист. Если указана, значит используется тот стоп-лист, который расположен по указанному в диррективе пути (в какое место файла my.cnf нужно вставить директиву ft_stopword_file?).

Правильно ли я думаю, если нет поправьте меня, пожалуйста.
 

Gas

может по одной?
ну тут же всё написано
в секцию [mysqld] и можешь [myisamchk]
ft_stopword_file=''
и нет больше стоп слов или задаёшь абсолютный путь к файлу со словами.
Только не забуть перестрелить mysql и перестроить fulltext индексы. В общем по ссылке всё написано.
 
Сверху