Algorithme de recherche dans une base de données - Java - Programmation
Marsh Posté le 09-04-2004 à 16:51:05
SQL, tu connais ?
Marsh Posté le 09-04-2004 à 16:57:02
ouhaip ... mais je doute que ca puisse faire tout le travail .. je me trompe p'etre.
si le mot est mal ortographié par exemple ?
Marsh Posté le 09-04-2004 à 17:05:49
mysql: voir les index full text machin
sinon: http://jakarta.apache.org/lucene/ ?
Marsh Posté le 09-04-2004 à 19:05:11
ouhai j'ai deja jeté un oeil sur lucene mais les données seraient pas sur une page ou un fichier plat mais plutot dans une base.
vais faire une recherche sur le "index full text machin"
merci
Marsh Posté le 10-04-2004 à 08:19:27
ReplyMarsh Posté le 31-01-2011 à 16:14:51
la viper a écrit : effectivement j'ai trouvé mon bonheur dans MySQL!! merci bcp |
je cherche un algorithme pour faire un moteur de recherche qui doit s'effectuer sur plusieurs tables et sur plusieurs champs donc .. bref sur toute la base quasiement, en fonction d'un mot, une phrase etc ... (genre google).
ma base sera ORACLE et le langage j2EE.
où puis je trouver un algorithme assez performant là dessus??
Merciii
Marsh Posté le 01-02-2011 à 10:43:11
Sans en savoir plus sur ta structure, difficile à dire.
Par contre j'ai du mal à voir l'utilité de faire une recherche sur toute une base ... Du moins si la base est construite intelligemment
Marsh Posté le 02-02-2011 à 15:28:57
la viper a écrit : bonjour, |
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 :
Bonne chance ... l'optimisation des temps de recherche est vraiment intéressante.
Marsh Posté le 02-02-2011 à 15:33:58
willy le kid a écrit : |
Il y a une autre solution : tu ajoutes un champ (une colonne) champs_de_recherche dans chaque table,
que tu devras renseigner à la main bien sûr.
Tu fais ensuite la recherche uniquement sur cette colonne.
Ca augmente vraiment le temps de réponse (mais pas suffisant pour les gros sgbd).
select table1.ID from table1 where table1.champ_de_recherche like '%<mot-clé>%'
UNION
select table2.ID from table2 where table2.champ_de_recherche like '%<mot-clé>%'
UNION ...
Marsh Posté le 09-04-2004 à 16:48:53
bonjour,
je dois faire dans mon projet un moteur de recherche.
cette recherche doit s'effectuer sur plusieurs tables et sur plusieurs champs donc .. bref sur toute la base quasiement, en fonction d'un mot, une phrase etc ... (genre google).
ma base sera mysql et le langage java/jsp.
Je cherche des algorithmes mais j'ai pas encore trouvé mon bonheur malheureusement :s
en reflechissant.. à la limite, la recherche pourra se faire uniquement sur un select mais avec un grand nombre de champs.
où puis je trouver un algorithme assez performant là dessus??
merci d'avance
Message édité par la viper le 09-04-2004 à 16:49:45