我在 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
提前致谢!!
最佳答案
您的数据集中已超过 50% 的阈值。尝试一下
SELECT MyCol FROM MyTable
WHERE MATCH(MyCol) AGAINST ('6003');
看看结果是什么。
当您第一次尝试全文搜索以了解其工作原理时,50% 阈值具有重要意义:如果您创建一个表并仅向其中插入一两行文本,则文本中的每个单词都会出现在至少 50% 的行。因此,任何搜索都不会返回任何结果。确保插入至少三行,最好是更多。需要绕过50%限制的用户可以使用 bool 搜索模式;请参阅第 12.9.2 节“ bool 全文搜索”。
http://dev.mysql.com/doc/refman/5.0/en/fulltext-natural-language.html
关于mysql - mysql 中的全文搜索不会检索所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28183301/