php - 在 MyISAM 中使用全文搜索匹配精确值

标签 php mysql search full-text-search myisam

我有一个包含 2 列的表格,分别是电子邮件和 ID。我想在列中搜索完全匹配的电子邮件值。

我已经使用 MyISAM 引擎设置了我的表,并使用全文索引设置了电子邮件列。当我运行查询以搜索完全匹配时,它有时会成功,有时会失败。

这是我的表格定义

CREATE TABLE `tbl_email` (
    `email` varchar(60),
    `uid` int(11)
    FULLTEXT KEY `EmailIndex` (`email`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1

这是我的查询,用于匹配我的电子邮件值

select uid from tbl_email where MATCH(email) AGAINST ('abcdefghi@yahoo.com') 
limit 1;

有时可以,有时即使表中有匹配结果也无法返回匹配结果。我做错了什么吗?我应该怎么做才能在全文搜索中匹配精确值?

我也试过使用 IN BOOLEAN MODE 但同样没用

select uid from tbl_email where MATCH(email) AGAINST ('abcdefghi@yahoo.com' 
IN BOOLEAN MODE) limit 1;

最佳答案

据我所知,全文索引搜索将搜索字符串解释为自然人类语言中的一个短语,并在必要时中断单词以进行搜索,如 http://dev.mysql.com/doc/refman/5.5/en/fulltext-search.html 中所述最重要的看这里

*停用词列表适用。此外,出现在 50% 或更多行中的词被认为是常见的并且不匹配。 *

而且我相信您的每封电子邮件中都会包含 .com(. 作为停用词),这意味着您的整个表格都将与您提供的搜索相匹配。

您最好使用 InnoDB 进行简单索引,因为它可以更快地插入记录并制作简单的 where 子句。

我不知道全文搜索使用什么算法,而不是字符串搜索的普通索引,但假设如果您使用全文索引进行搜索,我想由于不同的解释,它需要比普通索引更多的时间,因为那样的话将不得不查看每个电子邮件值,因为它们都有停用词,例如 @ 和 .com 等。但这只是我的理解,我不是数据搜索算法制造商。

关于php - 在 MyISAM 中使用全文搜索匹配精确值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21865476/

相关文章:

search - Elasticsearch 输入分析

php - codeigniter:实体去哪儿了?

php - 在 laravel 5.3 中调用 null 的成员函数lists()

php - 我正在使用 filemtime,它不断返回以下数字 : 1302021664. 这是为什么?

php - 如何使用 Codeception 查看两层深度的 ResponseContainsJson?

mysql - SQL 查询时间复杂度

MySQL 搜索(按相关性排序)

php - 使用 MySQL 的 PHP 应用程序中的语言支持

php - 如何从 mysql 足球 [足球] 结果表中即时输出排名表?

search - 上下文建议的索引,例如使用Elasticsearch的Flipkart,亚马逊