mysql - 进行搜索时数据库中出现错误 1191

标签 mysql sql full-text-search

一段时间以来,我一直在尝试解决这个问题,但还是卡住了。

我每次在我的网站上搜索“eaSTLincs”时都会出现错误,但我不确定如何解决这个问题。

我用谷歌搜索了这个错误,并没有太多关于它的信息,并且在这里阅读了几个关于这个问题的线程,但我无法解决这个问题。我知道这与我的数据库有关,并将 FULLTEXT 添加到我数据库中的类别。

显示的错误:

A Database Error Occurred Error Number: 1191
Can't find FULLTEXT index matching the column list

这是实际的查询:

SELECT 
    c.id, c.type_id, 
    MATCH(c.name) AGAINST('>eastlincs eastlincs*' IN BOOLEAN MODE) AS categories_name_score, 
    MATCH(c.meta_title) AGAINST('>eastlincs eastlincs*' IN BOOLEAN MODE) AS categories_meta_title_score, 
    MATCH(c.meta_description) AGAINST('>eastlincs eastlincs*' IN BOOLEAN MODE) AS categories_meta_description_score 
FROM (categories AS c) 
WHERE MATCH(c.name, c.meta_title, c.meta_description) AGAINST('>eastlincs eastlincs*' IN BOOLEAN MODE) 
ORDER BY (categories_name_score*1.25+categories_meta_title_score+categories_meta_description_score*1.20) DESC

更新:表定义:

categories
CREATE TABLE `categories` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `type_id` int(11) NOT NULL DEFAULT '0',
 `parent_category_id` int(11) NOT NULL DEFAULT '0',
 `tree_path` varchar(255) NOT NULL,
 `order_num` int(11) NOT NULL,
 `name` varchar(255) DEFAULT NULL,
 `seo_name` varchar(255) NOT NULL DEFAULT '',
 `selected_icons_serialized` text NOT NULL,
 `meta_title` varchar(255) NOT NULL,
 `meta_description` varchar(255) NOT NULL,
 `en_name` varchar(255) NOT NULL DEFAULT 'untranslated',
 `en_meta_title` varchar(255) NOT NULL DEFAULT 'untranslated',
 `en_meta_description` varchar(255) NOT NULL DEFAULT 'untranslated',
 PRIMARY KEY (`id`),
 KEY `parent_category_id` (`parent_category_id`),
 KEY `tree_path` (`tree_path`),
 FULLTEXT KEY `name` (`name`,`meta_title`,`meta_description`),
 FULLTEXT KEY `meta_title` (`meta_title`),
 FULLTEXT KEY `en_name` (`en_name`,`en_meta_title`,`en_meta_description`),
 FULLTEXT KEY `en_meta_title` (`en_meta_title`),
 FULLTEXT KEY `meta_description` (`meta_description`)
) ENGINE=InnoDB AUTO_INCREMENT=79 DEFAULT CHARSET=utf8 PACK_KEYS=0

最佳答案

这个错误是很 self 描述的:

Can't find FULLTEXT index matching the column list

您正在尝试对可能尚未添加到 FULLTEXT 索引的列使用 FULLTEXT 搜索查询。也许您的全文索引根本不存在。

因此检查您的 FULLTEXT 索引是否存在,如果存在,请检查索引中包含的实际列列表。

您可以像这样检查为表定义的索引:

SHOW INDEX FROM categories;

更具体地检查 FULLTEXT 索引中的列列表(如果存在):

SELECT column_name 
FROM INFORMATION_SCHEMA.STATISTICS
WHERE (table_schema, table_name) = ('mydatabase', 'categories')
  AND index_type = 'FULLTEXT'
ORDER BY seq_in_index;

(将 mydatabase 替换为您的实际数据库名称)

并查看是否列出了 namemeta_titlemeta_description。如果没有,您需要将缺失的列添加到索引中。

更新: 您分别对 namemeta_titlemeta_description 进行全文查询,然后同时对 3 列进行查询:MATCH(c.名称、c.meta_title、c.meta_description)

所以我认为您缺少 namemeta_description 的单独 FULLTEXT 键:

ALTER TABLE categories ADD FULLTEXT INDEX meta_description (meta_description); 
ALTER TABLE categories ADD FULLTEXT INDEX name1 (name); 

HTH

关于mysql - 进行搜索时数据库中出现错误 1191,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42424125/

相关文章:

mysql - Mariadb 中止连接错误,没有用户名

sql - 如何在 MySQL 中创建秒列表

sql - 如何找到运行乘法

postgresql + 文本搜索 + 德语变音符号 + UTF8

php - Mysql表字段名

mysql - cakephp find ('all' ) 得到最后匹配的记录

php - 将 sum() 结果存储在数据库中与在运行时计算

java - 使用 Play 寻找多对多实体交集的优雅方式

sql - 如何让查询更快?

php - SQL 全文查询仅适用于第一个关键字