Полнотекстовый поиск в MySQL и PHP не работает

Asked
Viewd1029

1

В настоящее время я пытаюсь выполнить поиск по 2 полям в моей таблице MySQL (текстовый тип) с помощью PHP.

 SELECT  * FROM content_items WHERE MATCH (content,name) AGAINST ('".urldecode($_REQUEST['term'])."' IN BOOLEAN MODE)
 

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

Что может вызвать это?

Спасибо,

Рой

p.s

Поиск должен соответствовать любой длине укуса (даже короткому)

  • Сколько строк в таблице?

    Emil H25 марта 2009, 16:30

3 ответов

1

Проблема с индексами. Их восстановление решило эту проблему.

2

(при условии, что ваш запрос не выдает ошибки)

Возможно, вы захотите проверить конфигурации mysql, связанные с полнотекстовым поиском. Например, по умолчанию термины, содержащие менее 4 символов, ничего не соответствуют

 mysql> show variables like 'ft_%';
+--------------------------+----------------+
| Variable_name            | Value          |
+--------------------------+----------------+
| ft_boolean_syntax        | + -><()~*:""&| |
| ft_max_word_len          | 84             |
| ft_min_word_len          | 4              |
| ft_query_expansion_limit | 20             |
| ft_stopword_file         | (built-in)     |
+--------------------------+----------------+
5 rows in set (0.00 sec)
 
3

Оператор sql имеет смысл. Думаю, проблема здесь:

 urldecode($_REQUEST['term'])
 

В руководстве по PHP есть примечание об этом

Предупреждение

Суперглобальные переменные $ _GET и $ _REQUEST уже декодированы. Использование urldecode () для элемента в $ _GET или $ _REQUEST могло случиться неожиданное и опасное результаты.

С уважением,

Отметить

  • В этой связи было бы разумно узнать, как экранировать ввод. ;-)

    Till26 марта 2009, 23:30