Bonjour,
je développe un moteur de recherche sur des annonces, où le code postal est tès important pour la recherche. La vitesse de ce moteur (qui est appelée à gérer une quantitée croissante d'annonces) est primordiale.
Les visteurs sont libres de saisir plusieurs codes postaux sous deux formats :
- En saisissant un code postal complet. exemple : 92100 (boulogne)
- Avec le numéro de département. exemple : 92 (élargit la recherche à l'ensemble du département)
Pour gérer dans ma requête SQL (Mysql 5), j'ai deux difficultés :
- Je dois interroger la table sur plusieurs valeurs (puisqu'on peut saisir différents codes postaux en même temps (un tri par prix ou localisation est ensuite possible))
- Ces codes postaux peuvent être de longueurs différentes (2 ou 5 caratères)
J'ai commencé à fonctionner ici avec la solution suivante :
Une recherche pour les départements avec
WHERE LEFT(table.codepostal,2) = "92"
Une recherche avec un IN() quand les formats sont identiques
WHERE LEFT(table.codepostal,2) = IN("92","75")
Des requêtes avec 'OR' quand il y a plusieurs codes de formats différents
WHERE LEFT(table.codepostal,2) = "75" OR table.codepostal = "92100"
Mais je n'aime pas cette solution avec 'OR' que j'ai toujours vue déconseillée dans les conseils sur SQL.
Après m'être renseigné, j'ai trouvé la solution de l'index de type FULLTEXT.
Qui permet de faire des recherches sur plusieurs mots comme suit :
WHERE MATCH(table.codepostal) AGAINST('75* 92100') > 0.001
Un index de type FULLTEXT est-il pertinent sur un champs qui ne contient que 5 caractères ?
Il est pratique, mais est-ce qu'il est assez rapide pour un moteur de recherche qui est le coeur du site (un site d'annonces immobiliaires) ?
Je vous le demande avant de faire les tests, parce que ma table d'annonces est au format InnoDB, et que le FULLTEXT oblige à passer en MyIsam... ce qui ne m'arrange pas.
Partager