C# 如何用C语言构建搜索引擎#

C# 如何用C语言构建搜索引擎#,c#,asp.net-mvc,search,C#,Asp.net Mvc,Search,我正在尝试用ASP.NETMVC构建一个web应用程序,需要构建一个非常复杂的搜索功能。当用户输入搜索词时,我想搜索各种数据源,包括文档、数据库中的表、网页URL和一些API(如facebook)。任何提示、教程和提示都将不胜感激。您的问题表明您可能不打算从头开始实现整个功能,因此以下是一些您可能会发现有用的链接 一个(最简单的)选择是使用第三方搜索引擎(例如,Bing可能有类似的API)。这允许您使用谷歌搜索(仅)您的页面,并以自定义方式显示结果。其局限性在于它只搜索某些(链接)页面上显示的

我正在尝试用ASP.NETMVC构建一个web应用程序,需要构建一个非常复杂的搜索功能。当用户输入搜索词时,我想搜索各种数据源,包括文档、数据库中的表、网页URL和一些API(如facebook)。任何提示、教程和提示都将不胜感激。

您的问题表明您可能不打算从头开始实现整个功能,因此以下是一些您可能会发现有用的链接

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

  • 一种更复杂的方法是使用一些为您实现索引的.NET库(基于您提供的数据)。例如,一个受欢迎的图书馆。在本例中,您为它提供了要显式搜索的数据(来自网页的相关内容、数据库内容等),因此您可以更好地控制搜索内容(但这需要更多的工作)


构建实际的搜索索引结构和算法绝非易事。这就是人们使用Lucene、Sphinx、Solr等的原因。正如评论中所建议的那样,使用google.com与这些免费搜索引擎相比,如果配置和使用得当,你将无法控制和匹配

我建议大家看一看,它提供了Lucene的强大功能,但使用起来要容易得多,另外它还添加了一些方便的功能,如缓存、切分、面处理等

是.Net的Solr客户端,它有一个示例ASP.Net MVC应用程序,您可以使用该应用程序查看它的工作方式,并将其作为项目的基础


免责声明:我是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看起来很活跃