2010-07-12 12 views
0

Привет Я пытаюсь создать окно поиска для поиска клиента по фамилии и/или имени и/или номеру телефона.MySQL полный текстовый поиск (php)

Вот мой SQL-запрос:

SELECT * 
    FROM customer 
WHERE Match(c_fname,c_lname,c_phone) Against('$keywords') 

Мои вопросы Почему это работает, когда я искать счета и нет, если я искать боб?

Другой вопрос: как определить приоритеты полей (фамилия наиболее важная), так что если я буду искать Джона Смита и вывести его на роль Уилла Смита, Роб Смита, Джона Клинтона и Джона Смита, Джон Смит будет очень Вверх.

ответ

3

Полнотекстовая поисковая система MysQL будет исключать слова из 3-х символов или меньше из полнотекстового поиска по умолчанию.

От MySQL Manual:

Минимальные и максимальные длины слов, которые будут индексироваться определяются системными переменными ft_min_word_len и ft_max_word_len . (См. Раздел 5.1.4, «Системные переменные сервера».) Минимальное значение по умолчанию - это четыре знака ; максимальным значением по умолчанию является .

Кроме того, слова, которые присутствуют в 50% или более строк в таблице, считаются общими и не совпадают. Также не следует использовать пароли, которые система определяет как общие слова. Невозможно увеличить этот порог на 50% для стандартных полнотекстовых поисков без перекомпиляции MySQL. Вместо этого вы можете захотеть взглянуть на использование полнотекстовых поисков Boolean Mode, которые не имеют этой проблемы на 50% строк.

Подробные сведения о полнотекстовом поиске в булевом режиме можно найти в разделе руководства по MySQL в разделе Boolean Full-Text Searches.

list of default stopwords на сайте MySql.

+0

Поиск кузнеца не работает эфир – Ross

+1

Если Смит находится в более чем 50% строк в таблице, то MySQL будет рассматривать его как общее слово и игнорировать его из полного текстового поиска. –

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