MySQL полнотекстовый поиск (php) - PullRequest
0 голосов
/ 13 июля 2010

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

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

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

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

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

1 Ответ

3 голосов
/ 13 июля 2010

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

Из Руководства MySQL :

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

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

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

Список стоп-слов по умолчанию in на веб-сайте MySql.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...