【问题标题】:MySQL full text searching data included in foreign keys外键中包含的 MySQL 全文搜索数据
【发布时间】:2012-03-26 07:12:06
【问题描述】:

首先我的数据是使用 MyISAM 引擎存储的,因为我知道 InnoDB 目前在 linux 上不支持全文搜索索引。但是我确实使用了外键,尽管显然这不是引用强制的。

我有 3 个表格,由制造商(man_id、name)、型号(model_id、man_id、name)和产品(man_id、model_id、summary、description)组成。

我想做的是在产品表上进行全文搜索,但包括制造商名称和型号名称以及摘要和描述。基本上搜索 4 个字段。

我发布全文搜索不会以这种方式工作,因为只能索引表中的列而不是外键值。有人对如何实现这一目标有任何想法吗?

【问题讨论】:

  • InnoDB 从 v5.6.4 开始支持全文索引:blogs.innodb.com/wp/2011/12/…,因此您可以放弃 MyISAM 变通办法,如果需要,现在就使用成熟的 InnoDB。
  • @MarcB 是的,这是真的,不幸的是,这个版本只是作为基于 Microsoft 的服务器的开发版本发布的。基于 Linux 的服务器(我正在使用)的最新版本是 v5.5,它仍然没有这个功能。假设这是一个支持全文搜索的 InnoDB 数据库,在进行全文搜索时如何在查询中包含对外键的引用?

标签: mysql sql full-text-search myisam full-text-indexing


【解决方案1】:

您可以连接这些表并针对连接运行搜索,如下例所示:

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. |
+----+---------------------------------------------+

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-06
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-14
    相关资源
    最近更新 更多