我有一个MyISAM表中所有PHP函数列表的数据库,其列function_name
和description
使用FULL TEXT
索引编制索引。我使用MATCH...AGAINST()
查询获得了一些奇怪的行为,例如:
select * from functions where match(function_name) against('array_search');
select * from functions where function_name = 'array_search'
返回预期的行,每个查询返回一行,但随后:
select * from functions where match(function_name) against('each');
select * from functions where function_name = 'each'
第二个查询只返回一行,而第一个查询根本不返回任何内容。
我也注意到这往往会发生在#34;普通" description
列中的单词(应该是不相关的),例如,搜索"同时发生的事情是"但不适用于" array_pop"。然而,"计数"确实会返回预期的行为。
此外,它获得意外行为的行是我新插入的行,大多数情况下(几乎所有新插入的行都不起作用,但我不确定所有不起作用的行是否都有效新插入的)
唯一新插入的行是有奇怪的函数名称,如:
select * from functions where match(function_name) AGAINST('asdadasdadasdadasdadasdad')
返回预期的行为。我尝试过执行类似的事情:
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';
在最后一个查询中仍然只返回一行,而MATCH()... AGAINST查询没有任何行。我不确定MATCH ... AGAINST查询背后的数学是什么,但是有谁知道我可能遇到这个问题的原因?