InnoDB 错误中的 MySQL 全文搜索

Posted

技术标签:

【中文标题】InnoDB 错误中的 MySQL 全文搜索【英文标题】:MySQL fulltext searches in InnoDB error 【发布时间】:2017-03-01 06:43:13 【问题描述】:

我有以下查询来执行多列搜索:

SELECT 
    prod.pid, 
    prod.pname, 
    prod.description, 
    prod.status, 
    foto.set_cover, 
    foto.file
FROM products prod 
INNER JOIN second_child_categories secd ON prod.category_id = secd.second_id 
INNER JOIN photos foto ON prod.pid = foto.pid 
WHERE MATCH (prod.pname, prod.description)
AGAINST ('home')
AND foto.set_cover = '1' 
AND prod.status = '1' 
ORDER BY prod.created_date DESC

我使用 InnoDB 引擎和 mysql Ver 14.14 Distrib 5.6.35

我在products 表中添加了fulltext index

ALTER TABLE `products` ADD FULLTEXT (`pname`);
ALTER TABLE `products` ADD FULLTEXT (`description`);

我运行查询并得到错误:

#1191 - Can't find FULLTEXT index matching the column list

查询有什么问题?

提前致谢。

【问题讨论】:

【参考方案1】:

当您使用MATCH() 时,您命名的列必须一起作为一个全文索引进行索引,而不是每列单独在单独的全文索引中。

鉴于您显示的查询,您需要以这种方式定义索引:

ALTER TABLE `products` ADD FULLTEXT (`pname`,`description`);

【讨论】:

谢谢,将 FULLTEXT 索引一起添加是可行的。但是,我想知道如果我也想将 foto.file 作为搜索列的一部分,如何在 Join 表中添加 FULLTEXT? 您不能定义任何类型的跨越多个表的索引。您必须在每个表中定义一个索引,并为每个表使用一次 MATCH() 调用。请参阅我 2009 年的这个答案中的示例! ***.com/questions/1241602/…

以上是关于InnoDB 错误中的 MySQL 全文搜索的主要内容,如果未能解决你的问题,请参考以下文章

MySql5.7InnoDB全文索引(针对中文搜索)

Mysql Search - 用于全文搜索的 InnoDB 和事务与 MyISAM

MySQL必知应会-第18章-全文本搜索

使用 InnoDB 进行全文搜索

Mysql INNODB和MyIsAM实现全文检索

innodb存储引擎支持全文索引吗