mise en place de fulltext

Eléphant du PHP | 115 Messages

08 juil. 2008, 10:22

Bonjour,

J'ai besoin de faire une requete qui effectue une recherche sur un soixantaine de champs. J'avais commencé avec les opérateur LIKE, et je viens de découvrir l'existence de FULLTEXT. :?

J'ai 2 questions:
- Les champs seront-ils correctement indexés si je crée l'index FULLTEXT après avoir créé et rempli tous mes champs ?
- Lors de la création mysql m'a répondu :
#1070 - Too many key parts specified; max 16 parts allowed

Comment pallier à ce problème si j'ai plus de 16 champs a analyser ?

EDIT:
J'ai créer 4 index FULLTEXT. J'arrive a faire une recherche dans l'un des index mais comment faire pour rechercher dans les 4 ?

Ce code fonctionne :

Code : Tout sélectionner

SELECT * FRom matable WHERE MATCH (champs1,...,champs16) AGAINST ('eponge') ;
Mais pas celui là:

Code : Tout sélectionner

SELECT * FRom matable WHERE (MATCH (champs1,...,champs16) AND MATCH (champs17,...,champs32)) AGAINST ('eponge') ;
Est-ce la bonne méthode ?
Quelques réalisations www.cdi-interactiv.com

Eléphant du PHP | 422 Messages

08 juil. 2008, 12:03

déjà, je ferais un OR et pas un AND ...

Ensuite, j'ai eu un problème un peu similaire qui consistait à vouloir indexer et retrouver en fulltext des objets textuels très divers : des fichiers textes, des champs de base de données, du HTML, ... La solution que j'ai employée consistait à créer une table avec un champ "spécial indexation" rempli avec tout ce que je voulais indexer (HTML nettoyé des tags, contenu des fichiers textes, ...) et un champ qui indiquait la localisation de l'objet.

Tu peux petu-être regarder de ce côté-là : créer un champ spécial indexation fulltext en plus de ta soixantaine de champs, ou carrément dans une table à part. Bien sûr, cela demande de dupliquer l'information et de maintenir la synchronisation.

Sinon, tu peux toujours assembler n requêtes

Code : Tout sélectionner

select * ... where match (champ1 ...) union select * ... where match (champ17 ...) union ...

ViPHP
ViPHP | 5924 Messages

08 juil. 2008, 13:02

En même temps, 60 champs dans une table, vérifie quand même que ta modélisation est correcte...

Eléphant du PHP | 115 Messages

08 juil. 2008, 14:40

OK merci!

Je vais voir si ça passe ou pas.

Pour ce qui est de me 60 champs, j'ai pas trop le choix, ce sont autant de propriété liées à la table.
Et il reste 40 tables...
Quelques réalisations www.cdi-interactiv.com