我正在编写新闻稿脚本,我需要在地址中实现搜索。我用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%”但是对于一个大表,它需要花费大量的时间才能完成。 这有解决方案吗?我想在搜索时只显示完整匹配的电子邮件而不是其中的一部分。提前谢谢。
答案 0 :(得分:9)
要匹配精确短语,您必须将短语括在双引号中。因此,请将您的查询更改为:
SELECT * FROM addresses WHERE MATCH(email) AGAINST('"name@example.com"' IN BOOLEAN MODE)
答案 1 :(得分:0)
您可以使用传统索引(使用简单的 = 运算符)而不是全文索引。它将快速运行并在数据库引擎上使用更少的资源。
SELECT * FROM addresses WHERE email = 'name@example.com';
在这种情况下,如果您想通过电子邮件地址的开头部分进行查找,也可以使用类似运算符,在搜索字符串的末尾加上 %。
SELECT * FROM addresses WHERE email like 'name@exam%';