MySQL: неожиданное поведение «в логическом режиме» - PullRequest
2 голосов
/ 14 февраля 2010

Я использую следующий вызов для получения информации из базы данных:

select * 
from submissions 
where 
   match( description ) against ('+snowboard' in boolean mode ) 
   and (!disabled or disabled='n') 
order by datelisted desc limit 30

Что означает, что в описании найдено все, что касается сноуборда. Теперь вот проблема:

select *
from submissions 
where 
  match( description ) against ('+snowboard +mp4' in boolean mode ) 
  and (!disabled or disabled='n') 
order by datelisted desc limit 30

по какой-то причине проигнорирует + mp4 и выдаст то же, что и первый запрос

select * 
from submissions 
where 
   match( description ) against ('+mp4' in boolean mode ) 

ничего не возвращает, поэтому в основном кажется, что он игнорируется при поиске

Кто-нибудь знает, как обойти это поведение?

Ответы [ 2 ]

2 голосов
/ 14 февраля 2010

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

РЕДАКТИРОВАТЬ: оказывается, теперь это можно установить через файл конфигурации, см. http://dev.mysql.com/doc/refman/5.0/en/fulltext-fine-tuning.html для более подробной справки

1 голос
/ 14 февраля 2010

Ваша проблема - минимальная длина слова, которая по умолчанию составляет 3 символа. Попробуйте то же самое с +snowboard +scooter, и вы увидите, что это работает. (Конечно, если в вашей базе данных нет скутеров).

См. Точная настройка полнотекстового поиска MySQL о том, как его изменить:

Минимальная и максимальная длина индексируемых слов определяется системными переменными ft_min_word_len и ft_max_word_len. (См. Раздел 5.1.4, «Системные переменные сервера».) Минимальное значение по умолчанию составляет четыре символа; максимум по умолчанию зависит от версии. Если вы измените какое-либо значение, вы должны перестроить свои индексы FULLTEXT. Например, если вы хотите, чтобы трехсимвольные слова были доступны для поиска, вы можете установить переменную ft_min_word_len, поместив следующие строки в файл опций:

[mysqld] ft_min_word_len=3

Затем перезапустите сервер и перестройте ваши индексы FULLTEXT. Обратите особое внимание на замечания относительно myisamchk в инструкциях, следующих за этим списком.

...