在搜索电子邮件地址时,MySQL MATCH AGAINST

时间:2012-01-22 12:45:32

标签: mysql sql full-text-search full-text-indexing

我正在编写新闻稿脚本,我需要在地址中实现搜索。我用FULLTEXT索引表,但是当我执行查询时:

SELECT * FROM addresses WHERE MATCH(email) AGAINST("name@example.com" IN BOOLEAN MODE)

我得到了奇怪的结果。它显示“example.com”上的所有电子邮件以及用户“name”的所有电子邮件。例如,我得到:

john@example.com
name@mail.net
steven@example.com

我重写了查询以使用LIKE“%name@example.com%”但是对于一个大表,它需要花费大量的时间才能完成。 这有解决方案吗?我想在搜索时只显示完整匹配的电子邮件而不是其中的一部分。提前谢谢。

2 个答案:

答案 0 :(得分:9)

要匹配精确短语,您必须将短语括在双引号中。因此,请将您的查询更改为:

SELECT * FROM addresses WHERE MATCH(email) AGAINST('"name@example.com"' IN BOOLEAN MODE)

Source

答案 1 :(得分:0)

您可以使用传统索引(使用简单的 = 运算符)而不是全文索引。它将快速运行并在数据库引擎上使用更少的资源。

SELECT * FROM addresses WHERE email = 'name@example.com';

在这种情况下,如果您想通过电子邮件地址的开头部分进行查找,也可以使用类似运算符,在搜索字符串的末尾加上 %。

SELECT * FROM addresses WHERE email like 'name@exam%';