Я пытаюсь сделать полнотекстовый поиск с innodb на mysql 5.6, и я добавил FULLTEXT KEY
на submissions.title, submissions.description
. Вот мой show create table
для submissions
:Полнотекстовый поиск по innodb с двумя JOINs
Create Table: CREATE TABLE `submissions` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL,
`slug` varchar(255) NOT NULL,
`description` mediumtext NOT NULL,
`user_id` int(11) NOT NULL,
`created` datetime NOT NULL,
`type` enum('tip','request') NOT NULL,
`thumbnail` varchar(64) CHARACTER SET latin1 DEFAULT NULL,
`removed` tinyint(1) unsigned NOT NULL DEFAULT '0',
`keywords` varchar(255) NOT NULL,
`ip` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`),
KEY `user_id` (`user_id`),
FULLTEXT KEY `title` (`title`,`description`)
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8
и когда я запускаю следующий запрос:
SELECT s.*, MATCH (s.title, s.description) AGAINST ('whatever'), u.username, SUM(sv.up) helpfulVotes
FROM submissions s
INNER JOIN users u ON s.user_id = u.id
LEFT JOIN submissions_votes sv ON s.id = sv.submission_id
GROUP BY s.id
ORDER BY s.created DESC
LIMIT 0 , 30
Я получаю #1214 - The used table type doesn't support FULLTEXT indexes
как ошибка.
Означает ли это, что мне нужно добавить полный текст в другие поля, к которым я присоединяюсь? На самом деле не имеет смысла, так как я не ищу ни одного из этих полей ...
EDIT: Выполнял запрос на моей машине prod с более старой версией mysql, плюс мой запрос был неправильным.
Правильный запрос:
SELECT s . * , u.username, SUM(sv.up) helpfulVotes
FROM submissions s
INNER JOIN users u ON s.user_id = u.id
LEFT JOIN submissions_votes sv ON s.id = sv.submission_id
WHERE MATCH (
s.title, s.description
)
AGAINST (
'whatever'
)
LIMIT 0 , 30;
Попробуйте это без участия? – Mihai