MySQL 匹配意外行为

MySQL Match unexpected behavior

我有一个数据库,其中包含 MyISAM table 中所有 PHP 函数的列表,其列 function_namedescription 使用 FULL TEXT 指数。我在 MATCH...AGAINST() 查询中遇到了一些奇怪的行为,例如:

select * from functions where match(function_name) against('array_search');
select * from functions where function_name = 'array_search'

Returns 预期行,每个查询 returning 一行,但随后:

select * from functions where match(function_name) against('each');
select * from functions where function_name = 'each'

第二个查询只有 return 一行,而第一个查询 return 什么也没有。

我还注意到,description列中的"common"个词往往会出现这种情况(这应该是无关紧要的),例如,搜索[=37时也会出现同样的情况=] 但不是像 "array_pop" 这样的东西。但是,"count" 确实 return 预期的行为。

此外,它得到意外行为的行是我新插入的行,大部分(几乎所有新插入的行都不起作用,但我不确定是否所有不起作用的行都是新插入)

唯一有效的新插入行是奇怪的函数名称,例如:

select * from functions where match(function_name) AGAINST('asdadasdadasdadasdadasdad')

Returns 预期的行为。我试过执行类似的东西:

ALTER TABLE functions DROP INDEX description;
ALTER TABLE functions DROP INDEX function_name;
ALTER TABLE `functions` ADD FULLTEXT(`function_name`);
ALTER TABLE `functions` ADD FULLTEXT(`description`);
select * from functions where match(function_name) against('each');
select * from functions where function_name = 'each';

最后一个查询仍然 return 只有一行, MATCH() ...AGAINST 查询没有行。我不确定 MATCH...AGAINST 查询背后的数学是什么,但是有人知道我可能 运行 参与其中的原因吗?

您 运行 进入 stop words,即非常常见的单词,ignored.Scroll 进一步向下用于 MyISAM,each 进入 there.You 可以编辑列出或使用空文件忽略任何停用词。