要开发一个搜索引擎。
我想知道我的DDD应该是什么样子。应该实现对记录进行排序,但我不希望我的视图知道我的数据库结构(按哪些列进行排序)。据我所知,排序信息应该来自基础架构层,来自存储库实现,所以必须有一个灵活的域。
它应该是什么样子的?
我希望它是强类型的。
有什么最佳实践吗?
对架构的建议?
发布于 2009-03-27 09:47:57
如果你要开发一个搜索引擎,你将不得不非常快地考虑可伸缩性。在与搜索相关的环境中排序是一个常见的问题。你应该看看Google的搜索实现!如何排序应该取决于ranking algorithm。以领域为中心的排名算法设计不应该像服务方法那样与排名如此不同!
你使用哪种语言是你的选择。如果您选择C/C++ Message Passing Interface (MPI)进行分布式计算。如果你使用Java,可以看看JMS和GridGain (GridGain实现了Googles MapReduce)。
另一个问题是,如何存储数据(分布式、快速、容错)!对于Java,可以看看Project Voldemord (这是你可以免费获得的最好的系统之一。
有关谷歌架构的更多信息,请阅读the high scalability website上的更多内容。
关于DDD的问题,请看埃里克·埃文斯自己的主页dddcommunity.org ;)他写了一本非常好的书Domain-Driven Design。DDD很好,因为它保证了域的完整性和完整性。
一个简单的模型可能是:
page ( URL url, BigInt rank, List<String> keywords,
List<URL> links, List<URL> outLinks, Content ref)
content ( GzippedBytes[] content )如果一个新的节点被添加到系统中,它应该对"setLinks“之类的东西做出反应,这样它就可以自己获得它的pagerank。
客户很简单,他只做一个按PageRank排序的搜索(关键字)。
下面是一个用Java语言编写的服务 example of a pagerank implementation。
发布于 2013-06-04 12:45:29
这是一个自定义搜索引擎的基础知识,它解析MVC视图目录,读取文件,并将提供的文本与正则表达式进行匹配。我的网站返回搜索结果的html链接。这段代码将导致创建一个列表。
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;https://stackoverflow.com/questions/688908
复制相似问题