2013-03-29 2 views
1

Я использую FullText Поиск в MySQL моя таблица базы данных тип двигателя MyISAM.три символа поиск не работает

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

Но проблема в том, что FullText не позволяет мне искать запись менее 4 символов.

Я знаю, что я могу изменить ft_min_word_len, чтобы заставить его работать, но, когда я буду загружать его мне нужно изменить его на сервере, и я использую общий хост поэтому его трудно.

Так как я могу заставить его работать в запросе mysql.

Я думаю, что когда слово составляет менее 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*, но все еще сейчас работает.

+0

@Jocelyn, как я уже сказал, я не хочу менять эту переменную ... пожалуйста, не закрывайте ее перед ее чтением .... –

+0

@Jocelyn Я выделил ответ на ваш закрытое голосование –

+0

@DipeshParmar +1 для приятного вопроса, ожидая правильного ответа. –

ответ

2

ft_min_word является настройка сервера MySQL. В случае сервера хостинга вы не можете изменить его в ini_set (что для PHP). Сервер - это отдельная вещь, и если на вашем хосте несколько пользователей, использующих один и тот же сервер (который является стандартным для общего сервера), они будут использовать одну и ту же настройку.

То же самое относится к настройке .htaccess: это может изменить только то, как будет реагировать apache (если разрешено изменять), а не как настроить сервер базы данных.

переменной, описанной here in the manual не dynamic variable, который может быть установлен во время выполнения

Таким образом, вы можете попробовать:

Проверьте длину термина поиска, а затем, если он меньше, чем разрешено ft_min_word , используйте LIKE ('% searchterm%')

0

изменение этой линии

if(strlen($this->params['named']['q']) <= 3) 
+0

Thanx для ответа, но это не поможет ... но спасибо за ответ. –

+0

Вы пробовали? в любом случае измените и посмотрите, что я надеюсь, что это должно быть проблема –

+0

Я уже сделал это –

Смежные вопросы