MySQL全文布尔模式使用通配符搜索两个字母词

时间:2018-07-10 00:59:01

标签: mysql full-text-search mariadb

我正在尝试解决一个问题,即搜索短词不会产生结果。我正在运行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} }行,但是两个字母的搜索与两个字母的行不匹配,据我从文档中可以看到,以上都不是停用词。

为什么会这样?发生了什么事?

0 个答案:

没有答案