IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQLite Discussion :

Recherche dans une base de donnée


Sujet :

SQLite

  1. #1
    Membre éclairé
    Avatar de genova
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 487
    Points : 790
    Points
    790
    Par défaut Recherche dans une base de donnée
    Bonjour,
    je dois programmer une fonction de recherche pour un forum, sachant que ce forum peut contenir beaucoup de données.

    Ma première question est : est ce qu'une recherche avec le mot clef sql LIKE est performante ou bien est ce que ca va se mettre a ramer comme un dingue ?

    Ma seconde question : si ce n'est pas le cas, quelle méthode de recherche conseillez vous ? j'ai entendu parler d'une histoire de full search MySQL mais qu'est ce donc ?

    PS : le forum est censé tourner sous plusieurs SGBD (mysql, postgresql, sqlite et firebird).

    merci d'avance
    Testez le forum Fire Soft Board, un forum libre, gratuit et français.

    Système de template de phpBB - Lisez la FAQ PHP avant toute question si vous débuttez en PHP.

  2. #2
    Membre actif
    Inscrit en
    Juillet 2003
    Messages
    407
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 407
    Points : 252
    Points
    252
    Par défaut
    franchement je ne peux pas te répondre ,
    mais je propose que tu poste ds le forum sql , il yaura plus de gens qui maitrisent ce truc
    ;-) cordialement

  3. #3
    Expert éminent
    Avatar de elitost
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2003
    Messages
    1 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    Points : 6 566
    Points
    6 566
    Par défaut
    Tout dépend du volume de données dans le forum, et de comment est indexées ta base.

    C'est sûr que sur une gros volume, un like ramera...

    Et pour la recherche full text search :

    http://dev.mysql.com/doc/mysql/en/fulltext-search.html

  4. #4
    Membre éclairé
    Avatar de Kioob
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Points : 764
    Points
    764
    Par défaut
    Perso la fonction FULLTEXT pour un forum "grand public" j'en suis revenu... va donc expliquer à un ado qu'il ne peut pas faire une recherche sur le groupe "Kyo" parce que le nom est trop court... De plus, pour ce qui est de la pertinence des résultats, je ne suis pas convaincu non plus.
    Et dernier argument : si ton forum doit être multi-sgbd, bah fais une croix sur le fulltext.

    Pour le like, le problème c'est que ça ne fait pas la différence entre du texte au milieu d'un mot ou bien un mot seul...
    Si tous les SGBD géraient les expressions régulières, ce serait peut être une solution...

    Dans mon cas j'ai opté pour une autre solution mais qui bouffe énormément d'espace en base de données, donc pas forcément adaptée à un gros forum :
    - chaque message en découpé par mots. Un "traitement" sur le mot essaye de regrouper les versions singuliers/pluriels, majuscules/minuscules, doublage de lettres, etc.
    - chaque mot est ensuite pondéré de son nombre d'occurence dans le message

    Et je fais donc mes recherches là dessus...





    En tous cas, je te conseillerais comme peppena : sur le forum SQL, tu trouveras sûrement des conseils plus adaptés.
    Google is watching you !

  5. #5
    Membre chevronné
    Avatar de Bidouille
    Inscrit en
    Mars 2003
    Messages
    1 275
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 1 275
    Points : 1 992
    Points
    1 992
    Par défaut
    Citation Envoyé par Kioob
    En tous cas, je te conseillerais comme peppena : sur le forum SQL, tu trouveras sûrement des conseils plus adaptés.
    Pas besoin d'ouvrir un nouveau fil, je transfère celui-ci.
    Rédacteur PHP / Delphi ADO / Novell / OpenOffice.org

    Inutile de m'envoyer vos questions par MP, je ne réponds que par le forum.

  6. #6
    Expert éminent
    Avatar de elitost
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2003
    Messages
    1 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    Points : 6 566
    Points
    6 566
    Par défaut
    Sinon j'ai vu aussi pas la de solutions qui couplent SGBD et Moteur de recherche plein texte, comme LUCENE, ce peut être une solution.

  7. #7
    Membre éclairé
    Avatar de genova
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 487
    Points : 790
    Points
    790
    Par défaut
    Tout d'abord merci pour les réponses,

    Pour le like, le problème c'est que ça ne fait pas la différence entre du texte au milieu d'un mot ou bien un mot seul...
    Est ce vraiment un problème ? Je veux dire, par exemple admettons on cherche un mot "toto", la recherche va donc trouver tout ce qui contient "toto", y compris les mots contenant toto. Donc est ce que ca peut etre nefaste sur la recherche ?

    Pour le FULLTEXT je me renseignerai mais si c'est propre a MySQL ca va pas être jouable

    Dans mon cas j'ai opté pour une autre solution mais qui bouffe énormément d'espace en base de données, donc pas forcément adaptée à un gros forum :
    - chaque message en découpé par mots. Un "traitement" sur le mot essaye de regrouper les versions singuliers/pluriels, majuscules/minuscules, doublage de lettres, etc.
    - chaque mot est ensuite pondéré de son nombre d'occurence dans le message
    Un peu comme phpBB non ? Il découpe chaque message mot par mot, indexe chaque nouveau mot dans une table search_word, et indexe le nombre d'ocurence du mot et l'ID du message ou il est dans une table search_bidule (me rappel plus du nom).

    Est ce que c'est une bonne méthode ? Clair que ca prend beaucoup de place dans la base de donnée, autant que ce que prennent les messages au moins, mais qu'en pensez vous mis à part ce défaut ?
    Testez le forum Fire Soft Board, un forum libre, gratuit et français.

    Système de template de phpBB - Lisez la FAQ PHP avant toute question si vous débuttez en PHP.

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Voilà ce que je propose, mais atention ce n'est pas une expérience personnelle.
    J'essaie seulement d'aider.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Table Dictionnaire
    id_mot (identifiant incremental
    mot varchar(50)
     
    Table mots_non_indexes
    mot varchar(50)
    Table mot_post
    id_post
    id_mot
    nbre_occurence entier
    La table mots_non_indexes contiendra les mots usuel de liaison par exemple : de le, la , les , un ,des ,de ,du, je, tu il, .., suis, ai, etc...

    Tu commences par créer un post dans la ou les tables appropriées, puis si tu as une possibilité de tache en arrière plan, tu lances l'indexation du post, (en arriere plan si possible) en créant les mots dans le dictionnaire s'il ne sont pas dans
    mots_non_indexes, et qu'ils ne sont pas non plus dans dictionnaire.
    Et régulièrement tu listes les mots qui se trouve dans 80 ou 95 % des posts et s'ils ne sont pas porteur de sens tu les rajoutes dans la table mots_non_indexes, et bien évidemment tu fais le ménage dans les tables mot_post, dictionnaire.
    De cette façon, tu devrais limiter la casse en terme de volume. C'est sûr qu'au niveau des requêtes tu auras plus de jointures, et que les recherches du genre citation exacte, ne seront pas simple à coder.

    Eh, c'est juste une piste, je suis certaine que c'est perfectible.
    Tiens nous au courant de la solution que tu choisiras.
    A+
    Soazig

  9. #9
    Membre éclairé
    Avatar de genova
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 487
    Points : 790
    Points
    790
    Par défaut
    Ma fois ca a l'air d'être une bonne piste, j'ai testé une recherche en LIKE sur une grosse table c'est ... comment dire ... lennnnnntttttttttt

    A coté de ça quand je test une recherche sur http://forums.phpbb-fr.com c'est quand même relativement rapide, alord que la base de donnée est très grosse. j'en conclu donc qu'un méthode de recherche comme tu le propose, par indexation, est ce qu'il y a de plus rapide (et compatible multi SGBDR).

    Merci
    Testez le forum Fire Soft Board, un forum libre, gratuit et français.

    Système de template de phpBB - Lisez la FAQ PHP avant toute question si vous débuttez en PHP.

Discussions similaires

  1. [Conception] formulaire et case à cocher et recherche dans une base de donnée
    Par olivier_1970 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 25/06/2006, 01h03
  2. [MySQL] Recherche dans une base de donnée [ Gros soucis ]
    Par milkasoprano dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 24/03/2006, 17h59
  3. problème de recherche dans une base de donnée mysql
    Par Xini28 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 24/10/2005, 18h00
  4. problème de recherche dans une base de données
    Par bouzid_mehdi dans le forum Bases de données
    Réponses: 2
    Dernier message: 19/07/2005, 06h47
  5. recherche dans une base de donnée+boucle
    Par eric205 dans le forum Bases de données
    Réponses: 8
    Dernier message: 15/03/2005, 21h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo