la viper a écrit :
bonjour,
je dois faire dans mon projet un moteur de recherche.
où puis je trouver un algorithme assez performant là dessus??
|
la requete sera du type
select table1.ID from table1 where table1.champ10 = '<mot-clé>' OR table1.champ11 = '<mot-clé>'
UNION
select table2.ID from table2 where table2.champ20 = '<mot-clé>' OR table2.champ21 = '<mot-clé>' OR table2.champ22 = '<mot-clé>'
UNION ...
tu transformeras peut être les =<mot-clé> en like '%<mot-clé>%'
La requête à rallonge + recherche full texte (cas des like) font que c'est extrêmement long.
Il n'y a pas d'algo d'optimisation en sql, sauf solution propriétaire comme par exemple dans mysql.
La solution c'est Lucene (ou concurrent) qui créée un index mot clé des pages contenant tel mot clé,
avec des avantages comme la gestion de l'occurence (les pages contenant le plus le mot clé)
et le steaming (si tu recherche avec 'arbres' il prend aussi 'arbre' en compte).
Lucene navigue dans les pages et créée des index textes (format Lucene) : un mot clé <-> une page html
Tu vas devoir développer une surcouche à Lucene pour lui faire croire qu'il lit des pages html (en fait des champs de table de la BDD)
et qu'il mette dans ses index, non pas une page html, mais le nom de la table + le nom du champ (concaténé abvec séparateur...).
Quand tu feras une recherche, Lucene te sortira le contenu table+champ.
NB :
- Lucene est hyper rapide, vraiment. J'ai déjà développé un bousin tel que expliqué ci dessus.
- Aucun moteur pro n'utilise le sql
- Mais le sql pourra être suffisant (en temps de réponse) ... disons jusqu'à 5 ou 6 tables de 5 ou 6 champs 'normaux' (50 carac ?), plus un d'environ 256 caractères. Et pas plus de 50 tuples dans chaque table.
Bonne chance ... l'optimisation des temps de recherche est vraiment intéressante.