C# 如何用C语言构建搜索引擎#
我正在尝试用ASP.NETMVC构建一个web应用程序,需要构建一个非常复杂的搜索功能。当用户输入搜索词时,我想搜索各种数据源,包括文档、数据库中的表、网页URL和一些API(如facebook)。任何提示、教程和提示都将不胜感激。您的问题表明您可能不打算从头开始实现整个功能,因此以下是一些您可能会发现有用的链接C# 如何用C语言构建搜索引擎#,c#,asp.net-mvc,search,C#,Asp.net Mvc,Search,我正在尝试用ASP.NETMVC构建一个web应用程序,需要构建一个非常复杂的搜索功能。当用户输入搜索词时,我想搜索各种数据源,包括文档、数据库中的表、网页URL和一些API(如facebook)。任何提示、教程和提示都将不胜感激。您的问题表明您可能不打算从头开始实现整个功能,因此以下是一些您可能会发现有用的链接 一个(最简单的)选择是使用第三方搜索引擎(例如,Bing可能有类似的API)。这允许您使用谷歌搜索(仅)您的页面,并以自定义方式显示结果。其局限性在于它只搜索某些(链接)页面上显示的
- 一个(最简单的)选择是使用第三方搜索引擎(例如,Bing可能有类似的API)。这允许您使用谷歌搜索(仅)您的页面,并以自定义方式显示结果。其局限性在于它只搜索某些(链接)页面上显示的数据
- 一种更复杂的方法是使用一些为您实现索引的.NET库(基于您提供的数据)。例如,一个受欢迎的图书馆。在本例中,您为它提供了要显式搜索的数据(来自网页的相关内容、数据库内容等),因此您可以更好地控制搜索内容(但这需要更多的工作)
免责声明:我是SolrNet的作者。我为我的MVC4站点编写了一个自定义搜索引擎。它解析视图目录并读取所有.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;
列表结果=新列表();
DirectoryInfo di=新的DirectoryInfo(System.Configuration.ConfigurationManager.AppSettings[“PathToSearchableViews]”);
//获取除共享目录之外的所有视图目录
foreach(di.GetDirectories()中的DirectoryInfo d,其中(d=>d.Name!=“共享”))
{
//获取所有.cshtml文件
foreach(d.GetFiles()中的FileInfo-fi,其中(e=>e.Extension==“.cshtml”))
{
//检查是否包含cshtml文件并排除部分页面
if(fi.Name.Substring(0,1)!=“)
{
匹配集合匹配;
bool-foundMatch=false;
int matchCount=0;
使用(StreamReader sr=新StreamReader(fi.FullName))
{
string file=sr.ReadToEnd();
foreach(术语中的字符串字)
{
Regex exp=new Regex(“(?i)”+word.Trim()+”(?-i)”;
matches=exp.matches(文件);
如果(matches.Count>0)
{
foundMatch=true;
matchCount=匹配项。计数;
}
}
//检查匹配计数并创建链接
//
//
}
}
}
}
返回结果;
你在哪里被绊倒了?你在索引存储、搜索或查询分析方面有困难吗?搜索引擎是一个相当大的话题。你在这方面有什么困难?如果你在构建一个复杂的搜索引擎时遇到困难,我会先从一个简单的开始。构建只搜索文档的东西,因为您最终将需要该部分。然后转到数据库搜索,让谷歌来看看。瞧,即时搜索。使用第三方,你实际上可以从谷歌购买一台服务器,或者在你的机器上安装Lucen(或类似的)并将其用作搜索引擎。我用谷歌做到了这一点,非常简单,非常高效,非常昂贵;-)如果一些数据是从数据库读取的,它似乎不起作用,对吗?lucene.net看起来已经死了,还有其他选择吗?@augustas我可能错了,但似乎有一些活动(48小时内),这是一个断断续续的“业余”项目,供apache(偶尔还有其他大公司)的人使用。3.0.3已经死了。4.8是两年前的测试版。不知道那里发生了什么-也许是半死了?就像好莱坞现在的一个非常快的僵尸。它还在积极发展吗?github看起来很活跃