找不到匹配列表的FULLTEXT索引(已设置索引)

Luc*_*lff 40 php mysql full-text-search

我正在使用全文,我执行了一个命令,将全文索引添加到多个注释中,并且没有返回错误,然后我做了:

SELECT * FROM products WHERE MATCH(`brand`) AGAINST('Skoda');
Run Code Online (Sandbox Code Playgroud)

哪个是品牌专栏 - 但我得到以下内容:

找不到与列列表匹配的FULLTEXT索引

Eventho,当我的桌子看起来像这样:

FULLTEXT KEY `name` (`name`,`breadcrumb`,`description`,`brand`,`price`,`year`,`km`,`usage`,`type`)
Run Code Online (Sandbox Code Playgroud)

是因为我应该使用name而不是?做搜索?或者可能是错的.

jer*_*use 96

假设您正在使用MyISAM引擎,请执行:

ALTER TABLE products ADD FULLTEXT(brand);
Run Code Online (Sandbox Code Playgroud)

全文索引应包含完全相同的列数,其顺序与MATCH子句中提到的顺序相同.

  • @Zerpex如果您的问题解决了,那么您应该将其标记为ans (13认同)
  • 我在2017年1月找到了这个答案.它有一个非常重要的提示:完全相同的列数,按相同的顺序...我在MySq开发页面中没有看到这个.对于innoDB引擎来说,这似乎也是如此.你保存了我的应用 (4认同)
  • 请注意,如果您对多个列执行 match(),则必须拥有覆盖完全相同字段的全文索引。 (3认同)

小智 7

当一切都正确并仍然出现此错误时,我发现它已KEYS被禁用.一个有时被忽视的简单错误:

确保已启用该表上的键.

当我禁用钥匙时,它对我不起作用.但是当我启用按键时,ALTER TABLE table name ENABLE KEYS;它工作正常


小智 6

如果您不希望按匹配子句中的顺序(或相同的编号)排列列,则可以始终使用“ OR”,即:

ALTER TABLE products ADD FULLTEXT(brand);
ALTER TABLE products ADD FULLTEXT(product_name);

 SELECT * FROM products WHERE MATCH(brand) AGAINST('+Skoda*' IN BOOLEAN MODE) OR MATCH(product_name) AGAINST('+productName*' IN BOOLEAN MODE)
Run Code Online (Sandbox Code Playgroud)