Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1295 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Requete de recherche sur plusieurs mots ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Requete de recherche sur plusieurs mots ?

n°1004692
rdams
Posté le 08-03-2005 à 12:09:06  profilanswer
 

Bonjour,
 
j'ai une fonction de recherche qui est la suivante :
 
Code:
 

Code :
  1. SELECT distinct id_oeuvre,titre,support,genre,date_parution
  2. FROM genre g,oeuvre o,auteur a,edition e,support s
  3. WHERE s.id_support=o.id_support
  4. and g.id_genre=o.id_genre
  5. and e.id_editeur=o.id_editeur
  6. and a.id_auteur=o.id_auteur
  7. and (
  8. o.titre LIKE ('motcle')
  9. OR g.genre LIKE ('motcle')
  10. OR o.date_parution LIKE ('motcle')
  11. OR o.descriptif LIKE ('motcle')
  12. OR e.editeur LIKE ('motcle')
  13. OR a.nom_aut LIKE ('motcle')
  14. OR a.prenom_aut LIKE ('motcle')
  15. )
  16. ORDER BY o.id_oeuvre;


 
 
je veux faire une requete sur 2 mots clés mais ces mots ne sont pas forcément tout les deux dans le même champ et la même table.
 
Je rentre mes mots clé par un formulaire avec un seul champ et une validation pour lancer la recherche (application JSP).
 
Je voulais savoir si il était possible de faire une recherche sur chaque mots en SQL? si oui comment?
je pensais utiliser des % ou autre chose mais je ne connait pas bien les expression régulière et je ne sais pas si c'est possible en SQL.
 
OU est ce qu'il faut découper ce que j'envoi et faire 2 requetes de recherche.
 
Merci
 
Dams

mood
Publicité
Posté le 08-03-2005 à 12:09:06  profilanswer
 

n°1004703
djok_fb
C'était mieux avant!
Posté le 08-03-2005 à 12:22:49  profilanswer
 

et si tu contaténes toutes tes données et que tu fais une recherche avec %???
Genre:
 concat(o.titre,g.genre, ...) like '%motclé1' or pareil like '%motclé2%'...

n°1004749
rdams
Posté le 08-03-2005 à 13:03:50  profilanswer
 

Dans mon formulaire, j'envoie par exemple "humour fantastique"  et je veux faire une recherche sur les champs de ma bdd qui est sur  
"humour fantastique" ou "humour" ou "fantastique"
et là la recherche ce fait sur "humour fantastique" sans discossier ni l'un ni l'autre.
 

n°1004783
Ptitspi
Posté le 08-03-2005 à 13:59:50  profilanswer
 

Je pense qu'il faut extraire tous les mots clefs de ta recherche er ensuite faire un %MOT%.
Si tu as 'mot1 mot2 mot3', tu extraies donc 'mot1', 'mot2' et 'mot3' et ensuite la requete et à faire avec des OR:
where key='%mot1%' or key='%mot2%' or key='%mot3%'
or key2='%mot1%' or key2='%mot2%' or key2='%mot3%'
or key3='%mot1%' or key3='%mot2%' or key3='%mot3%'
 
Ainsi tu auras une recherche sur tous tes champs avec tous les mots clefs. Car chercher 'humour' ou 'fantastique' te retourne bien evidemment les 'humour fantastique' vu que l'emsemble concatené est inclus dans l'union des sous ensembles!

n°1005648
rdams
Posté le 08-03-2005 à 16:56:12  profilanswer
 

j'ai vu des requetes comprenant MATCH et AGAINST, mais je ne vois pas à quoi ça sert exactement je sais que ça fait une recherche mais je ne sait pas ce qui est retourné.
 
Est ce que je pourrait m'en servir?

n°1005705
Ptitspi
Posté le 08-03-2005 à 17:38:37  profilanswer
 

Je sais pas si ca marchera et si c supporté par tous les SGBD, tu utilises quoi comme base?

n°1005779
Arjuna
Aircraft Ident.: F-MBSD
Posté le 08-03-2005 à 18:10:40  profilanswer
 

C'est pas supporté par tous les SGBD. Et selon les SGBD qui le supportent, l'implémentation est différente.
 
J'en connais 3 qui le propose gratuitement :
 
MySQL (intégré) Je ne connais pas le scope des fonctionnalités.
MSSQL Server (fonctionnalité à activer, et catalogues à construire et administrer) Fonctionnalités intéressantes.
Oracle (package à télécharger, installer, configurer, créer les catalogues, les configurer, les administrer) Très fragile (faut repopuler les index toutes les 5 minutes sinon ils se bloquent), par contre, les fonctionnalités sont époustouflantes : rechercher par exemple sur les synonymes du champ lexical dans les autres langues.
 
En bref, je tape "pain", et il va me retrouver les lignes qui contiennent le mot "baker".
 
Oracle et SQL Server supportent tous deux les recherches "naturelles" du genre : "le roi du monde", ça va toujours retourner une seule ligne, celle ou y'a "Arjuna" dedans :D Enfin, ça marche comme google quoi ;)

n°1005973
rdams
Posté le 08-03-2005 à 20:10:13  profilanswer
 

J'utilise MySQL.

n°1005999
Arjuna
Aircraft Ident.: F-MBSD
Posté le 08-03-2005 à 20:25:21  profilanswer
 

Un exemple de ce que ça peut donner avec Oracle :
 
http://accessories.euro.gehealthca [...] +alcalines
 
=> J'ai tapé des mots en français, et pourtant, il m'a retrouvé des infos en anglais, et à reconnu que "Alkaline" = "Alcalines". Pourtant, nous n'utilisons même pas les fonctions linguistiques, là c'est juste avec la fonctionnalité "recherche de mots similaires, il authorise une erreur de 20% dans l'orthographe des mots.
 
Passe ensuite en français (drapal à gauche), et tu auras une liste un peu plus longue.
 
On trouve par contre un des effets pervers : le dernier lien  ne parle pas du tout de piles, mais il a du trouver un mot avec une orthographe proche, et à retourné le mot quand même... :D
 
PS: Comme la pub Marie "C'est moi qui l'ai fait" (sauf que moi c'est vrai :D)
 
Même chose avec SQL Server (c'est moi qui l'ai fait aussi, même le parseur de la syntaxe de rechercne, j'en ai chié des bulles :D). Cette page indique les possibilités offertes par SQL Server (bien que je ne les ai pas toutes utilisées) et ses limitations.
http://www.manga-torii.com/default [...] erecherche
 
D'après ce que j'ai pu entendre, MySQL a une gestion très proche de cette de SQL Server, pour un syntaxe plus ou moins similaire. Dans tous les cas "freetext" me semble LA fonction à utiliser. (c'est son équivalent que j'ai utilisé pour le premier lien, et ça semble être pas trop mal ;))

n°1006018
Arjuna
Aircraft Ident.: F-MBSD
Posté le 08-03-2005 à 20:36:23  profilanswer
 

Ah, et j'allais oublier : le plus important dans tout ça, c'est le différence de rapidité avec un LIKE.
 
Si l'indexation est lente et gourmande (Microsoft et Oracle préconisent des quadri-processeur avec disques sur double-canaux RAID 50 et quelques 4 Go de RAM par CPU - je te rassures, c'est quelque peut éxagéré pour une utilisation classique, ça tourne très bien sur un serveur modeste ;)), en revanche, la lecture des index est d'une rapidité impressionnante.
 
En pratique, alors qu'un LIKE provoquait un timeout sur le site de GE, alors que la recherche ne portait que sur les différents codes, le nom et la description courte (80 caractères max), maintenant, les requêtes portent sur ce mêmes champs, plus 5 champs de 8000 caractères, ainsi que les noms et intitulés de toutes les images et documents liés aux produits... Tu peux voir que les perfs sont plutôt bonnes, puisque même lorsqu'il n'y a qu'un seul résultat (donc que l'ensemble de 500 000 produits a été parcouru) ça ne dure que 0.5 secondes. (bon, derrière y'a un serveur HP à 7 processeurs et quelques dizaines de Go de RAM, sans parler du reste... mais bon, le serveur héberge aussi une trentaine de bases toutes aussi énormes les autres que les autres, donc ça n'aide pas ;)). A noter d'ailleurs que rien que pour cette page, il doit y avoir une cinquantaine de requêtes (bah ouais, chaque libellé des liens, et autres est cherché en live dans la base par exemple)


Message édité par Arjuna le 08-03-2005 à 20:37:42
mood
Publicité
Posté le 08-03-2005 à 20:36:23  profilanswer
 

n°1006153
rdams
Posté le 08-03-2005 à 23:08:35  profilanswer
 

Pourrais tu me donner des liens ou je pourrais avoir des exemples de syntaxe sur ce type de requete ou des cours pour que je m'exerce à ce type de recherche.
Principalement SQL.
 
Merci

n°1006168
Arjuna
Aircraft Ident.: F-MBSD
Posté le 08-03-2005 à 23:18:16  profilanswer
 

SQL ça veut rien dire, c'est un language, et ce language ne comporte pas de fonction de recherches sur texte indexé ;)
 
Sinon, vu que tu travailles sur MySQL, je pense que simplement la doc en ligne de MySQL pourra t'aider. Le souci, c'est que je ne connais pas du tout MySQL, donc je peux guère t'en dire plus [:spamafote]

n°1006172
Arjuna
Aircraft Ident.: F-MBSD
Posté le 08-03-2005 à 23:21:47  profilanswer
 

Je pense qu'à partir de cet article, tu devrais trouver ton bonheur.
 
http://dev.mysql.com/doc/mysql/en/fulltext-search.html

n°1006369
rdams
Posté le 09-03-2005 à 09:20:13  profilanswer
 

ok merci. je vous tien au courant


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Requete de recherche sur plusieurs mots ?

 

Sujets relatifs
[java] recherche d'un élément dans un tableau.REQUETE POUR FAIRE une recherche
PROBLEME REQUETE: SELECT nom FROM (plusieur table)Pb de requête Bdd / php
Afficher plusieurs fois la même image à différents endroitsMySQL requête ciblée sur une chaine de caractère
:??: Recherche fonction javascript de dédoublonnage tablo[i][j][Access] [Résolu ]Probleme Requete sql DELETE
Je recherche une librairie de Math avancée 
Plus de sujets relatifs à : Requete de recherche sur plusieurs mots ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR