MySQL Match () не находит наиболее оптимальное соответствие - PullRequest
2 голосов
/ 07 марта 2011

У меня есть база данных профессий, по которым я пытаюсь выполнить несколько запросов. Я использую Match (), чтобы попытаться найти профессиональное название с наилучшим соответствием для введенной пользователем строки, используя этот SQL:

SELECT *, MATCH (occupation_title) AGAINST ('EGG PROCESSOR') 
AS score FROM occupational_titles WHERE MATCH (occupation_title) 
AGAINST ('EGG PROCESSOR') ORDER BY score DESC;

Когда я выполняю этот запрос к моей базе данных, первые три результата - это «Процессор», «Яичный процессор» и «Процессор COPRA». Первые два имеют одинаковую оценку 6.04861688613892. С какой стати MySQL не причисляет точное совпадение к результату номер один? Что я могу сделать, чтобы уточнить алгоритм поиска?

Ответы [ 2 ]

0 голосов
/ 07 марта 2011

Возможно, вы хотите использовать один из режимов модификаторов в своих поисках. Проверьте полнотекстовую документацию .

В частности, по умолчанию он использует поиск на «естественном языке», в то время как вы, вероятно, хотите рассмотреть «логический режим» и ставить перед каждым ключевым словом знак плюс, чтобы сделать его обязательным в результатах, или использовать двойные кавычки для поиска фраза. Обратитесь к документации по логическому режиму для получения дополнительной информации о синтаксисе.

Вы также можете рассмотреть возможность выполнения нескольких поисков с использованием различных режимов и собственного взвешивания.

0 голосов
/ 07 марта 2011

Полагаю, вам следует изменить сопоставление вашего столбца на регистр без учета регистра. например. от latin1 до latin1_bin

Чувствительный к регистру Матч проводится в вашем случае. Посмотрите здесь: http://dev.mysql.com/doc/refman/5.5/en/fulltext-natural-language.html

...