none
Moteur de recherche XML RRS feed

  • Question

  • Bonjour!
    Ayant actuellement un projet, j'aimerais savoir comment je pourrais créer un moteur de recherche sans utiliser SQL, quelque soit sa déclinaison. Imaginons le fichier XML suivant :
    <?xml>
    <Root>
        <items>
            <item id="i01">
                arbre buisson pomme rue troittoir<br/>        </item>
            <item id="i02">
                voiture trottoir route panneau<br/>        </item>
            <item id="i03">
                jardin balançoire <br/>        </item>
        </items>
    </Root>
    
    Dans les noeuds "item", on trouve les mots-clés.

    Ajoutons une requête possible de l'utilisateur final : "Chercher une Voiture arrêtée sur la Route" entrée dans une textbox (requete_textbox).

    Chronologiquement, le "moteur de recherche" doit pouvoir

    • Supprimer les mots de 1, 2 et 3 lettres.
    • traiter les mots un par un (en minuscule) : "chercher" + "voiture" + "arrêtée" + "route"
    • me retourner les résultats dans mon asp:repeater (par exemple) sans répétitions

    Personnellement, j'avais pensé à quelque chose du genre :

    void chercher_click(object sender, EventArgs e)
    {
         //supprimer les mots de 1, 2 et 3 lettres : ne sait pas comment faire
         
         //traiter les mots un par un
         //ne sait pas les séparer
         while (/*trouver un mot*/)
         {
              //en minuscules
              string mot1 = "Chercher";
              mot1.ToLowerCase();
              while (_xmlnode["item"].Value.contains(mot1)) //
               {
                   //ajouter aux résultats
              }
         }
    }
    

     Mais il y a des risques de répétition, non ?

    PS : j'ai encore rien codé, je réinstalle tout là ^^'


    Cordialement, Andrés Talavera | Microsoft Student Partner | Microsoft BizSpark Administrator | Microsoft Partner
    vendredi 9 septembre 2011 10:06

Réponses

  • Bonjour,

    Le mieux pour éviter d'inventer la roue est d'utiliser le moteur Full-Text de SQL Server.

    Dans votre cas, vous pouvez utiliser Linq To Xml comme ceci :

    XDocument document = XDocument.Load("Toto.xml");
    
    var lesMots = document
                    .Element("Root")
                    .Element("items")
                    .Elements("item")
                    .SelectMany(item => item.Value.Split(' '))
                    .Where(mot => mot.Length > 3);
    

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    samedi 10 septembre 2011 20:58
    Modérateur

Toutes les réponses