执行搜索时数据库中的错误1191

时间:2017-02-23 19:05:46

标签: mysql sql full-text-search

我一直试图解决这个问题一段时间但我被困住了。

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

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

显示的错误:

  

发生数据库错误错误号:1191
  找不到与列列表匹配的FULLTEXT索引

这是实际查询:

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

1 个答案:

答案 0 :(得分:0)

该错误非常具有描述性:

  

无法找到与列列表匹配的FULLTEXT索引

您正在尝试对可能尚未添加到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分别对彼此进行FULLTEXT查询,然后同时针对3列进行FULLTEXT查询:MATCH(c.name, c.meta_title, c.meta_description)

因此,我认为您错过了FULLTEXTname的单独meta_description个密钥:

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

HTH