Bug #72605 | Syntax error fulltext search InnoDB tables 5.6.16 | ||
---|---|---|---|
Submitted: | 10 May 2014 7:23 | Modified: | 3 Jun 2014 16:50 |
Reporter: | Kym Farnik | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: FULLTEXT search | Severity: | S3 (Non-critical) |
Version: | 5.6.16, 5.6.19 | OS: | Linux (Centos 5.10) |
Assigned to: | Daniel Price | CPU Architecture: | Any |
Tags: | fulltext innodb |
[10 May 2014 7:23]
Kym Farnik
[10 May 2014 7:33]
Kym Farnik
Changed category to FULLTEXT search
[11 May 2014 0:14]
MySQL Verification Team
Thank you for the bug report. Please provide the complete test case create table, insert data etc. Thanks.
[11 May 2014 1:08]
Kym Farnik
-- full example of bug CREATE TABLE atest_table ( imageid int(10) unsigned NOT NULL AUTO_INCREMENT, title varchar(300) CHARACTER SET utf8 NOT NULL, text mediumtext CHARACTER SET utf8, PRIMARY KEY (imageid), FULLTEXT KEY search_index (title,text) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; insert into atest_table (title,text) values ('Test 1','Test 1 description'), ('Jewel','Crystal Jewellery'), ('Line 3','Line 1 description'); SELECT COUNT(imageid) AS imagecount FROM atest_table WHERE MATCH (title, text) AGAINST ('+jewel* +* +crystal* ' IN BOOLEAN MODE); -- MySQL said: -- #1064 - syntax error, unexpected '+', expecting FTS_TERM or FTS_NUMB or '*' ALTER TABLE `atest_table` ENGINE = MyISAM; SELECT COUNT(imageid) AS imagecount FROM atest_table WHERE MATCH (title, text) AGAINST ('+jewel* +* +crystal* ' IN BOOLEAN MODE); -- Result: -- imagecount -- 1
[11 May 2014 5:49]
MySQL Verification Team
drop table if exists t1; create table t1(a text,fulltext index a(a))engine=innodb; select match(a) against ('+* +a* ' in boolean mode) from t1;
[12 May 2014 9:55]
MySQL Verification Team
Hello Kym, Thank you for the report. Verified as described. Thanks, Umesh
[12 May 2014 9:56]
MySQL Verification Team
Thank you Shane for the simplified test case. mysql> drop table if exists t1; Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> create table t1(a text,fulltext index a(a))engine=innodb; Query OK, 0 rows affected (0.12 sec) mysql> select match(a) against ('+* +a* ' in boolean mode) from t1; ERROR 1064 (42000): syntax error, unexpected '+', expecting FTS_TERM or FTS_NUMB or '*' mysql> mysql> // With MyISAM mysql> drop table if exists t1; Query OK, 0 rows affected (0.02 sec) mysql> create table t1(a text,fulltext index a(a))engine=myisam; Query OK, 0 rows affected (0.01 sec) mysql> select match(a) against ('+* +a* ' in boolean mode) from t1; Empty set (0.00 sec) mysql> select version(); +-------------------------------------------+ | version() | +-------------------------------------------+ | 5.6.19-enterprise-commercial-advanced-log | +-------------------------------------------+ 1 row in set (0.00 sec)
[13 May 2014 10:09]
Kym Farnik
Thanks guys. This is my first bug report. I'm not a DBA, but am the tech admin for a forum http://www.ausphotography.net.au I have general development skills Since MySQL 5.6 we've changed most of our tables to InnoDB which has been a positive move in terms of stability; i.e. MyISAM tables would have errors every few weeks. This error is localised to the photo Gallery addon search function. Which being a photography forum is rather important :)
[20 May 2014 2:42]
Shaohua Wang
The real problem is "AGAINST ('+*' IN BOOLEAN MODE)". If we remove '+*' from the fts query string, we will get correct result. Hi Kym, why do you need '+*' in fts query? it's meaningless and useless.
[21 May 2014 3:46]
Kym Farnik
The code in question is generated by a plugin to the vBulletin forum system. I agree the +* is stupid, but is not in my hands. The code works for MyISAM tables and not for InnoDB - that is still an issue.
[23 May 2014 6:50]
Shaohua Wang
Hi Kym, we decided to document syntax differences, and wouldn't fix the bug(IMO, it's not a bug, but a real compatible issue). Sorry for the inconvenience. I'd strongly recommend you to file a bug to "vBulletin". It could be a simple fix, I guess. Hope you can go around this soon. Thanks again for the bug report.
[24 May 2014 9:07]
Kym Farnik
Thanks, I've reported the issue to the vBulletin 3rd Party addon developer and fixed the code myself for our site. (the "+*) is not generated. As said, there is a difference between MyISAM and InnoDB when ideally they should be the same
[3 Jun 2014 16:50]
Daniel Price
Invalid full-text search queries for InnoDB ('+*' , '+-', '+-good') are now documented here: http://dev.mysql.com/doc/refman/5.6/en/fulltext-boolean.html http://dev.mysql.com/doc/refman/5.7/en/fulltext-boolean.html Thank you for the bug report.