2

我在使用布尔搜索时遇到问题,首先我认为我的数据库/表有问题,但后来我尝试使用 1 列和示例值创建以下示例表,结果是相同的,它成功运行了一些单词而失败了, 有任何想法吗?

成功运行的查询:

SELECT * FROM `temp` WHERE (match (txt) against ('develo*' IN BOOLEAN MODE)>0 ) 
SELECT * FROM `temp` WHERE (match (txt) against ('devel*' IN BOOLEAN MODE)>0 ) 
SELECT * FROM `temp` WHERE (match (txt) against ('senio*' IN BOOLEAN MODE)>0 ) 

但是当我尝试对“第二”或“第三”进行类似的搜索时,它失败了

SELECT * FROM `temp` WHERE (match (txt) against ('secon*' IN BOOLEAN MODE)>0 ) 
SELECT * FROM `temp` WHERE (match (txt) against ('third*' IN BOOLEAN MODE)>0 ) 

--- 以下是示例表和值 -----

CREATE TABLE IF NOT EXISTS `temp` (
  `txt` varchar(30) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Dumping data for table `temp`
--

INSERT INTO `temp` (`txt`) VALUES
('developer'),
('Developer'),
('Developer senior'),
('senior developer'),
('second job'),
('job second'),
('third'),
('third job'),
('job third');
4

1 回答 1

2

由于在 BOOLEAN MODE 匹配中应用了停用词列表second,因此引擎会忽略和third

您可以使用自己的覆盖默认停用词列表,如下所述

要覆盖默认停用词列表,请设置ft_stopword_file系统变量。[...] 变量值应该是包含停用词列表的文件的路径名,或者是禁用停用词过滤的空字符串。服务器在数据目录中查找文件,除非给出绝对路径名来指定不同的目录。更改此变量的值或停用词文件的内容后,重新启动服务器并重建FULLTEXT索引。

于 2012-10-15T15:09:59.243 回答