mysql中的全文搜索不会检索所有行

时间:2015-01-28 01:49:14

标签: mysql sql full-text-search

我在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

提前致谢!!

1 个答案:

答案 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