MySQL - 使用特定搜索值“课程”的FULLTEXT搜索问题

时间:2013-01-04 09:54:29

标签: mysql search full-text-search myisam match-against

我创建了下表。

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);

现在问题是第一个选择查询返回正确的行。但第二个查询不返回任何行。我测试了其他的话,他们工作正常。但是如果数据有“课程”这个词,当我们搜索“课程”时,它不会返回任何行。

有人可以帮我解决这个奇怪的问题吗?

2 个答案:

答案 0 :(得分:1)

使用like运算符不是最好吗?

select * from test  where name LIKE 'course';

甚至是REGEXP

select * from test  where name RegexP 'course';

您可以尝试:

select * from test  where MATCH (name) AGAINST ('course*' IN BOOLEAN MODE);

它通常在部分单词搜索中失败最多......所以请求从我们的表中向我们展示一些样本数据。

Bingo:似乎MYSQL充满了stop words

所以这里是说什么,你需要做什么:)

“从MySQL 5.5.6开始,如果character_set_server是ucs2,utf16或utf32,则使用latin1加载和搜索停用词文件。如果使用FULLTEXT索引创建了任何表,而服务器字符集是ucs2,utf16或utf32 ,它应该使用这个声明进行修复..

REPAIR TABLE tbl_name QUICK;

答案 1 :(得分:0)

在您的AGAINST查询中添加“IN BOOLEAN MODE” 喜欢(在BOOLEAN模式中''当然*') 这将完美地运作