一段时间以来,我一直在尝试解决这个问题,但还是卡住了。
我每次在我的网站上搜索“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 替换为您的实际数据库名称)
并查看是否列出了 name
、meta_title
和 meta_description
。如果没有,您需要将缺失的列添加到索引中。
更新:
您分别对 name
、meta_title
和 meta_description
进行全文查询,然后同时对 3 列进行查询:MATCH(c.名称、c.meta_title、c.meta_description)
。
所以我认为您缺少 name
和 meta_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/