Данные полнотекстового поиска MySQL включены во внешние ключи - PullRequest
1 голос
/ 08 марта 2012

Прежде всего мои данные хранятся с использованием движка MyISAM, так как я знаю, что InnoDB не поддерживает индексацию полнотекстового поиска в настоящее время в Linux.Однако я использую внешние ключи, хотя, очевидно, это не применяется по ссылкам.

У меня есть 3 таблицы, включающие производителей (man_id, name), моделей (model_id, man_id, name) и продуктов (man_id, model_id, summary, описание).

Я хотел бы сделать полнотекстовый поиск в таблице продуктов, но включить название производителя и название модели, а также сводку и описание.По сути, поиск в 4 полях.

Я освобождаю полнотекстовый поиск таким способом, который не будет работать, так как только столбцы в таблице могут быть проиндексированы, а не значения внешнего ключа.У кого-нибудь есть идеи о том, как можно чего-то достичь в этом направлении?

1 Ответ

1 голос
/ 28 марта 2012

Вы можете объединить эти таблицы и выполнить поиск по объединению, как показано в следующем примере:

CREATE TABLE `tablename` (
  `id` int(10) unsigned primary key AUTO_INCREMENT,
  `stuff` text FULLTEXT KEY,



) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1

CREATE TABLE `table_b` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `stuff` text,
  PRIMARY KEY (`id`),
  FULLTEXT KEY `index_table_b_on_text` (`stuff`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1


SELECT table_a.*
FROM table_b JOIN table_a ON table_a.id = table_b.id
WHERE MATCH(table_b.stuff) AGAINST ("hamster")
      AND MATCH(table_a.stuff) AGAINST ("leopard");
+----+---------------------------------------------+
| id | stuff                                       |
+----+---------------------------------------------+
|  3 | A brown leopard jumped over a lazy hamster. |
+----+---------------------------------------------+
...