Как использовать полнотекстовое сопоставление для писем в MySQL? - PullRequest
0 голосов
/ 24 марта 2020

Я добавляю функцию «поиск по электронной почте» в таблицу базы данных контактов (MySQL, InnoDB engine) для нашей системы CRM. Я добавил индекс FULLTEXT и частичные поиски вроде этого

WHERE MATCH(cc.email_c) AGAINST('Joe' IN NATURAL LANGUAGE MODE)

работают нормально. Тем не менее, если я пытаюсь сопоставить полный адрес электронной почты, как это

WHERE MATCH(cc.email_c) AGAINST('Joe@gmail.com' IN NATURAL LANGUAGE MODE)

, все адреса электронной почты с Gmail возвращаются. Я уже отказался от возможности использования BOOLEAN MODE, насколько я понимаю, он не поддерживает символ «@» в запросе. Есть ли какой-либо другой способ использовать МАТЧУ ПРОТИВ, при этом все еще имея возможность поиска по точному полному адресу?

Я всегда могу использовать SQL с LIKE и некоторыми подстановочными знаками, но я все же предпочел бы иметь полнотекстовый поиск.

1 Ответ

0 голосов
/ 01 апреля 2020

Преобразуйте его в AGAINST('+Joe +gmail +com' IN BOOLEAN MODE)

Но будьте осторожны; короткие имена и «стоп-слова» не должны иметь перед собой «+».

Тогда, поскольку оно не будет достаточно точным, объедините его с LIKE:

WHERE MATCH(email) AGAINST('+Joe +gmail +com' IN BOOLEAN MODE)
  AND email LIKE '%Joe@gmail.com%'

Первая часть дает вам скорость; вторая часть будет тестировать только те, которые прошли первый тест.

...