我创建了下表。
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);
现在的问题是第一个选择查询返回了正确的行。但是第二个查询没有返回任何行。我用其他词进行了测试,它们工作正常。但是,如果数据包含“类(class)”一词,并且当我们搜索“类(class)”时,它不会返回任何行。
谁能帮我解决这个奇怪的问题?
最佳答案
不是最好使用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);
虽然它通常在部分单词搜索中失败最多......所以请向我们展示您表格中的一些示例数据。
宾果游戏:MYSQL 似乎充满了stop words .
所以这就是所说的和你需要做的:)
“从 MySQL 5.5.6 开始,如果 character_set_server 是 ucs2、utf16 或 utf32,则使用 latin1 加载和搜索停用词文件。如果任何表是使用 FULLTEXT 索引创建的,而服务器字符集是 ucs2、utf16 或 utf32 , 应该用这个语句修复..
修复表 tbl_name QUICK;
"
关于MySQL - 具有特定搜索值 'course' 的 FULLTEXT 搜索问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14154803/