LIKE ou FULLTEXT

Répondre
Morganpog
le 14/12/2013 à 20:49
Morganpog
Bonjour à tous,

Je souhaite réaliser un moteur de recherche et j’aurais besoin de quelques conseils.

En fait je souhaite rechercher un mot dans une table mais dans trois champs différent.
Jusque-là tout va bien.

Mon premier champ est un nom (nom d’une personne)
Mon deuxième champ est son métier
Et mon troisième champ et une description.

Dans le premier et deuxième champ ne dois-je pas utilisé un LIKE ? (car apparemment les mots trop courts moins de quatre lettres sont ignorés dans un FULLTEXT)

Et pour le troisième champ je fais un FULLTEXT ?

Qu'en penser vous sachant que le LIKE n'est pas trop apprécié pour faire des recherches dans une grosse base de données ?
LA GLOBULE
le 17/12/2013 à 09:33
LA GLOBULE
J'ai envie de répondre : ça dépend.

En terme de recherche, la solution ultime n'existe pas. Tout est question de compromis.

Pour le nom et le métier, si ta table ne fait pas plus d'1 million d'enregistrements, un LIKE ne me choquerait pas, pour plusieurs raisons :
- cela permet de faire de l'autocomplétion sur les noms (tu n'auras pas besoin de taper le nom entier d'une personne pour la trouver)
- c'est simple à mettre en place
- je ne suis pas sur que l'algo fulltext s'applique très bien sur ce genre de données

Pour la description, tout dépend encore de ce que tu veux obtenir :
- quel est ton volume de données ?
- souhaites tu pouvoir rechercher par "sonorité" ?
- souhaites tu avoir une recherche insensible à la casse ?
- souhaites tu avoir une recherche insensible au pluriel et au contexte (ex : je recherche "cheval", si tu as une description avec le mot "chevaux", celle ci matchera)
Morganpog
le 18/12/2013 à 21:14
Morganpog
Merci LA GLOBULE de ta réponse.

En faite, je voudrais faire quelques chose d'assez simple mais assez fiable.

Si je fais un LIKE, (j'ai pas beaucoup de donnée pour le moment), le tri par pertinence est beaucoup moins évident à mettre en place qu'un fulltext. En plus j'ai peur que par la suite ça ralentisse pas mal le site.
L'autocomplétion n'est pas forcement utile dans mon cas.

Pour la description (volume environ 2000 caractères), je veux juste une recherche qui soit insensible à la case et peut être aussi insensible au pluriel.

Il existe un moteur de recherche sous le nom de sphinx (apparemment plus rapide).
http://www.php.net/manual/fr/book.sphinx.php
http://sphinxsearch.com/
Qu'en pense tu ?
Morganpog
le 18/12/2013 à 21:34
Morganpog
Morganpog
le 18/12/2013 à 21:14 Morganpog a écrit
Merci LA GLOBULE de ta réponse.

En faite, je voudrais faire quelques chose d'assez simple mais assez fiable.

Si je fais un LIKE, (j'ai pas beaucoup de donnée pour le moment), le tri par pertinence est beaucoup moins évident à mettre en place qu'un fulltext. En plus j'ai peur que par la suite ça ralentisse pas mal le site.
L'autocomplétion n'est pas forcement utile dans mon cas.

Pour la description (volume environ 2000 caractères), je veux juste une recherche qui soit insensible à la case et peut être aussi insensible au pluriel.

Il existe un moteur de recherche sous le nom de sphinx (apparemment plus rapide).
http://www.php.net/manual/fr/book.sphinx.php
http://sphinxsearch.com/
Qu'en pense tu ?


Bon apparemment sphinx ne fonctionne pas en serveur mutualisé !
Donc ce n'est pas intéressant pour l'instant
LA GLOBULE
le 19/12/2013 à 00:40
LA GLOBULE
lephpfacile utilise sphinx.

sphinx, c'est :
- simple à mettre en place
- ca marche sans trop avoir à se poser de questions (ça retourne des résultats quoi smiley)
- ca semble fiable
- par contre, c'est beaucoup moins "tunable" que solr, et ca semble gérer la pertinence avec plus ou moins de succès (j'avoue que je ne me suis pas trop plongé dans la doc.)

Après, si tu n'as pas un serveur dédié, c'est sur, cela limite grandement les choix smiley (et pas que dans le domaine de la recherche, je pense à memcache, geoip, ou d'autres modules exotiques bien pratiques).

Moi je serais toi, je ferais du like sur nom et métier, et du fulltext sur la description. Et je regarderais si ça retourne des résultats pour des recherches type. Tu peux peut être aussi utiliser soundex aussi pour rechercher des "sons".

De toutes façons, si tu surveilles bien le truc, tu verras quand ça commencera à couiner, et il sera toujours temps de mettre tout cela à jour.

Te prend pas trop la tête pour le moment. On fait du web. Rare est le code qui a une durée de vie de plus de 2 ans.
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours