Трехсимвольный поиск не работает

Я использую 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)
Другие вопросы по тегам