Как построить поисковую систему в C#

Я пытаюсь создать веб-приложение в ASP.NET MVC и нужно построить довольно сложную функцию поиска. Когда пользователь вводит поисковый запрос, я хочу искать различные источники данных, которые включают Документы, Таблицы в базе данных, URL-адреса веб-страниц и некоторые API, такие как facebook. Любые советы, учебники и подсказки будут очень признательны.

3 ответов


ваш вопрос предполагает, что вы, вероятно, не планируете реализовать всю функцию с нуля, поэтому вот некоторые ссылки, которые вы можете найти полезными.

  • один (самый простой) вариант - использовать стороннюю поисковую систему (например,Google Пользовательский Поиск, но Bing, вероятно, имеет аналогичный API). Это позволяет вам искать (только) свою страницу с помощью Google и отображать результаты настраиваемым способом. Ограничение заключается в том, что он ищет только данные отображается на некоторых (связанных) страницах.

  • более сложный подход-использовать некоторую библиотеку .NET, которая реализует индексирование для вас (на основе данных, которые вы ей даете). Например, популярная библиотекаLucene.Net. В этом случае вы даете ему данные, которые хотите искать явно (релевантный контент с веб-страниц, контент базы данных и т. д.), поэтому у вас больше контроля над тем, что ищется (но это немного больше работы).


построение фактических структур и алгоритмов индекса поиска не является тривиальным подвигом. Вот почему люди используют Lucene, Sphinx, Solr и т. д. Использование google.com, как рекомендуется в комментариях, не даст вам никакого контроля и плохого соответствия по сравнению с тем, что вы получите от одной из этих бесплатных поисковых систем, при правильной настройке и использовании.

Я рекомендую взглянуть на Solr, это дает вам силу Lucene, но это намного проще в использовании, плюс это добавляет несколько удобства такие функции, как кэширование, sharding, faceting и т. д.

SolrNet является клиентом Solr для .Net, он имеет образец ASP.NET MVC приложение, которое вы можете использовать, чтобы увидеть, как он работает и в качестве основы для вашего проекта.

отказ от ответственности: я автор SolrNet.


Я написал пользовательскую поисковую систему для моего сайта MVC 4. Он анализирует каталоги View и читает все .файлы cshtml, соответствующие предоставленным терминам с регулярным выражением. Вот основной код:

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;