Как построить поисковую систему в 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;