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

C# Discussion :

Moteur de recherche universel


Sujet :

C#

  1. #1
    Membre confirmé Avatar de Aizen64
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 561
    Points : 462
    Points
    462
    Par défaut Moteur de recherche universel
    Bonjour !

    Je suis actuellement en train de chercher un moyen de créer une sorte de moteur sur appli Windows (probablement en WPF), je n'ai pas de code pour le moment mais voilà ce que je cherche à obtenir :
    - recherche auto. sur plusieurs champs, un bon exemple est une appli musicale, l'utilisateur a un champ de recherche unique qui va automatiquement chercher artistes, albums etc...

    Supposons que j'ai comme exemple basique une base de données avec des enregistrements clients avec pour chaque client : nom, prénom, adresse, code postal, ville et pays, je veux que si je commence à taper :
    - 75 [soit un début d'adresse ou un code postal]
    - Grenoble [ville]
    - Susan [prénom]

    En gros, on se pose rarement comment poser une question à un moteur de recherche mais on obtient quand même des résultats, comment aussi résoudre le problème des accents et retrouver une adresse donnée qu'elle soit saisie avec ou sans accents ?
    Exprimer une différence d'opinion vaut mieux que :

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Tu peux regarder par exemple Lucene.NET. Sinon, SQL Server embarque nativement la Full-Text Search, à voir ce qui répondrait le mieux à ton besoin...
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Membre confirmé Avatar de Aizen64
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 561
    Points : 462
    Points
    462
    Par défaut
    Merci pour l'info. SQL Server me tente bien si ce n'est qu'il faut l'installer. Je pensais plus à SQL Lite ou équivalent pour que je n'aie pas de config à faire.
    Exprimer une différence d'opinion vaut mieux que :

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Je ne sais pas trop si SQLLite est en mesure de fournir de bonnes performances avec la FTS sur un gros volume de données... Il vaut mieux avoir un vrai SGBDR pour l'utiliser, ou alors rester sur de faibles volumes de données.

    Je pense qu'il vaut mieux utiliser Lucene.NET que SQL Lite, qui permet la constitution d'index rapidement. Ensuite en conservant les données de l'index en RAM, les temps de réponse sont extrêmement rapides. C'est une solution fiable et éprouvée.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  5. #5
    Membre confirmé Avatar de Aizen64
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 561
    Points : 462
    Points
    462
    Par défaut
    OK, je ferai le test. Tu as répondu à l'une de mes questions mais pas à comment interpréter indifféremment les accents sur une chaine de caractères.
    Exprimer une différence d'opinion vaut mieux que :

  6. #6
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Citation Envoyé par Aizen64 Voir le message
    OK, je ferai le test. Tu as répondu à l'une de mes questions mais pas à comment interpréter indifféremment les accents sur une chaine de caractères.
    Bonjour, la question des accents peut être réglé par le choix de la collation. Certaines collations permettent de ne pas tenir compte des diacritiques (accents, cédilles, etc) lors des comparaisons.

    Si d'aventure ton SGBD ne proposait pas ce choix, il faudra stocker deux chaînes, une normale, l'autre ayant subie une normalisation unicode (NFKD sans doute, cela transforme un caractère accentué en deux caractères : l'accent seul suivi de la lettre non-accentuée) avant d'en retirer certaines classes de caractères, regarde String.Normalize et Char.GetUnicodeCategory.

  7. #7
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    La solution de DonQuiche est bonne, elle permet d'agir à la source, c'est-à-dire au niveau du stockage des données. On peut agir à un niveau plus élevé.

    Avec Lucene, il faut créer son propre Analyzer en héritant de SnowballAnalyzer. Il faut ensuite surcharger la méthode TokenStream afin qu'elle utilise le filtre ISOLatin1AccentFilter. Je te laisse le soin de te documenter pour voir comment faire.

    Sinon dans SQL Server tu peux agir au niveau de l'index Full Text, il y a un paramètre qui indique s'il faut ignorer ou tenir compte des caractères accentués.

    Enfin, au niveau de SQL Lite, regarde cette FAQ (n°18).
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  8. #8
    Membre confirmé Avatar de Aizen64
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 561
    Points : 462
    Points
    462
    Par défaut
    Je pense qu'il est préférable de gérer le tout sur la BDD en stockant 2 chaines, une avec la chaine de base l'autre avec accents séparés pour une comparaison Unicode.

    Le seul soucis de SQL Server c'est qu'il faut l'installer sur la bécane, c'est un peu lourd pour une petite appli bien que l'avantage est que j'ai déjà fait du T-SQL et que bon, c'est une solution prêt à l'emploi dans un environnement que je connais. En bonne feignasse que je suis...
    Exprimer une différence d'opinion vaut mieux que :

  9. #9
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Bah voyons... Pourquoi réinventer la roue alors que tu as déjà des outils rapides, fiables et éprouvés ? Et si seulement il n'y avait que ça.

    En stockant 2 fois la même chaîne, tu vas non seulement occuper 2 fois plus de place inutilement, et tu vas pourrir ton modèle de base de données. Tu ne seras même pas en première forme normale (1NF), puisque cette forme normale érige en principe l'atomicité des données. Pour info aujourd'hui le standard en modélisation c'est la 3NF, et c'est un moindre mal... Ces fameuses formes normales sont des règles de normalisation à suivre impérativement lors de la conception d'une base de données, qu'elle soit grande ou petite, si l'on veut garantir à celle-ci :
    — une structure la plus fiable et robuste qui soit, d'évolution facilitée quand les règles du jeu de l'entreprise changent ;
    — Un contenu valide, par l'élimination de la redondance de l'information au sein de chaque table, redondance pouvant être la cause d'incohérences suite aux opérations de mise à jour de la base de données, ce que l'on oublie trop souvent.


    Il ne faudra pas être étonné quand les problèmes pointeront le bout de leur nez. A toi de choisir en toute connaissance de cause !

    S tu veux creuser le sujet : Bases de données relationnelles et normalisation : de la première à la sixième forme normale.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  10. #10
    Membre confirmé Avatar de Aizen64
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 561
    Points : 462
    Points
    462
    Par défaut
    Ces problématiques de stockage de données et de modèle de la base ne m'ont pas échappés quand j'ai écrit mon dernier message, à vrai dire, je n'ai pas eu le temps de creuser la question. Je vais regarder le lien que tu as posté.

    Visiblement SQL Server a un mode zéro config. SQLLocalDb (cf. http://msdn.microsoft.com/en-US/eval.../dn434042.aspx)

    J'arrive pas à mettre la main sur Management Studio 2012 compte tenu que j'ai SQL Server 2012 d'installé, je devrai utiliser quelle version ?
    Exprimer une différence d'opinion vaut mieux que :

  11. #11
    Membre confirmé Avatar de Aizen64
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 561
    Points : 462
    Points
    462
    Par défaut
    Nom : SQLServer2012Discovery.PNG
Affichages : 242
Taille : 39,0 Ko

    J'ai un petit soucis avec SQL Server 2012, Management Studio ne détecte aucune instance de SQL Server. Le gestionnaire de config ne contient aucune instance non plus. Le tout fonctionne sur mon PC avec un compte local en admin, j'ai oublié quoi ?

    Les logs de vérifs d'installation donnent ça :

    Overall summary:
    Final result: Réussite mais redémarrage requis, voir les journaux pour plus de détails
    Exit code (Decimal): 3010
    Start time: 2014-08-28 00:41:09
    End time: 2014-08-28 00:42:39
    Requested action: Repair

    Machine Properties:
    Machine name: JO-PC
    Machine processor count: 4
    OS version: Windows 7
    OS service pack: Service Pack 1
    OS region: France
    OS language: français (France)
    OS architecture: x64
    Process architecture: 32*bits
    OS clustered: Non

    Product features discovered:
    Product Instance Instance ID Feature Language Edition Version Clustered
    SQL Server 2012 Outils de gestion*- De base 1036 Express Edition 11.0.2100.60 Non
    SQL Server 2012 LocalDB 1036 Express Edition 11.1.3000.0 Non

    Package properties:
    Description: Microsoft SQL Server 2012 Service Pack 1
    ProductName: SQL Server 2012
    Type: RTM
    Version: 11
    SPLevel: 0
    Installation location: c:\6044f700b384707c47\x86\setup\
    Installation edition:

    Paramètres des entrées d'utilisateur*:
    ACTION: Repair
    AGTDOMAINGROUP: <vide>
    AGTSVCACCOUNT: <vide>
    AGTSVCPASSWORD: <vide>
    AGTSVCSTARTUPTYPE: Manual
    ASCONFIGDIR: Config
    ASSVCACCOUNT: <vide>
    ASSVCPASSWORD: <vide>
    CLTSTARTUPTYPE: 0
    CLTSVCACCOUNT: <vide>
    CLTSVCPASSWORD: <vide>
    CONFIGURATIONFILE:
    CTLRSTARTUPTYPE: 0
    CTLRSVCACCOUNT: <vide>
    CTLRSVCPASSWORD: <vide>
    ENU: false
    FAILOVERCLUSTERGROUP: <vide>
    FAILOVERCLUSTERNETWORKNAME: <vide>
    FTSVCACCOUNT: <vide>
    FTSVCPASSWORD: <vide>
    HELP: false
    IACCEPTSQLSERVERLICENSETERMS: false
    INDICATEPROGRESS: false
    INSTANCENAME: <vide>
    ISSVCACCOUNT: NT AUTHORITY\Network Service
    ISSVCPASSWORD: <vide>
    ISSVCSTARTUPTYPE: Automatic
    QUIET: false
    QUIETSIMPLE: false
    SQLSVCACCOUNT: <vide>
    SQLSVCPASSWORD: <vide>
    UIMODE: AutoAdvance
    X86: true

    Configuration file: C:\Program Files (x86)\Microsoft SQL Server\110\Setup Bootstrap\Log\20140828_004044\ConfigurationFile.ini

    Detailed results:
    Feature: Outils de gestion*- De base
    Status: Réussite

    Feature: LocalDB
    Status: Réussite

    Feature: Connectivité client de SQL
    Status: Réussite

    Feature: Kit de développement logiciel (SDK) de l'option Connectivité client de SQL
    Status: Réussite

    Feature: Fichiers de support du programme d'installation
    Status: Réussite

    Rules with failures:

    Global rules:

    There are no scenario-specific rules.

    Rules report file: C:\Program Files (x86)\Microsoft SQL Server\110\Setup Bootstrap\Log\20140828_004044\SystemConfigurationCheck_Report.htm
    Exprimer une différence d'opinion vaut mieux que :

  12. #12
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Aizen64 Voir le message
    Ces problématiques de stockage de données et de modèle de la base ne m'ont pas échappés quand j'ai écrit mon dernier message, à vrai dire, je n'ai pas eu le temps de creuser la question. Je vais regarder le lien que tu as posté.
    C'est un bon point On pourrait se dire de prime abord que ce n'est pas grand chose mais au final les conséquences peuvent être fâcheuses. Après je ne connais pas ton projet dans les détails donc peut-être que ça n'aura aucune incidence, mais comme on dit mieux vaut prévenir que guérir.

    Citation Envoyé par Aizen64 Voir le message
    Visiblement SQL Server a un mode zéro config. SQLLocalDb (cf. http://msdn.microsoft.com/en-US/eval.../dn434042.aspx)
    Oui, LocalDB est en fait une version SQL Server Express modifiée. Elle est utile pour les développeurs car très simple d'utilisation, mais une fois que ton application sera prête à être livrée, il faudra déployer cette base sur un "vrai" SQL Server ou sur une édition Express avec les limitations induites.

    Citation Envoyé par Aizen64 Voir le message
    J'arrive pas à mettre la main sur Management Studio 2012 compte tenu que j'ai SQL Server 2012 d'installé, je devrai utiliser quelle version ?
    Tu peux utiliser SSMS 2012 ou 2014, au choix. Voici les liens pour le 2012 : x86 ou x64. Et pour la version 2014 : x86 ou x64.

    [EDIT] concernant ton dernier post, je pense que c'est parce que LocalDB ne fonctionne pas en mode instance. Ils doivent considérer que les outils d'administration fournis par Visual studio sont suffisants.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  13. #13
    Membre confirmé Avatar de Aizen64
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 561
    Points : 462
    Points
    462
    Par défaut
    Pour la dernière partie de ton message sur ton edit :

    Aucune instance n'est visible, donc aucune possibilité d'exécuter la moindre requête SQL pas même pour créer une base de données.

    Je posterai des infos détaillées une fois devant mon PC pour être plus précis mais en gros : je veux juste créer une instance de SQL Server.
    Exprimer une différence d'opinion vaut mieux que :

  14. #14
    Membre confirmé Avatar de Aizen64
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 561
    Points : 462
    Points
    462
    Par défaut
    Bon, dans l'ordre :
    - LocalDb : viré avec un autre composant de SQL Server qui était lié
    - MSMS 64 bits réinstallé
    - MS SQL Server 2012 Express Advanced Tools x64 installé

    Tout à l'air de fonctionner sur des roulettes, plus qu'a bosser!

    @DotNetMatt : ton lien me parait trop théorique, tu n'aurais pays quelque chose de plus concret ? J'ai des facultés d'analyses, par contre les maths c'est pas mon truc et ton URL me parait y ressembler.
    Exprimer une différence d'opinion vaut mieux que :

  15. #15
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    En effet le cours de fsmrel n'est pas facile à appréhender mais il a l'intérêt d'être très complet. Toutes les théories mathématiques concernant la normalisation peuvent être résumées de manière beaucoup plus courte et compréhensible, et je vais citer un membre du forum SQL:
    Citation Envoyé par SQLPro
    1) chaque table doit être en situation de ne pas avoir de NULL dans toutes ses colonnes, donc les information des tables doivent être propres à l'entité que la table concrétise
    2) la modification d'une information, ne doit pas entraîner la modification de plus d'une ligne dans une table
    3) les colonnes des tables ne doivent contenir que des informations atomiques (non sécables)
    Par extension de 3 : des colonnes similaires pouvant être regroupées au sein d'un tableau ne doivent jamais figurer directement dans la table.

    Sur 1 : un téléphone n'a rien à faire dans une table client ou personne, car il existe des personnes n'ayant pas de téléphone ! (les attributs doivent être propres à l'entité)
    Sur 2 : une civilité ne doit pas figurer en tant que colonne dans une table de personne; Ce doit être une table de référence. En effet, que se passera t-il si vous devez passer de Melle à Mme ? (une seule information modifiée => impacte des centaines de lignes... inacceptable !)
    Sur 3 : un numéro de sécurité social doit être découpé en plusieurs parties car il n'est pas atomique (contient des info de sexe, date de naissance et lieu de naissance).
    Sur 3 extension : TEL1, TEL2, FAX, GSM dans la même table est idiot, car nul n'est censé avoir impérativement (pas de NULL) 2 téléphone fixe un fax et un mobile ! Dans ce cas une table secondaire à double entrée, sera mille fois mieux (Type Tel et n°).
    Il va un peu plus loin dans ces explications ici : http://sqlpro.developpez.com/sqlserv...sation/modele/ (voir le chapitre "V. Normalisez, normalisez encore, normalisez toujours..."). Sur ce même lien tu pourras trouver d'autres info sur la modélisation.

    Sinon pour revenir à LocalDB, je ne l'ai utilisé qu'une seule fois juste pour voir ce que ça donnait. Après avoir repris la documentation, il s'avère qu'il y a 2 modes d'instance : le mode automatique et le mode normal, mais tout se fait via la connection string. De plus les services étant démarrés et arrêtés à la demande, je ne suis pas sûr que le programme d'installation soit capable de les détecter. Mais bon apparemment tu es passé sous SQL Server Express donc la question ne se pose plus.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

Discussions similaires

  1. [Info]moteur de recherche full text en environnement j2ee
    Par ddams dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 03/11/2004, 19h39
  2. comment faire ma base de donnée pour un moteur de recherche
    Par HoB dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 04/05/2004, 15h07
  3. Moteur de recherche par date
    Par Prue dans le forum ASP
    Réponses: 17
    Dernier message: 27/08/2003, 16h07
  4. [Technique] Index, comment font les moteurs de recherche ?
    Par bat dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 25/10/2002, 15h41

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