如何在MySQL中使用邮件全文匹配?

问题描述 投票:0回答:2

我正在为 CRM 系统的联系人数据库表(MySQL、InnoDB 引擎)添加“通过电子邮件搜索”功能。我添加了全文索引和部分搜索,如下所示

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

工作正常。但是,如果我尝试匹配这样的完整电子邮件地址

WHERE MATCH(cc.email_c) AGAINST('[email protected]' IN NATURAL LANGUAGE MODE)

所有包含 Gmail 的电子邮件地址都会被返回。我已经放弃了使用布尔模式的可能性,据我了解,它不支持查询中的“@”符号。是否有其他方法可以使用 MATCH AGAINST,同时仍然能够通过确切的完整地址进行搜索?

我总是可以使用带有 LIKE 和一些通配符的 SQL,但我仍然更喜欢进行全文搜索。

mysql sql database search innodb
2个回答
0
投票

您可以简单地将电子邮件用双引号(“”)括起来,如下所示:

WHERE MATCH(cc.email_c) AGAINST("[email protected]" IN NATURAL LANGUAGE MODE)

-1
投票

将其转换为

AGAINST('+Joe +gmail +com' IN BOOLEAN MODE)

但是,要小心;短名称和“停用词”前面不应有“+”。

然后,因为它不够精确,所以结合

LIKE

WHERE MATCH(email) AGAINST('+Joe +gmail +com' IN BOOLEAN MODE)
  AND email LIKE '%[email protected]%'

第一部分给你速度;第二部分将仅测试通过第一个测试的那些。

© www.soinside.com 2019 - 2024. All rights reserved.