<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Information Retrieval Blog &#187; Nutch</title>
	<atom:link href="http://blog.zye.me/tag/nutch/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.zye.me</link>
	<description>REAL TIME DATA PROCESSING, DISTRIBUTED COMPUTING, PATTERN DISCOVERY</description>
	<lastBuildDate>Tue, 31 Jan 2012 02:05:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Nutch 相关总结</title>
		<link>http://blog.zye.me/2011/05/17334.html</link>
		<comments>http://blog.zye.me/2011/05/17334.html#comments</comments>
		<pubDate>Wed, 25 May 2011 02:28:26 +0000</pubDate>
		<dc:creator>yezheng</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Nutch]]></category>

		<guid isPermaLink="false">http://www.5yiso.cn/2008/03/17334.html</guid>
		<description><![CDATA[目录 (详细见附件)下载：Nutch总结 试运行脚本说明――抓取全过程&#8230; 1 一、系统架构&#8230; 3 二、Nutch的安装测试&#8230; 6 关于 Nutch 的 segread TOOL. 7 关于 nutch analyze db. 9 Nutch中分词的嵌入&#8230; 11 Nutch中文问题&#8230; 11 Nutch中爬取网页过程中url的过滤问题&#8230; 12 Nutch中的插件结构&#8230; 12 类剖析&#8230; 15 UTF-8. 15 org.apache.nutch.io.DataOutputBuffer. 16 Segments数据的读取&#8230; 16 FetchedSegments类 – 通过hit读取所有数据&#8230; 16 NutchBean中索引加载顺序&#8230; 16 Nutch查询服务器配置方法&#8230; 17 Nutch中脚本命令与类的对应关系&#8230; 18 Nutch中查询处理&#8230; 18 SEWM评测跑程序参考步骤&#8230; 18]]></description>
			<content:encoded><![CDATA[<p class="MsoToc4"><span style="font-family: 黑体">目录 (详细见</span><span style="font-family: 黑体">附件)下载：</span><a href="http://www.5yiso.cn/wp-content/uploads/192/19263/2008/03/mynutche680bbe7bb93.doc" title="Nutch总结">Nutch总结</a></p>
<p class="MsoToc4"><!--[if supportFields]><span lang=EN-US><span style='mso-element:field-begin'></span><span style='mso-spacerun:yes'> </span>TOC o &quot;1-4&quot; h z u <span style='mso-element:field-separator'></span></span>< ![endif]--><span lang="EN-US"><span class="MsoHyperlink"><span><a href="#_Toc156981412"><span style="font-family: 宋体" lang="EN-US"><span lang="EN-US">试运行脚本说明――抓取全过程</span></span><span style="color: windowtext; display: none; text-decoration: none"><span>&#8230; </span></span><!--[if supportFields]><span style='color:windowtext;display:none;mso-hide:screen;text-decoration:none; text-underline:none'><span style='mso-element:field-begin'></span></span><span style='color:windowtext;display:none;mso-hide:screen;text-decoration:none; text-underline:none'> PAGEREF _Toc156981412 h </span><span style='color:windowtext; display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span style='mso-element:field-separator'></span></span>< ![endif]--><span style="color: windowtext; display: none; text-decoration: none">1</span><span style="color: windowtext; display: none; text-decoration: none"><!--[if gte mso 9]><xml>  <w :data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100350036003900380031003400310032000000</w> </xml>< ![endif]--></span><!--[if supportFields]><span style='color:windowtext; display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span style='mso-element:field-end'></span></span>< ![endif]--></a></span></span></span><span style="font-weight: normal" lang="EN-US"><o :p></o></span></p>
<p class="MsoToc4"><span class="MsoHyperlink"><span lang="EN-US"><a href="#_Toc156981413"><span style="font-family: 宋体" lang="EN-US"><span lang="EN-US">一、系统架构</span></span><span style="color: windowtext; display: none; text-decoration: none"><span>&#8230; </span></span><!--[if supportFields]><span style='color:windowtext;display:none;mso-hide:screen;text-decoration:none; text-underline:none'><span style='mso-element:field-begin'></span></span><span style='color:windowtext;display:none;mso-hide:screen;text-decoration:none; text-underline:none'> PAGEREF _Toc156981413 h </span><span style='color:windowtext; display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span style='mso-element:field-separator'></span></span>< ![endif]--><span style="color: windowtext; display: none; text-decoration: none">3</span><span style="color: windowtext; display: none; text-decoration: none"><!--[if gte mso 9]><xml>  <w :data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100350036003900380031003400310033000000</w> </xml>< ![endif]--></span><!--[if supportFields]><span style='color:windowtext; display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span style='mso-element:field-end'></span></span>< ![endif]--></a></span></span><span style="font-weight: normal" lang="EN-US"><o :p></o></span></p>
<p class="MsoToc4"><span class="MsoHyperlink"><span lang="EN-US"><a href="#_Toc156981414"><span style="font-family: 宋体" lang="EN-US"><span lang="EN-US">二、</span></span>Nutch<span style="font-family: 宋体" lang="EN-US"><span lang="EN-US">的安装测试</span></span><span style="color: windowtext; display: none; text-decoration: none"><span>&#8230; </span></span><!--[if supportFields]><span style='color:windowtext;display:none;mso-hide:screen;text-decoration:none; text-underline:none'><span style='mso-element:field-begin'></span></span><span style='color:windowtext;display:none;mso-hide:screen;text-decoration:none; text-underline:none'> PAGEREF _Toc156981414 h </span><span style='color:windowtext; display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span style='mso-element:field-separator'></span></span>< ![endif]--><span style="color: windowtext; display: none; text-decoration: none">6</span><span style="color: windowtext; display: none; text-decoration: none"><!--[if gte mso 9]><xml>  <w :data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100350036003900380031003400310034000000</w> </xml>< ![endif]--></span><!--[if supportFields]><span style='color:windowtext; display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span style='mso-element:field-end'></span></span>< ![endif]--></a></span></span><span style="font-weight: normal" lang="EN-US"><o :p></o></span></p>
<p class="MsoToc4"><span class="MsoHyperlink"><span lang="EN-US"><a href="#_Toc156981415"><span style="font-family: 宋体" lang="EN-US"><span lang="EN-US">关于</span></span> Nutch <span style="font-family: 宋体" lang="EN-US"><span lang="EN-US">的</span></span> segread TOOL<span style="color: windowtext; display: none; text-decoration: none"><span>. </span></span><!--[if supportFields]><span style='color:windowtext;display:none;mso-hide:screen;text-decoration:none; text-underline:none'><span style='mso-element:field-begin'></span></span><span style='color:windowtext;display:none;mso-hide:screen;text-decoration:none; text-underline:none'> PAGEREF _Toc156981415 h </span><span style='color:windowtext; display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span style='mso-element:field-separator'></span></span>< ![endif]--><span style="color: windowtext; display: none; text-decoration: none">7</span><span style="color: windowtext; display: none; text-decoration: none"><!--[if gte mso 9]><xml>  <w :data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100350036003900380031003400310035000000</w> </xml>< ![endif]--></span><!--[if supportFields]><span style='color:windowtext; display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span style='mso-element:field-end'></span></span>< ![endif]--></a></span></span><span style="font-weight: normal" lang="EN-US"><o :p></o></span></p>
<p class="MsoToc4"><span class="MsoHyperlink"><span lang="EN-US"><a href="#_Toc156981416"><span style="font-family: 宋体" lang="EN-US"><span lang="EN-US">关于</span></span> nutch analyze db<span style="color: windowtext; display: none; text-decoration: none"><span>. </span></span><!--[if supportFields]><span style='color:windowtext;display:none;mso-hide:screen;text-decoration:none; text-underline:none'><span style='mso-element:field-begin'></span></span><span style='color:windowtext;display:none;mso-hide:screen;text-decoration:none; text-underline:none'> PAGEREF _Toc156981416 h </span><span style='color:windowtext; display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span style='mso-element:field-separator'></span></span>< ![endif]--><span style="color: windowtext; display: none; text-decoration: none">9</span><span style="color: windowtext; display: none; text-decoration: none"><!--[if gte mso 9]><xml>  <w :data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100350036003900380031003400310036000000</w> </xml>< ![endif]--></span><!--[if supportFields]><span style='color:windowtext; display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span style='mso-element:field-end'></span></span>< ![endif]--></a></span></span><span style="font-weight: normal" lang="EN-US"><o :p></o></span></p>
<p class="MsoToc4"><span class="MsoHyperlink"><span lang="EN-US"><a href="#_Toc156981417">Nutch<span style="font-family: 宋体" lang="EN-US"><span lang="EN-US">中分词的嵌入</span></span><span style="color: windowtext; display: none; text-decoration: none"><span>&#8230; </span></span><!--[if supportFields]><span style='color:windowtext;display:none;mso-hide:screen;text-decoration:none; text-underline:none'><span style='mso-element:field-begin'></span></span><span style='color:windowtext;display:none;mso-hide:screen;text-decoration:none; text-underline:none'> PAGEREF _Toc156981417 h </span><span style='color:windowtext; display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span style='mso-element:field-separator'></span></span>< ![endif]--><span style="color: windowtext; display: none; text-decoration: none">11</span><span style="color: windowtext; display: none; text-decoration: none"><!--[if gte mso 9]><xml>  <w :data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100350036003900380031003400310037000000</w> </xml>< ![endif]--></span><!--[if supportFields]><span style='color:windowtext; display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span style='mso-element:field-end'></span></span>< ![endif]--></a></span></span><span style="font-weight: normal" lang="EN-US"><o :p></o></span></p>
<p class="MsoToc4"><span class="MsoHyperlink"><span lang="EN-US"><a href="#_Toc156981418">Nutch<span style="font-family: 宋体" lang="EN-US"><span lang="EN-US">中文问题</span></span><span style="color: windowtext; display: none; text-decoration: none"><span>&#8230; </span></span><!--[if supportFields]><span style='color:windowtext;display:none;mso-hide:screen;text-decoration:none; text-underline:none'><span style='mso-element:field-begin'></span></span><span style='color:windowtext;display:none;mso-hide:screen;text-decoration:none; text-underline:none'> PAGEREF _Toc156981418 h </span><span style='color:windowtext; display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span style='mso-element:field-separator'></span></span>< ![endif]--><span style="color: windowtext; display: none; text-decoration: none">11</span><span style="color: windowtext; display: none; text-decoration: none"><!--[if gte mso 9]><xml>  <w :data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100350036003900380031003400310038000000</w> </xml>< ![endif]--></span><!--[if supportFields]><span style='color:windowtext; display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span style='mso-element:field-end'></span></span>< ![endif]--></a></span></span><span style="font-weight: normal" lang="EN-US"><o :p></o></span></p>
<p class="MsoToc4"><span class="MsoHyperlink"><span lang="EN-US"><a href="#_Toc156981419">Nutch<span style="font-family: 宋体" lang="EN-US"><span lang="EN-US">中爬取网页过程中</span></span>url<span style="font-family: 宋体" lang="EN-US"><span lang="EN-US">的过滤问题</span></span><span style="color: windowtext; display: none; text-decoration: none"><span>&#8230; </span></span><!--[if supportFields]><span style='color:windowtext;display:none;mso-hide:screen;text-decoration:none; text-underline:none'><span style='mso-element:field-begin'></span></span><span style='color:windowtext;display:none;mso-hide:screen;text-decoration:none; text-underline:none'> PAGEREF _Toc156981419 h </span><span style='color:windowtext; display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span style='mso-element:field-separator'></span></span>< ![endif]--><span style="color: windowtext; display: none; text-decoration: none">12</span><span style="color: windowtext; display: none; text-decoration: none"><!--[if gte mso 9]><xml>  <w :data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100350036003900380031003400310039000000</w> </xml>< ![endif]--></span><!--[if supportFields]><span style='color:windowtext; display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span style='mso-element:field-end'></span></span>< ![endif]--></a></span></span><span style="font-weight: normal" lang="EN-US"><o :p></o></span></p>
<p class="MsoToc4"><span class="MsoHyperlink"><span lang="EN-US"><a href="#_Toc156981420">Nutch<span style="font-family: 宋体" lang="EN-US"><span lang="EN-US">中的插件结构</span></span><span style="color: windowtext; display: none; text-decoration: none"><span>&#8230; </span></span><!--[if supportFields]><span style='color:windowtext;display:none;mso-hide:screen;text-decoration:none; text-underline:none'><span style='mso-element:field-begin'></span></span><span style='color:windowtext;display:none;mso-hide:screen;text-decoration:none; text-underline:none'> PAGEREF _Toc156981420 h </span><span style='color:windowtext; display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span style='mso-element:field-separator'></span></span>< ![endif]--><span style="color: windowtext; display: none; text-decoration: none">12</span><span style="color: windowtext; display: none; text-decoration: none"><!--[if gte mso 9]><xml>  <w :data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100350036003900380031003400320030000000</w> </xml>< ![endif]--></span><!--[if supportFields]><span style='color:windowtext; display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span style='mso-element:field-end'></span></span>< ![endif]--></a></span></span><span style="font-weight: normal" lang="EN-US"><o :p></o></span></p>
<p class="MsoToc3"><span class="MsoHyperlink"><span lang="EN-US"><a href="#_Toc156981421"><span style="font-family: 宋体" lang="EN-US"><span lang="EN-US">类剖析</span></span><span style="color: windowtext; display: none; text-decoration: none"><span>&#8230; </span></span><!--[if supportFields]><span style='color:windowtext;display:none;mso-hide:screen;text-decoration:none; text-underline:none'><span style='mso-element:field-begin'></span></span><span style='color:windowtext;display:none;mso-hide:screen;text-decoration:none; text-underline:none'> PAGEREF _Toc156981421 h </span><span style='color:windowtext; display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span style='mso-element:field-separator'></span></span>< ![endif]--><span style="color: windowtext; display: none; text-decoration: none">15</span><span style="color: windowtext; display: none; text-decoration: none"><!--[if gte mso 9]><xml>  <w :data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100350036003900380031003400320031000000</w> </xml>< ![endif]--></span><!--[if supportFields]><span style='color:windowtext; display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span style='mso-element:field-end'></span></span>< ![endif]--></a></span></span><span lang="EN-US"><o :p></o></span></p>
<p class="MsoToc4"><span class="MsoHyperlink"><span lang="EN-US"><a href="#_Toc156981422">UTF-8<span style="color: windowtext; display: none; text-decoration: none"><span>. </span></span><!--[if supportFields]><span style='color:windowtext;display:none;mso-hide:screen;text-decoration:none; text-underline:none'><span style='mso-element:field-begin'></span></span><span style='color:windowtext;display:none;mso-hide:screen;text-decoration:none; text-underline:none'> PAGEREF _Toc156981422 h </span><span style='color:windowtext; display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span style='mso-element:field-separator'></span></span>< ![endif]--><span style="color: windowtext; display: none; text-decoration: none">15</span><span style="color: windowtext; display: none; text-decoration: none"><!--[if gte mso 9]><xml>  <w :data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100350036003900380031003400320032000000</w> </xml>< ![endif]--></span><!--[if supportFields]><span style='color:windowtext; display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span style='mso-element:field-end'></span></span>< ![endif]--></a></span></span><span style="font-weight: normal" lang="EN-US"><o :p></o></span></p>
<p class="MsoToc4"><span class="MsoHyperlink"><span lang="EN-US"><a href="#_Toc156981423">org.apache.nutch.io.DataOutputBuffer<span style="color: windowtext; display: none; text-decoration: none"><span>. </span></span><!--[if supportFields]><span style='color:windowtext;display:none;mso-hide:screen;text-decoration:none; text-underline:none'><span style='mso-element:field-begin'></span></span><span style='color:windowtext;display:none;mso-hide:screen;text-decoration:none; text-underline:none'> PAGEREF _Toc156981423 h </span><span style='color:windowtext; display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span style='mso-element:field-separator'></span></span>< ![endif]--><span style="color: windowtext; display: none; text-decoration: none">16</span><span style="color: windowtext; display: none; text-decoration: none"><!--[if gte mso 9]><xml>  <w :data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100350036003900380031003400320033000000</w> </xml>< ![endif]--></span><!--[if supportFields]><span style='color:windowtext; display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span style='mso-element:field-end'></span></span>< ![endif]--></a></span></span><span style="font-weight: normal" lang="EN-US"><o :p></o></span></p>
<p class="MsoToc4"><span class="MsoHyperlink"><span lang="EN-US"><a href="#_Toc156981424">Segments<span style="font-family: 宋体" lang="EN-US"><span lang="EN-US">数据的读取</span></span><span style="color: windowtext; display: none; text-decoration: none"><span>&#8230; </span></span><!--[if supportFields]><span style='color:windowtext;display:none;mso-hide:screen;text-decoration:none; text-underline:none'><span style='mso-element:field-begin'></span></span><span style='color:windowtext;display:none;mso-hide:screen;text-decoration:none; text-underline:none'> PAGEREF _Toc156981424 h </span><span style='color:windowtext; display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span style='mso-element:field-separator'></span></span>< ![endif]--><span style="color: windowtext; display: none; text-decoration: none">16</span><span style="color: windowtext; display: none; text-decoration: none"><!--[if gte mso 9]><xml>  <w :data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100350036003900380031003400320034000000</w> </xml>< ![endif]--></span><!--[if supportFields]><span style='color:windowtext; display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span style='mso-element:field-end'></span></span>< ![endif]--></a></span></span><span style="font-weight: normal" lang="EN-US"><o :p></o></span></p>
<p class="MsoToc4"><span class="MsoHyperlink"><span lang="EN-US"><a href="#_Toc156981425">FetchedSegments<span style="font-family: 宋体" lang="EN-US"><span lang="EN-US">类</span></span> – <span style="font-family: 宋体" lang="EN-US"><span lang="EN-US">通过</span></span>hit<span style="font-family: 宋体" lang="EN-US"><span lang="EN-US">读取所有数据</span></span><span style="color: windowtext; display: none; text-decoration: none"><span>&#8230; </span></span><!--[if supportFields]><span style='color:windowtext;display:none;mso-hide:screen;text-decoration:none; text-underline:none'><span style='mso-element:field-begin'></span></span><span style='color:windowtext;display:none;mso-hide:screen;text-decoration:none; text-underline:none'> PAGEREF _Toc156981425 h </span><span style='color:windowtext; display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span style='mso-element:field-separator'></span></span>< ![endif]--><span style="color: windowtext; display: none; text-decoration: none">16</span><span style="color: windowtext; display: none; text-decoration: none"><!--[if gte mso 9]><xml>  <w :data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100350036003900380031003400320035000000</w> </xml>< ![endif]--></span><!--[if supportFields]><span style='color:windowtext; display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span style='mso-element:field-end'></span></span>< ![endif]--></a></span></span><span style="font-weight: normal" lang="EN-US"><o :p></o></span></p>
<p class="MsoToc4"><span class="MsoHyperlink"><span lang="EN-US"><a href="#_Toc156981426">NutchBean<span style="font-family: 宋体" lang="EN-US"><span lang="EN-US">中索引加载顺序</span></span><span style="color: windowtext; display: none; text-decoration: none"><span>&#8230; </span></span><!--[if supportFields]><span style='color:windowtext;display:none;mso-hide:screen;text-decoration:none; text-underline:none'><span style='mso-element:field-begin'></span></span><span style='color:windowtext;display:none;mso-hide:screen;text-decoration:none; text-underline:none'> PAGEREF _Toc156981426 h </span><span style='color:windowtext; display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span style='mso-element:field-separator'></span></span>< ![endif]--><span style="color: windowtext; display: none; text-decoration: none">16</span><span style="color: windowtext; display: none; text-decoration: none"><!--[if gte mso 9]><xml>  <w :data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100350036003900380031003400320036000000</w> </xml>< ![endif]--></span><!--[if supportFields]><span style='color:windowtext; display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span style='mso-element:field-end'></span></span>< ![endif]--></a></span></span><span style="font-weight: normal" lang="EN-US"><o :p></o></span></p>
<p class="MsoToc4"><span class="MsoHyperlink"><span lang="EN-US"><a href="#_Toc156981427">Nutch<span style="font-family: 宋体" lang="EN-US"><span lang="EN-US">查询服务器配置方法</span></span><span style="color: windowtext; display: none; text-decoration: none"><span>&#8230; </span></span><!--[if supportFields]><span style='color:windowtext;display:none;mso-hide:screen;text-decoration:none; text-underline:none'><span style='mso-element:field-begin'></span></span><span style='color:windowtext;display:none;mso-hide:screen;text-decoration:none; text-underline:none'> PAGEREF _Toc156981427 h </span><span style='color:windowtext; display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span style='mso-element:field-separator'></span></span>< ![endif]--><span style="color: windowtext; display: none; text-decoration: none">17</span><span style="color: windowtext; display: none; text-decoration: none"><!--[if gte mso 9]><xml>  <w :data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100350036003900380031003400320037000000</w> </xml>< ![endif]--></span><!--[if supportFields]><span style='color:windowtext; display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span style='mso-element:field-end'></span></span>< ![endif]--></a></span></span><span style="font-weight: normal" lang="EN-US"><o :p></o></span></p>
<p class="MsoToc4"><span class="MsoHyperlink"><span lang="EN-US"><a href="#_Toc156981428">Nutch<span style="font-family: 宋体" lang="EN-US"><span lang="EN-US">中脚本命令与类的对应关系</span></span><span style="color: windowtext; display: none; text-decoration: none"><span>&#8230; </span></span><!--[if supportFields]><span style='color:windowtext;display:none;mso-hide:screen;text-decoration:none; text-underline:none'><span style='mso-element:field-begin'></span></span><span style='color:windowtext;display:none;mso-hide:screen;text-decoration:none; text-underline:none'> PAGEREF _Toc156981428 h </span><span style='color:windowtext; display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span style='mso-element:field-separator'></span></span>< ![endif]--><span style="color: windowtext; display: none; text-decoration: none">18</span><span style="color: windowtext; display: none; text-decoration: none"><!--[if gte mso 9]><xml>  <w :data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100350036003900380031003400320038000000</w> </xml>< ![endif]--></span><!--[if supportFields]><span style='color:windowtext; display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span style='mso-element:field-end'></span></span>< ![endif]--></a></span></span><span style="font-weight: normal" lang="EN-US"><o :p></o></span></p>
<p class="MsoToc4"><span class="MsoHyperlink"><span lang="EN-US"><a href="#_Toc156981429">Nutch<span style="font-family: 宋体" lang="EN-US"><span lang="EN-US">中查询处理</span></span><span style="color: windowtext; display: none; text-decoration: none"><span>&#8230; </span></span><!--[if supportFields]><span style='color:windowtext;display:none;mso-hide:screen;text-decoration:none; text-underline:none'><span style='mso-element:field-begin'></span></span><span style='color:windowtext;display:none;mso-hide:screen;text-decoration:none; text-underline:none'> PAGEREF _Toc156981429 h </span><span style='color:windowtext; display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span style='mso-element:field-separator'></span></span>< ![endif]--><span style="color: windowtext; display: none; text-decoration: none">18</span><span style="color: windowtext; display: none; text-decoration: none"><!--[if gte mso 9]><xml>  <w :data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100350036003900380031003400320039000000</w> </xml>< ![endif]--></span><!--[if supportFields]><span style='color:windowtext; display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span style='mso-element:field-end'></span></span>< ![endif]--></a></span></span><span style="font-weight: normal" lang="EN-US"><o :p></o></span></p>
<p class="MsoToc4"><span class="MsoHyperlink"><span lang="EN-US"><a href="#_Toc156981430">SEWM<span style="font-family: 宋体" lang="EN-US"><span lang="EN-US">评测跑程序参考步骤</span></span><span style="color: windowtext; display: none; text-decoration: none"><span>&#8230; </span></span><!--[if supportFields]><span style='color:windowtext;display:none;mso-hide:screen;text-decoration:none; text-underline:none'><span style='mso-element:field-begin'></span></span><span style='color:windowtext;display:none;mso-hide:screen;text-decoration:none; text-underline:none'> PAGEREF _Toc156981430 h </span><span style='color:windowtext; display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span style='mso-element:field-separator'></span></span>< ![endif]--><span style="color: windowtext; display: none; text-decoration: none">18</span><span style="color: windowtext; display: none; text-decoration: none"><!--[if gte mso 9]><xml>  <w :data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100350036003900380031003400330030000000</w> </xml>< ![endif]--></span><!--[if supportFields]><span style='color:windowtext; display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span style='mso-element:field-end'></span></span>< ![endif]--></a></span></span><span style="font-weight: normal" lang="EN-US"><o :p></o></span></p>
<p><!--[if supportFields]><span lang=EN-US style='font-size:10.5pt;mso-bidi-font-size: 12.0pt;font-family:"Times New Roman";mso-fareast-font-family:宋体;mso-font-kerning: 1.0pt;mso-ansi-language:EN-US;mso-fareast-language:ZH-CN;mso-bidi-language: AR-SA'><span style='mso-element:field-end'></span></span>< ![endif]--></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.zye.me/2011/05/17334.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Trie-based approximate autocomplete implementation with support for ranks and synonyms</title>
		<link>http://blog.zye.me/2009/07/53262.html</link>
		<comments>http://blog.zye.me/2009/07/53262.html#comments</comments>
		<pubDate>Thu, 02 Jul 2009 18:58:09 +0000</pubDate>
		<dc:creator>yezheng</dc:creator>
				<category><![CDATA[information Retrieval]]></category>
		<category><![CDATA[autocomplete]]></category>
		<category><![CDATA[lucene]]></category>
		<category><![CDATA[Nutch]]></category>

		<guid isPermaLink="false">http://blog.so8848.com/?p=53262</guid>
		<description><![CDATA[Thoughts on Lucene, Solr, Nutch and vertical search  Trie-based approximate autocomplete implementation with support for ranks and synonyms Posted by Kelvin on 01 Jul 2009 at 02:30 am &#124; Tagged as: programming The problem of auto-completing user queries is a well-explored one. For example, Type less, find more: fast autocompletion search with a succinct index <a href='http://blog.zye.me/2009/07/53262.html'>[...]</a>]]></description>
			<content:encoded><![CDATA[<h1>Thoughts on Lucene, Solr, Nutch and vertical search <a href="http://www.supermind.org/feed"><img style="border: 0px none;" src="http://www.supermind.org/rss.gif" alt="" /></a></h1>
<h2 class="post-title"><a title="Permanent Link: Trie-based approximate autocomplete implementation with support for ranks and synonyms" rel="bookmark" href="http://www.supermind.org/blog/530/trie-based-approximate-autocomplete-implementation-with-support-for-ranks-and-synonyms">Trie-based approximate autocomplete implementation with support for ranks and synonyms</a></h2>
<p class="day-date">Posted by <em>Kelvin</em> on <em>01 Jul 2009</em> at <em>02:30 am</em> | Tagged as: <em><a title="View all posts in programming" rel="category tag" href="http://www.supermind.org/blog/category/programming">programming</a></em></p>
<p>The problem of auto-completing user queries is a well-explored one.</p>
<p>For example,<br />
<a href="http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.95.3776&amp;rep=rep1&amp;type=pdf">Type less, find more: fast autocompletion search with a succinct index</a><br />
<a href="http://stevedaskam.wordpress.com/2009/06/07/putting-autocomplete-data-structure-to-the-test/">http://stevedaskam.wordpress.com/2009/06/07/putting-autocomplete-data-structure-to-the-test/</a><br />
<a href="http://suggesttree.sourceforge.net/">http://suggesttree.sourceforge.net/</a><br />
<a href="http://sujitpal.blogspot.com/2007/02/three-autocomplete-implementations.html">http://sujitpal.blogspot.com/2007/02/three-autocomplete-implementations.html</a></p>
<p>However, there’s been little written about supporting synonyms and approximate matching for the purpose of autocompletion.</p>
<p>The approach for autocompletion I’ll be discussing in this article supports the following features:</p>
<p>- given a prefix, returns all words starting with that prefix<br />
- approximate/fuzzy prefix matching based on k-errors / edit distance / Levenstein distance, with the operations: substitution, insert and delete (though adjacent transpositions would be trivial to add)<br />
- support for ranks (i.e. a number associated with a word that affects ranking, like number of search results for a given phrase)<br />
- support for synonyms</p>
<p>The search algorithm is independent of dictionary size, and dependent on <em>k</em> (edit distance) and length of prefix.</p>
<h3>Data Structures</h3>
<p>The data structure used is a trie. Words are broken into characters. Each character forms a node in a tree.</p>
<p>To support synonyms, a pointer is added to terminal nodes which points to the canonical word of the synonym ring.</p>
<p>To support ranks, a pointer is added to terminal nodes with the value of the rank. At search time, nodes are sorted first by edit distance, then by rank.</p>
<h3>Implementation</h3>
<p>At index-time, as mentioned above, a trie is built from input words/lexicon. No other preprocessing is done.</p>
<p>At search-time, dynamic programming (DP) is applied on a depth-first traversal of the trie, to collect all the “active sub-tries” of the trie which are less than <em>k</em> errors from the given prefix.</p>
<p>Where traditional DP uses a m x n matrix for its DP table where m and n are the 2 strings to be compared, we instantiate a single (prefix length + max k) x (prefix length) matrix for the entire trie, where prefix is the string for which we want to produce autocomplete results for.</p>
<p>Why  (prefix length + max k) x (prefix length) ?</p>
<p>1. We don’t need to compare full strings because we’re only interested in collecting active sub-tries which satisfy the k-errors constraint.</p>
<p>2. For cases where the length of the word to be evaluated is greater than the length of the prefix, evaluations of the word should be performed up to prefix length + maximum k. This is to take into account the scenario where the first <em>k</em> characters of a word, when deleted, satisfy the edit distance constraint. e.g. prefix of <strong>hamm</strong> and word <strong>bahamm</strong>, with k=2.</p>
<h4>Cutoff optimizations</h4>
<p>Each level of the trie has a non-decreasing value of <em>k</em> (edit distance).</p>
<p>Therefore when <em>k</em> &gt; maximum k, we can proceed to reject the entire sub-trie of that node. In other words, given the prefix <strong>hamm</strong>, and maximum k of <strong>1</strong>, when we encounter <strong>hen</strong> which has k=2, we can discard any children of <strong>hen</strong> because their k-values will be &gt;= 2.</p>
<h4>Collecting autocomplete results</h4>
<p>With a list of active sub-tries, we will then proceed to collect all terminal strings, sort them by edit distance and rank, and return the top n results.</p>
<h3>Further explorations</h3>
<p>1. Implementing adjacent transpositions<br />
2. Implementing Ukkonen’s cutoff algorithm for DP (not to be confused with Ukkonen’s algorithm for constant-time creation of suffix trees)<br />
3. Comparing performance of tries vs compact tries (where non-branching nodes are collapsed)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.zye.me/2009/07/53262.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>信息的搜集(爬虫，spider)&#8211;Web搜索引擎系列2</title>
		<link>http://blog.zye.me/2008/03/22173.html</link>
		<comments>http://blog.zye.me/2008/03/22173.html#comments</comments>
		<pubDate>Fri, 28 Mar 2008 15:41:11 +0000</pubDate>
		<dc:creator>yezheng</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[apider]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Nutch]]></category>
		<category><![CDATA[信息搜集]]></category>
		<category><![CDATA[爬虫]]></category>

		<guid isPermaLink="false">http://www.5yiso.cn/2008/03/22173.html</guid>
		<description><![CDATA[2.1 搜集的时机 一般来说，搜索引擎这样一个软件系统都是事先收集好网页，存储在本地硬盘上，然后再进行预处理、索引。可以想象如果等用户查询时再爬取成千上万的网页，再一个个分析处理，是不可能满足搜索引擎的响应时间要求的。[1]一般搜索引擎都是使用一种叫网络爬虫（也叫网络爬虫和网络机器人）的程序来完成这项工作，下面我们讲介绍这样一个程序的原理以及其实现。 2.2 网络爬虫介绍 互联网其实就是一张大图，我们可以把每一个网页当作一个节点，把那些超链接（Hyperlinks)当作连接网页的弧。网页中那些蓝色的、带有下划线的文字背后其实藏着对应的网址，当你点下去的的时候，浏览器是通过这些隐含的网址转到相应的网页中的。这些隐含在文字背后的网址称为“超链接”。有了超链接，我们可以从任何一个网页出发，用图的遍历算法，自动地访问到每一个网页并把它们存起来。完成这个功能的程序叫做网络爬虫，或者在一些文献中称为&#8220;机器人&#8220;（Robot)。世界上第一个网络爬虫是由麻省理工学院 (MIT)的学生马休.格雷（Matthew Gray)在 1993 年写成的。他给他的程序起了个名字叫“互联网漫游者”(&#8220;www wanderer&#8221;)。以后的网络爬虫越写越复杂，但原理是一样的。 那么网络爬虫如何下载整个互联网。假定我们从一家门户网站的首页出发，先下载这个网页，然后通过分析这个网页，可以找到藏在它里面的所有超链接，也就等于知道了这家门户网站首页所直接连接的全部网页，诸如雅虎邮件、雅虎财经、雅虎新闻等等。我们接下来访问、下载并分析这家门户网站的邮件等网页，又能找到其他相连的网页。我们让计算机不停地做下去，就能下载整个的互联网。 2.2.1 搜集的策略 最长见一种方式就是所谓的“爬行”。我们在遍历互联网这张大图时，既可以从某个网页节点（或节点集）开始深度优先遍历，也可以广度优先遍历。由图论知识我们可以知道， 遍历时必须记录下已经访问过的节点（避免重复），在网络爬虫中，我们使用一个称为“哈希表”(Hash Table)的列表而不是一个记事本纪录网页是否下载过的信息。下面我们要介绍的爬虫WebLech就是采取这一策略。 由于不可能抓取所有的网页，有些网络爬虫对一些不太重要的网站，设置了访问的层数。这也让有些网站上一部分网页能够在搜索引擎上搜索到，另外一部分不能被搜索到。对于网站设计者来说，扁平化的网站结构设计有助于搜索引擎抓取其更多的网页。        另外一种可行的方式是使用最佳优先遍历循环的收集。首先我们应该有一个初始的种子URL集合，爬虫爬取这些种子URL后，解析出这些网页中的包括的URL，并加入到系统维护的一个URL集合S中，然后再对S中的链接进行分析（去重，判断起重要程度，标记其爬行周期等），再用某种算法优先生成一个待爬行的网页集合D，再重复这一过程，循环爬取网页。下面我们要介绍的Nutch爬虫就是采取这一策略。        最后还有一种方式就是让网站拥有者主动向搜索引擎提交它们的网址，系统在一定时间内定向去爬取这些网站。一般来说该种策略都是与以上两种方法配合使用，目前常见的是广度优先和最佳优先方法。 2.2.2 信息指纹在爬虫中的应用        在哈希表中以字符串的形式直接存储网址，既费内存空间，又浪费查找时间。现在的网址一般都较长，比如，如果在 Google 或者百度在查找数学之美，对应的网址长度在一百个字符以上。下面是百度的链接 http://www.baidu.com/s?ie=gb2312&#38;bs=%CA%FD%D1%A7%D6%AE%C3%C0&#38;sr=&#38;z=&#38;cl=3&#38;f=8&#38;wd=%CE%E2%BE%FC+%CA%FD%D1%A7%D6%AE%C3%C0&#38;ct=0 假定网址的平均长度为一百个字符，那么存贮 200 亿个网址本身至少需要 2 TB，即两千 GB 的容量，考虑到哈希表的存储效率一般只有 50%，实际需要的内存在 4 TB以上。即使把这些网址放到了计算机的内存中，由于网址长度不固定，以字符串的形式查找的效率会很低。因此，我们如果能够找到一个函数，将这 200 亿个网址随机地映射到128 二进位即 16 个字节的整数空间，比如将上面那个很长的字符串对应成一个如下的随机数: 893249432984398432980545454543，这样每个网址只需要占用 16 个字节而不是原来的一百个。这就能把存储网址的内存需求量降低到原来的 1/6。这个16 个字节的随机数，就称做该网址的信息指纹（Fingerprint)。可以证明，只要产生随机数的算法足够好，可以保证几乎不可能有两个字符串的指纹相同，就如同不可能有两个人的指纹相同一样。由于指纹是固定的 128 位整数，因此查找的计算量比字符串比较小得多。网络爬虫在下载网页时，它将访问过的网页的网址都变成一个个信息指纹，存到哈希表中，每当遇到一个新网址时，计算机就计算出它的指纹，然后比较该指纹是否已经在哈希表中，来决定是否下载这个网页。这种整数的查找比原来字符串查找,可以快几倍到几十倍。[2] 2.3 网页的维护与更新 1）、批量搜集 批量搜集，就是每次搜集替换上一次的内容。由于每次都是重新来一次，对度大规模搜索引擎来说，搜集的时间通常会花几周。这样做的好处是系统实现比较简单，主要缺点是“时新性”不高，还有重复收集带来的带宽消耗。 <a href='http://blog.zye.me/2008/03/22173.html'>[...]</a>]]></description>
			<content:encoded><![CDATA[<h2><a name="_Toc177145978"></a><a name="_Toc145162661"></a><a name="_Toc145162389"></a><a name="_Toc143316174"></a><a name="_Toc143316078"></a><a name="_Toc143191337"></a><span><span><span><span><span><span lang="EN-US">2.1 </span></span></span></span></span></span><span><span><span><span><span><span><span style="font-family: 黑体">搜集的时机</span></span></span></span></span></span></span></h2>
<p class="MsoNormal" style="margin: 6pt 0cm; text-align: left; text-indent: 21pt" align="left"><span style="font-family: 宋体">一般来说，搜索引擎这样一个软件系统都是事先收集好网页，存储在本地硬盘上，然后再进行预处理、索引。可以想象如果等用户查询时再爬取成千上万的网页，再一个个分析处理，是不可能满足搜索引擎的响应时间要求的。</span><sup><span lang="EN-US">[1]</span></sup><span style="font-family: 宋体">一般搜索引擎都是使用一种叫网络爬虫（也叫网络爬虫和网络机器人）的程序来完成这项工作，下面我们讲介绍这样一个程序的原理以及其实现。</span><strong><span style="font-size: 14pt" lang="EN-US"><o :p></o></span></strong></p>
<h2><a name="_Toc177145979"></a><a name="_Toc145162662"></a><a name="_Toc145162390"></a><a name="_Toc143316175"></a><a name="_Toc143316079"></a><a name="_Toc143191338"></a><span><span><span><span><span><span lang="EN-US">2.2 </span></span></span></span></span></span><span><span><span><span><span><span><span style="font-family: 黑体">网络爬虫介绍</span></span></span></span></span></span></span></h2>
<p class="MsoNormal" style="margin: 6pt 0cm; text-align: left; text-indent: 21pt" align="left"><span style="font-family: 宋体">互联网其实就是一张大图，我们可以把每一个网页当作一个节点，把那些超链接（</span><span lang="EN-US">Hyperlinks)</span><span style="font-family: 宋体">当作连接网页的弧。网页中那些蓝色的、带有下划线的文字背后其实藏着对应的网址，当你点下去的的时候，浏览器是通过这些隐含的网址转到相应的网页中的。这些隐含在文字背后的网址称为</span><span lang="EN-US">“</span><span style="font-family: 宋体">超链接</span><span lang="EN-US">”</span><span style="font-family: 宋体">。有了超链接，我们可以从任何一个网页出发，用图的遍历算法，自动地访问到每一个网页并把它们存起来。完成这个功能的程序叫做网络爬虫，或者在一些文献中称为</span><span lang="EN-US">&#8220;</span><span style="font-family: 宋体">机器人</span><span lang="EN-US">&#8220;</span><span style="font-family: 宋体">（</span><span lang="EN-US">Robot)</span><span style="font-family: 宋体">。世界上第一个网络爬虫是由麻省理工学院</span><span lang="EN-US"> (MIT)</span><span style="font-family: 宋体">的学生马休</span><span lang="EN-US">.</span><span style="font-family: 宋体">格雷（</span><span lang="EN-US">Matthew Gray)</span><span style="font-family: 宋体">在</span><span lang="EN-US"> 1993 </span><span style="font-family: 宋体">年写成的。他给他的程序起了个名字叫</span><span lang="NO-BOK">“</span><span style="font-family: 宋体">互联网漫游者</span><span lang="NO-BOK">”(&#8220;www wanderer&#8221;)</span><span style="font-family: 宋体">。以后的网络爬虫越写越复杂，但原理是一样的。</span></p>
<p class="MsoNormal" style="margin: 6pt 0cm; text-align: left; text-indent: 21pt" align="left"><span style="font-family: 宋体">那么网络爬虫如何下载整个互联网。假定我们从一家门户网站的首页出发，先下载这个网页，然后通过分析这个网页，可以找到藏在它里面的所有超链接，也就等于知道了这家门户网站首页所直接连接的全部网页，诸如雅虎邮件、雅虎财经、雅虎新闻等等。我们接下来访问、下载并分析这家门户网站的邮件等网页，又能找到其他相连的网页。我们让计算机不停地做下去，就能下载整个的互联网。</span></p>
<h3><a name="_Toc177145980"></a><a name="_Toc145162663"></a><a name="_Toc145162391"></a><a name="_Toc143316176"></a><a name="_Toc143316080"></a><a name="_Toc143191339"></a><st1 :chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False" w:st="on"><span><span><span><span><span><span><span lang="EN-US">2.2.1</span></span></span></span></span></span></span></st1><span><span><span><span><span><span><span lang="EN-US"> </span></span></span></span></span></span></span><span><span><span><span><span><span><span style="font-family: 宋体">搜集的策略</span></span></span></span></span></span></span></h3>
<p class="MsoNormal" style="margin: 6pt 0cm; text-align: left; text-indent: 21pt" align="left"><span style="font-family: 宋体">最长见一种方式就是所谓的“爬行”。我们在遍历互联网这张大图时，既可以从某个网页节点（或节点集）开始深度优先遍历，也可以广度优先遍历。由图论知识我们可以知道，</span> <span style="font-family: 宋体">遍历时必须记录下已经访问过的节点（避免重复），在网络爬虫中，我们使用一个称为</span><span lang="EN-US">“<a href="http://www.ddvip.com/program/c/index3/70.htm" target="_blank"><span style="font-family: 宋体; color: windowtext; text-decoration: none" lang="EN-US"><span lang="EN-US">哈希表</span></span></a>”(Hash Table)</span><span style="font-family: 宋体">的列表而不是一个记事本纪录网页是否下载过的信息。下面我们要介绍的爬虫</span><span lang="EN-US">WebLech</span><span style="font-family: 宋体">就是采取这一策略。</span></p>
<p class="MsoNormal" style="margin: 6pt 0cm; text-align: left; text-indent: 21pt" align="left"><span style="font-family: 宋体">由于不可能抓取所有的网页，有些网络爬虫对一些不太重要的网站，设置了访问的层数。这也让有些网站上一部分网页能够在搜索引擎上搜索到，另外一部分不能被搜索到。对于网站设计者来说，扁平化的网站结构设计有助于搜索引擎抓取其更多的网页。</span></p>
<p class="MsoNormal" style="margin: 6pt 0cm; text-align: left" align="left"><span lang="EN-US"><span>       </span></span><span style="font-family: 宋体">另外一种可行的方式是使用最佳优先遍历循环的收集。首先我们应该有一个初始的种子</span><span lang="EN-US">URL</span><span style="font-family: 宋体">集合，爬虫爬取这些种子</span><span lang="EN-US">URL</span><span style="font-family: 宋体">后，解析出这些网页中的包括的</span><span lang="EN-US">URL</span><span style="font-family: 宋体">，并加入到系统维护的一个</span><span lang="EN-US">URL</span><span style="font-family: 宋体">集合</span><span lang="EN-US">S</span><span style="font-family: 宋体">中，然后再对</span><span lang="EN-US">S</span><span style="font-family: 宋体">中的链接进行分析（去重，判断起重要程度，标记其爬行周期等），再用某种算法优先生成一个待爬行的网页集合</span><span lang="EN-US">D</span><span style="font-family: 宋体">，再重复这一过程，循环爬取网页。下面我们要介绍的</span><span lang="EN-US">Nutch</span><span style="font-family: 宋体">爬虫就是采取这一策略。</span></p>
<p class="MsoNormal" style="margin: 6pt 0cm; text-align: left" align="left"><span lang="EN-US"><span>       </span></span><span style="font-family: 宋体">最后还有一种方式就是让网站拥有者主动向搜索引擎提交它们的网址，系统在一定时间内定向去爬取这些网站。一般来说该种策略都是与以上两种方法配合使用，目前常见的是广度优先和最佳优先方法。</span><span lang="EN-US"></span></p>
<h3><a name="_Toc177145981"></a><a name="_Toc145162664"></a><a name="_Toc145162392"></a><a name="_Toc143316177"></a><a name="_Toc143316081"></a><a name="_Toc143191340"></a><st1 :chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False" w:st="on"><span><span><span><span><span><span><span lang="EN-US">2.2.2</span></span></span></span></span></span></span></st1><span><span><span><span><span><span><span lang="EN-US"> </span></span></span></span></span></span></span><span><span><span><span><span><span><span style="font-family: 宋体">信息指纹在爬虫中的应用</span></span></span></span></span></span></span></h3>
<p class="MsoNormal" style="margin: 6pt 0cm; text-align: left" align="left"><span lang="EN-US"><span>       </span></span><span style="font-family: 宋体">在哈希表中以字符串的形式直接存储网址，既费内存空间，又浪费查找时间。现在的网址一般都较长，比如，如果在</span><span style="font-family: Verdana" lang="EN-US"> Google </span><span style="font-family: 宋体">或者百度在查找数学之美，对应的网址长度在一百个字符以上。下面是百度的链接</span><u><span style="font-size: 8.5pt; font-family: Verdana; color: blue" lang="EN-US"><a href="http://www.baidu.com/s?ie=gb2312&amp;bs=%CA%FD%D1%A7%D6%AE%C3%C0&amp;sr=&amp;z=&amp;cl=3&amp;f=8&amp;wd=%CE%E2%BE%FC+%CA%FD%D1%A7%D6%AE%C3%C0&amp;ct=0"><br />
http://www.baidu.com/s?ie=gb2312&amp;bs=%CA%FD%D1%A7%D6%AE%C3%C0&amp;sr=&amp;z=&amp;cl=3&amp;f=8&amp;wd=%CE%E2%BE%FC+%CA%FD%D1%A7%D6%AE%C3%C0&amp;ct=0</a><o :p></o></span></u></p>
<p class="MsoNormal" style="margin: 6pt 0cm; text-align: left; text-indent: 21pt" align="left"><span style="font-family: 宋体">假定网址的平均长度为一百个字符，那么存贮</span><span style="font-family: Verdana" lang="EN-US"> 200 </span><span style="font-family: 宋体">亿个网址本身至少需要</span><span style="font-family: Verdana" lang="EN-US"> 2 TB</span><span style="font-family: 宋体">，即两千</span><span style="font-family: Verdana" lang="EN-US"> GB </span><span style="font-family: 宋体">的容量，考虑到哈希表的存储效率一般只有</span><span style="font-family: Verdana" lang="EN-US"> 50%</span><span style="font-family: 宋体">，实际需要的内存在</span><span style="font-family: Verdana" lang="EN-US"> 4 TB</span><span style="font-family: 宋体">以上。即使把这些网址放到了计算机的内存中，由于网址长度不固定，以字符串的形式查找的效率会很低。因此，我们如果能够找到一个函数，将这</span><span style="font-family: Verdana" lang="EN-US"> 200 </span><span style="font-family: 宋体">亿个网址随机地映射到</span><span style="font-family: Verdana" lang="EN-US">128 </span><span style="font-family: 宋体">二进位即</span><span style="font-family: Verdana" lang="EN-US"> 16 </span><span style="font-family: 宋体">个字节的整数空间，比如将上面那个很长的字符串对应成一个如下的随机数</span><span style="font-family: Verdana" lang="EN-US">:<br />
893249432984398432980545454543</span><span style="font-family: 宋体">，这样每个网址只需要占用</span><span style="font-family: Verdana" lang="EN-US"> 16 </span><span style="font-family: 宋体">个字节而不是原来的一百个。这就能把存储网址的内存需求量降低到原来的</span><span style="font-family: Verdana" lang="EN-US"> 1/6</span><span style="font-family: 宋体">。这个</span><span style="font-family: Verdana" lang="EN-US">16 </span><span style="font-family: 宋体">个字节的随机数，就称做该网址的信息指纹（</span><span style="font-family: Verdana" lang="EN-US">Fingerprint)</span><span style="font-family: 宋体">。可以证明，只要产生随机数的算法足够好，可以保证几乎不可能有两个字符串的指纹相同，就如同不可能有两个人的指纹相同一样。由于指纹是固定的</span><span style="font-family: Verdana" lang="EN-US"> 128 </span><span style="font-family: 宋体">位整数，因此查找的计算量比字符串比较小得多。网络爬虫在下载网页时，它将访问过的网页的网址都变成一个个信息指纹，存到哈希表中，每当遇到一个新网址时，计算机就计算出它的指纹，然后比较该指纹是否已经在哈希表中，来决定是否下载这个网页。这种整数的查找比原来字符串查找</span><span style="font-family: Verdana" lang="EN-US">,</span><span style="font-family: 宋体">可以快几倍到几十倍。</span><sup><span style="font-family: Verdana" lang="EN-US">[2]</span></sup><span style="font-family: Verdana" lang="EN-US"><o :p></o></span></p>
<h2><a name="_Toc177145982"></a><a name="_Toc145162665"></a><a name="_Toc145162393"></a><a name="_Toc143316178"></a><a name="_Toc143316082"></a><a name="_Toc143191341"></a><span><span><span><span><span><span lang="EN-US">2.3 </span></span></span></span></span></span><span><span><span><span><span><span><span style="font-family: 黑体">网页的维护与更新</span></span></span></span></span></span></span></h2>
</p>
<p class="MsoNormal" style="margin: 6pt 0cm; text-align: left; text-indent: 21pt" align="left"><span lang="EN-US">1</span><span style="font-family: 宋体">）、批量搜集</span></p>
<p class="MsoNormal" style="margin: 6pt 0cm 6pt 21pt; text-align: left; text-indent: 21pt" align="left"><span style="font-family: 宋体">批量搜集，就是每次搜集替换上一次的内容。由于每次都是重新来一次，对度大规模搜索引擎来说，搜集的时间通常会花几周。这样做的好处是系统实现比较简单，主要缺点是“时新性”不高，还有重复收集带来的带宽消耗。</span></p>
<p class="MsoNormal" style="margin: 6pt 0cm; text-align: left; text-indent: 21pt" align="left"><span lang="EN-US">2</span><span style="font-family: 宋体">）、增量搜集</span></p>
<p class="MsoNormal" style="margin: 6pt 0cm; text-align: left; text-indent: 21pt" align="left"><span lang="EN-US"><span>       </span></span><span style="font-family: 宋体">增量搜集，开始时搜集一批，往后只是：</span><span lang="EN-US">1</span><span style="font-family: 宋体">、搜集新出现的网页；</span><span lang="EN-US">2</span><span style="font-family: 宋体">、搜集在上次搜集后有改变的网页；</span><span lang="EN-US">3</span><span style="font-family: 宋体">、删除上次搜集后不存在的网页</span></p>
<h2><a name="_Toc177145983"></a><a name="_Toc145162666"></a><a name="_Toc145162394"></a><a name="_Toc143316179"></a><a name="_Toc143316083"></a><a name="_Toc143191342"></a><span><span><span><span><span><span lang="EN-US">2.4 </span></span></span></span></span></span><span><span><span><span><span><span><span style="font-family: 黑体">爬虫程序设计中要注意的问题</span></span></span></span></span></span></span></h2>
<p class="MsoNormal" style="margin: 6pt 0cm; text-align: left; text-indent: 21pt" align="left"><span style="font-family: Wingdings" lang="EN-US"><span></span></span><span lang="EN-US"> </span><span style="font-family: 宋体">网站的速度</span></p>
<p class="MsoNormal" style="margin: 6pt 0cm; text-align: left; text-indent: 21pt" align="left"><span style="font-family: Wingdings" lang="EN-US"><span></span></span><span lang="EN-US"><span>  </span>DNS</span><span style="font-family: 宋体">缓存</span></p>
<p class="MsoNormal" style="margin: 6pt 0cm; text-align: left; text-indent: 21pt" align="left"><span style="font-family: Wingdings" lang="EN-US"><span></span></span><span lang="EN-US"> </span><span style="font-family: 宋体">不可到达的站点处理</span></p>
<p class="MsoNormal" style="margin: 6pt 0cm; text-align: left; text-indent: 21pt" align="left"><span style="font-family: Wingdings" lang="EN-US"><span></span></span><span lang="EN-US"> </span><span style="font-family: 宋体">网页的存储－网页的长期存储</span></p>
<p class="MsoNormal" style="margin: 6pt 0cm; text-align: left; text-indent: 21pt" align="left"><span style="font-family: Wingdings" lang="EN-US"><span></span></span><span lang="EN-US"> </span><span style="font-family: 宋体">搜集的效率－多进程或多线程，分布式搜集</span></p>
<p class="MsoNormal" style="margin: 6pt 0cm; text-align: left; text-indent: 21pt" align="left"><span style="font-family: Wingdings" lang="EN-US"><span></span></span><span lang="EN-US"> </span><span style="font-family: 宋体">避免重复收集</span></p>
<p class="MsoNormal" style="margin: 6pt 0cm; text-align: left; text-indent: 21pt" align="left"><span style="font-family: Wingdings" lang="EN-US"><span></span></span><span lang="EN-US"> </span><span style="font-family: 宋体">更新周期控制</span></p>
<p class="MsoNormal" style="margin: 6pt 0cm; text-align: left; text-indent: 21pt" align="left"><span style="font-family: Wingdings" lang="EN-US"><span></span></span><span lang="EN-US"> </span><span style="font-family: 宋体">搜集重要网页</span><strong><span lang="EN-US"><o :p></o></span></strong></p>
<h2><a name="_Toc177145984"></a><a name="_Toc145162667"></a><a name="_Toc145162395"></a><a name="_Toc143316180"></a><a name="_Toc143316084"></a><a name="_Toc143191343"></a><span><span><span><span><span><span lang="EN-US">2.5</span></span></span></span></span></span><span><span><span><span lang="EN-US"> </span></span></span></span><span><span><span><span style="font-family: 黑体">网站与网络爬虫</span></span></span></span><span></span><span></span><span></span><span style="font-size: 10pt; line-height: 173%" lang="EN-US"><o :p></o></span></h2>
<p class="MsoNormal" style="text-indent: 21pt"><span style="font-family: 宋体">网络爬虫需要抓取网页，不同于一般的访问，如果控制不好，则会引起网站服务器负担过重。</span><span lang="EN-US">2005</span><span style="font-family: 宋体">年</span><span lang="EN-US">4</span><span style="font-family: 宋体">月，淘宝网（</span><span lang="EN-US">http://www.taobao.com</span><span style="font-family: 宋体">）就因为雅虎搜索引擎的网络爬虫抓取其数据引起淘宝网服务器的不稳定。网站是否就无法和网络爬虫交流呢？其实不然，有多种方法可以让网站和网络爬虫进行交流。一方面让网站管理员了解网络爬虫都来自哪儿，做了些什么，另一方面也告诉网络爬虫哪些网页不应该抓取，哪些网页应该更新。</span></p>
<p class="MsoNormal" style="text-indent: 21pt"><span class="Char"><span style="font-size: 12pt">每个网络爬虫都有自 己的名字，在抓取网页的时候，都会向网站标明自己的身份。网络爬虫在抓取网页的时候会发送一个请求，这个请求中就有一个字段为<span lang="EN-US">User</span>－<span lang="EN-US">agent</span>，用于标识此网络爬虫的身份。例如<span lang="EN-US">Google</span>网络爬虫的标识为<span lang="EN-US">GoogleBot</span>，<span lang="EN-US">Baidu</span>网络爬虫的标识为<span lang="EN-US">BaiDuSpider</span>，<span lang="EN-US">Yahoo</span>网络爬虫的 标识为<span lang="EN-US">Inktomi Slurp</span>。如果在网站上有访问日志记录，网站管理员就能知道，哪些搜索引擎的网络爬虫过来过，什么时候过来的，以及读了多少数据等等。如果网站管理员发现某个爬虫有问题，就通过其标识来和其所有者联系。下面是博客中国（<span lang="EN-US">http://www.blogchina.com</span>）<st1 :chsdate year="2004" month="5" day="15" islunardate="False" isrocdate="False" w:st="on"><span lang="EN-US">2004</span>年<span lang="EN-US">5</span>月<span lang="EN-US">15</span>日</st1>的搜索引擎访问日志：网络爬虫进入一个网站，一般会访问一个特殊的文本文件<span lang="EN-US">Robots.txt</span>，这个文件一般放在网站服务器的根目录下，如：<span lang="EN-US"> http://www.blogchina.com/robots.txt</span>。网站管理员可以通过<span lang="EN-US">robots.txt</span>来定义哪些目录网络爬虫不能访问，或 者哪些目录对于某些特定的网络爬虫不能访问。例如有些网站的可执行文件目录和临时文件目录不希望被搜索引擎搜索到，那么网站管理员就可以把这些目录定义为 拒绝访问目录。<span lang="EN-US">Robots.txt</span>语法很简单，例如如果对目录没有任何限制，可以用以下两行来描述：<span lang="EN-US"><o :p></o></span></span></span></p>
<p class="MsoNormal" style="text-indent: 21pt"><span lang="EN-US">User-agent: *</span></p>
<p class="MsoNormal" style="text-indent: 21pt"><span lang="EN-US">Disallow: </span></p>
<p class="MsoNormal" style="text-indent: 21pt"><span style="font-family: 宋体">当然，</span><span lang="EN-US">Robots.txt</span><span style="font-family: 宋体">只是一个协议，如果网络爬虫的设计者不遵循这个协议，网站管理员也无法阻止网络爬虫对于某些页面的访问，但一般的网络爬虫都会遵循这些协议，而且网站管理员还可以通过其它方式来拒绝网络爬虫对某些网页的抓取。</span></p>
<p class="MsoNormal" style="text-indent: 21pt"><span style="font-family: 宋体">网络爬虫在下载网页的时候，会去识别网页的</span><span lang="EN-US">HTML</span><span style="font-family: 宋体">代码，在其代码的部分，会有</span><span lang="EN-US">META</span><span style="font-family: 宋体">标识。通过这些标识，可以告诉网络爬虫本网页是否需要被抓取，还可以告诉网络爬虫本网页中的链接是否需要被继续跟踪。例如：表示本网页不需要被抓取，但是网页内的链接需要被跟踪。</span></p>
<p class="MsoNormal" style="text-indent: 21pt"><span style="font-family: 宋体">关于</span><span lang="EN-US">Robots.txt</span><span style="font-family: 宋体">的语法和</span><span lang="EN-US">META Tag</span><span style="font-family: 宋体">语法，有兴趣的读者查看文献</span><span lang="EN-US">[4] </span><span style="font-family: 宋体">现在一般的网站都希望搜索引擎能更全面的抓取自己网站的网页，因为这样可以让更多的访问者能通过搜索引擎找到此网站。为了让本网站的网页更全面被抓取到，网站管理员可以建立一个网站地图，即</span><span lang="EN-US">Site Map</span><span style="font-family: 宋体">。许多网络爬虫会把</span><span lang="EN-US">sitemap.htm</span><span style="font-family: 宋体">文件作为一个网站网页爬取的入口，网站管理员可以把网站内部所有网页的链接放在这个文件里面，那么网络蜘蛛可以很方便的把整个网站抓取下来，避免遗漏某些网页，也会减小对网站服务器的负担。</span><span style="font-size: 10pt" lang="EN-US"><o :p></o></span></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.zye.me/2008/03/22173.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Nutch/Lucene的存取机制与结构分析（zhuan）</title>
		<link>http://blog.zye.me/2008/02/5162.html</link>
		<comments>http://blog.zye.me/2008/02/5162.html#comments</comments>
		<pubDate>Thu, 31 Jan 2008 16:07:00 +0000</pubDate>
		<dc:creator>yezheng</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[lucene]]></category>
		<category><![CDATA[Nutch]]></category>
		<category><![CDATA[信息检索]]></category>
		<category><![CDATA[存储]]></category>

		<guid isPermaLink="false">http://www.5yiso.cn/2008/02/5162.html</guid>
		<description><![CDATA[Nutch/Lucene的存取机制与结构分析 2007-12-04 00:08 http://searcher.org.cn/html/lucene/20071011/291.htmlTEAM : I.S.T.OAUTHOR : SUMMER转载需注明出处,未经作者同意,不得用于任何形式的商业活动主题：解决nutch的segmens的拆分与nutch crawl的重载(重新构建)问题主要内容一、Lucene的索引机制与索引文件结构二、Nutch的爬虫分析与文件结构分析三、Nutch segments的拆分索引实现方案一、Lucene的索引机制与索引文件结构1、Lucene的索引机制2、Lucene文件格式_0.f0，_0.f1 文档文件_0.fnm域集合信息文件0.frq; 0.prx位置与频率文件*.fdt和*.fdx构成了域值/域索引文件segment1.nrm标准化因子- segments索引块文件- deletable保存已删除文件的记录-*.tii和*.tis构成了项字典-lock(无扩展名) 用来控制读写的同步二、Nutch的爬虫分析Nutch segments分析Nutch 的文件结构分析三、Nutch segments的拆分解决方案Lucene采取的是倒排索引结构存储结构建立反向索引。对爬取回来的信息通过Lucene Analyzer分词器提取出索引项以相关信息，如索引项的出现频率。然后分词器把这些信息写到索引文件中。其核心在于Lucene的索引文件结构（倒排索引结构），首先理解&#8221;反向索引&#8221;的概念。反向索引是一种以索引项为中心来组织文档的方式，每个索引项指向一个文档序列，这个序列中的文档都包含该索引项。相反，在正向索引中，文档占据了中心的位置，每个文档指向了一个它所包含的索引项的序列。你可以利用反向索引轻松的找到那些文档包含了特定的索引项。 Lucene使用了反向索引作为其基本的索引结构。Lucene索引index由若干段(segment)组成,每一段由若干的文档(document)组成,每一个文档由若干的域(field)组成,每一个域由若干的项(term)组成。项是最小的索引概念单位,它直接代表了一个字符串以及其在文件中的位置、出现次数等信息。域是一个关联的元组,由一个域名和一个域值组成,域名是一个字串,域值是一个项,比如将&#8221;标题&#8221;和实际标题的项组成的域。文档是提取了某个文件中的所有信息之后的结果,这些组成了段,或者称为一个子索引。子索引可以组合为索引,也可以合并为一个新的包含了所有合并项内部元素的子索引。Lucene采用倒排索引结构索引被处理为一个目录(文件夹),其中含有的所有文件即为其内容,这些文件按照所属的段不同分组存放,同组的文件拥有相同的文件名,不同的扩展名。此外还有三个文件,分别用来保存所有的段的记录、保存已删除文件的记录和控制读写的同步,它们分别是segments, deletable和lock文件,都没有扩展名。每个段包含一组文件,它们的文件扩展名不同,但是文件名均为记录在文件segments中段的名字每个 段的文件中。主要记录了两大类的信息：域集合与项集合。由于索引信息是静态存储的,域集合与项集合中的文件组采用了一种类似的存储办法：一个小型的索引文件,运行时载 入内存；一个对应于索引文件的实际信息文件,可以按照索引中指示的偏移量随机访问；索引文件与信息文件在记录的排列顺序上存在隐式的对应关系,即索引文件中按照&#8221;索引项1、索引项2…&#8221;排列,则信息文件则也按照&#8221;信息项1、信息项2…&#8221;排列。域集合与项集合之间则通过域的在域记录文件(比如segment1.fnm)中所记录的域记录号维持对应关系,segment1.fdx与segment1.tii中就是通过这种方式保持联系。这样,域集合和项集合不仅仅联系起来,而且其中的文件之间也相互联系起来。这样,整个段的索引信息就通过这些文档有机的组成。Lucene所采用的索引文件格式。基本上而言,它是一个倒排索引。,但是Lucene在文件的安排上做了一些努力,比如使用索引/信息文件的方式,从文件安排的形式上提高查找的效率。(_0.f0，_0.f1 文档文件)文档号（Document Number）编号方式：Lucene用一个整形（interger）的文档号来指示文档。第一个被加入到索引的文档就是0号，顺序加入的文档将得到一个由前一个号码递增而来的号码。标准的技术是根据每一段号码多少为每一段分配一个段号。将段内文档号转换到段外时，加上段号。将某段外的文档号转换到段内时，根据每段中可能的转换后号码范围来判断文档属于那一段，并减调这一段的段号。例如有两个含5个文档的段合并，那么第一段的段号就是0，第二段段号5。第二段中的第三个文档，在段外的号码就是8。(_0.fnm域集合信息)索引中的文档由一个或者多个域组成，这个文件包含了每个索引块中的域的信息。所有域名都存储在这个文件的域集合信息中文件中的域根据它们的次序编号。因此域0是文件中的第一个域，域1是接下来的 ，这个和文档号的编号方式相同。项频数 .frq文件包含每一项的文档的列表，还有该项在对应文档中出现的频数。项位置 .prx文件包含了某文档中某项出现的位置信息的列表。(0.frq; 0.prx位置与频率文件)项频数 .frq文件包含每一项的文档的列表，还有该项在对应文档中出现的频数。项位置 .prx文件包含了某文档中某项出现的位置信息的列表。(*.fdt和*.fdx构成了域值/域索引文件)域值存储表（Stored Fields）域值存储表使用域索引 .fdx与域值 .fdt两个文件表示。(segment1.nrm标准化因子).nrm文件包含了每个文档的标准化因子，其主要用在评分排序机制中。(segments索引块文件)Segments索引块又称segment段，这个文件包含了索引中的索引块信息，这个文件包含了每个索引块的名字以及大小等信息。(deletable保存已删除文件的记录)deletetable的文件包含了索引不再使用的文件的名字，这些文件可能并没有被实际的删除。.del文件是可选的，只有在某段中存在删除操作后才存在。(*.tii和*.tis构成了项字典 )项字典用项信息（.tis文件）和项信息索引（.tii文件） 两个文件表示。项信息索引（.tii文件）每个项信息索引文件包含.tis文件中的128个条目，依照条目在.tis文件中的顺序。这样设计是为了一次将索引信息读入内存能，然后使用它来随机的访问.tis文件。这个文件的结构和.tis文件非常类似，只在每个条目记录上增加了一个变量IndexDelta。(lock(无扩展名) 用来控制读写的同步)主要是用于防止进程在使用索引时，被其它文件操作修改索引。Nutch的爬虫分析1. 创建一个新的WebDb (admin db -create)；2. 将抓取起始URLs写入WebDB中 (inject)；3. 根据WebDB生成fetchlist并写入相应的segment(generate)；4. 根据fetchlist中的URL抓取网页 (fetch).；5. 根据抓取网页更新WebDb (updatedb).通过3―5这个循环就可以实现Nutch的深度抓取。Nutch segments分析对于segments/segment/下的文件以后分析）结构，在nutch爬虫运行后在webdb文件夹下一共产生如下五个文件：linksByMD5 linksByURL pagesByMD5 pagesByURL stats其中：Stats文件用来存放爬虫爬行后的版本信息，处理网页数量，连接数量；pagesByURL等其余四个文件夹下均有两个文件DDindex和data，其中data文件用来存放有序的key／value对，排序是通过选择不同的key和comparator来改变的，当然里面会有一些其他信息， 比如在pagesByURL中，就每隔一定长度的key／va lue对放入一个用来定位的信息（syn）；index文件用来存放索引，但是这个索引文件也是一个有序的，这个里面存放的是key和位置信息，但是在data文件中出现的key在这个index中都能找到的，它为了节省空间，实施了每隔一段key／value建立一条索引，这样在查找的时候，因为是有序的，所以采用２分查找，如果找不到，则返回最后时候的最小的位置信息，这个位置离我们要找的目标是相当近的，然后在data文件的这个位置向前找就可以很快找到了！另外，nutch维持这个webdb的方式是，在填加，删除网页或者连接时，并不是直接向这个webdb中填加网页或者连接，而是在WebDBWriter <a href='http://blog.zye.me/2008/02/5162.html'>[...]</a>]]></description>
			<content:encoded><![CDATA[<table cellpadding="0" width="100%" align="center" cellspacing="1" border="0">
<tbody>
<tr>
<td class="post_hd">
<h3>Nutch/Lucene的存取机制与结构分析</h3>
<p><span>2007-12-04 00:08</span></td>
<p><!--// title --></tr>
<tr><!-- content --></p>
<td>
<div class="content">http://searcher.org.cn/html/lucene/20071011/291.html<br />TEAM : I.S.T.O<br />AUTHOR : SUMMER<br />转载需注明出处,未经作者同意,不得用于任何形式的商业活动<br />主题：解决nutch的segmens的拆分与nutch crawl的重载(重新构建)问题<br />主要内容<br />一、Lucene的索引机制与索引文件结构<br />二、Nutch的爬虫分析与文件结构分析<br />三、Nutch segments的拆分索引实现方案<br />一、Lucene的索引机制与索引文件结构<br />1、Lucene的索引机制<br />2、Lucene文件格式<br />_0.f0，_0.f1 文档文件<br />_0.fnm域集合信息文件<br />0.frq; 0.prx位置与频率文件<br />*.fdt和*.fdx构成了域值/域索引文件<br />segment1.nrm标准化因子<br />- segments索引块文件<br />- deletable保存已删除文件的记录<br />-*.tii和*.tis构成了项字典<br />-lock(无扩展名) 用来控制读写的同步<br />二、Nutch的爬虫分析<br />Nutch segments分析<br />Nutch 的文件结构分析<br />三、Nutch segments的拆分解决方案<br />Lucene采取的是倒排索引结构存储结构建立反向索引。对爬取回来的信息通过Lucene Analyzer分词器提取出索引项以相关信息，如索引项的出现频率。然后分词器把这些信息写到索引文件中。其核心在于Lucene的索引文件结构（倒排索引结构），首先理解&#8221;反向索引&#8221;的概念。<br />反向索引是一种以索引项为中心来组织文档的方式，每个索引项指向一个文档序列，这个序列中的文档都包含该索引项。相反，在正向索引中，文档占据了中心的位置，每个文档指向了一个它所包含的索引项的序列。你可以利用反向索引轻松的找到那些文档包含了特定的索引项。 Lucene使用了反向索引作为其基本的索引结构。<br />Lucene索引index由若干段(segment)组成,每一段由若干的文档(document)组成,每一个文档由若干的域(field)组成,每一个域由若干的项(term)组成。项是最小的索引概念单位,它直接代表了一个字符串以及其在文件中的位置、出现次数等信息。域是一个关联的元组,由一个域名和一个域值组成,域名是一个字串,域值是一个项,比如将&#8221;标题&#8221;和实际标题的项组成的域。<br />文档是提取了某个文件中的所有信息之后的结果,这些组成了段,或者称为一个子索引。子索引可以组合为索引,也可以合并为一个新的包含了所有合并项内部元素的子索引。<br />Lucene采用倒排索引结构索引被处理为一个目录(文件夹),其中含有的所有文件即为其内容,这些文件按照所属的段不同分组存放,同组的文件拥有相同的文件名,不同的扩展名。此外还有三个文件,分别用来保存所有的段的记录、保存已删除文件的记录和控制读写的同步,它们分别是segments, deletable和lock文件,都没有扩展名。<br />每个段包含一组文件,它们的文件扩展名不同,但是文件名均为记录在文件segments中段的名字每个 段的文件中。<br />主要记录了两大类的信息：域集合与项集合。由于索引信息是静态存储的,域集合与项集合中的文件组采用了一种类似的存储办法：一个小型的索引文件,运行时载 入内存；一个对应于索引文件的实际信息文件,可以按照索引中指示的偏移量随机访问；索引文件与信息文件在记录的排列顺序上存在隐式的对应关系,即索引文件中按照&#8221;索引项<br />1、索引项2…&#8221;排列,则信息文件则也按照&#8221;信息项1、信息项2…&#8221;排列。域集合与项集合之间则通过域的在域记录文件(比如segment1.fnm)中所记录的域记录号维持对应关系,segment1.fdx与segment1.tii中就是通过这种方式保持联系。这样,域集合和项集合不仅仅联系起来,而且其中的文件之间也相互联系起来。这样,整个段的索引信息<br />就通过这些文档有机的组成。<br />Lucene所采用的索引文件格式。基本上而言,它是一个倒排索引。,但是Lucene在文件的安排上做了一些努力,比如使用索引/信息文件的方式,从文件安排的形式上提高查找的效率。<br />(_0.f0，_0.f1 文档文件)<br />文档号（Document Number）<br />编号方式：Lucene用一个整形（interger）的文档号来指示文档。第一个被加入到索引的文档就是0号，顺序加入的文档将得到一个由前一个号码递增而来的号码。<br />标准的技术是根据每一段号码多少为每一段分配一个段号。将段内文档号转换到段外时，加上段号。将某段外的文档号转换到段内时，根据每段中可能的转换后号码范围来判断文档属于那一段，并减调这一段的段号。例如有两个含5个文档的段合并，那么第一段的段号就是0，第二段段号5。第二段中的第三个文档，在段外的号码就是8。<br />(_0.fnm域集合信息)<br />索引中的文档由一个或者多个域组成，这个文件包含了每个索引块中的域的信息。<br />所有域名都存储在这个文件的域集合信息中文件中的域根据它们的次序编号。因此域0是文件中的第一个域，域1是接下来的 ，这个和文档号的编号方式相同。<br />项频数 .frq文件包含每一项的文档的列表，还有该项在对应文档中出现的频数。<br />项位置 .prx文件包含了某文档中某项出现的位置信息的列表。<br />(0.frq; 0.prx位置与频率文件)<br />项频数 .frq文件包含每一项的文档的列表，还有该项在对应文档中出现的频数。<br />项位置 .prx文件包含了某文档中某项出现的位置信息的列表。<br />(*.fdt和*.fdx构成了域值/域索引文件)<br />域值存储表（Stored Fields）域值存储表使用域索引 .fdx与域值 .fdt两个文件表示。<br />(segment1.nrm标准化因子)<br />.nrm文件包含了每个文档的标准化因子，其主要用在评分排序机制中。<br />(segments索引块文件)<br />Segments索引块又称segment段，这个文件包含了索引中的索引块信息，这个文件包含了每个索引块的名字以及大小等信息。<br />(deletable保存已删除文件的记录)<br />deletetable的文件包含了索引不再使用的文件的名字，这些文件可能并没有被实际的删除。<br />.del文件是可选的，只有在某段中存在删除操作后才存在。<br />(*.tii和*.tis构成了项字典 )<br />项字典用项信息（.tis文件）和项信息索引（.tii文件） 两个文件表示。<br />项信息索引（.tii文件）<br />每个项信息索引文件包含.tis文件中的128个条目，依照条目在.tis文件中的顺序。这样设计是为了一次将索引信息读入内存能，然后使用它来随机的访问.tis文件。这个文件的结构和.tis文件非常类似，只在每个条目记录上增加了一个变量IndexDelta。<br />(lock(无扩展名) 用来控制读写的同步)<br />主要是用于防止进程在使用索引时，被其它文件操作修改索引。<br />Nutch的爬虫分析<br />1. 创建一个新的WebDb (admin db -create)；<br />2. 将抓取起始URLs写入WebDB中 (inject)；<br />3. 根据WebDB生成fetchlist并写入相应的segment(generate)；<br />4. 根据fetchlist中的URL抓取网页 (fetch).；<br />5. 根据抓取网页更新WebDb (updatedb).<br />通过3―5这个循环就可以实现Nutch的深度抓取。<br />Nutch segments分析<br />对于segments/segment/下的文件以后分析）结构，在nutch爬虫运行后在webdb文件夹下一共产生如下五个文件：<br />linksByMD5 linksByURL pagesByMD5 pagesByURL stats<br />其中：<br />Stats文件用来存放爬虫爬行后的版本信息，处理网页数量，连接数量；<br />pagesByURL等其余四个文件夹下均有两个文件DDindex和data，其中data文件用来存放有序的key／value对，排序是通过选择不同的key和comparator来改变的，当然里面会有一些其他信息， 比如在pagesByURL中，就每隔一定长度的key／va<br />
lue对放入一个用来定位的信息（syn）；index文件用来存放索引，但是这个索引文件也是一个有序的，这个里面存放的是key和位置信息，但是在data文件中出现的key在这个index中都能找到的，它为了节省空间，实施了每隔一段key／value建立一条索引，这样在查找的时候，因为是有序的，所以采用２分查找，如果找不到，则返回最后时候的最小的位置信息，这个位置离我们要找的目标是相当近的，然后在data文件的这个位置向前找就可以很快找到了！<br />另外，nutch维持这个webdb的方式是，在填加，删除网页或者连接时，并不是直接向这个webdb中填加网页或者连接，而是在WebDBWriter 中的内部类PageInstructionWriter或者LinkInstructionWriter中填加一条对网页操作的命令，然后最后对存放的命令进行排序去重，最后将这个命令与现有的webdb中存放的网页数据进行合并；<br />Fetcher类是进行实际网页抓取时候运行的类，爬虫产生的文件或文件夹都是由这个类产生的， Nutch提供了选项D是否对抓回的网页进行parse（解析），如果这个选项设置为false，将没有parseddata和parsedtext这两个文件夹。<br />nutch爬虫产生的文件几乎都是key/value对，不同的只是key/value的种类和值不同，爬虫运行后在segments文件夹的子文件夹产生<br />如下几个文件夹： content fetcher fetchlist index parse_data parse_text<br />其中content文件夹存放的内容对应protocol包中的content类；fetcher文件夹存放的内容对应的是fetcher包中的FetcherOutput类；fetchlist对应pagedb包总的fetchlist类；parse_data和parse_text分别对应parse包中的ParseData和ParseText类；<br />(Nutch segments)<br />如上面Nutch segments分析所述，对Nutch的segments有了清楚的了解。<br />提示点：Lucene 中的segment和Nutch中的不同，Lucene中的segment是索引index的一部分，但是Nutch中的segment只是WebDB中 各个部分网页的内容和索引，最后通过其生成的index跟这些segment已经毫无关系了。</p>
<p>(Nutch crawldb)<br />其主要是segments段的crawl_fetch与parse_data的数据。并利用其crawldb循环fetch 生成segments深度抓取。<br />(Nutch linkdb)<br />其存放的为segments所有段的crawl_fetch数据，其URL列表。<br />(Nutch indexes)<br />由Nutch crawldb,linkdb segments生成indexes索引集。其存放结构是结合Lucene的索引机制存放的。<br />(Nutch index)<br />由nutch indexes 单独提取索引信息。其索引结果可利用Luke进行索引结果查询。<br />Nutch 在tomcat下使用的资源主要是segments,linkdb,indexes。<br />nutch segments的拆分解决方案<br />从上面的分析可以得出Nutch的爬虫数据都以segments段存放信息。<br />我们只需要对segments进行slice拆分，就可以重新构造crawl数据源结构。<br />然后再利用nutch的相应操作完成对nutch segments的拆分与重构。</div>
</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://blog.zye.me/2008/02/5162.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

