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: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]
Shane Bester
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.
Portions of this website are copyright © 2001, 2002 The PHP Group
Page generated in 0.043 sec. using MySQL 8.4.7-u6-cloud
Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the
respective copyright holders.
It is not reviewed in advance
by Oracle and does not necessarily represent the opinion of
Oracle or any other party.
Description: This works for MyISAM but not InnoDB tales. MySQL Error : syntax error, unexpected '+', expecting FTS_TERM or FTS_NUMB or '*' Error Number : 1064 SELECT COUNT(imageid) AS imagecount FROM dbtech_gallery_images WHERE instanceid = 1 && approved = 1 && deleted = 0 && MATCH (title, text, tagging, username) AGAINST ('+jewellery* +jewel* +crystal* +fashion* +* +abstract* ' IN BOOLEAN MODE); Ca How to repeat: Use syntax similar to the above against a InnoDB table vs similar MyISAM table.