我正在尝试解决一个问题,即搜索短词不会产生结果。我正在运行MariaDB 10.0.34,将ft_min_word_len
设置为2
,并得到以下结果:
CREATE TABLE `ft_test` (
`name` varchar(128) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
ALTER TABLE `ft_test` ADD FULLTEXT KEY `name` (`name`);
INSERT INTO `ft_test` (`name`) VALUES ('aa'),('bb'),('abc'),('efgh'),('ab'),('abcd');
SELECT * FROM `ft_test` WHERE MATCH (name) AGAINST ("+ab*" IN BOOLEAN MODE);
-- Returns "abc" and "abcd" but NOT "ab".
SELECT * FROM `ft_test` WHERE MATCH (name) AGAINST ("+aa*" IN BOOLEAN MODE);
-- No results
SELECT * FROM `ft_test` WHERE MATCH (name) AGAINST ("+bb*" IN BOOLEAN MODE);
-- No results
SELECT * FROM `ft_test` WHERE MATCH (name) AGAINST ("+abc*" IN BOOLEAN MODE);
-- Returns "abc" and "abcd".
SELECT * FROM `ft_test` WHERE MATCH (name) AGAINST ("+abcd*" IN BOOLEAN MODE);
-- Returns "abcd".
手册说通配符*
可以匹配零个或多个字母,实际上+abc*
的结果包括abc
行,而+abcd*
的结果包括{{1} }行,但是两个字母的搜索与两个字母的行不匹配,据我从文档中可以看到,以上都不是停用词。
为什么会这样?发生了什么事?