Crating table
CREATE TABLE `Footable` (
`id` int NOT NULL AUTO_INCREMENT,
`foo_colmn` varchar(255) NOT NULL,
FULLTEXT (foo_colmn),
PRIMARY KEY (`id`)) ENGINE=MyISAM;
插入一行
INSERT INTO Footable (`foo_colmn`) VALUES ("against1111 , against");
INSERT INTO Footable (`foo_colmn`) VALUES ("against1111");
INSERT INTO Footable (`foo_colmn`) VALUES ("against");
使用BOOLEAN MODE搜索
SELECT * FROM Footable WHERE MATCH
(foo_colmn)
AGAINST
('against1111' IN BOOLEAN MODE);
-------------------------
id |foo_colmn |
---|--------------------|
1 |against1111 , against |
2 |against1111 |
是的,这是正常的,但如果我搜索“反对”
SELECT * FROM Footable
WHERE MATCH
(foo_colmn)
AGAINST
('against' IN BOOLEAN MODE);
---------------
id |foo_colmn |
---|----------|
什么都不返回。我无法理解发生了什么。 (Sory关于我可怜的英语)
答案 0 :(得分:0)
您需要了解停用词(和简短词)。
停用单词是常见的或被认为无效的单词,因此它们将从索引中删除。 MySQL包含一个标准列表。 "反对"将是一个典型的停用词("是",""," a","然而"等等。)
您可以阅读here。
解决方案是重建全文索引,没有停用词(或使用自定义列表)。
编辑。
我应该注意到,对于一些(现在怀疑是辉煌的)原因,InnoDB停止词与MyISAM停止词不同。所以,我可以猜测你正在使用MyISAM,因为"反对"只列在一个列表中。