Трехсимвольный поиск не работает
Я использую FullText
Поиск в MySQL
мой тип таблицы базы данных двигателя MyISAM
,
Теперь проблема в том, что я хочу разрешить использование для поиска записи, если они ввели три слова.
Но проблема в том, что FullText
не позволяет мне искать записи менее 4 символов.
Я знаю, что могу изменить
ft_min_word_len
чтобы заставить его работать, но когда я буду загружать его, мне нужно изменить его на сервере, и я использую общий хост, так что это сложно.
Так как я могу заставить его работать в MySQL Query.
Я думаю, когда слово меньше 4 символов LIKE
пункт, и когда его использование более 4 fulltext
Это правильный путь?
Код
App::import('Sanitize');
if(strlen($this->params['named']['q']) <= 4)
{
$lessWord = "+".$this->params['named']['q'];
}
else
{
$lessWord = $this->params['named']['q'];
}
$escapedQuery = str_replace(" ","* ",Sanitize::escape($lessWord)).'*';
array_push($this->paginate['conditions'],"MATCH(ServiceRequest.title, ServiceRequest.description) AGAINST ('".$escapedQuery."' IN BOOLEAN MODE)");
$this->paginate['fields'] = array
(
'*',
"MATCH(ServiceRequest.title, ServiceRequest.description) AGAINST ('".$escapedQuery."' IN BOOLEAN MODE) AS score"
);
$this->paginate['order'] = "score DESC";
Я использовал приведенный выше код.
Можно ли искать три символа?
Я тоже пробовал +str*
но все еще сейчас работает.
2 ответа
ft_min_word - это настройка сервера MySQL. В случае хост-сервера вы не можете изменить его в ini_set (это для PHP). Сервер - это отдельная вещь, и если на вашем хосте несколько пользователей, использующих один и тот же сервер (что является стандартным для общего сервера), они будут использовать одни и те же настройки.
То же самое касается настройки.htaccess: это может изменить только то, как будет реагировать apache (если это разрешено), а не то, как настроен сервер базы данных.
Переменная, описанная здесь в руководстве, не является динамической переменной, которую можно установить во время выполнения
Так что вы можете попробовать:
Проверьте длину поискового термина, затем, если он меньше, чем разрешено ft_min_word, используйте LIKE('%searchterm%')
Изменить эту строку
if(strlen($this->params['named']['q']) <= 3)