MySQL - 具有特定搜索值'course'的全文搜索问题



我已经创建了下面的表格。

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)

相关内容

  • 没有找到相关文章

最新更新