我遇到布尔搜索的问题,首先我认为我的数据库/表有问题,但后来我尝试使用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');
答案 0 :(得分:2)
在BOOLEAN模式匹配中应用stopwords list时,引擎会忽略单词second
和third
。
您可以使用自己的默认停用词列表覆盖默认停用词列表,如here所述:
要覆盖默认的停用词列表,请设置
ft_stopword_file
系统 变量。 [...]变量值应该是文件的路径名 包含禁用词列表,或空字符串以禁用禁用词 过滤。除非,服务器在数据目录中查找该文件 给出绝对路径名以指定不同的目录。后 更改此变量的值或停用词的内容 文件,重新启动服务器并重建FULLTEXT
索引。