如何在C#中构建搜索引擎

我正在尝试在ASP.NET MVC中构建一个Web应用程序,并且需要构建一个非常复杂的搜索function。 当用户输入搜索词时,我想搜索各种数据源,包括文档,数据库中的表,网页url和一些像facebook这样的API。 任何提示,教程和提示将不胜感激。

你的问题表明你可能没有计划从头开始实现整个function,所以这里有一些你可能会觉得有用的链接。

  • 一个(最简单的)选项是使用第三方搜索引擎(例如Google Custom Search ,但Bing可能有类似的API)。 这允许您使用Google搜索(仅)您的页面并以自定义方式显示结果。 限制是它只搜索某些(链接)页面上显示的数据。

  • 更复杂的方法是使用一些为您实现索引的.NET库(基于您提供的数据)。 一个流行的图书馆是例如Lucene.Net 。 在这种情况下,您可以为其提供要明确搜索的数据(来自网页,数据库内容等的相关内容),这样您就可以更好地控制搜索的内容(但这需要更多工作)。

构建实际的搜索索引结构和算法并非易事。 这就是人们使用Lucene,Sphinx,Solr等的原因。正如评论中所建议的那样,使用google.com,与你从其中一个免费搜索引擎获得的内容相比,如果配置正确,将无法控制和匹配不佳用过的。

我建议看看Solr ,它给你Lucene的力量,但它更容易使用,而且它增加了一些便利function,如缓存,分片,刻面等。

SolrNet是.Net的Solr客户端,它有一个示例ASP.NET MVC应用程序,您可以使用它来查看它的工作原理以及作为项目的基础。

免责声明:我是SolrNet的作者。

我为我的MVC 4网站编写了一个自定义搜索引擎。 它解析View目录并读取所有.cshtml文件,将提供的术语与正则表达式相匹配。 这是基本代码:

List results = new List(); 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;