2012-01-29 2 views
0
$qstring = "SELECT titulo as value, id FROM blogs WHERE titulo LIKE '%".$term."%'   LIMIT 5"; 
$qstring = "SELECT titulo as value, id FROM blogs WHERE MATCH(titulo) AGAINST ('.$term.') LIMIT 5"; 

первый будет возвращать результаты, но на самом деле не связанные с запросомматч (строка) против («текст») не возвратит результаты

второй вернет:

Can't find FULLTEXT index matching the column list 

почему?

ответ

0

проверки значения в $term, что должно быть больше 3 в случае FULLTEXT индексный поиск в противном случае он вернет нуль

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

0

match() работает только с полем, на котором есть FULLTEXT, как указано в сообщении об ошибке. Вам необходимо будет:

ALTER TABLE blogs ADD FULLTEXT INDEX tituolo_ft (titulo); 

Прежде чем вы сможете использовать полнотекстовые операции над полем.

+0

, так что я могу улучшить качество результатов LIKE? –

+0

зависит от того, что вы ищете. полнотекстовые индексы имеют более высокие накладные расходы на обслуживание, но по крайней мере вы можете использовать индексы, тогда как поиск типа 'LIKE '% ...%'' НЕ может использовать индексы. –

0

Как следует из сообщения об ошибке, вы не можете использовать MATCH ... AGAINST, если нет индекса FULLTEXT в поле, которое вы сравниваете.

Операция LIKE должна работать. Я думаю, что проблема может быть двойными кавычками в вашем шаблоне, которые являются излишними и потребуют соответствующих котировок в значении базы данных. Пожалуйста, покажите, какие данные базы данных вы пытаетесь сопоставить.

+0

строки - это просто струнные строки, название записей в блогах .. и $ term будет выглядеть как «как bla» или «красивые шаблоны», –

0

В дополнение к индексу FULLTEXT, упомянутому другими, похоже, что вы не правильно цитируете свой текст в предложении AGAINST. Я думаю, что это должно быть:

AGAINST ('".$term."') 

Или еще, так как у вас уже есть двойные кавычки вокруг запроса просто вставлять переменную:

AGAINST ('$term') 
Смежные вопросы