2014-01-19 2 views
1

Я пытаюсь сделать полнотекстовый поиск с 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; 
+0

Попробуйте это без участия? – Mihai

ответ

0

Я думаю Полнотекстовый поиск только ISAM.

+0

Не так как mysql 5.6 – Mihai

+0

@drewlander. , , И не будет ли ошибка отображаться при выполнении «create table», а не при выполнении запроса? –

+0

Да, михай прав. С тех пор я знал, что он был добавлен для innodb. теперь у меня есть любопытный ... –

Смежные вопросы