web-dev-qa-db-fra.com

Impossible de trouver l'index FULLTEXT correspondant à la liste des colonnes (les index sont définis)

Je travaille avec du texte intégral, j'ai exécuté une commande pour ajouter l'index de texte intégral à plusieurs commentaires, et je n'ai retourné aucune erreur, puis j'ai fait:

SELECT * FROM products WHERE MATCH(`brand`) AGAINST('Skoda');

Qui est dans la colonne de la marque - mais je reçois ce qui suit:

Impossible de trouver l'index FULLTEXT correspondant à la liste des colonnes

Eventho, quand ma table ressemble à ceci:

FULLTEXT KEY `name` (`name`,`breadcrumb`,`description`,`brand`,`price`,`year`,`km`,`usage`,`type`)

Est-ce parce que je devrais utiliser le name à la place? faire la recherche? Ou ce qui peut être faux.

39
LucasRolff

En supposant que vous utilisez le moteur MyISAM, exécutez:

ALTER TABLE products ADD FULLTEXT(brand);

L'index de texte intégral doit contenir exactement le même nombre de colonnes, dans le même ordre que celui mentionné dans la clause MATCH.

95
jerrymouse

Lorsque tout allait bien et que j'ai toujours eu cette erreur, j'ai constaté que les KEYS étaient désactivés. Une simple erreur parfois négligée:

Assurez-vous que vous avez activé les clés sur cette table.

Cela n'a pas fonctionné pour moi lorsque j'avais désactivé les clés. Mais quand j'ai activé les touches ALTER TABLE table name ENABLE KEYS; ça a bien fonctionné

7
karthic

Si vous n'avez pas envie d'avoir les colonnes dans le même ordre que dans la clause de correspondance (ou le même nombre), vous pouvez toujours utiliser 'OU', c'est-à-dire:

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)
5
Chogo