长期读者,第一次问问。
我正在整理一个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中运行它,如果这有任何区别。
我错过了什么?
答案 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)