【问题标题】:How to use fulltext matching for emails in MySQL?如何在 MySQL 中对电子邮件使用全文匹配?
【发布时间】:2020-07-04 23:26:10
【问题描述】:

我正在为我们的 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 的可能性,据我了解它不支持查询中的“@”符号。有没有其他方法可以使用 MATCH AGAINST 同时仍然能够通过确切的完整地址进行搜索?

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

【问题讨论】:

  • 长话短说:将全文搜索与LIKE结合起来,使用OR。如果您想知道为什么阅读文档,全文搜索一般是如何工作的。
  • @emix - 不是OR

标签: mysql sql database search innodb


【解决方案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%'

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

【讨论】:

  • 是否存在导致投票失败的缺陷?也许我可以解决它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-25
  • 1970-01-01
  • 2013-04-01
相关资源
最近更新 更多