我已经创建了下面的表格。
CREATE TABLE `test` (
`name` VARCHAR(50) NOT NULL,
`id` INT(10) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`),
FULLTEXT INDEX `name` (`name`)
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM;
包含以下数据
insert into test (name) values('apple');
insert into test (name) values('course');
,我正在搜索以下查询。
select * from test where MATCH (name) AGAINST ('apple' IN BOOLEAN MODE);
select * from test where MATCH (name) AGAINST ('course' IN BOOLEAN MODE);
现在的问题是,第一个选择查询返回正确的行。但是第二个查询没有返回任何行。我用其他单词测试了一下,它们工作得很好。但是如果数据有单词'course',当我们搜索'course'时,它不会返回任何行。
有人能帮我解决这个奇怪的问题吗?使用like
算子不是最好的吗?
select * from test where name LIKE 'course';
甚至REGEXP
select * from test where name RegexP 'course';
- SQLFIDDLE
你可以试试:
select * from test where MATCH (name) AGAINST ('course*' IN BOOLEAN MODE);
它通常在部分词搜索中失败,通过....请给我们看看你们表格中的一些样本数据。
Bingo: MYSQL似乎充满了停止词。所以这是它说的和你需要做的:)
"从MySQL 5.5.6开始,如果character_set_server为ucs2, utf16或utf32,则加载并使用latin1搜索停止词文件。如果在服务器字符集为ucs2、utf16或utf32的情况下使用FULLTEXT索引创建了任何表,则应该使用此语句进行修复。
REPAIR TABLE tbl_name QUICK;
"
在您的AGAINST查询中添加"IN BOOLEAN MODE"
像AGAINST ('course*' IN BOOLEAN MODE)