在MySQL中匹配搜索少于4个字符的字符串时不显示记录

在MySQL中匹配搜索少于4个字符的字符串时不显示记录,mysql,match,full-text-search,against,Mysql,Match,Full Text Search,Against,我在列上使用全文索引,当我在布尔模式下对长度小于4个字符的任何搜索项使用MATCH…,则它不会返回任何记录。当我使用LIKE时,它会返回记录。 有什么问题吗?这是因为MySQL有一些限制,比如它不索引长度小于4个字符的单词,还是有一些特定于全文索引的限制 谢谢检查您的ft\u min\u word\u len系统变量。它定义要索引的单词的最小长度 更新:好的,我用ft\u min\u word\u len=3做了一些测试 首先是一个测试表 CREATE TABLE `test`.`table1

我在列上使用全文索引,当我在布尔模式下对长度小于4个字符的任何搜索项使用MATCH…,则它不会返回任何记录。当我使用LIKE时,它会返回记录。 有什么问题吗?这是因为MySQL有一些限制,比如它不索引长度小于4个字符的单词,还是有一些特定于全文索引的限制


谢谢

检查您的
ft\u min\u word\u len
系统变量。它定义要索引的单词的最小长度

更新:好的,我用
ft\u min\u word\u 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)
SELECT * FROM `test`.`table1` t1 WHERE match(`t1`.`name`) against ('led*' in boolean mode)
返回以下内容:

1   This has led in it
2   Led is nice
1   This has led in it
2   Led is nice
3   Leds are nicer
运行此:

SELECT * FROM `test`.`table1` t1 WHERE match(`t1`.`name`) against ('led' in boolean mode)
SELECT * FROM `test`.`table1` t1 WHERE match(`t1`.`name`) against ('led*' in boolean mode)
返回以下内容:

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

因此,《金融时报》的搜索工作如期进行。您试图查找的单词可能实际上类似于
led
,而不是单个单词
led

尝试使用查询扩展运行
像这样对('database'进行查询扩展)我使用了“WITH QUERY EXPANSION”,但仍然不走运。假设ft_main_word_len设置为4,那么为什么我使用LIKE操作符运行相同的查询时会产生结果,但不匹配?是不是因为LIKE不使用全文索引LIKE MATCH?据我所知,LIKE只使用普通索引(如果有)并返回到表扫描。好的,我将“ft_main_word_len”值更改为3,然后重新启动MySQL,然后在两个表中删除全文索引,然后重新创建全文索引,然后再次运行该查询,但仍然没有成功。虽然当我使用类似“%key%”的命令运行同一个查询时,它仍然有效。您能提供一些示例数据吗?该查询类似于:
SELECT*FROM table1 t1,table2 t2,其中t1.id=t2.recordid,并对('led'在布尔模式下)匹配('t1.title'),对('led'在布尔模式下匹配('t2.name'))
但如果我使用此查询,则会产生结果:
从表1 t1、表2 t2中选择*,其中t1.id=t2.recordid和t1.title类似于“%led%”和t2.name类似于“%led%”
以下查询也会产生结果:
从表1 t1、表2 t2中选择*,其中t1.id=t2.recordid和匹配('t1.title')('led*'在布尔模式下)并将('t2.name')与('led*'在布尔模式下)匹配。