微软的Net Search 引擎内幕(转)

微软

Search 开发负责人 Larry Jordan、开发人员 Michael Ruggiero 和 Michael Stanton 以及 .NET 框架项目经理 Hari Sekhar 在暗中构建了基于 .NET 技术的 Microsoft Web 站点搜索引擎新版本。迄今为止,只有参加过今年 7 月在奥兰多举行的“专业开发人员讨论会”中的一次特别会议的少数外部开发人员略知一些细节。现在终于可以将实情公诸于众了。

如果您经常访问“内幕新闻”站点,您就会知道,Microsoft Web 组在 2000 年 7 月份召开的“专业开发人员讨论会”之前推出了其 Search 引擎的新型改进版本。您已知道该版本引入了先进的同义词匹配、可返回最为相关的加按语搜索结果的扩展 Best Bets 逻辑,以及对最常用搜索的智能缓存。

然而,有关该版本的内幕消息远比表面上的东西多。

我们当然会兴奋不已,因为该搜索版本的丰富的功能以及经改进的搜索结果明显地能为客户带来更佳的搜索体验(参阅 Search 2.5 技术内幕)。但是,大多数人当时并未意识到,我们同时在幕后将传统的基于 ASP(Active Server Page 活动服务器页面)的 Search 2.5 版移植到新型的 Microsoft .NET 框架。

对搜索组而言,这是最具前沿性的开发。因为我们已经深入到 Internet 服务的未来。而且我们希望如此。下面来谈谈个中缘由。

为何要移植到 .NET?
显而易见,我们正在进入 Internet 的下一个阶段。我们正在跨越通常意义上的 Web 页面,并在开发功能强大的 Web 服务。在这一阶段,使资源和信息有计划地得到利用是极为重要的。这样,我们就可以把这些资源和信息作为服务来利用,而不是让其停留在杂乱无章的数据仓库中。

可扩展标记语言 (XML) 是在超级分布式系统之间实现多数据集传输的一种手段。它同时可以使开发人员以更具价值的新型方式聚集和组合各种来源的数据 – 这样用户就可以直接从中受益。

就 Search 而言,我们为多种自定义和本地化 Search 版本设计了在 microsoft.com 上查找信息的核心功能。我们组在如何使数据访问兼备灵活性和可用性方面面临挑战。在 .NET 出现之前,我们确实无法使客户在不使用安全端口上的 DCOM (分布式组件对象模型)的情况下针对我们的功能设计程序,或者客户只得将我们的多种软件版本安装在其服务器上以便访问代码和 COM。

我们组对即将推出的 .NET 技术进行了研究,并认识到可以通过将代码移植到 .NET 框架来解决所有远程性问题。而且,还有一个意外收获,我们还可以实现 HTTP 和 SOAP 的无处不在的连接。对绝大多数人而言,是否有某个人在 Microsoft 或在世界的某个地方,使用我们的 Web 服务在内部开发用于完全不同用途的应用程序,无关紧要。我们对两种情况均予以支持,同时我们也可以免费获得技术方面的好处。

最新的 Search 2.5 版如今运行在 Site Server 3.0 上,并仍然使用 COM 从搜索目录获得结果。该应用程序的其它各个方面都基于 XML。XML 作为一种将数据(例如,Vocabulary 和 Best Bets)发布到 Web 服务器的手段,使我们能够轻而易举地扩大我们的 Web 空间。

我们同时执行了一项缓存客户请求的最为常用的查询和结果的方案,这是通过将这些查询和结果保留在 Web 服务器上来实现的,并因此增强了可扩展性,进一步提高了性能。由于我们的核心体系结构是基于 XML 的,因而,移植到一个将利用 .NET 框架 Web 服务的模型确实非常简单,而这些 .NET 框架 Web 服务是建立在新型 ASP+ 技术基础之上的(ASP+ 技术被称为活动服务器方法 (ASMX) 页面)。

转换
Search 体系结构由三个组件组成:
Word Parsing and Vocabulary
Best Bets
Search Results
Search 的 .NET 端口的体系结构与基于 ASP 的版本相同(参见图 1)。下面让我们深入了解一下各个组件。

图 1.用户提交查询后,(1) 将查询先提交给解析器 (Parser) 进行词条分割和词汇解析,(2) 将找到的项目的显示术语 (Display Term) 传给 Best Bets,(3) 将找到的项目的首选术语 (Preferred Term) 和剩余项目传给 Search Results,(4) 使用 XSL 样式表编译生成的 XML 文档,(5) 给用户的 Web 浏览器提交 HTML。单击以放大。

Word Parsing and Vocabulary _ 这是一个包含一个 C++ COM 对象的 Windows 脚本组件,它暴露出 Search 中所支持的所有语言的各种词条分割程序。这种设计之所以必要是因为词条分割程序的接口不容易编写成脚本,并且通常需要一种 C++ 可编脚本的封装(尽管这是有办法做到的:以后将对此进行详细解释)。在向 .NET 框架移植的过程中,我们使用了 C++ 对象上的类型列表导出程序 (TLBIMP.EXE),并通过 .NET 中的 Interop 技术对其进行调用,这样您就可以调用现有的 COM 对象了。

Vocabulary Object 运行 Xpath(查询 XML 文档的语言)查询,以便将搜索词条映射到首选术语。它同时去除了干扰词条,并产生一种格式化的数据结构,适合于 Best Bets 和 Search Results 组件进行消耗。一项重要成果是,这个相当复杂的小脚本得以移植到 C#,我们还可以继续从中调用传统对象。下面是 Vocabulary Object 中的一个小代码示例:

// We return an array of VocabularyObjects after parsing the user's search
// text. This ability to create simple typed structures in C# vastly improves
// our code modularity and self-documentation. Here is the definition of
// VocabularyObject:
public struct VocabularyObject {
    public string PREFERREDTERM; // structure members
    public string DISPLAYTERM;
    public bool FOUND;
    public string ORIGPHRASE;
    public bool MULTITERM;
    public bool MULTIWORD;

    // Constructor
    public VocabularyObject(string preferredterm,bool found,string origphrase,
                            bool multiterm,bool multiword,string displayterm) {
        PREFERREDTERM = preferredterm;
        FOUND = found;
        ORIGPHRASE = origphrase;
        MULTITERM = multiterm;
        MULTIWORD = multiword;
        DISPLAYTERM=displayterm;
    }
}

// Example usage. Because the parameters to the objects constructor are
// typed, we'll get a compiler error message if we passed an integer
// where a string was expected, for example. This is a very nice feature
// over traditional scripting environments!
VocabularyObject vo("Microsoft DirectX",true,"dx",false,false,"DirectX");
.NET 环境的其中一个优点就是,您可以创建用于整个代码的多数据结构。上面最后一行是阐明如何使用这些 Vocabulary Object 的代码结构的语句实例。

Best Bets _ 这是一个小脚本组件,它可提供对本地化 XML 文档的 XPath 查询,并可产生加按语的 URL 链接。XML 文档装载于每个 Search 应用程序实例的应用范围,并既可单独工作,又可与 Vocabulary 对象的方法紧密耦合。移植小脚本是 100% 向 .NET 框架的转换,并可利用 System.IO 和 XML DataNavigator 类 (System.NewXml 命名空间)。

这是最简单的移植组件。它几乎是行对行地从 Jscript 向 C# 的转换。我们仅在某些地方对代码作了一些更改,以便利用新的 XML DataNavigator 类 - 用来查询并更新 XML 文档的 .NET 通用语言运行时间部分。

Search Results - 这一复杂的组件与 Site Server 3.0 相接,从而获得与客户的搜索查询相匹配的实际页面描述和链接。它还包含一种完善的缓存算法。

构建并行解决方案
当时我们遇到的最大挑战是,我们在开发 Search 2.5 的同时,也在将整个 Search 应用程序移植到 .NET 框架的 ASP+ 技术。由于要在 PDC 日期之前推出此应用程序并将其移植到 .NET,周转时间紧,因此我们当时决定同时推出这两种版本,并将它们同时上市。很明显,这是一项艰巨的任务,因为我们必须管理新的版本,了解新型 .NET 框架的所有功能和新的语言隐喻,构建具有各种软件平台服务的服务器,等等。

关于我们是如何搞成这个项目的,还有一段有趣的故事呢。为了确保同时推出两种版本(Search 2.5 和 .NET 框架,我们在项目规划阶段确定了首先把握住哪些组件不变、哪些组件在开发过程中变化最大以及哪些组件适合于哪种技术和语言。

我们还及早确定目标,努力分解此应用程序,并按照客户可能会采用的方式移植。因为我们 microsoft.com 的人总是认真对待客户在进行技术决策和研究投资回报时面临的各种问题,所以,我们将此应用程序移植过程分解成许多部分,每个部分都尽可能与客户可能采取的方法接近。我们希望确保做好每项工作,其中包括最简单的移植(即,小脚本移植到 Jscript 类)直到最大的时间和技术利益投入 – 充分利用 C# 编程语言完全移植到 .NET 框架 (100% 可管理的代码空间)。

下面是我们在应对这个挑战时所采取的一些步骤:
首先,我们将主要的 ASP 页面转换为 ASP+。最初,我们是通过 .NET Reflection 技术调用小脚本,这样我们可以在运行时通过查询类型库来调用典型的 COM 对象。
重要知识:我们从具有 ASP 的编程模型出发(其中,数据、业务逻辑以及表示全都被混合在一起),然后采用 ASP+ 的一种完全面向对象的方法,最后是数据分离、编程以及 UI。
其次,处理最简单的小脚本并将其移植。BestBets 是最简单的组件,并且不依赖于 COM 组件。我们决定使用 System.IO、XML Data Navigator 以及 C# 编程语言将这个组件作为 DLL 移植。我们希望将这个组件完全移植到受控环境,并使其充分利用 XML Data Navigator。
重要知识:我们了解了 NewXml 命名空间。同时,我们在移植组件时去除了 .NET Reflection。这样我们就可以在本地调用这些组件。
然后,我们以同样方式处理 Vocabulary 小脚本。这个组件在复杂性和代码行方面处于此应用程序的中间。它由一个小脚本组成,这个小脚本包含用于 Search 的业务和文本解析规则,并对 C++ 组件进行调用,我们创建该组件的目的是包装 COM 对断字程序的引导调用。这个组件在移向受控空间方面具有最大优点。这个复杂组件被全部移植到 .NET 框架和 C# 编程语言。这需要一些技巧,因为,它包含更为复杂的函数逻辑,并需要利用一个自定义 COM 对象。但这还不算太难。下一步将抛弃 C++ 包装并直接调用这些接口。
重要知识:我们更改了函数和逻辑以便受益于象类型安全这样的 C# 的关键优势。在使用 Jscript 时,开发人员必须铭记每个变量的类型(整数、字符串)。C# 会为您做到这一点。所有变量在声明时确定,并且 C# 会检查您的工作以便确保没有越界。这在处理复杂代码时帮助很大。备注: 在 JScript 的下一个版本中,程序员将可以选择完全确定变量的类型。
移植最终组件:SearchResults。最初,我们通过 .NET Reflection 调用这个组件,而且情况良好。由于这个代码太大并相当复杂,同时由于在我们推出 Search 2.5 版本之前对该版本作了一些根本性的更改,因此移植该代码的工作一直持续到现在。在 .NET 测试版中找不到它,但该项工作已取得重大进展。10 月份晚些时候将发布该版本的更新。

总之,这个体系结构是一个杰作。我们拥有一些真正的 C# .NET 组件,我们拥有所有的 ASMX 页面。而且,我们演示了可以通过 Interop 调用自定义 COM 对象,以及通过 .NET Reflection 调用小脚本。传统的对象(比如,SearchResults)可以消耗由 C# 对象(比如,Vocabulary) 创建的数据结构,这是非常好的事。

在您审查 .NET Search 测试版之前值得一提的是,这个体系结构中没有用户界面。您所看到的是一项 Web 服务的默认情况。我们本来是可以添加一个 UI 的,但是我们之所以保留成现在这样,是想让您看到其本来面目。

时间: 2024-10-01 14:28:49

微软的Net Search 引擎内幕(转)的相关文章

微软支持虚幻4引擎,发布引擎 UWP 分支源码

虚幻4引擎已经是许多游戏开发者首选的游戏开发工具了,不管是在主机或PC游戏,虚幻4引擎都能够胜任且被开发者信赖.现在微软宣布了对虚幻4引擎提供UWP通用平台支持,微软还在GitHub上以Epic Games虚幻4引擎的分支名义发表了UWP分支源码. 虚幻4引擎 UWP分支版可由此进入,但需要先加入Epic开发计划和拥有Epic GitHub Org用户.该项目采用社区支持形式,微软Xbox Advanced Technology Group(ATG,先进技术组)将为之提供周期更新,并帮助加速UW

微软部署Live Search全面整合Windows产品

微软MSN在北京宣布正式推出中文版Live地图搜索.Live地图搜索基于微软领先的Virtual Earth技术,现在收录有中国 114 个城市的相关信息,支持这些城市的地图搜索,周边餐饮.医疗.商场.宾馆酒店等设施的查询. Live地图搜索是微软中国研发集团根据中国用户需求和市场特点而研发,突出表现在为中国市场特别研发的公交换乘线路查询,充分体现出微软对中国用户需求的深入理解和持续的技术和应用创新.Live地图搜索目前已经提供北京.上海.天津.广州.深圳.杭州.南京.成都.武汉.西安.重庆这1

如何以及为何创建Search .NET版

  Search 开发负责人 Larry Jordan.开发人员 Michael Ruggiero 和 Michael Stanton 以及 .NET 框架项目经理 Hari Sekhar 在暗中构建了基于 .NET 技术的 Microsoft Web 站点搜索引擎新版本.迄今为止,只有参加过今年 7 月在奥兰多举行的"专业开发人员讨论会"中的一次特别会议的少数外部开发人员略知一些细节.现在终于可以将实情公诸于众了.  如果您经常访问"内幕新闻"站点,您就会知道,M

微软必应得富体验

微软必应"Bing"和Google和baidu的最大视觉上的区别可能在于,必应的搜索界面使用巨幅照片作为其首页的背景,界面十分炫目,可以说必应是典型的富体验界面. 如果你并不使用微软的Live Search(事实上很少有人使用),那么你一定会对取代这款产品的Bing印象深刻.微软的新搜索引擎使用一个单音节,四字母的单词Bing作为名称,像是个咄咄逼人的冷酷巨人,完全没有其中文谐音"病"的感觉,--从此字母B和蓝色将不再仅仅代表中国的巨人百度.Bing不仅拥有一个简短

阿里蒋晓伟谈流计算和批处理引擎Blink,以及Flink和Spark的异同与优势

首届阿里巴巴在线技术峰会(Alibaba Online Technology Summit),将于7月19日-21日 20:00-21:30 在线举办.本次峰会邀请到阿里集团9位技术大V,分享电商架构.安全.数据处理.数据库.多应用部署.互动技术.Docker持续交付与微服务等一线实战经验,解读最新技术在阿里集团的应用实践. 7月19日晚8点,阿里搜索事业部资深搜索专家蒋晓伟将在线分享<阿里流计算和批处理引擎Blink>,其基于Apache Flink项目并且在API和它上兼容,深度分享阿里为

微软重组计划或今日公布

2013年7月1日后将会如何?微软高管们正焦急不安地等待这一天,并在扪心自问. 据国外媒体报道,微软CEO史蒂夫·鲍尔默(Steve Ballmer)预计将于7月1日正式对外公布自己对微软的重大重组计划.上述报道称,鲍尔默在制定重组计划时并没有征求其他高管的意见,仅仅是和自己的一些亲信和董事会成员交换了意见,这让其余高管十分不安. 本报记者采访获悉,上述重组计划包括两个方面:一是管理团队重组;二是业务架构重组.经过此番重组后,微软帝国的权力将重新分配,这是其余高管不安的原因. 本报记者随后向微软

微软被曝 Windows 最新远程代码执行漏洞:极其糟糕!现漏洞详情已发布

 雷锋网(公众号:雷锋网)消息,众所周知,谷歌内部有一个超级黑客团队--"Project Zero",据 securityaffairs 5月8日报道,谷歌 Project Zero 的研究员在微软 Windows OS 中发现了一个远程代码执行漏洞(RCE),但是这并非简单的 RCE,他们把它定性为"近期最糟糕的 Windows RCE". 上周末,Project Zero 的研究员 Tavis Ormandy 和 Natalie Silvanovich 在社交网

微软想用必应从谷歌那赢回搜索业务

北京时间5月29日晚间消息,据<商业周刊>报道,在"All Things Digital"大会上,微软CEO史蒂夫?鲍尔默(Steve Ballmer)展示了微软新搜索引擎――必应,希望借此从谷歌赢回搜索业务. 据微软高级副总裁优素福?麦哈迪(Yusuf Mehdi)透露,Bing.com预计6月3日上线,其服务主要集中在以下领域:旅游.本地信息和购物等. 鲍尔默称,微软选择Bing作为引擎品牌,其原因在于该公司希望它是一个简单的.单元音名称,能构成动词短语,如人们所说的&

微软为火狐浏览器推插件 增强用户搜索体验

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 北京时间1月30日消息,据国外媒体报道,微软近日针对开源火狐浏览器发布了一个插件,使用户可以在火狐浏览器中更好使用微软的搜索服务,由此可见,微软对火狐浏览器强大的插件扩展功能已经非常认可. 微软Live Search开发经理Beatrice Oltean和高级产品经理Debapriya Ray本周四在博客中表示,鉴于大量的用户需求,微软已经正