我在我的CRM系统的联系人数据库表(MySQL,InnoDB引擎)上添加了“通过电子邮件搜索”功能。我添加了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和一些通配符一起使用,但是我仍然希望进行全文搜索。
答案 0 :(得分:-1)
将其转换为AGAINST('+Joe +gmail +com' IN BOOLEAN MODE)
但是要当心;短名称和“停用词”前面不应带有“ +”。
然后,由于不够精确,请结合使用LIKE
:
WHERE MATCH(email) AGAINST('+Joe +gmail +com' IN BOOLEAN MODE)
AND email LIKE '%Joe@gmail.com%'
第一部分给您速度;第二部分将仅测试通过第一部分的测试。