[MDEV-4744] InnoDB Fulltext indexes Created: 2013-07-01 Updated: 2013-10-01 Resolved: 2013-10-01 |
|
| Status: | Closed |
| Project: | MariaDB Server |
| Component/s: | None |
| Fix Version/s: | 10.0.5 |
| Type: | Task | Priority: | Major |
| Reporter: | Ian Gilfillan | Assignee: | Oleksandr Byelkin |
| Resolution: | Fixed | Votes: | 0 |
| Labels: | None | ||
| Issue Links: |
|
||||||||||||||||||||||||||||||||
| Description |
|
It's possible to create a fulltext index in an InnoDB table in 10.0.3, and, superficially, it appears to work as expected. This feature is untested, so either needs to be fully tested and incorporated as a feature, or disabled. |
| Comments |
| Comment by Elena Stepanova [ 2013-07-03 ] | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Summary of relevant failures from innodb_fts suite: CREATE TABLE t1 (a VARCHAR(200), b TEXT, FULLTEXT (a,b)) ENGINE = InnoDB;
-------------------
------------------- (the 2nd row shouldn't be there) Upd: fixed in 10.0-monty (revno 3637) after merge with InnoDB of 5.6.10 ==================================================== CREATE TABLE t1 (a VARCHAR(30), FULLTEXT(a)) ENGINE = InnoDB; (should be a row) Upd: still fails in 10.0-monty (revno 3637) after merge with InnoDB of 5.6.10. It also fails in MySQL 5.6.10 (but works in 5.6.12), so the behavior is consistent with MySQL 5.6.10 (GA). ==================================================== SET NAMES utf8; (should be a row) Upd: still fails in 10.0-monty (revno 3637) after merge with InnoDB of 5.6.10. It also fails in MySQL 5.6.10 (but works in 5.6.12). ==================================================== CREATE TABLE articles ( SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('mysql - Security&DBMS' IN BOOLEAN MODE); ---
---
--- According to comments in the text, it should work same way as SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('mysql - (Security DBMS)' IN BOOLEAN MODE); but it does not:
---
--- For a note, there seems to be a bug with the latter query on MyISAM tables Upd: still fails in 10.0-monty (revno 3637) after merge with InnoDB of 5.6.10. It also fails in MySQL 5.6.10 (but works in 5.6.12). ==================================================== CREATE TABLE articles ( (should be a row) Upd: fixed in 10.0-monty (revno 3637) after merge with InnoDB of 5.6.10 ============================================== Assertion failure 130703 21:54:11 InnoDB: Assertion failure in thread 139830781155072 in file fts0fts.cc line 4781 #5 0x00007f2ce8241b8b in __GI_abort () at abort.c:91 create table `fts_test`(`a` text,fulltext key(`a`))engine=innodb; Upd: fixed in 10.0-monty (revno 3637) after merge with InnoDB of 5.6.10 ============================================== The test below has a comment that claims #
and checks 'Sort%' status variables for that. Ours get populated, so we don't meet the requirement. CREATE TABLE wp( INSERT INTO wp (title, text) VALUES FLUSH STATUS; SELECT title, MATCH(title, text) AGAINST ('database') AS score SHOW SESSION STATUS LIKE 'Sort%';
------------------
------------------ There are more tests like that. Upd: still fails in 10.0-monty (revno 3637) after merge with InnoDB of 5.6.10, although it works in MySQL 5.6.10, so if it's a bug, it might be MariaDB-only. ============================================== CREATE TABLE user_stopword(value varchar(30)) ENGINE = InnoDB MySQL allows to set it, MariaDB says Variable 'innodb_ft_server_stopword_table' can't be set to the value of 'test/user_stopword'. Upd: still fails in 10.0-monty (revno 3637) after merge with InnoDB of 5.6.10. It also fails in MySQL 5.6.10 (but works in 5.6.12). ============================================== Minor issues: wrong error codes | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| Comment by Elena Stepanova [ 2013-07-04 ] | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Assorted assertion failures in concurrent tests: 130704 1:01:08 InnoDB: Assertion failure in thread 139896084535040 in file fts0fts.cc line 784 #5 0x00007f3c2fd6eb8b in __GI_abort () at abort.c:91 130704 0:34:40 InnoDB: Assertion failure in thread 139652942001920 in file handler0alter.cc line 1901 #5 0x00007f03ddf37b8b in __GI_abort () at abort.c:91 | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| Comment by Elena Stepanova [ 2013-07-04 ] | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
WITH PARSER is not supported for InnoDB tables (neither in MariaDB nor in current MySQL), but MySQL produces the corresponding "not supported" error, while MariaDB pretends it uses the custom parser while in fact it doesn't. Upd: It is still so in 10.0-monty (revno 3637) after merge with InnoDB of 5.6.10. And it works the same way with MySQL 5.6.10 (while MySQL 5.6.12 produces a proper error). | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| Comment by Elena Stepanova [ 2013-07-04 ] | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
The following crashes. --source include/have_innodb.inc create table t1 (a text) engine=InnoDB; --connect (con1,localhost,root,,) --disconnect con1 Upd: fixed in 10.0-monty (revno 3637) after merge with InnoDB of 5.6.10 | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| Comment by Elena Stepanova [ 2013-07-05 ] | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Conclusion: The behavior looks consistent with the state of InnoDB as of 5.6.5 which 10.0.3 includes. Fulltext indexes/search work to the same extent as they did in MySQL 5.6.5. There are numerous bugs and limitations that are reproducible on MySQL 5.6.5 (and not reproducible on MySQL 5.6.12). A superficial look at the code changes also confirms that related changes (initial WL and bugfixes) were on the InnoDB side. I suggest to keep the functionality enabled in 10.0.4 if the new InnoDB is merged by then. If not, disable the functionality until it's merged (if it's easily disabled, otherwise keep it but document as pre-alpha quality). After the InnoDB merge is done, I will re-run some basic tests before the release, and will later need to run concurrent tests targeted for ALTER ONLINE on tables with fulltext indexes (as the history shows, there was a special effort for ALTER .. LOCK=NONE and ALGORITHM=INPLACE); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| Comment by Elena Stepanova [ 2013-07-21 ] | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Status after the merge with MySQL 5.6.10, as of 10.0-monty revno 3637 I think that I will check once again after merge into the main 10.0 tree. | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| Comment by Elena Stepanova [ 2013-08-06 ] | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Not noted before, "Cannot find index FTS_DOC_ID_INDEX in InnoDB index translation table" errors are observed on the tree after the merge and on MySQL 5.6.10, but not on MySQL 5.6.12. | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| Comment by Elena Stepanova [ 2013-08-06 ] | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
We still need to merge the innodb_fts suite into 10.0. | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| Comment by Oleksandr Byelkin [ 2013-08-07 ] | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
All trivial fixes made, so we have failing: | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| Comment by Oleksandr Byelkin [ 2013-08-08 ] | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
following tests should be fixed: | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| Comment by Oleksandr Byelkin [ 2013-08-30 ] | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
innodb-fts-stopword (crash) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| Comment by Oleksandr Byelkin [ 2013-09-03 ] | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
– source include/have_innodb.inc select @@innodb_ft_user_stopword_table; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| Comment by Oleksandr Byelkin [ 2013-09-03 ] | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
innodb_fts_opt which tests optimization now the only failing test probably because the optimization do not work somewhere... | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| Comment by Oleksandr Byelkin [ 2013-09-05 ] | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
fixed fts optimization with limit and rolling back optimization with limit. still have some differences in the fts optimization applied... | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| Comment by Oleksandr Byelkin [ 2013-09-27 ] | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
pushed (without optimization and optimization test (should be more general solution)). |