密集并行(Embarrassingly parallel)
无状态(Stateless) -查询只是一次性的
大量的只读(Read-only)操作
需要很大的存储-索引库的数据甚至比网页的数据还多
需要很多的计算-即使我们可以将很多东西预处理,对大量的查询操作而言,我们的任务量仍然很重。
需要极短的响应时间-考虑一下打开个百度用一天?
系统的设计目标:能耗小、性能比高 (尽可能用便宜,普通的设备)
便宜的 PC集群
软件的可靠性–追求便宜就不一定可靠了,但是可靠性又必须得到保证,某个设备宕机系统仍然可以运行。
容错(Fault tolerance)
解决方案:高度的(High degree of replication)–数据冗余,放在不同的地方。
Google:英文含义,“体现了整合网上海量信息的远大目标”。
Google将数以千计的低成本计算机联网到一起,制造出了一部超高速搜索引擎。超过80亿索引页面、超过10亿索引图像、超过80种语言、112 个国际域名 (2008年的统计数据)下面红线是Google的市场占有量。
Implemented in C and C++ on Solaris and Linux
命中表是前向索引和倒排索引的核心部分。
优化的数据结构,使得海量文档可以较低的开销被抓取、索引和检索
操作系统提供的文件系统通常不能满足搜索引擎的要求,Google用了很多时间来开发自己的BigFiles文件系统
网页库(Repository)包含了每个网页的完整HTML文档,每个网页都是用zlib进行压缩的(压缩要综合考虑存储和速度)
文档索引按照一定的次序来保存关于每个文档的信息,它是按docID组织的,每个条目包含
在设计时,要考虑压缩数据结果以减少存储
命中表的每一项包含某词在某文档中的出现信息:
位置
字体大小
大小写信息等
描述子类型( descriptor type ),如title、anchor等
anchor的表示最特殊,用4bit表示值,这个值其实是document ID的hash值,因为anchor是自己外链包含的文本,这个文本不是对当前网页重要,而是对指向网页比较重要,因此这个docid是链接链向网页的docID,此时的位置也不是词的位置,而是表示这是第几个链接(超出16个链接就不计了)
前向索引是文档到词的索引,每个桶容纳一定范围内的wordID,如果一个文档包含的单词(用wordID表示)属于某个桶的话,那么该桶首先记录该文档的docID,紧接其后的是文档中的一串单词、对应于这些单词的命中列表。
提高文档检索的速度,要建立词到文档的索引,即倒排索引。倒排索引也包含与前向索引一样的存储桶(无论是前向还是倒排,命中表都在桶里,命中表都是核心)
采用高可扩展的集群架构,当时(1998年):
大约2400万文档,在一个星期内索引完成
索引了大约5亿多个超链
4个crawlers每秒抓取100个文档
系统设计
存储和计算的配置
分布式系统的挑战:可扩展性(Scalability)、可靠性(Reliability)、安全(Security)、协商(Consensus)
编程模型:关于管理的资源的简单的、全局视图
一个成熟的Apache开源项目;
提供文本索引和搜索的Java 类库/包;
也有C/Python语言接口;
http://lucene.apache.org
不同之处在于
BooleanQuery是一种复合式查询,支持多种不同查询词的逻辑组合,
BooleanQuery例子
+俄罗斯 恐怖 事件 -美国
+(俄罗斯 美国) 恐怖 事件
可以对不同的查询词赋予不同的boost值表示该查询词在整个BooleanQuery中的重要程度
例如: 俄罗斯3.0 恐怖2.0 事件1.0
他对停止词的处理别具一格,不会直接把所有的停止词去掉,比如都是停止词,但是连起来还是蛮有用的,所以Nutch选择将停止词和附近的词连起来组成新的词,以防漏掉重要信息。
设计复杂的公式将以上各因素综合起来
本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕,E-mail:975644476@qq.com
本文链接:http://www.gawce.com/tnews/595.html