无法使用MATCH AGAINST使用通配符

时间:2014-06-06 14:35:31

标签: mysql

长期读者,第一次问问。

我正在整理一个MySQL书籍数据库作为学习项目。我正在尝试用PHP和MySQL实现全文搜索。它到目前为止工作,但*截断运算符未按预期工作。为简单起见,我将省略PHP,因为当我在PhpMyAdmin中运行查询时,行为也是一样的。

    SELECT * FROM Mainbooks WHERE MATCH(Title,Author,Description) AGAINST('blaze')

返回一行,其中包含Richard Bachman的“Blaze”条目,但是

    SELECT * FROM Mainbooks WHERE MATCH(Title,Author,Description) AGAINST('blaz*')

不返回任何行。再举一个例子,

    SELECT * FROM Mainbooks WHERE MATCH(Title,Author,Description) AGAINST('Sacks')

返回Oliver Sacks包含“Migraine”的行,但

    SELECT * FROM Mainbooks WHERE MATCH(Title,Author,Description) AGAINST('Sack*')

不返回任何行。

的情况略有不同
    SELECT * FROM Mainbooks WHERE MATCH(Title,Author,Description) AGAINST('blaze*')

或         SELECT * FROM Mainbooks WHERE MATCH(Title,Author,Description)AGAINST('migraine *')

两者都返回结果,显然忽略了*字符。我在MAMP中运行它,如果这有任何区别。

我错过了什么?

1 个答案:

答案 0 :(得分:4)

使用BOOLEAN MODE运算符

时,您需要使用*

http://dev.mysql.com/doc/refman/5.0/en/fulltext-boolean.html

SELECT * FROM Mainbooks 
WHERE MATCH(Title,Author,Description) AGAINST('blaz*' IN BOOLEAN MODE)