15 votes

Comment construire un moteur de recherche en C#

J'essaie de créer une application web en ASP.NET MVC et j'ai besoin d'une fonction de recherche assez complexe. Lorsqu'un utilisateur entre un terme de recherche, je veux chercher dans une variété de sources de données qui incluent des documents, des tables dans la base de données, des urls de pages web et quelques API comme facebook. Tout conseil, tutoriel ou astuce serait grandement apprécié.

17voto

Tomas Petricek Points 118959

Votre question suggère que vous n'avez probablement pas l'intention de mettre en œuvre l'ensemble de la fonctionnalité à partir de zéro, voici donc quelques liens qui pourraient vous être utiles.

  • Une option (la plus simple) consisterait à utiliser un moteur de recherche tiers (par ex. Recherche personnalisée Google mais Bing dispose probablement d'une API similaire). Cela vous permet d'effectuer des recherches (uniquement) sur votre page à l'aide de Google et d'afficher les résultats de manière personnalisée. La limite est qu'il ne recherche que les données affichées sur certaines pages (liées).

  • Une approche plus sophistiquée consiste à utiliser une bibliothèque .NET qui met en œuvre l'indexation pour vous (sur la base des données que vous lui fournissez). Une bibliothèque populaire est par exemple Lucene.Net . Dans ce cas, vous lui donnez les données que vous souhaitez rechercher explicitement (contenu pertinent de pages web, contenu de base de données, etc.), ce qui vous permet de mieux contrôler ce qui est recherché (mais cela représente un peu plus de travail).

8voto

Mauricio Scheffer Points 70470

Construire les structures et les algorithmes de l'index de recherche n'est pas une mince affaire. C'est pourquoi les gens utilisent Lucene, Sphinx, Solr, etc. L'utilisation de google.com, telle qu'elle est recommandée dans les commentaires, ne vous donnera aucun contrôle et une correspondance médiocre par rapport à ce que vous obtiendrez de l'un de ces moteurs de recherche gratuits, s'ils sont correctement configurés et utilisés.

Je recommande de jeter un coup d'œil sur Solr Il vous offre la puissance de Lucene, mais il est beaucoup plus facile à utiliser, et il ajoute plusieurs fonctionnalités pratiques comme la mise en cache, le partage, la mise en facette, etc.

SolrNet est un client Solr pour .Net, il possède un exemple d'application ASP.NET MVC que vous pouvez utiliser pour voir comment il fonctionne et comme base pour votre projet.

Clause de non-responsabilité : je suis l'auteur de SolrNet.

2voto

Johnson Gibbs Points 9

J'ai écrit un moteur de recherche personnalisé pour mon site MVC 4. Il analyse les répertoires View et lit tous les fichiers .cshtml, en faisant correspondre les termes fournis avec une expression régulière. Voici le code de base :

List<string> results = new List<string>();
        DirectoryInfo di = new DirectoryInfo(System.Configuration.ConfigurationManager.AppSettings["PathToSearchableViews"]);
        //get all view directories except the shared
        foreach (DirectoryInfo d in di.GetDirectories().Where(d=>d.Name != "Shared"))
        {
            //get all the .cshtml files
            foreach (FileInfo fi in d.GetFiles().Where(e=>e.Extension  == ".cshtml"))
            {
                //check if cshtml file and exclude partial pages
                if (fi.Name.Substring(0,1) != "_")
                {
                    MatchCollection matches;
                    bool foundMatch = false;
                    int matchCount = 0;
                    using (StreamReader sr = new StreamReader(fi.FullName))
                    {
                        string file = sr.ReadToEnd();
                        foreach (string word in terms)
                        {
                            Regex exp = new Regex("(?i)" + word.Trim() + "(?-i)");
                            matches = exp.Matches(file);
                            if (matches.Count > 0)
                            {
                                foundMatch = true;
                                matchCount = matches.Count;
                            }
                        }
                        //check match count and create links
                        //
                        //
                    }
                }
            }
        }
        return results;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X