我在mysql中遇到问题。
这就是我所做的:
CREATE TABLE `dar`.`MyTable` (
`MyCol` VARCHAR(100) NOT NULL,
FULLTEXT INDEX `Index_1`(`MyCol`)
)
ENGINE = MyISAM;
INSERT INTO MyTable (MyCol)
VALUES ('6002.C3'),
('6002'),
('6002R1'),
('6003.C4'),
('AA6002.X'),
('BB 6002.X');
这不是必要的,但我还是做了:
REPAIR TABLE MyTable QUICK;
现在,我执行下一个查询:
SELECT MyCol FROM MyTable
WHERE MATCH(MyCol) AGAINST ('6002*');
而且,它不会返回任何行!!
参数 ft_min_word_len 我已更改为2,但没有任何更改。
当使用'BB 6002.X'删除行时,查询返回2行!!
6002
6002.C3
那令人毛骨悚然。
知道这里发生了什么吗?
我需要查询返回:
6002.C3
6002
6002R1
如果包括:
AA6002.X
BB 6002.X
提前致谢!!
答案 0 :(得分:2)
您已超过数据集中的50%阈值。尝试
SELECT MyCol FROM MyTable
WHERE MATCH(MyCol) AGAINST ('6003');
看看结果如何。
当您首次尝试全文搜索以查看其工作方式时,50%阈值具有重要意义:如果您创建一个表并仅在其中插入一行或两行文本,则文本中的每个单词都出现在至少50%的行。因此,没有搜索会返回任何结果。一定要插入至少三行,最好是多行。需要绕过50%限制的用户可以使用布尔搜索模式;请参见第12.9.2节“布尔全文搜索”。
http://dev.mysql.com/doc/refman/5.0/en/fulltext-natural-language.html