1

我在列上使用 FULLTEXT 索引,当我在布尔模式下对长度小于 4 个字符的任何搜索词使用 MATCH....AGAINST 时,它不会返回任何记录。当我使用 LIKE 时,它确实返回记录。可能是什么问题呢?是因为 MySQL 的一些限制,比如它不索引长度小于 4 个字符的单词,还是因为 FULLTEXT 索引的某些限制?

谢谢

4

1 回答 1

3

检查您的ft_min_word_len系统变量。这定义了要索引的单词的最小长度。

更新:好的,我做了一些测试ft_min_word_len=3

首先是一个测试表

CREATE  TABLE `test`.`table1` (
  `id` INT NOT NULL AUTO_INCREMENT ,
  `name` TEXT NULL ,
  PRIMARY KEY (`id`) ,
  FULLTEXT INDEX `Name` (`name` ASC) )
ENGINE = MyISAM;

接下来是一些测试数据:

INSERT INTO `test`.`table1` (`id`, `name`) VALUES ('1', 'This has led in it');
INSERT INTO `test`.`table1` (`id`, `name`) VALUES ('2', 'Led is nice');
INSERT INTO `test`.`table1` (`id`, `name`) VALUES ('3', 'Leds are nicer');
INSERT INTO `test`.`table1` (`id`, `name`) VALUES ('4', 'Nothin here');
INSERT INTO `test`.`table1` (`id`, `name`) VALUES ('5', 'some word which does not exists: abcleddef');

运行这个:

SELECT * FROM `test`.`table1` t1 WHERE match(`t1`.`name`) against ('led' in boolean mode)

返回这个:

1   This has led in it
2   Led is nice

运行这个:

SELECT * FROM `test`.`table1` t1 WHERE match(`t1`.`name`) against ('led*' in boolean mode)

返回这个:

1   This has led in it
2   Led is nice
3   Leds are nicer

所以 FT 搜索按预期工作。您试图找到的单词是否有可能实际上类似于leds而不是单个单词led

于 2011-03-21T06:10:41.460 回答