<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[博客 --- 北京线点科技有限公司]]></title>
<link>http://www.xd-tech.com/blog/</link>
<description><![CDATA[致力于以数据和搜索为核心的业务 （全文检索、舆情监控、搜索引擎产品）]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog2 v2.4]]></copyright>
<webMaster><![CDATA[webmaster@xd-tech.com(线点科技)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>博客 --- 北京线点科技有限公司</title> 
	<url>http://www.xd-tech.com/blog/images/logos.gif</url> 
	<link>http://www.xd-tech.com/blog/</link> 
	<description>博客 --- 北京线点科技有限公司</description> 
</image>

			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=145</link>
			<title><![CDATA[线点全文检索产品适用的客户]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[全文检索]]></category>
			<pubDate>Fri,17 Feb 2012 14:51:36 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=145</guid>	
		<description><![CDATA[线点全文检索XDFullSearch&nbsp;用的是搜索引擎的技术，它与通用的数据库系统在设计和应用上存在差别。<br/>XDFullSearch不只是一个搜索引擎，它是一个解决方案，用来解决用户在数据应用中的一些问题。并且为这些问题提供一个有效地、快捷的、低成本的方案。<br/>相对通用数据库，XDFullSearch有以下功能特色：<br/>一、&#160;&#160;&#160;&#160;支持各种数据库，数据源的跨库检索。<br/>通常的数据库全文检索，都只是仅限于自身数据库的数据检索，比如oracle数据库，它无法直接去检索mysql或是sqlserver的数据库数据，包括不同服务器上的oracle数据库，要整合进行检索也是不容易的。加上不同数据库的字段也存在区别。<br/>XDFullSearch的目的就是整合各类数据库的资源，能够处理不同数据库的数据类型，并把它们归到自己的检索引擎中，统一检索。<br/>二、&#160;&#160;&#160;&#160;支持各种的文本解析。<br/>通用的数据库技术，只是对结构化的数据进行存储，而对于存储在文件服务器上的word文档，excle，pdf文档，等等无结构的文本文档，并没有很好地处理方式。<br/>XDFullSearch能够自动去扫描这些文件，并进行解析，用户也能够从中检索到自己想要的结果。<br/>三、&#160;&#160;&#160;&#160;灵活的定制开发<br/>XDFullSearch&nbsp;由于自有代码，可以进行灵活的定制开发，例如，数据可能来源于企业自身的业务系统中的数据，那么我们就可以开发一个接口，与业务系统接口对接，获取数据源。这种，通用数据库是实现不了的。<br/>四、&#160;&#160;&#160;&#160;快捷的实施<br/>XDFullSearch的实施效率，远远高于自己建立数据库，自己编写应用代码，自己编写接口。因为这些在XDFullSearch中都是已经预先有的代码或是接口。<br/>五、&#160;&#160;&#160;&#160;高效率带来的低成本<br/>XDFullSearch&nbsp;一个节点可以对500万篇的文档进行检索，效率在1-5秒钟。而如果使用sqlserver、或是oracle来实现，可能单个普通版本的软件是满足不了这个性能要求的。<br/>如果用户有以上一点或几点的要求，那么可以选用XDFullSearch产品作为解决方案。<br/>也正是因为有XDFullSearch这样的产品存在，使得国人也有可能不去花费昂贵的资金给国外厂商，也能享受到高科技带来的便利。<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=144</link>
			<title><![CDATA[广告的目的不是促销（4）]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Fri,25 Mar 2011 15:15:29 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=144</guid>	
		<description><![CDATA[二、广告的沟通手段&nbsp;<br/>1、&nbsp;广告不是说服、不是打动&nbsp;<br/>无论是广告人或广告主，都一心想着通过对消费者的说服将产品推销出去，然而，却是这些意欲强加给消费者的观念和做法，加上广告无休止的重复，引发了人们普遍的反感。广告在没有开始说服之前，就把消费者看成了被说服的对象，在这种对立的状态下，你愈是强硬推销，愈是适得其反。这样的广告无论你说什么都象在告诉消费说，你好好坐在那里一分钟，看我怎么说服你来买这个产品，其效果可想而知。为此，黄文博先生说：“当一位高明的传教士向群众布道时，他不会试图说服大家对神产生信仰，那将使他与听众处于一种对立状态，愈强势的说服，会激起愈强力的抗拒。即陷入单向传播的死胡同。”&nbsp;<br/>黄先生认为关键在于打动，而非说服。其实，打动和说服并没有本质上的区别，“说服”采取的是由上而下的高压姿态；“打动”则是一种由下而上的劝服。这两种极端的态度，都不约而同地站在消费者的对立面，把消费者视为停止不变的固执的个体。同样容易陷入“单向传播的死胡同”。&nbsp;<br/>一般情况下，我们对一个广告进行分析时，都会不自觉地从广告或广告人的角度作判断，能看到的、或希望看到的大都是广告内含的高明的说服或打动技巧。而往往容易忽视被“说服”和“打动”的一方——受众。消费者真的被说服或打动了吗？其实未必。一件事物，比如面对一栋楼房，假如你只是站在楼的一面进行观察，就只能通过经验和推理判断说这是一栋楼房，尽管映入你眼帘的只是一堵平面的墙。但如果你到楼房的四周看看，从不同的角度加以观察。情况就不同了，你将会看到一栋立体的、真实的楼房。也或许会发现这其实只是一堵用来拍戏用的平面的楼房布景。我们不得不这么做，因为受众正在楼房的另一边呢。&nbsp;<br/>2、&nbsp;广告不是获得认同&nbsp;<br/>认同和“说服”以及“打动”不同的地方在于，广告把自己放到了一个与受众水平相当的位置上，对立的成分减少了，但自我意识也被强化了，孤立的状态也更加明显，尽管它看上去亲和了许多。&nbsp;<br/>“认同”意味着什么呢？意思是你向对方表明了你对某一事物的观念和看法。比如速溶咖啡刚推出市场时，广告说它是省时省事的，你说家庭主妇们认同这种观念吗，事实上这种观念无可反驳，速溶咖啡和传统咖啡相比的确省时省事。但这并不意味着她就必须和广告持一样的观念，以同样的态度和行动去回应这种观念。&nbsp;<br/>观念是最多样化和难以捉摸的东西，它容易获得认同，却很难引发一致的行为。我们大部分人都能够认同别人对婚姻和爱情的看法和观念，却也坚持自己的观念，甚至固执得很。&nbsp;<br/>3、&nbsp;不是共鸣而是反应&nbsp;<br/>共鸣通常是针对情感内容而言的，它更接近于传播的心理学基础。但在观念上还未能摆脱“说服”的影响。“情感广告的说服作用具体体现在，积极性的情感反应会导致对广告中特定商标（商品）的积极态度。也就是说，一则令人兴奋或充满亲切感的广告会使受众对该广告的特定商标（产品）产生好感。”（引自《广告心理》）&nbsp;<br/>共鸣，即广告所描述的情感性质和受众的个体情感体验之间具有共同的特征。广告的情节和体现的情感具有一定的完整性，而受众在这一方面的情感体验也是相对完整的，这是产生共鸣的基础。从结构上看，这两个方面是并置的，其情感体验的结果并没有发生质和量的改变，是一加一等于一的模式。因此，我们才说它是共鸣性质的。我们一心一意追求广告效力最大化，但“共鸣”是具有局限性的，“共鸣”在人类的情感体验中是温和的、缺乏爆炸力的。&nbsp;<br/>在广告心理学方面的研究，通常把广告作品本身等同于生活当中的一般事物、一般情感，&nbsp;<br/>在引发情感反应的作用力上是一样的。其实不然，广告作品通常是某种情感浓缩的典型，而生活中的一般事物、一般情感却是有待激发的零散元件。&nbsp;<br/>“在广告画面中，突出一位受人爱戴的金牌获得者在观众的一片欢呼声中接受奖杯的情景。这能够使观看者受到感染，产生共鸣。”（引自《广告心理》）在这样一个广告中，情节所体现的情感是完整的、具典型性的，它和受众的民族自豪感、荣誉感是并置的，其情感体验模式是共鸣性的，信息的传递具有一定的新闻告知性质。因而不具有深刻的体验性和震撼性。这和一个观众收看完整的比赛过程，随着运动员过关斩将、历尽曲折，最后登上领奖台，听着国歌奏响，看到运动员眼中幸福的泪光。其情感体验的强度是完全不同的。这样的情感体验是试剂式的，是反应性的。它是由这些连续的、不经刻意编排的非典型性情节所引发的，而观众在观看比赛时并不把这种情感体验当成观看的目的，他更多是冲着人类的竞技水平和精神而来的，结果却引发了他的民族自豪感和集体荣誉感，致使他也激动得满眼泪光。就象一种化学物质滴入另一种物质引起的反应一样，其产生的情感体验强度更激烈、持久和深刻。这就是情感共鸣和情感反应的差异。共鸣是情感反应的一种形式，但情感反应并不等同于情感共鸣，它们之间存在着质和量上的根本区别。&nbsp;<br/>在日常生活中，我们对某一事物的认识，可以通过老师的教导或书本等途径而得到。他们相当直截了当地告诉你某一事物的真实面貌，你只需要去接受就可以了。但如果你是运用自己的智慧和潜心研究而发现某一事物的真相，所获得的情感体验程度要比被动接受要更加震撼，甚至可能因为激动而出现手舞足蹈、声音发颤、血压飙升等生理反应。“反应”的优势是明显的，“共鸣”把受众视为相对被动，“反应”则强调受众的参与度、主动性和积极性；“共鸣”引发的的情感体验是相对静止的，“反应”则是充满运动的、爆炸性的。“共鸣”只是共鸣，反应则可能产生惊人的、意想不到的效果。&nbsp;<br/>至此，我们要给出的报告是——广告所应作出的所有努力是——引发受众的情感反应。&nbsp;<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=143</link>
			<title><![CDATA[广告的目的不是促销（3）]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Tue,08 Mar 2011 14:02:23 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=143</guid>	
		<description><![CDATA[广告目的的性质&nbsp;<br/>　　一个政治家和一个将军的目的和行事方式是完全不同的，广告主和广告代理商也应该明确这种区别。一个政治家考虑的是政治权力或国家版图的扩张，或者是某种明显的战略优势的建立。而一个将军则考虑如何&nbsp;“使对手处于一种比接受我方的要求所做的牺牲还更不利的处境中”，那就是完全解除对手的武装。因此，广告主实在不适宜过度干涉广告代理商的广告决策，我们可以试想一个政治家为一个将军排兵布阵大都会陷入怎样的可怕局面。在广告中最经常出现的就是毫无技巧的广告暴力，所谓的暴力就是在一定程度上排斥智力的合作，那意味着你要有加倍的或多倍的广告投入，采取强硬的手段才能获得一定的地盘，这种手段会使竞争对手有所顾忌，能获得一定的市场效应和加强投资者的信心，也能吸引一些相对盲目的认为广告做得多产品就信得过的消费者。但最终其所付出的代价却与真正的市场价值不相符合，甚至是严重的得不偿失，一旦造成这种局面，整个广告运动甚至产品都必须放弃，因为广告或者传播名声并不是独立的行为，它完全受销售目的的支配，销售的价值决定了所应作投入的程度，继续消耗广告资源意味着更彻底的失败。只有一种情况是例外的，就是当你的产品处于垄断的地位，又是相对的生活必须品。这种案例比比皆是。当然，代理商也不应过分高估和夸大自身的能力，把自己变成一个没有作战能力的不切实际的广告政治家，应该明白作为一个广告将军的目的和意义。&nbsp;<br/>　&nbsp;广告目的是销售目标的前提之一，在与受众的精神意志较量中获胜是达成交易和形成忠诚的基础条件，也是真正务实和彻底的广告观念。销售目的本身应该适应广告这种营销手段的独特性质，虽然销售目的通常作为广告运动的首要考虑因素，并交织在全部广告运动之中，但切不可越蛆代庖、本末倒置。尽管如此，广告仍然象战争一样复杂多变、难以掌握。来自于各方的干扰和不确定因素太多，包括竞争对手的广告攻势、不断变化的市场环境等，尤其是消费者喜新厌旧的坏习惯以及难以琢磨的心理环境。幸运色彩始终是广告最明显的特征。我们并不乞求一种绝对的胜利，事实上绝对的胜利也不存在。但实在有必要对广告目的作出目标性的概括。<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=142</link>
			<title><![CDATA[广告的目的不是促销（2）]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Mon,28 Feb 2011 13:10:57 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=142</guid>	
		<description><![CDATA[广告与战争&nbsp;<br/>　　广告和战争是非常相似的，中国古代的一些战争理论，如《孙子兵法》等和毛泽东的战略思想在市场营销中都得到良好的诠释和应用。东方的战争理论较偏重于战略或战术性的研究，一般都只关心怎样去赢得战争，对于战争的目的和本质分析都没有《战争论》来得全面和彻底。了解克劳塞维茨和其《战争论》的人会认同我们的这种说法。广告也是如此，大部分的人并不想去了解广告的本质，尤其迷恋于精巧的战术运用，不能对广告的本末给予足够的重视和关注。&nbsp;<br/>　　克劳塞维茨认为战争只是达到政治目的的手段，正如广告是市场营销、产品销售的手段一样。但从纯粹战争的角度来看，“我们必须说战争的政治目的与战争本身毫无关系，因为战争是一种强迫敌人实现我方意志的暴力行为，它都是有赖于我们能够打倒敌人，也就是解除其武装，而且仅只依赖这一点”。迫使敌人向我方意志屈服是一种最后的政治目的，为了充分达到这一目的，必须解除敌人的武装，所以在理论上，解除武装也就变成战争的直接目的。它取最后目的的地位而代之，并且把政治目的摆在一边。如果还要继续对战争的手段和目的进行划分，暴力则是战争的手段；暴力本身也并非目标，否则“手段就会和目的完全丧失关系”。&nbsp;<br/>　　诚如战争，企业的销售目标对于决定广告运动的目标以及所应做的努力都将是一种标准。但销售目标本身并不能对广告提供衡量的标准，它是广告与消费者有效沟通产生的作用和结果。假使广告目的是销售目的的一种相当物，那么当销售目标缩小时，广告规模和力量也会随之减小，而当销售目标愈大时，广告力度也就必须愈大，一旦减少广告力量，销售也就会随之下滑。甚至成倍地加大了广告投入，销售情况也未会见起色。这是所有企业都不愿见到的情况，但事实是这种现象一刻也没有停止，甚至相当普遍。所以，尽管我们并不怀疑广告促进销售的作用（就象我们知道战争总是服务于某种政治目的一样），但促进销售并不是广告的直接目的，要充分达到促进销售的目的，广告所应作出的努力完全在于——“解除敌人的武装”，就算是那些降价的促销广告和怀着美好愿望的公益广告也是如此，政府的政策性宣传亦然。&nbsp;<br/>广告的性质<br/>广告是什么？我们知道广告（Advertising）最初的含义是“通知别人某件事，引起他人的注意”，后来由于广告媒介的丰富、形式的多样化、战略和战术的不同趋向，以及认识角度的差异，形成了各种不同的理论流派。无论人们持什么样的观点，都必须归结到一个最核心的点上——与受众进行有效的沟通。克劳塞维茨对战争所作的定义非常适用于广告，他说：“战争非他，不过就是一个大规模的决斗而已。假使我们把构成战争的无数决斗当作一个单位来看，则我们最好是假定其为两个角力者。每个人都想用体力迫使对方屈服于其意志之下，每个人都想摔倒其对手，并使其不能再作抵抗。”如果说战争就是利用暴力来迫使对手解除武装，那么广告就是运用一种有别于战争暴力的精神意志来与受众的思想武装进行较量，直至使其屈服于我方的意志之下——“广告非他，不过就是两种精神意志的较量罢了”<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=141</link>
			<title><![CDATA[广告的目的不是促销（1）]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Tue,15 Feb 2011 15:04:45 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=141</guid>	
		<description><![CDATA[广告的目的不是促销<br/>“广告的目的并不是促销”，写下这句话着实有些惶恐，因为这和我们接受的传统训示相违背；和广告主的崇高意愿相违背；更是对广告价值和立身根本的怀疑。说出这样的话可能会引来正义人士的围殴，或者遭受令人胆战心惊的白眼和嗤之以鼻的责难。人们会把它看成是广告人蹩脚的噱头，是对权威的无聊调戏。如果有人要因此而愤怒，那就由他去吧，生活在坚固的传统壁垒中总是安全的。&nbsp;<br/>　　美学大师朱光潜先生说：“一切事物都有几种看法，你说一件事物是美或是丑的，这是一种看法。换一种看法，你说它是真的或是假的；再换一种看法，你说它是善的或是恶的。同是一件事物，看法有多种，所看出来的现象就有多种。”同样一件事物，在不同的人看来，其结果更是相差甚远。广告的目的也是如此，有人从营销的角度去看它，其促销的动机就是勿庸质疑的现实；但从传播的角度来看，促销并非广告的直接目标，否则，手段和目的就会完全丧失应有的关系。把营销目的当成广告手段，那会使你的用意赤裸裸地展现在受众面前，其结果必然是引起消费者对广告的抗拒心理。另外，我们知道，现代的营销观念是“以消费者为中心”的，所有的营销活动都必须以消费者的需求为核心，产品的设计是如此，销售渠道的选择是如此。那么是否也应该用“以消费者为中心”的观念来看待广告，用消费者的角度和“看法”来认识广告的目的呢。“广告的目的是销售”符合消费者的需求吗？消费者看一则广告是为了让你把一个商品推销给他吗？显然不是如此。广告应该为消费者服务，为消费行为提供合理的指引。广告不是一个为“促销”而存在的事件，广告是一个为消费行为而存在的事件。总而言之，从任何单一的角度去看待广告的目的，都不能完整地说明问题，反而容易产生歧义和导致无谓的争论。我们至少应该从三个方面去认识它，其一是营销的角度，其二是传播的角度，其三是消费者的角度。这几个层次的区分并非只是在玩弄字眼，这种区分对于“整合营销传播”具有建设性的意义，整合营销传播如果仅仅只是工具的整合显然是不够的。不同角度的观念整合才是工具应用的基础。&nbsp;<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=140</link>
			<title><![CDATA[专利检索的8大作用 ]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Wed,26 Jan 2011 13:36:03 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=140</guid>	
		<description><![CDATA[&nbsp;&nbsp;&nbsp;专利作为技术创新的重要标志和体现，在很大程度上代表着一个国家或企业的技术水平和潜在的技术竞争力。围绕专利进行的竞争将成为全球化背景下企业竞争的一个制高点。<br/>　　参与专利竞争必须充分地利用好专利文献，在企业参与竞争和企业发展中有着重要的作用。<br/>&nbsp;&nbsp;&nbsp;&nbsp;1、是有助于研究者获取最新的专利技术信息，调整研究方向，避免重复研究；&nbsp;<br/>2、是有利于启发研究者的创新思路，缩短研究开发时间；&nbsp;<br/>3、是有利于掌握竞争对手的技术发展状况，及时采取相应对策，避免侵犯他人专利权。&nbsp;<br/>详细来说可以分为以下几点&nbsp;<br/>1、把握相关领域的技术状况<br/>　　专利文献是技术资料的宝库。据世界知识产权组织的统计，全世界发明成果的90%以上会出现在专利文献中。通过对相关产业和技术领域的专利技术进行检索和分析，能够把握相关产业和技术领域的整体状况（包括重点技术现状）和发展趋势，明确行业技术创新热点及专利保护特征。<br/>　　2、了解相关企业的技术活动<br/>&nbsp;&nbsp;&nbsp;&nbsp;专利制度是被广泛认可的保护自主创新的有效方式。大多数企业通常会将自己开发出的技术尽早申请专利以求得以保护，企业的技术路线，技术布局必然会体现在其专利信息中。通过对企业的专利检索出的信息进行分析，便可以了解其技术活动及其战略布局。<br/>　　3、了解竞争对手动向<br/>　　互为竞争对手的企业必然处在相同或相近的技术领域，通过对该技术领域的专利检索信息进行分析，不仅可以发现现实的竞争对手，挖掘潜在的竞争对手，还可以通过对竞争对手在不同国家的专利文献进行分析，了解其在不同国家、不同地域的市场经营活动，竞争企业间的技术合作、技术许可动向等。<br/>　　4、了解人才分布<br/>　　通过对专利文献中的发明人信息进行分析，可容易的找到该领域的技术专家，并可以了解到这些技术专家在技术上的侧重点。<br/>　　5、预测新产品新技术的市场情况<br/>　　专利文献记载着目前最先进的科学技术。据世界知识产权组织统计，同一发明成果出现在专利文献中的时间要比出现在其它媒体上的时间平均早1～2年。通过对专利文献信息进行分析，可以预测新产品、新技术的推出，以及相关国家的市场分布和规模等。<br/>　　6、为企业的研发、投资、兼并决策等提供依据<br/>&nbsp;&nbsp;&nbsp;&nbsp;通过对相关领域的专利文献信息进行分析，可以了解相关领域的技术发展现状和发展趋势，可以为企业决策者把握特定技术的开发、投资方向、兼并收购等决策提供依据。<br/>　　7、为建立企业专利数据库指明方向<br/>&nbsp;&nbsp;&nbsp;&nbsp;通过对相关领域的专利信息进行分析，并结合企业自身的发展现状和发展目标，确定合适的技术领域，确定合适的目标跟踪对象，为建立符合企业特色，又符合行业发展趋势的专利数据库指明方向。<br/>　　8、为制定企业专利战略提供依据<br/>　　专利信息不仅包含着大量的技术信息，还含有大量法律和经济的信息，仔细分析和科学利用这些信息，可以为企业制定专利战略、企业发展战略乃至市场战略等竞争战略提供依据。&nbsp;<br/>通过跟踪调查技术发展动向，并根据出现的新情况不断调整其专利战略实施方案，使专利战略的实施更为有效，以实现专利战略的目标。专利文献是体现专利制度根本目的的媒介，它传播专利信息，促进科技进步，为经济、贸易活动提供参考信息，是对专利实施法律保护的依据和专利机构审批专利的基础。可以说专利文献是人类的知识宝库，是最新颖、最系统、最完整、最规范的技术信息源。有人将专利文献比喻为世界科学技术的备忘录、技术的大百科全书。<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=139</link>
			<title><![CDATA[正确认识站内搜索]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[全文检索]]></category>
			<pubDate>Mon,17 Jan 2011 14:21:14 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=139</guid>	
		<description><![CDATA[正确认识站内搜索<br/>什么是站内搜索<br/>在以往网站建设、企业信息系统搭建过程中，由于信息结构简单、内容稀缺，站内搜索乃至搜索都不是网站系统的必要装备。但随着Web2.0带来的海量信息井喷式涌现，企业自身对信息架构、管理、发布的需求，以及用户对信息的组织、查询、可寻性的要求越来越高，于是站内搜索出现了。<br/>站内搜索通俗来讲是一个网站或商城的“大门口”，一般在形式上包括两个要件：搜索入口和搜索结果页面，但在其后台架构上是比较复杂的，其核心要件包括：中文分词技术、页面抓取技术、建立索引、对搜索结果排序以及对搜索关键词的统计、分析、关联、推荐等<br/>与其他通用搜索的区别<br/>像谷歌、百度、搜搜等通用搜索引擎都会免费开放站内搜索功能，以嵌入网页代码的形式保持与搜索引擎机器人的沟通、爬取，其弊病有二：<br/>1.这些通用搜索引擎不能及时、全部抓取网站最新页面内容。这对电子商务网站信息（如价格、活动有效时间等）经常更新的特点来说是致命的，用户查到的可能是过时信息。<br/>2.既然是所谓通用引擎，其对搜索结果的展示也是通用的，没有差异性的。其不能按照商城自身业务逻辑去做排序、过滤、展示是其最大的弱项<br/>因此，站内搜索的出现也是有其具体原因和需求的，在搜索的精确度和效果上击败了通用搜索引擎。<br/>站内搜索价值体现在如下：<br/>用户很“懒”，节约用户查找商品时间，提高购买转化率<br/>站内搜索已经成为电子商务网站主导航的标配<br/>对后续用户输入的关键词进行分析、提取、排名等对商城运营者来说是了解用户上网行为的最佳途径。<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=138</link>
			<title><![CDATA[垂直搜索逐步实现行业应用]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Fri,07 Jan 2011 17:48:17 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=138</guid>	
		<description><![CDATA[&nbsp;&nbsp;&nbsp;根据统计，53%的购物用户都会使用搜索引擎，而在这其中，越来越多的网购者习惯于使用购物网站提供的垂直搜索服务。对此，有业内专家指出，随着人们生活节奏的加快，用户对信息精准度的要求越来越高，而通用搜索引擎提供的信息繁多，与用户的需求不对称，这种模糊搜索既费时又费力，无异于大海捞针。对此，诸如北京线点科技有限公司http：//www.xd-tech.com等行业名企纷纷将目光投到了垂直搜索引擎之上。<br/>在搜索领域中曾有句话，引擎无法精确知道用户要的是什么，除非用户已经找到了他想找的东西。这就是通用搜索当前遇到的问题。目前的市场对于商机和效率的要求也越来越强烈，以致越来越多的传统企业转身投奔电子商务经营。这也给电子商务服务商带来了新的机遇和挑战。据悉，北京线点科技有限公司提供的垂直搜索引擎，通过与各行业企业合作，可以将传统企业的资源和知识与电子商务深度结合，使用户可以在海量的供求信息中，快速的筛选出最合适、最合理、最经济的搜索结果，从而节省时间、节约成本。且能更大范围的将企业推广至所有上下游提供商、求购商。实现最大限度的推广营销。同时，作为垂直搜索引擎，各个不同行业之间将不会产生业务冲突，这在很大程度上避免了各行业争夺搜索页面的情况。&nbsp;<br/>　垂直搜索专、精、深的特点，决定了基于专业的细分化发展潜力。如果将通用搜索引擎比作筛子，那么垂直搜索引擎依然是筛子，只不过筛子眼缩小了千倍、万倍。以应用线点科技有限公司垂直搜索引擎所打造的股票搜索“搜股易<a href="http://www.sougue.com" target="_blank">http://www.sougue.com</a>&nbsp;/”为例，用户搜索关键字时，其结果只专注于股票方面的，避免了其他毫无关联的搜索结果。&nbsp;<br/>　有资深专家指出，如今互联网不断的在与垂直领域进行结合，通过北京线点科技有限公司等重量级企业的深入发掘，当下中国在垂直搜索领域已经逐渐找到了拓展方向，其增长速度和经营态势都已经趋于成熟。较之垂直搜索在面向特定行业中的商务应用价值，通用搜索更像是一个“和声”，只有用户将二者充分变通的有效利用，才可实现理想中的工作生活两不误。<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=137</link>
			<title><![CDATA[网络舆情的重要性（最新）]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Tue,28 Dec 2010 09:53:53 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=137</guid>	
		<description><![CDATA[网络舆情的重要性（最新）<br/>网络舆论的巨大力量及相关责任部门应对不力而产生的负面影响让全社会，特别是政府及相关公共事务管理部门认识到网络舆情服务的重要性。2010年，我国的网民人数突破了4亿大关，网络舆情越来越受到各方重视，一批提供网络舆情监测、整合、研判服务的专业机构应时而生。<br/>网络舆情服务机构可分四类<br/>目前，市场上的网络舆情服务机构大致可以分为四类：第一类由软件公司和传统的市场调查公司成立，技术实力较为雄厚，抓取网络舆情数据能力较强。第二类依托主流媒体，如人民网舆情监测室，对时事热点和受众心理变化的敏感度较高。第三类背靠高校或学术机构，如中国人民大学舆论研究所。这类机构具有学术传统，善于将网络舆情的变化和特点归纳、梳理，总结一般规律。第四类则由政府部门自身成立，主要监测群众对本地区、本部门工作的反馈。后三类机构都和政府或多或少存在一定联系，这和中国网络舆情服务行业的兴起背景有重要的关系。中国社会处于转型期，矛盾集中，传统的民意表达渠道不够畅通。而新媒体技术的发展使社会进入“大众麦克风时代”，网络舆情监测也就成为了了解民意的重要手段。中国的网络舆情服务行业从发展之初就承担着反映真实民意，为政府实施公共事务管理提供参考的责任。<br/>网络舆情服务≠“监测”+“删帖”<br/>一般大众对于网络舆情监测行业和机构的认识存在两个误区：一是认为网络舆情服务，重在“监测”。其实，网络舆情服务重要的不在于数据的抓取和搜集，更重要的是在一件事情发生后，对网络民意的有效数据进行科学筛选、量化统计和分析研判，并就如何应对，提出科学的咨询和建议，这才是网络舆情服务机构的核心价值所在。网络舆情监测、整合是高度人机合一的工作，如果只通过机械地抓取数据来获得信息，必然容易造成误判。汉语的表达方式复杂多样，网络上还存在一些片面的个人意见、情绪化的表达，这些都必须通过人为分析加以筛选。第二个误区，就是将网络舆情监测误认为“网络监控”。对此，李未柠表示，网络舆情监测行业和机构是以第三方的身份进行观察，提供客观、中立的意见，希望成为客户的智囊和顾问。是将事件各方视为平等媒介主体，通过搭建适当的沟通渠道消除误解，解决问题。<br/>网络舆情应对是政府必修课<br/><br/>　　对政府部门而言，在对网络舆情监测结果进行客观分析之前，有一个非常重要的环节不能忽略，这就是研究、论证。所有舆情服务机构的调查结果，都是政府了解民意不可或缺的渠道，但是其调查结论只有经过相互补充、印证，经过“去伪存真”&nbsp;的分析鉴别才有意义，才具有决策参考价值。政府的决策实施(或危机应对)过程一旦开始，就要明确目标和方向，不受单方面舆情调查结果的影响。只要决策是科学的，是符合大多数人的利益的，就要稳住阵脚，不能被概念中的“舆情”牵着鼻子走。<br/>政府要以主渠道强大的信息攻势，去影响公众，纠正畸变的舆论。很多情况下，人们产生听信谣传的倾向和从众行为，是因为得不到来自政府方面的权威信息，或者信息太弱。因此，对于政府而言，如何在发现某种舆论动向的同时，以足够量的、优质的信息来影响公众，引导舆论，是一门需要认真对待的必修课。<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=136</link>
			<title><![CDATA[全文检索和数据库应用最大的不同]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[全文检索]]></category>
			<pubDate>Wed,15 Dec 2010 13:49:09 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=136</guid>	
		<description><![CDATA[<br/>全文检索和数据库应用最大的不同在于：让最相关的头100条结果满足98%以上用户的需求<br/><br/>Lucene的创新之处：<br/>大部分的搜索（数据库）引擎都是用B树结构来维护索引，索引的更新会导致大量的IO操作，Lucene在实现中，对此稍微有所改进：不是维护一个索引文件，而是在扩展索引的时候不断创建新的索引文件，然后定期的把这些新的小索引文件合并到原先的大索引中（针对不同的更新策略，批次的大小可以调整），这样在不影响检索的效率的前提下，提高了索引的效率。<br/>Lucene和其他一些全文检索系统/应用的比较：<br/>　&#160;&#160;&#160;&#160;Lucene&#160;&#160;&#160;&#160;其他开源全文检索系统<br/>增量索引和批量索引&#160;&#160;&#160;&#160;可以进行增量的索引(Append)，可以对于大量数据进行批量索引，并且接口设计用于优化批量索引和小批量的增量索引。&#160;&#160;&#160;&#160;很多系统只支持批量的索引，有时数据源有一点增加也需要重建索引。<br/>数据源&#160;&#160;&#160;&#160;Lucene没有定义具体的数据源，而是一个文档的结构，因此可以非常灵活的适应各种应用（只要前端有合适的转换器把数据源转换成相应结构），&#160;&#160;&#160;&#160;很多系统只针对网页，缺乏其他格式文档的灵活性。<br/>索引内容抓取&#160;&#160;&#160;&#160;Lucene的文档是由多个字段组成的，甚至可以控制那些字段需要进行索引，那些字段不需要索引，近一步索引的字段也分为需要分词和不需要分词的类型：<br/>&nbsp;&nbsp;&nbsp;需要进行分词的索引，比如：标题，文章内容字段<br/>&nbsp;&nbsp;&nbsp;不需要进行分词的索引，比如：作者/日期字段&#160;&#160;&#160;&#160;缺乏通用性，往往将文档整个索引了<br/>语言分析&#160;&#160;&#160;&#160;通过语言分析器的不同扩展实现：<br/>可以过滤掉不需要的词：an&nbsp;the&nbsp;of&nbsp;等，<br/>西文语法分析：将jumps&nbsp;jumped&nbsp;jumper都归结成jump进行索引/检索<br/>非英文支持：对亚洲语言，阿拉伯语言的索引支持&#160;&#160;&#160;&#160;缺乏通用接口实现<br/>查询分析&#160;&#160;&#160;&#160;通过查询分析接口的实现，可以定制自己的查询语法规则：<br/>比如：&nbsp;多个关键词之间的&nbsp;+&nbsp;-&nbsp;and&nbsp;o&#114;关系等&#160;&#160;&#160;&#160;　<br/>并发访问&#160;&#160;&#160;&#160;能够支持多用户的使用&#160;&#160;&#160;&#160;　<br/>&nbsp;<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=135</link>
			<title><![CDATA[海量查询的数据优化（十六）]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Mon,06 Dec 2010 10:46:02 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=135</guid>	
		<description><![CDATA[<br/>四、聚集索引的重要性和如何选择聚集索引&nbsp;<br/><br/>在上一节的标题中，笔者写的是：实现小数据量和海量数据的通用分页显示存储过程。这是因为在将本存储过程应用于“办公自动化”系统的实践中时，笔者发现这第三种存储过程在小数据量的情况下，有如下现象：&nbsp;<br/><br/>1、分页速度一般维持在1秒和3秒之间。&nbsp;<br/><br/>2、在查询最后一页时，速度一般为5秒至8秒，哪怕分页总数只有3页或30万页。&nbsp;<br/><br/>虽然在超大容量情况下，这个分页的实现过程是很快的，但在分前几页时，这个1－3秒的速度比起第一种甚至没有经过优化的分页方法速度还要慢，借用户的话说就是“还没有ACCESS数据库速度快”，这个认识足以导致用户放弃使用您开发的系统。&nbsp;<br/><br/>笔者就此分析了一下，原来产生这种现象的症结是如此的简单，但又如此的重要：排序的字段不是聚集索引！&nbsp;<br/><br/>本篇文章的题目是：“查询优化及分页算法方案”。笔者只所以把“查询优化”和“分页算法”这两个联系不是很大的论题放在一起，就是因为二者都需要一个非常重要的东西――聚集索引。&nbsp;<br/><br/>在前面的讨论中我们已经提到了，聚集索引有两个最大的优势：&nbsp;<br/><br/>1、以最快的速度缩小查询范围。&nbsp;<br/><br/>2、以最快的速度进行字段排序。&nbsp;<br/><br/>第1条多用在查询优化时，而第2条多用在进行分页时的数据排序。&nbsp;<br/><br/>而聚集索引在每个表内又只能建立一个，这使得聚集索引显得更加的重要。聚集索引的挑选可以说是实现“查询优化”和“高效分页”的最关键因素。&nbsp;<br/><br/>但要既使聚集索引列既符合查询列的需要，又符合排序列的需要，这通常是一个矛盾。&nbsp;<br/><br/>笔者前面“索引”的讨论中，将fariqi，即用户发文日期作为了聚集索引的起始列，日期的精确度为“日”。这种作法的优点，前面已经提到了，在进行划时间段的快速查询中，比用ID主键列有很大的优势。&nbsp;<br/><br/>但在分页时，由于这个聚集索引列存在着重复记录，所以无法使用max或min来最为分页的参照物，进而无法实现更为高效的排序。而如果将ID主键列作为聚集索引，那么聚集索引除了用以排序之外，没有任何用处，实际上是浪费了聚集索引这个宝贵的资源。&nbsp;<br/><br/>为解决这个矛盾，笔者后来又添加了一个日期列，其默认值为getdate()。用户在写入记录时，这个列自动写入当时的时间，时间精确到毫秒。即使这样，为了避免可能性很小的重合，还要在此列上创建UNIQUE约束。将此日期列作为聚集索引列。&nbsp;<br/><br/>有了这个时间型聚集索引列之后，用户就既可以用这个列查找用户在插入数据时的某个时间段的查询，又可以作为唯一列来实现max或min，成为分页算法的参照物。&nbsp;<br/><br/>经过这样的优化，笔者发现，无论是大数据量的情况下还是小数据量的情况下，分页速度一般都是几十毫秒，甚至0毫秒。而用日期段缩小范围的查询速度比原来也没有任何迟钝。&nbsp;<br/><br/>聚集索引是如此的重要和珍贵，所以我总结了一下，一定要将聚集索引建立在：&nbsp;<br/><br/>1、您最频繁使用的、用以缩小查询范围的字段上；&nbsp;<br/><br/>2、您最频繁使用的、需要排序的字段上。&nbsp;<br/><br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=134</link>
			<title><![CDATA[海量查询的数据优化（十五）]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Thu,25 Nov 2010 10:53:56 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=134</guid>	
		<description><![CDATA[<br/>--以下代码赋予了@strSQL以真正执行的SQL代码&nbsp;<br/><br/>set&nbsp;@strSQL&nbsp;=&nbsp;&#34;sel&#101;ct&nbsp;top&nbsp;&#34;&nbsp;+&nbsp;str(@PageSize)&nbsp;+&#34;&nbsp;&#34;+@strGetFields+&nbsp;&#34;&nbsp;&nbsp;from&nbsp;[&#34;&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;+&nbsp;@tblName&nbsp;+&nbsp;&#34;]&nbsp;wh&#101;re&nbsp;[&#34;&nbsp;+&nbsp;@fldName&nbsp;+&nbsp;&#34;]&#34;&nbsp;+&nbsp;@strTmp&nbsp;+&nbsp;&#34;([&#34;+&nbsp;@fldName&nbsp;+&nbsp;&#34;])&nbsp;from&nbsp;(sel&#101;ct&nbsp;top&nbsp;&#34;&nbsp;+&nbsp;str((@PageIndex-1)*@PageSize)&nbsp;+&nbsp;&#34;&nbsp;[&#34;+&nbsp;@fldName&nbsp;+&nbsp;&#34;]&nbsp;from&nbsp;[&#34;&nbsp;+&nbsp;@tblName&nbsp;+&nbsp;&#34;]&#34;&nbsp;+&nbsp;@strOrder&nbsp;+&nbsp;&#34;)&nbsp;as&nbsp;tblTmp)&#34;+&nbsp;@strOrder&nbsp;<br/><br/><br/><br/>if&nbsp;@strWh&#101;re&nbsp;!=&nbsp;&#39;&#39;&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;@strSQL&nbsp;=&nbsp;&#34;sel&#101;ct&nbsp;top&nbsp;&#34;&nbsp;+&nbsp;str(@PageSize)&nbsp;+&#34;&nbsp;&#34;+@strGetFields+&nbsp;&#34;&nbsp;&nbsp;from&nbsp;[&#34;&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+&nbsp;@tblName&nbsp;+&nbsp;&#34;]&nbsp;wh&#101;re&nbsp;[&#34;&nbsp;+&nbsp;@fldName&nbsp;+&nbsp;&#34;]&#34;&nbsp;+&nbsp;@strTmp&nbsp;+&nbsp;&#34;([&#34;&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+&nbsp;@fldName&nbsp;+&nbsp;&#34;])&nbsp;from&nbsp;(sel&#101;ct&nbsp;top&nbsp;&#34;&nbsp;+&nbsp;str((@PageIndex-1)*@PageSize)&nbsp;+&nbsp;&#34;&nbsp;[&#34;&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+&nbsp;@fldName&nbsp;+&nbsp;&#34;]&nbsp;from&nbsp;[&#34;&nbsp;+&nbsp;@tblName&nbsp;+&nbsp;&#34;]&nbsp;wh&#101;re&nbsp;&#34;&nbsp;+&nbsp;@strWh&#101;re&nbsp;+&nbsp;&#34;&nbsp;&#34;&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+&nbsp;@strOrder&nbsp;+&nbsp;&#34;)&nbsp;as&nbsp;tblTmp)&nbsp;and&nbsp;&#34;&nbsp;+&nbsp;@strWh&#101;re&nbsp;+&nbsp;&#34;&nbsp;&#34;&nbsp;+&nbsp;@strOrder&nbsp;<br/><br/>end&nbsp;<br/><br/>end&nbsp;&nbsp;<br/><br/>exec&nbsp;(@strSQL)&nbsp;<br/><br/>GO&nbsp;<br/><br/>上面的这个存储过程是一个通用的存储过程，其注释已写在其中了。&nbsp;<br/><br/>在大数据量的情况下，特别是在查询最后几页的时候，查询时间一般不会超过9秒；而用其他存储过程，在实践中就会导致超时，所以这个存储过程非常适用于大容量数据库的查询。&nbsp;<br/><br/>笔者希望能够通过对以上存储过程的解析，能给大家带来一定的启示，并给工作带来一定的效率提升，同时希望同行提出更优秀的实时数据分页算法。&nbsp;<br/><br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=133</link>
			<title><![CDATA[海量查询的数据优化（十四）]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Mon,15 Nov 2010 09:45:07 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=133</guid>	
		<description><![CDATA[<br/>在确定了第三种分页方案后，我们可以据此写一个存储过程。大家知道SQL&nbsp;SERVER的存储过程是事先编译好的SQL语句，它的执行效率要比通过WEB页面传来的SQL语句的执行效率要高。下面的存储过程不仅含有分页方案，还会根据页面传来的参数来确定是否进行数据总数统计。&nbsp;--&nbsp;获取指定页的数据&nbsp;Cr&#101;ate&nbsp;PROCEDURE&nbsp;pagination3&nbsp;@tblName  &nbsp;varchar(255),      &nbsp;--&nbsp;表名&nbsp;@strGetFields&nbsp;varchar(1000)&nbsp;=&nbsp;&#39;*&#39;, &nbsp;--&nbsp;需要返回的列&nbsp;@fldName&nbsp;varchar(255)=&#39;&#39;,     &nbsp;--&nbsp;排序的字段名&nbsp;@PageSize  &nbsp;int&nbsp;=&nbsp;10,         &nbsp;--&nbsp;页尺寸&nbsp;@PageIndex &nbsp;int&nbsp;=&nbsp;1,          &nbsp;--&nbsp;页码&nbsp;@doCount &nbsp;bit&nbsp;=&nbsp;0,  &nbsp;--&nbsp;返回记录总数,&nbsp;非&nbsp;0&nbsp;值则返回&nbsp;@OrderType&nbsp;bit&nbsp;=&nbsp;0, &nbsp;--&nbsp;设置排序类型,&nbsp;非&nbsp;0&nbsp;值则降序&nbsp;@strWh&#101;re &nbsp;varchar(1500)&nbsp;=&nbsp;&#39;&#39; &nbsp;--&nbsp;查询条件&nbsp;(注意:&nbsp;不要加&nbsp;wh&#101;re)&nbsp;AS&nbsp;declare&nbsp;@strSQL  &nbsp;varchar(5000)      &nbsp;--&nbsp;主语句&nbsp;declare&nbsp;@strTmp  &nbsp;varchar(110)       &nbsp;--&nbsp;临时变量&nbsp;declare&nbsp;@strOrder&nbsp;varchar(400)       &nbsp;--&nbsp;排序类型&nbsp;if&nbsp;@doCount&nbsp;!=&nbsp;0&nbsp; &nbsp;begin&nbsp;   &nbsp;if&nbsp;@strWh&#101;re&nbsp;!=&#39;&#39;&nbsp;   &nbsp;set&nbsp;@strSQL&nbsp;=&nbsp;&#34;sel&#101;ct&nbsp;count(*)&nbsp;as&nbsp;Total&nbsp;from&nbsp;[&#34;&nbsp;+&nbsp;@tblName&nbsp;+&nbsp;&#34;]&nbsp;wh&#101;re&nbsp;&#34;+@strWh&#101;re&nbsp;   &nbsp;else&nbsp;   &nbsp;set&nbsp;@strSQL&nbsp;=&nbsp;&#34;sel&#101;ct&nbsp;count(*)&nbsp;as&nbsp;Total&nbsp;from&nbsp;[&#34;&nbsp;+&nbsp;@tblName&nbsp;+&nbsp;&#34;]&#34;&nbsp;end &nbsp;--以上代码的意思是如果@doCount传递过来的不是0，就执行总数统计。以下的所有代码都是@doCount为0的情况&nbsp;else&nbsp;begin&nbsp;if&nbsp;@OrderType&nbsp;!=&nbsp;0&nbsp;begin&nbsp;   &nbsp;set&nbsp;@strTmp&nbsp;=&nbsp;&#34;&lt;(sel&#101;ct&nbsp;min&#34;&nbsp;set&nbsp;@strOrder&nbsp;=&nbsp;&#34;&nbsp;o&#114;der&nbsp;by&nbsp;[&#34;&nbsp;+&nbsp;@fldName&nbsp;+&#34;]&nbsp;desc&#34;&nbsp;--如果@OrderType不是0，就执行降序，这句很重要！&nbsp;end&nbsp;else&nbsp;begin&nbsp;   &nbsp;set&nbsp;@strTmp&nbsp;=&nbsp;&#34;&gt;(sel&#101;ct&nbsp;max&#34;&nbsp;   &nbsp;set&nbsp;@strOrder&nbsp;=&nbsp;&#34;&nbsp;o&#114;der&nbsp;by&nbsp;[&#34;&nbsp;+&nbsp;@fldName&nbsp;+&#34;]&nbsp;asc&#34;&nbsp;end&nbsp;if&nbsp;@PageIndex&nbsp;=&nbsp;1&nbsp;begin&nbsp;   &nbsp;if&nbsp;@strWh&#101;re&nbsp;!=&nbsp;&#39;&#39; &nbsp;   &nbsp;set&nbsp;@strSQL&nbsp;=&nbsp;&#34;sel&#101;ct&nbsp;top&nbsp;&#34;&nbsp;+&nbsp;str(@PageSize)&nbsp;+&#34;&nbsp;&#34;+@strGetFields+&nbsp;&#34; &nbsp;from&nbsp;[&#34;&nbsp;+&nbsp;@tblName&nbsp;+&nbsp;&#34;]&nbsp;wh&#101;re&nbsp;&#34;&nbsp;+&nbsp;@strWh&#101;re&nbsp;+&nbsp;&#34;&nbsp;&#34;&nbsp;+&nbsp;@strOrder&nbsp;    &nbsp;else&nbsp;    &nbsp;set&nbsp;@strSQL&nbsp;=&nbsp;&#34;sel&#101;ct&nbsp;top&nbsp;&#34;&nbsp;+&nbsp;str(@PageSize)&nbsp;+&#34;&nbsp;&#34;+@strGetFields+&nbsp;&#34; &nbsp;from&nbsp;[&#34;+&nbsp;@tblName&nbsp;+&nbsp;&#34;]&nbsp;&#34;+&nbsp;@strOrder&nbsp;--如果是第一页就执行以上代码，这样会加快执行速度&nbsp;end&nbsp;else&nbsp;begin]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=132</link>
			<title><![CDATA[海量查询的数据优化（十三）]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Tue,02 Nov 2010 13:59:59 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=132</guid>	
		<description><![CDATA[我们知道，几乎任何字段，我们都可以通过max(字段)或min(字段)来提取某个字段中的最大或最小值，所以如果这个字段不重复，那么就可以利用这些不重复的字段的max或min作为分水岭，使其成为分页算法中分开每页的参照物。在这里，我们可以用操作符“&gt;”或“&lt;”号来完成这个使命，使查询语句符合SARG形式。如：&nbsp;Sel&#101;ct&nbsp;top&nbsp;10&nbsp;*&nbsp;from&nbsp;table1&nbsp;wh&#101;re&nbsp;id&gt;200&nbsp;于是就有了如下分页方案：&nbsp;sel&#101;ct&nbsp;top&nbsp;页大小&nbsp;*&nbsp;from&nbsp;table1&nbsp;wh&#101;re&nbsp;id&gt;&nbsp;     &nbsp;(sel&#101;ct&nbsp;max&nbsp;(id)&nbsp;from&nbsp;     &nbsp;(sel&#101;ct&nbsp;top&nbsp;((页码-1)*页大小)&nbsp;id&nbsp;from&nbsp;table1&nbsp;o&#114;der&nbsp;by&nbsp;id)&nbsp;as&nbsp;T&nbsp;      &nbsp;)   &nbsp; &nbsp;o&#114;der&nbsp;by&nbsp;id&nbsp;在选择即不重复值，又容易分辨大小的列时，我们通常会选择主键。下表列出了笔者用有着1000万数据的办公自动化系统中的表，在以GID（GID是主键，但并不是聚集索引。）为排序列、提取gid,fariqi,title字段，分别以第1、10、100、500、1000、1万、10万、25万、50万页为例，测试以上三种分页方案的执行速度：（单位：毫秒）&nbsp;页 &nbsp;码&nbsp;方案1&nbsp;方案2&nbsp;方案3&nbsp;1&nbsp;60&nbsp;30&nbsp;76&nbsp;10&nbsp;46&nbsp;16&nbsp;63&nbsp;100&nbsp;1076&nbsp;720&nbsp;130&nbsp;500&nbsp;540&nbsp;12943&nbsp;83&nbsp;1000&nbsp;17110&nbsp;470&nbsp;250&nbsp;1万&nbsp;24796&nbsp;4500&nbsp;140&nbsp;10万&nbsp;38326&nbsp;42283&nbsp;1553&nbsp;25万&nbsp;28140&nbsp;128720&nbsp;2330&nbsp;50万&nbsp;121686&nbsp;127846&nbsp;7168&nbsp;从上表中，我们可以看出，三种存储过程在执行100页以下的分页命令时，都是可以信任的，速度都很好。但第一种方案在执行分页1000页以上后，速度就降了下来。第二种方案大约是在执行分页1万页以上后速度开始降了下来。而第三种方案却始终没有大的降势，后劲仍然很足。&nbsp;]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=131</link>
			<title><![CDATA[海量查询的数据优化（十二）]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Mon,25 Oct 2010 10:09:21 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=131</guid>	
		<description><![CDATA[笔者曾在网上看到了一篇小短文《从数据表中取出第n条到第m条的记录的方法》，全文如下：&nbsp;从publish&nbsp;表中取出第&nbsp;n&nbsp;条到第&nbsp;m&nbsp;条的记录：&nbsp;Sel&#101;ct&nbsp;TOP&nbsp;m-n+1&nbsp;*&nbsp;FROM&nbsp;publish&nbsp;Wh&#101;re&nbsp;(id&nbsp;NOT&nbsp;IN&nbsp;　　　　(Sel&#101;ct&nbsp;TOP&nbsp;n-1&nbsp;id&nbsp;　　　　&nbsp;FROM&nbsp;publish))&nbsp;id&nbsp;为publish&nbsp;表的关键字&nbsp;我当时看到这篇文章的时候，真的是精神为之一振，觉得思路非常得好。等到后来，我在作办公自动化系统（ASP.NET+&nbsp;C#＋SQL&nbsp;SERVER）的时候，忽然想起了这篇文章，我想如果把这个语句改造一下，这就可能是一个非常好的分页存储过程。于是我就满网上找这篇文章，没想到，文章还没找到，却找到了一篇根据此语句写的一个分页存储过程，这个存储过程也是目前较为流行的一种分页存储过程，我很后悔没有争先把这段文字改造成存储过程：&nbsp;Cr&#101;ate&nbsp;PROCEDURE&nbsp;pagination2&nbsp;(&nbsp;@SQL&nbsp;nVARCHAR(4000),   &nbsp;--不带排序语句的SQL语句&nbsp;@Page&nbsp;int,             &nbsp;--页码&nbsp;@RecsPerPage&nbsp;int,      &nbsp;--每页容纳的记录数&nbsp;@ID&nbsp;VARCHAR(255),      &nbsp;--需要排序的不重复的ID号&nbsp;@Sort&nbsp;VARCHAR(255)     &nbsp;--排序字段及规则&nbsp;)&nbsp;AS&nbsp;DECLARE&nbsp;@Str&nbsp;nVARCHAR(4000)&nbsp;SET&nbsp;@Str=&#39;Sel&#101;ct  &nbsp;TOP&nbsp;&#39;+CAST(@RecsPerPage&nbsp;AS&nbsp;VARCHAR(20))+&#39;&nbsp;*&nbsp;FROM&nbsp;(&#39;+@SQL+&#39;)&nbsp;T&nbsp;Wh&#101;re&nbsp;T.&#39;+@ID+&#39;NOT&nbsp;IN&nbsp;(Sel&#101;ct  &nbsp;TOP&nbsp;&#39;+CAST((@RecsPerPage*(@Page-1))&nbsp;AS&nbsp;VARCHAR(20))+&#39;&nbsp;&#39;+@ID+&#39;&nbsp;FROM&nbsp;(&#39;+@SQL+&#39;)&nbsp;T9&nbsp;o&#114;DER&nbsp;BY&nbsp;&#39;+@Sort+&#39;)&nbsp;o&#114;DER&nbsp;BY&nbsp;&#39;+@Sort&nbsp;PRINT&nbsp;@Str&nbsp;EXEC&nbsp;sp_ExecuteSql&nbsp;@Str&nbsp;GO&nbsp;其实，以上语句可以简化为：&nbsp;Sel&#101;ct&nbsp;TOP&nbsp;页大小&nbsp;*&nbsp;FROM&nbsp;Table1&nbsp;Wh&#101;re&nbsp;(ID&nbsp;NOT&nbsp;IN&nbsp;         &nbsp;(Sel&#101;ct&nbsp;TOP&nbsp;页大小*页数&nbsp;id&nbsp;        &nbsp;FROM&nbsp;表&nbsp;        &nbsp;o&#114;DER&nbsp;BY&nbsp;id))&nbsp;o&#114;DER&nbsp;BY&nbsp;ID&nbsp;但这个存储过程有一个致命的缺点，就是它含有NOT&nbsp;IN字样。虽然我可以把它改造为：&nbsp;Sel&#101;ct&nbsp;TOP&nbsp;页大小&nbsp;*&nbsp;FROM&nbsp;Table1&nbsp;Wh&#101;re&nbsp;not&nbsp;exists&nbsp;(sel&#101;ct&nbsp;*&nbsp;from&nbsp;(sel&#101;ct&nbsp;top&nbsp;(页大小*页数)&nbsp;*&nbsp;from&nbsp;table1&nbsp;o&#114;der&nbsp;by&nbsp;id)&nbsp;b&nbsp;wh&#101;re&nbsp;b.id=a.id&nbsp;)&nbsp;o&#114;der&nbsp;by&nbsp;id&nbsp;即，用not&nbsp;exists来代替not&nbsp;in，但我们前面已经谈过了，二者的执行效率实际上是没有区别的。&nbsp;既便如此，用TOP&nbsp;结合NOT&nbsp;IN的这个方法还是比用游标要来得快一些。&nbsp;虽然用not&nbsp;exists并不能挽救上个存储过程的效率，但使用SQL&nbsp;SERVER中的TOP关键字却是一个非常明智的选择。因为分页优化的最终目的就是避免产生过大的记录集，而我们在前面也已经提到了TOP的优势，通过TOP&nbsp;即可实现对数据量的控制。&nbsp;在分页算法中，影响我们查询速度的关键因素有两点：TOP和NOT&nbsp;IN。TOP可以提高我们的查询速度，而NOT&nbsp;IN会减慢我们的查询速度，所以要提高我们整个分页算法的速度，就要彻底改造NOT&nbsp;IN，同其他方法来替代它。]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=130</link>
			<title><![CDATA[海量查询的数据优化（十一）]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Sat,09 Oct 2010 10:47:42 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=130</guid>	
		<description><![CDATA[12、高效的TOP&nbsp;事实上，在查询和提取超大容量的数据集时，影响数据库响应时间的最大因素不是数据查找，而是物理的I/0操作。如：&nbsp;sel&#101;ct&nbsp;top&nbsp;10&nbsp;*&nbsp;from&nbsp;(&nbsp;sel&#101;ct&nbsp;top&nbsp;10000&nbsp;gid,fariqi,title&nbsp;from&nbsp;tgongwen&nbsp;wh&#101;re&nbsp;neibuyonghu=&#39;办公室&#39;&nbsp;o&#114;der&nbsp;by&nbsp;gid&nbsp;desc)&nbsp;as&nbsp;a&nbsp;o&#114;der&nbsp;by&nbsp;gid&nbsp;asc&nbsp;这条语句，从理论上讲，整条语句的执行时间应该比子句的执行时间长，但事实相反。因为，子句执行后返回的是10000条记录，而整条语句仅返回10条语句，所以影响数据库响应时间最大的因素是物理I/O操作。而限制物理I/O操作此处的最有效方法之一就是使用TOP关键词了。TOP关键词是SQL&nbsp;SERVER中经过系统优化过的一个用来提取前几条或前几个百分比数据的词。经笔者在实践中的应用，发现TOP确实很好用，效率也很高。但这个词在另外一个大型数据库ORACLE中却没有，这不能说不是一个遗憾，虽然在ORACLE中可以用其他方法（如：rownumber）来解决。在以后的关于“实现千万级数据的分页显示存储过程”的讨论中，我们就将用到TOP这个关键词。&nbsp;到此为止，我们上面讨论了如何实现从大容量的数据库中快速地查询出您所需要的数据方法。当然，我们介绍的这些方法都是“软”方法，在实践中，我们还要考虑各种“硬”因素，如：网络性能、服务器的性能、操作系统的性能，甚至网卡、交换机等。&nbsp;三、实现小数据量和海量数据的通用分页显示存储过程&nbsp;建立一个web&nbsp;应用，分页浏览功能必不可少。这个问题是数据库处理中十分常见的问题。经典的数据分页方法是:ADO&nbsp;纪录集分页法，也就是利用ADO自带的分页功能（利用游标）来实现分页。但这种分页方法仅适用于较小数据量的情形，因为游标本身有缺点：游标是存放在内存中，很费内存。游标一建立，就将相关的记录锁住，直到取消游标。游标提供了对特定集合中逐行扫描的手段，一般使用游标来逐行遍历数据，根据取出数据条件的不同进行不同的操作。而对于多表和大表中定义的游标（大的数据集合）循环很容易使程序进入一个漫长的等待甚至死机。&nbsp;更重要的是，对于非常大的数据模型而言，分页检索时，如果按照传统的每次都加载整个数据源的方法是非常浪费资源的。现在流行的分页方法一般是检索页面大小的块区的数据，而非检索所有的数据，然后单步执行当前行。&nbsp;   &nbsp;最早较好地实现这种根据页面大小和页码来提取数据的方法大概就是“俄罗斯存储过程”。这个存储过程用了游标，由于游标的局限性，所以这个方法并没有得到大家的普遍认可。&nbsp;后来，网上有人改造了此存储过程，下面的存储过程就是结合我们的办公自动化实例写的分页存储过程：&nbsp;Cr&#101;ate&nbsp;procedure&nbsp;pagination1&nbsp;(@pagesize&nbsp;int, &nbsp;--页面大小，如每页存储20条记录&nbsp;@pageindex&nbsp;int  &nbsp;--当前页码&nbsp;)&nbsp;as&nbsp;set&nbsp;nocount&nbsp;on&nbsp;begin&nbsp;declare&nbsp;@indextable&nbsp;table(id&nbsp;int&nbsp;identity(1,1),nid&nbsp;int) &nbsp;--定义表变量&nbsp;declare&nbsp;@PageLowerBound&nbsp;int &nbsp;--定义此页的底码&nbsp;declare&nbsp;@PageUpperBound&nbsp;int &nbsp;--定义此页的顶码&nbsp;set&nbsp;@PageLowerBound=(@pageindex-1)*@pagesize&nbsp;set&nbsp;@PageUpperBound=@PageLowerBound+@pagesize&nbsp;set&nbsp;rowcount&nbsp;@PageUpperBound&nbsp;ins&#101;rt&nbsp;into&nbsp;@indextable(nid)&nbsp;sel&#101;ct&nbsp;gid&nbsp;from&nbsp;TGongwen&nbsp;wh&#101;re&nbsp;fariqi&nbsp;&gt;dateadd(day,-365,getdate())&nbsp;o&#114;der&nbsp;by&nbsp;fariqi&nbsp;desc&nbsp;sel&#101;ct&nbsp;O.gid,O.mid,O.title,O.fadanwei,O.fariqi&nbsp;from&nbsp;TGongwen&nbsp;O,@indextable&nbsp;t&nbsp;wh&#101;re&nbsp;O.gid=t.nid&nbsp;and&nbsp;t.id&gt;@PageLowerBound&nbsp;and&nbsp;t.id&lt;=@PageUpperBound&nbsp;o&#114;der&nbsp;by&nbsp;t.id&nbsp;end&nbsp;set&nbsp;nocount&nbsp;off&nbsp;以上存储过程运用了SQL&nbsp;SERVER的最新技术――表变量。应该说这个存储过程也是一个非常优秀的分页存储过程。当然，在这个过程中，您也可以把其中的表变量写成临时表：Cr&#101;ate&nbsp;TABLE&nbsp;#Temp。但很明显，在SQL&nbsp;SERVER中，用临时表是没有用表变量快的。所以笔者刚开始使用这个存储过程时，感觉非常的不错，速度也比原来的ADO的好。但后来，我又发现了比此方法更好的方法。]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=129</link>
			<title><![CDATA[海量查询的数据优化（十）]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Tue,28 Sep 2010 14:43:09 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=129</guid>	
		<description><![CDATA[10、count(*)不比count(字段)慢&nbsp;某些资料上说：用*会统计所有列，显然要比一个世界的列名效率低。这种说法其实是没有根据的。我们来看：&nbsp;sel&#101;ct&nbsp;count(*)&nbsp;from&nbsp;Tgongwen&nbsp;用时：1500毫秒&nbsp;sel&#101;ct&nbsp;count(gid)&nbsp;from&nbsp;Tgongwen&nbsp;用时：1483毫秒&nbsp;sel&#101;ct&nbsp;count(fariqi)&nbsp;from&nbsp;Tgongwen&nbsp;用时：3140毫秒&nbsp;sel&#101;ct&nbsp;count(title)&nbsp;from&nbsp;Tgongwen&nbsp;用时：52050毫秒&nbsp;从以上可以看出，如果用count(*)和用count(主键)的速度是相当的，而count(*)却比其他任何除主键以外的字段汇总速度要快，而且字段越长，汇总的速度就越慢。我想，如果用count(*)，&nbsp;SQL&nbsp;SERVER可能会自动查找最小字段来汇总的。当然，如果您直接写count(主键)将会来的更直接些。&nbsp;11、order&nbsp;by按聚集索引列排序效率最高&nbsp;我们来看：（gid是主键，fariqi是聚合索引列）&nbsp;sel&#101;ct&nbsp;top&nbsp;10000&nbsp;gid,fariqi,reader,title&nbsp;from&nbsp;tgongwen&nbsp;用时：196&nbsp;毫秒。&nbsp;扫描计数&nbsp;1，逻辑读&nbsp;289&nbsp;次，物理读&nbsp;1&nbsp;次，预读&nbsp;1527&nbsp;次。&nbsp;sel&#101;ct&nbsp;top&nbsp;10000&nbsp;gid,fariqi,reader,title&nbsp;from&nbsp;tgongwen&nbsp;o&#114;der&nbsp;by&nbsp;gid&nbsp;asc&nbsp;用时：4720毫秒。&nbsp;扫描计数&nbsp;1，逻辑读&nbsp;41956&nbsp;次，物理读&nbsp;0&nbsp;次，预读&nbsp;1287&nbsp;次。&nbsp;sel&#101;ct&nbsp;top&nbsp;10000&nbsp;gid,fariqi,reader,title&nbsp;from&nbsp;tgongwen&nbsp;o&#114;der&nbsp;by&nbsp;gid&nbsp;desc&nbsp;用时：4736毫秒。&nbsp;扫描计数&nbsp;1，逻辑读&nbsp;55350&nbsp;次，物理读&nbsp;10&nbsp;次，预读&nbsp;775&nbsp;次。&nbsp;sel&#101;ct&nbsp;top&nbsp;10000&nbsp;gid,fariqi,reader,title&nbsp;from&nbsp;tgongwen&nbsp;o&#114;der&nbsp;by&nbsp;fariqi&nbsp;asc&nbsp;用时：173毫秒。&nbsp;扫描计数&nbsp;1，逻辑读&nbsp;290&nbsp;次，物理读&nbsp;0&nbsp;次，预读&nbsp;0&nbsp;次。&nbsp;sel&#101;ct&nbsp;top&nbsp;10000&nbsp;gid,fariqi,reader,title&nbsp;from&nbsp;tgongwen&nbsp;o&#114;der&nbsp;by&nbsp;fariqi&nbsp;desc&nbsp;用时：156毫秒。&nbsp;扫描计数&nbsp;1，逻辑读&nbsp;289&nbsp;次，物理读&nbsp;0&nbsp;次，预读&nbsp;0&nbsp;次。&nbsp;从以上我们可以看出，不排序的速度以及逻辑读次数都是和“order&nbsp;by&nbsp;聚集索引列”&nbsp;的速度是相当的，但这些都比“order&nbsp;by&nbsp;非聚集索引列”的查询速度是快得多的。&nbsp;同时，按照某个字段进行排序的时候，无论是正序还是倒序，速度是基本相当的。]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=128</link>
			<title><![CDATA[海量查询的数据优化（九）]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Sun,19 Sep 2010 16:38:12 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=128</guid>	
		<description><![CDATA[<br/>8、union并不绝对比or的执行效率高&nbsp;我们前面已经谈到了在wh&#101;re子句中使用or会引起全表扫描，一般的，我所见过的资料都是推荐这里用union来代替or。事实证明，这种说法对于大部分都是适用的。&nbsp;sel&#101;ct&nbsp;gid,fariqi,neibuyonghu,reader,title&nbsp;from&nbsp;Tgongwen&nbsp;wh&#101;re&nbsp;fariqi=&#39;2004-9-16&#39;&nbsp;o&#114;&nbsp;gid&gt;9990000&nbsp;用时：68秒。扫描计数&nbsp;1，逻辑读&nbsp;404008&nbsp;次，物理读&nbsp;283&nbsp;次，预读&nbsp;392163&nbsp;次。&nbsp;sel&#101;ct&nbsp;gid,fariqi,neibuyonghu,reader,title&nbsp;from&nbsp;Tgongwen&nbsp;wh&#101;re&nbsp;fariqi=&#39;2004-9-16&#39;&nbsp;union&nbsp;sel&#101;ct&nbsp;gid,fariqi,neibuyonghu,reader,title&nbsp;from&nbsp;Tgongwen&nbsp;wh&#101;re&nbsp;gid&gt;9990000&nbsp;用时：9秒。扫描计数&nbsp;8，逻辑读&nbsp;67489&nbsp;次，物理读&nbsp;216&nbsp;次，预读&nbsp;7499&nbsp;次。&nbsp;看来，用union在通常情况下比用or的效率要高的多。&nbsp;但经过试验，笔者发现如果or两边的查询列是一样的话，那么用union则反倒和用or的执行速度差很多，虽然这里union扫描的是索引，而or扫描的是全表。&nbsp;sel&#101;ct&nbsp;gid,fariqi,neibuyonghu,reader,title&nbsp;from&nbsp;Tgongwen&nbsp;wh&#101;re&nbsp;fariqi=&#39;2004-9-16&#39;&nbsp;o&#114;&nbsp;fariqi=&#39;2004-2-5&#39;&nbsp;用时：6423毫秒。扫描计数&nbsp;2，逻辑读&nbsp;14726&nbsp;次，物理读&nbsp;1&nbsp;次，预读&nbsp;7176&nbsp;次。&nbsp;sel&#101;ct&nbsp;gid,fariqi,neibuyonghu,reader,title&nbsp;from&nbsp;Tgongwen&nbsp;wh&#101;re&nbsp;fariqi=&#39;2004-9-16&#39;&nbsp;union&nbsp;sel&#101;ct&nbsp;gid,fariqi,neibuyonghu,reader,title&nbsp;from&nbsp;Tgongwen&nbsp;wh&#101;re &nbsp;fariqi=&#39;2004-2-5&#39;&nbsp;用时：11640毫秒。扫描计数&nbsp;8，逻辑读&nbsp;14806&nbsp;次，物理读&nbsp;108&nbsp;次，预读&nbsp;1144&nbsp;次。&nbsp;9、字段提取要按照“需多少、提多少”的原则，避免“sel&#101;ct&nbsp;*”&nbsp;我们来做一个试验：&nbsp;sel&#101;ct&nbsp;top&nbsp;10000&nbsp;gid,fariqi,reader,title&nbsp;from&nbsp;tgongwen&nbsp;o&#114;der&nbsp;by&nbsp;gid&nbsp;desc&nbsp;用时：4673毫秒&nbsp;sel&#101;ct&nbsp;top&nbsp;10000&nbsp;gid,fariqi,title&nbsp;from&nbsp;tgongwen&nbsp;o&#114;der&nbsp;by&nbsp;gid&nbsp;desc&nbsp;用时：1376毫秒&nbsp;sel&#101;ct&nbsp;top&nbsp;10000&nbsp;gid,fariqi&nbsp;from&nbsp;tgongwen&nbsp;o&#114;der&nbsp;by&nbsp;gid&nbsp;desc&nbsp;用时：80毫秒&nbsp;由此看来，我们每少提取一个字段，数据的提取速度就会有相应的提升。提升的速度还要看您舍弃的字段的大小来判断。]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=127</link>
			<title><![CDATA[海量查询的数据优化（八）]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Wed,08 Sep 2010 11:33:10 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=127</guid>	
		<description><![CDATA[<br/>很多资料上都显示说，exists要比in的执行效率要高，同时应尽可能的用not&nbsp;exists来代替not&nbsp;in。但事实上，我试验了一下，发现二者无论是前面带不带not，二者之间的执行效率都是一样的。因为涉及子查询，我们试验这次用SQL&nbsp;SERVER自带的pubs数据库。运行前我们可以把SQL&nbsp;SERVER的statistics&nbsp;I/O状态打开。&nbsp;（1）sel&#101;ct&nbsp;title,price&nbsp;from&nbsp;titles&nbsp;wh&#101;re&nbsp;title_id&nbsp;in&nbsp;(sel&#101;ct&nbsp;title_id&nbsp;from&nbsp;sales&nbsp;wh&#101;re&nbsp;qty&gt;30)&nbsp;该句的执行结果为：&nbsp;表&nbsp;&#39;sales&#39;。扫描计数&nbsp;18，逻辑读&nbsp;56&nbsp;次，物理读&nbsp;0&nbsp;次，预读&nbsp;0&nbsp;次。&nbsp;表&nbsp;&#39;titles&#39;。扫描计数&nbsp;1，逻辑读&nbsp;2&nbsp;次，物理读&nbsp;0&nbsp;次，预读&nbsp;0&nbsp;次。&nbsp;  &nbsp;（2）sel&#101;ct&nbsp;title,price&nbsp;from&nbsp;titles&nbsp;wh&#101;re&nbsp;exists&nbsp;(sel&#101;ct&nbsp;*&nbsp;from&nbsp;sales&nbsp;wh&#101;re&nbsp;sales.title_id=titles.title_id&nbsp;and&nbsp;qty&gt;30)&nbsp;第二句的执行结果为：&nbsp;表&nbsp;&#39;sales&#39;。扫描计数&nbsp;18，逻辑读&nbsp;56&nbsp;次，物理读&nbsp;0&nbsp;次，预读&nbsp;0&nbsp;次。&nbsp;表&nbsp;&#39;titles&#39;。扫描计数&nbsp;1，逻辑读&nbsp;2&nbsp;次，物理读&nbsp;0&nbsp;次，预读&nbsp;0&nbsp;次。&nbsp;我们从此可以看到用exists和用in的执行效率是一样的。&nbsp;7、用函数charindex()和前面加通配符%的LIKE执行效率一样&nbsp;前面，我们谈到，如果在LIKE前面加上通配符%，那么将会引起全表扫描，所以其执行效率是低下的。但有的资料介绍说，用函数charindex()来代替LIKE速度会有大的提升，经我试验，发现这种说明也是错误的：&nbsp;sel&#101;ct&nbsp;gid,title,fariqi,reader&nbsp;from&nbsp;tgongwen&nbsp;wh&#101;re&nbsp;charindex(&#39;刑侦支队&#39;,reader)&gt;0&nbsp;and&nbsp;fariqi&gt;&#39;2004-5-5&#39;&nbsp;用时：7秒，另外：扫描计数&nbsp;4，逻辑读&nbsp;7155&nbsp;次，物理读&nbsp;0&nbsp;次，预读&nbsp;0&nbsp;次。&nbsp;sel&#101;ct&nbsp;gid,title,fariqi,reader&nbsp;from&nbsp;tgongwen&nbsp;wh&#101;re&nbsp;reader&nbsp;like&nbsp;&#39;%&#39;&nbsp;+&nbsp;&#39;刑侦支队&#39;&nbsp;+&nbsp;&#39;%&#39;&nbsp;and&nbsp;fariqi&gt;&#39;2004-5-5&#39;&nbsp;用时：7秒，另外：扫描计数&nbsp;4，逻辑读&nbsp;7155&nbsp;次，物理读&nbsp;0&nbsp;次，预读&nbsp;0&nbsp;次。]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=126</link>
			<title><![CDATA[富基旋风移动营销平台]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Fri,27 Aug 2010 16:30:22 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=126</guid>	
		<description><![CDATA[<br/><br/>客户介绍：<br/><br/>　　eFuture富基融通科技有限公司是亚太地区零售和消费品行业软件及电子服务的领导供应商之一，2006年10月31日登陆美国NASDAQ资本市场（股票交易代码：EFUT）。中国总部在北京，在上海、广州、武汉设有软件开发基地。现有员工800多名，其中技术团队400多人。全国设有23个办事处，35个城市服务站。2008年正式成立eFuture中国流通研究院。<br/><br/>eFuture富基融通科技有限公司是第一家在NASDAQ上市的中国软件和服务公司，注重国际规范化的公司治理，严格遵从萨班斯法案&nbsp;<br/><br/><br/>项目内容：<br/><br/><br/>　　&nbsp;富基旋风移动营销平台&nbsp;是富基融通公司与新网互联合作提供给超市卖场的一个短信营销平台，其平台框架如下。<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=125</link>
			<title><![CDATA[宁夏联通wap平台]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Fri,27 Aug 2010 16:29:18 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=125</guid>	
		<description><![CDATA[<br/><br/><br/>客户介绍：<br/><br/><br/>　　&nbsp;中国联合网络通信集团有限公司（简称中国联通）于2009年1月6日在原中国网通和原中国联通的基础上合并而成，在国内31个省（自治区、直辖市）和境外多个国家和地区设有分支机构，是中国唯一一家同时在纽约、香港、上海三地上市的电信运营企业。截至2008年底，资产规模达到5266.6亿元人民币，员工总数为46.3万人。&nbsp;<br/><br/>项目内容介绍：<br/><br/><br/>　　&nbsp;宁夏联通wap平台包含了信息发布系统和集团客户应用系统，主要是通过手机wap方式为企业客户提供信息服务和交流平台。<br/><br/>该系统同样是基于J2EE平台架构，包含了短信、彩信、手机wap等多种技术应用。&nbsp;<br/><br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=124</link>
			<title><![CDATA[江西奉新电力MIS系统]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Fri,27 Aug 2010 16:28:29 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=124</guid>	
		<description><![CDATA[<br/><br/><br/>项目内容介绍：<br/><br/><br/>　　&nbsp;奉新电力MIS系统是线点科技基于J2EE技术，为江西奉新电力公司开发的集成了OA、设备管理、生产技术管理、调度管理、两票管理、物资管理多个模块的协同办公平台。线点科技充分利用公司资源和技术积累，按时保质地完成了项目开发和实施任务。系统功能框架图如下：<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=123</link>
			<title><![CDATA[深圳电信呼叫中心系统]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Fri,27 Aug 2010 16:27:40 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=123</guid>	
		<description><![CDATA[<br/>客户介绍：<br/><br/>　　中国电信广东公司是中国电信集团公司最大的省级分公司，总资产近1000亿元，年收入占中国电信股份有限公司的五分之一。&nbsp;2000年以来，累计向国家上缴税收近350亿元。2007年，在广东省50强企业中排行第13位，同年被评为“广东省通信发展突出贡献单位”和“广东省十大国有诚信企业”。截至2008年6月底，固定电话用户2500万户，小灵通用户850万户，宽带用户700万户，均居全国第一，用户规模超过了英国电信、法国电信等欧洲发达国家主导运营商。<br/>　　作为国家主体电信运营企业，中国电信广东公司一直承担着普遍服务、党政专网通信、应急通信、战备通信和抗洪救灾通信保障重任，在广东信息化建设中发挥着骨干作用。<br/><br/><br/>项目内容：<br/><br/><br/>　　&nbsp;深圳电信呼叫中心在08-09年度的系统升级中，面临硬件设备升级改造，网络扩容，软件升级和开发的多项工作，同时在线人工坐席也从1000增加到2000坐席，对于软件的性能、负载能力、无故障持续运行时间的要求都非常高。线点科技在此次扩容工作中，主要承担了其中知识管理、工作流管理的软件开发和集成工作。&nbsp;<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=122</link>
			<title><![CDATA[专利检索系统解决方案]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Fri,27 Aug 2010 16:23:21 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=122</guid>	
		<description><![CDATA[线点科技凭借多年来在专利行业的研究开发经验，以及大量的客户案例，我们提供从专利数据、业务功能展现、数据分析到硬件平台，基础平台的搭建整套方案。数据规模从几十万到数千万不等。我们服务过的重点客户包括：<br/><br/>北京市知识产权局<br/>上海市知识产权局<br/>长沙市知识产权局<br/>包头稀土研究院<br/>中冶长天<br/>中联重工<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=121</link>
			<title><![CDATA[企业竞争性情报系统解决方案]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Fri,27 Aug 2010 16:21:31 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=121</guid>	
		<description><![CDATA[企业竞争性情报－对整体竞争环境和竞争对手的一个全面监测过程。是用合法和道德的手段，通过长期系统地跟踪、收集、分析和处理各种可能对企业发展、决策及运行产生影响的信息，最终提炼出本企业及主要对手企业在市场竞争中的优势、劣势和机会的关键情报，从而帮助企业战略规划、投资与购并、研究与发展、市场营销等职能部门的管理者，在信息充分的条件下制定决策。<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=120</link>
			<title><![CDATA[企业竞争性情报系统]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Fri,27 Aug 2010 16:20:36 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=120</guid>	
		<description><![CDATA[产品概述：<br/><br/>&nbsp;&nbsp;中文名称：企业竞争性情报系统<br/>&nbsp;&nbsp;英文简称：XDCIS<br/>&nbsp;&nbsp;当前版本：3.4.x<br/><br/>主要面向客户和应用领域：<br/><br/>&nbsp;&nbsp;大中型企业、研究院所等等<br/><br/>产品描述<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;企业竞争性情报系统是应用了搜索引擎技术，结合企业情报部门、知识管理部门的业务需求，开发的一套集互联网舆情采集、情报收集、审核发布、专题制作、情报门户、流程管理等功能为一体的企业情报工作平台。<br/><br/>功能及特点：<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;根据系统的需求分析，我们将系统分为情报采集子系统、搜索服务子系统、应用子系统、接口子系统四个部分。&nbsp;<br/>1.&nbsp;情报采集子系统<br/>&nbsp;&nbsp;情报采集子系统包含网页情报的采集、分析、存储等功能。<br/>&nbsp;&nbsp;情报采集子系统的数据采集对象主要是互联网网站和网页，数据源主要有两种，一是通过指定范围的网站对其进行抓取采集，另一种是通过baidu、google进行全网的数据采集监控。<br/>&nbsp;&nbsp;在情报采集过程中，包含了对于正文内容的自动识别、文章去重与相似度分析、自动生成摘要和关键词等多项中文语言处理技术。<br/>&nbsp;&nbsp;此外，情报采集子系统还能够针对网页中的图片、文档资源文件进行采集下载，具有生成网页图片和快照、实现网站自动登录、利用代理服务器下载、JS自动识别判断、分布式采集等多项功能。<br/>&nbsp;&nbsp;在情报数据采集子系统中采用了模版技术，系统内置数百个网站的模版，使得用户的配置过程相当简便。<br/><br/>2.&nbsp;搜索服务子系统<br/>&nbsp;&nbsp;&nbsp;在企业竞争性情报系统中内置了全文检索引擎，可以针对海量情报信息提供快速准确的搜索服务。<br/><br/>3.&nbsp;应用子系统<br/>&nbsp;&nbsp;&nbsp;应用子系统包括情报的分类、编辑、审核、发布、专题创建，门户管理等多个应用模块。<br/><br/>4.&nbsp;接口子系统<br/>&nbsp;&nbsp;&nbsp;接口子系统包括检索接口、索引管理接口、权限接口、单点登录接口等多种<br/><br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=119</link>
			<title><![CDATA[专利检索产品]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Fri,27 Aug 2010 16:19:40 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=119</guid>	
		<description><![CDATA[产品概述：<br/><br/>&nbsp;&nbsp;中文名称：专利检索产品<br/>&nbsp;&nbsp;英文简称：XDPMS<br/>&nbsp;&nbsp;当前版本：3.x<br/><br/>主要面向客户和应用领域：<br/><br/>&nbsp;&nbsp;国家知识产权部门、大型企业工厂、研究院所、知识产权注册代理机构等等<br/><br/>产品描述<br/><br/>&nbsp;&nbsp;专利数据检索系统是一款基于语言分析处理技术和文本聚类算法而开发的智能检索系统。目前，该检索系统包括一个智能的数据处理引擎和多个专利数据库，它们分别收集了1976至今的各国英文专利以及1985年至今的中国中文专利文献。<br/><br/>&nbsp;&nbsp;该检索系统不仅提供了基本的表格检索和布尔逻辑检索功能，还引入了概念检索功能，即通过对文档关键概念的自动文本聚类分析，得出与某一概念相关度较高的检索结果，同时可实现多种统计分析功能。此外，该系统含有动态链接的检索界面、灵活的检索入口和友好的操作界面，便于用户进行操作和管理。&nbsp;<br/><br/>功能及特点：<br/><br/>1.&nbsp;多种检索方式支持<br/>&nbsp;&nbsp;&nbsp;系统支持简单检索、表格检索、IPC检索、公式检索、二次检索等多种专利检索方式，并可对检索结果进行关联分析。<br/><br/>2.&nbsp;中英文双语检索<br/>&nbsp;&nbsp;&nbsp;在检索子系统中具有中英文双语检索的功能。即输入中文会自动翻译成英文在选定数据库中进行检索，输入英文自动翻译成中文在选定数据库中进行检索。<br/><br/>3.&nbsp;概念检索<br/>&nbsp;&nbsp;&nbsp;当用户输入一个检索词（如“计算机”）后，检索工具不仅能检索出包含这个具体词汇——计算机——的专利信息，还能检索出包含那些与该词汇同属一类概念的词汇的结果，如与“电脑”、“微型机”、“computer”等相关的信息也能检索出来，从而帮助用户获得最佳的检索效果。<br/><br/>4.&nbsp;数据分析与统计<br/>&nbsp;&nbsp;&nbsp;系统提供了多达几十种多维度、多形式的数据分析与统计功能，包括对时间、发明人、区域、IPC等维度的统计功能，并可通过柱状图、折线图、饼图进行展示。<br/><br/>5.&nbsp;企业自建库<br/>&nbsp;&nbsp;&nbsp;用户可以根据自己的检索结果建立多个逻辑库，并可方便地对逻辑库中的数据进行分析处理。<br/><br/>6.&nbsp;支持多种语言开发接口<br/>&nbsp;&nbsp;&nbsp;产品以标准的WebService方式提供多种语言开发接口，支持的语言包括.NET，JAVA，PHP等。可与各类WEB应用进行无缝集成。同时提供完善的二次开发API手册帮助及应用示例。<br/><br/>7.&nbsp;分布式系统支持<br/>&nbsp;&nbsp;&nbsp;当信息数量超过一台计算机的负载能力，而无法达到要求的查询效率，或是系统需要承受更大的访问压力时，分布式系系统无疑是最好的解决方案。通过分布式系统的支持，系统的数据负载能力可以从300万提高到8000万，甚至更多。<br/><br/>8.&nbsp;操作简易、维护方便<br/>&nbsp;&nbsp;&nbsp;提供完整的后台界面，所有配置和操作都可以通过IE访问产品后台进行，操作简易，维护方便，同时也不影响服务器的安全性。<br/><br/>9.&nbsp;索引自动检测与修复<br/>&nbsp;&nbsp;&nbsp;XDPMS的数据检测机制可以自动修复损坏的数据，最大程度的保证系统可用性。<br/><br/>10.&nbsp;高可用系统负载均衡/集群<br/>&nbsp;&nbsp;&nbsp;完全支持系统负载均衡/集群部署模式，可以支撑电信级系统的运用。<br/><br/>11.&nbsp;数据加密与数据传输安全SSL<br/>&nbsp;&nbsp;&nbsp;为了保障用户数据的安全性，产品在数据存储上采用加密存储方式，防止数据的外泄，在传输上支持SSL的安全传输方式，支持HTTPS安全访问协议。<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=118</link>
			<title><![CDATA[海量查询的数据优化（七）]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Tue,24 Aug 2010 10:31:14 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=118</guid>	
		<description><![CDATA[<br/>介绍完SARG后，我们来总结一下使用SARG以及在实践中遇到的和某些资料上结论不同的经验：&nbsp;1、Like语句是否属于SARG取决于所使用的通配符的类型&nbsp;如：name&nbsp;like&nbsp;‘张%’&nbsp;，这就属于SARG&nbsp;而：name&nbsp;like&nbsp;‘%张’&nbsp;,就不属于SARG。&nbsp;原因是通配符%在字符串的开通使得索引无法使用。&nbsp;2、or&nbsp;会引起全表扫描&nbsp;Name=’张三’&nbsp;and&nbsp;价格&gt;5000&nbsp;符号SARG，而：Name=’张三’&nbsp;o&#114;&nbsp;价格&gt;5000&nbsp;则不符合SARG。使用or会引起全表扫描。&nbsp;3、非操作符、函数引起的不满足SARG形式的语句&nbsp;不满足SARG形式的语句最典型的情况就是包括非操作符的语句，如：NOT、!=、&lt;&gt;、!&lt;、!&gt;、NOT&nbsp;EXISTS、NOT&nbsp;IN、NOT&nbsp;LIKE等，另外还有函数。下面就是几个不满足SARG形式的例子：&nbsp;ABS(价格)&lt;5000&nbsp;Name&nbsp;like&nbsp;‘%三’&nbsp;有些表达式，如：&nbsp;Wh&#101;re&nbsp;价格*2&gt;5000&nbsp;SQL&nbsp;SERVER也会认为是SARG，SQL&nbsp;SERVER会将此式转化为：&nbsp;Wh&#101;re&nbsp;价格&gt;2500/2&nbsp;但我们不推荐这样使用，因为有时SQL&nbsp;SERVER不能保证这种转化与原始表达式是完全等价的。&nbsp;4、IN&nbsp;的作用相当与OR&nbsp;语句：&nbsp;Sel&#101;ct&nbsp;*&nbsp;from&nbsp;table1&nbsp;wh&#101;re&nbsp;tid&nbsp;in&nbsp;(2,3)&nbsp;和&nbsp;Sel&#101;ct&nbsp;*&nbsp;from&nbsp;table1&nbsp;wh&#101;re&nbsp;tid=2&nbsp;o&#114;&nbsp;tid=3&nbsp;是一样的，都会引起全表扫描，如果tid上有索引，其索引也会失效。&nbsp;5、尽量少用NOT&nbsp;6、exists&nbsp;和&nbsp;in&nbsp;的执行效率是一样的]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=117</link>
			<title><![CDATA[海量查询的数据优化（六）]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Mon,16 Aug 2010 14:09:12 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=117</guid>	
		<description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;二、改善SQL语句&nbsp;很多人不知道SQL语句在SQL&nbsp;SERVER中是如何执行的，他们担心自己所写的SQL语句会被SQL&nbsp;SERVER误解。比如：&nbsp;sel&#101;ct&nbsp;*&nbsp;from&nbsp;table1&nbsp;wh&#101;re&nbsp;name=&#39;zhangsan&#39;&nbsp;and&nbsp;tID&nbsp;&gt;&nbsp;10000&nbsp;和执行:&nbsp;sel&#101;ct&nbsp;*&nbsp;from&nbsp;table1&nbsp;wh&#101;re&nbsp;tID&nbsp;&gt;&nbsp;10000&nbsp;and&nbsp;name=&#39;zhangsan&#39;&nbsp;一些人不知道以上两条语句的执行效率是否一样，因为如果简单的从语句先后上看，这两个语句的确是不一样，如果tID是一个聚合索引，那么后一句仅仅从表的&nbsp;10000条以后的记录中查找就行了；而前一句则要先从全表中查找看有几个name=&#39;zhangsan&#39;的，而后再根据限制条件条件tID&gt;&nbsp;10000来提出查询结果。&nbsp;事实上，这样的担心是不必要的。SQL&nbsp;SERVER中有一个“查询分析优化器”，它可以计算出wh&#101;re子句中的搜索条件并确定哪个索引能缩小表扫描的搜索空间，也就是说，它能实现自动优化。&nbsp;虽然查询优化器可以根据wh&#101;re子句自动的进行查询优化，但大家仍然有必要了解一下“查询优化器”的工作原理，如非这样，有时查询优化器就会不按照您的本意进行快速查询。&nbsp;在查询分析阶段，查询优化器查看查询的每个阶段并决定限制需要扫描的数据量是否有用。如果一个阶段可以被用作一个扫描参数（SARG），那么就称之为可优化的，并且可以利用索引快速获得所需数据。&nbsp;SARG的定义：用于限制搜索的一个操作，因为它通常是指一个特定的匹配，一个值得范围内的匹配或者两个以上条件的AND连接。形式如下：&nbsp;列名&nbsp;操作符&nbsp;&lt;常数&nbsp;或&nbsp;变量&gt;&nbsp;或&nbsp;&lt;常数&nbsp;或&nbsp;变量&gt;&nbsp;操作符列名&nbsp;列名可以出现在操作符的一边，而常数或变量出现在操作符的另一边。如：&nbsp;Name=’张三’&nbsp;价格&gt;5000&nbsp;5000&lt;价格&nbsp;Name=’张三’&nbsp;and&nbsp;价格&gt;5000&nbsp;如果一个表达式不能满足SARG的形式，那它就无法限制搜索的范围了，也就是SQL&nbsp;SERVER必须对每一行都判断它是否满足Wh&#101;re子句中的所有条件。所以一个索引对于不满足SARG形式的表达式来说是无用的。]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=116</link>
			<title><![CDATA[海量查询的数据优化（五）]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Thu,05 Aug 2010 10:15:45 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=116</guid>	
		<description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3、使用聚合索引内的时间段，搜索时间会按数据占整个数据表的百分比成比例减少，而无论聚合索引使用了多少个&nbsp;sel&#101;ct&nbsp;gid,fariqi,neibuyonghu,reader,title&nbsp;from&nbsp;Tgongwen&nbsp;wh&#101;re&nbsp;fariqi&gt;&#39;2004-1-1&#39;&nbsp;用时：6343毫秒（提取100万条）&nbsp;sel&#101;ct&nbsp;gid,fariqi,neibuyonghu,reader,title&nbsp;from&nbsp;Tgongwen&nbsp;wh&#101;re&nbsp;fariqi&gt;&#39;2004-6-6&#39;&nbsp;用时：3170毫秒（提取50万条）&nbsp;sel&#101;ct&nbsp;gid,fariqi,neibuyonghu,reader,title&nbsp;from&nbsp;Tgongwen&nbsp;wh&#101;re&nbsp;fariqi=&#39;2004-9-16&#39;&nbsp;用时：3326毫秒（和上句的结果一模一样。如果采集的数量一样，那么用大于号和等于号是一样的）&nbsp;sel&#101;ct&nbsp;gid,fariqi,neibuyonghu,reader,title&nbsp;from&nbsp;Tgongwen&nbsp;wh&#101;re&nbsp;fariqi&gt;&#39;2004-1-1&#39;&nbsp;and&nbsp;fariqi&lt;&#39;2004-6-6&#39;&nbsp;用时：3280毫秒<br/>4&nbsp;、日期列不会因为有分秒的输入而减慢查询速度&nbsp;下面的例子中，共有100万条数据，2004年1月1日以后的数据有50万条，但只有两个不同的日期，日期精确到日；之前有数据50万条，有5000个不同的日期，日期精确到秒。&nbsp;sel&#101;ct&nbsp;gid,fariqi,neibuyonghu,reader,title&nbsp;from&nbsp;Tgongwen&nbsp;wh&#101;re&nbsp;fariqi&gt;&#39;2004-1-1&#39;&nbsp;o&#114;der&nbsp;by&nbsp;fariqi&nbsp;用时：6390毫秒&nbsp;sel&#101;ct&nbsp;gid,fariqi,neibuyonghu,reader,title&nbsp;from&nbsp;Tgongwen&nbsp;wh&#101;re&nbsp;fariqi&lt;&#39;2004-1-1&#39;&nbsp;o&#114;der&nbsp;by&nbsp;fariqi&nbsp;用时：6453毫秒&nbsp;（五）其他注意事项&nbsp;“水可载舟，亦可覆舟”，索引也一样。索引有助于提高检索性能，但过多或不当的索引也会导致系统低效。因为用户在表中每加进一个索引，数据库就要做更多的工作。过多的索引甚至会导致索引碎片。&nbsp;所以说，我们要建立一个“适当”的索引体系，特别是对聚合索引的创建，更应精益求精，以使您的数据库能得到高性能的发挥。&nbsp;当然，在实践中，作为一个尽职的数据库管理员，您还要多测试一些方案，找出哪种方案效率最高、最为有效。&nbsp;]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=115</link>
			<title><![CDATA[五种开源协议的比较(BSD,Apache,GPL,LGPL,MIT) – 整理]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Wed,28 Jul 2010 10:17:28 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=115</guid>	
		<description><![CDATA[<br/>关键词:&nbsp;Apache,BSD,GPL,LGPL,MIT,协议,开源,扫盲系列<br/>当Adobe、Microsoft、Sun等一系列巨头开始表现出对”开源”的青睐时，”开源”的时代即将到来！<br/>最初来自：sinoprise.com/read.php?tid-662-page-e-fpage-1.html（遗憾的是这个链接已经打不开了），我基本未改动，只是进行了一些排版和整理。<br/>参考文献：<a href="http://www.fsf.org/licensing/licenses/" target="_blank">http://www.fsf.org/licensing/licenses/</a><br/>现今存在的开源协议很多，而经过Open&nbsp;Source&nbsp;Initiative组织通过批准的开源协议目前有58种（<a href="http://www.opensource.org/licenses/alphabetical" target="_blank">http://www.opensource.org/licenses/alphabetical</a>）。我们在常见的开源协议如BSD,&nbsp;GPL,&nbsp;LGPL,MIT等都是OSI批准的协议。如果要开源自己的代码，最好也是选择这些被批准的开源协议。<br/>这里我们来看四种最常用的开源协议及它们的适用范围，供那些准备开源或者使用开源产品的开发人员/厂家参考。<br/>BSD开源协议（original&nbsp;BSD&nbsp;license、FreeBSD&nbsp;license、Original&nbsp;BSD&nbsp;license）<br/>BSD开源协议是一个给于使用者很大自由的协议。基本上使用者可以”为所欲为”,可以自由的使用，修改源代码，也可以将修改后的代码作为开源或者专有软件再发布。<br/>但”为所欲为”的前提当你发布使用了BSD协议的代码，或则以BSD协议代码为基础做二次开发自己的产品时，需要满足三个条件：<br/>1.&#160;&#160;&#160;&#160;如果再发布的产品中包含源代码，则在源代码中必须带有原来代码中的BSD协议。&nbsp;<br/>2.&#160;&#160;&#160;&#160;如果再发布的只是二进制类库/软件，则需要在类库/软件的文档和版权声明中包含原来代码中的BSD协议。&nbsp;<br/>3.&#160;&#160;&#160;&#160;不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。&nbsp;<br/>BSD&nbsp;代码鼓励代码共享，但需要尊重代码作者的著作权。BSD由于允许使用者修改和重新发布代码，也允许使用或在BSD代码上开发商业软件发布和销售，因此是对商业集成很友好的协议。而很多的公司企业在选用开源产品的时候都首选BSD协议，因为可以完全控制这些第三方的代码，在必要的时候可以修改或者二次开发。<br/>Apache&nbsp;Licence&nbsp;2.0（Apache&nbsp;License,&nbsp;Version&nbsp;2.0、Apache&nbsp;License,&nbsp;Version&nbsp;1.1、Apache&nbsp;License,&nbsp;Version&nbsp;1.0）<br/>Apache&nbsp;Licence是著名的非盈利开源组织Apache采用的协议。该协议和BSD类似，同样鼓励代码共享和尊重原作者的著作权，同样允许代码修改，再发布（作为开源或商业软件）。需要满足的条件也和BSD类似：<br/>1.&#160;&#160;&#160;&#160;需要给代码的用户一份Apache&nbsp;Licence&nbsp;<br/>2.&#160;&#160;&#160;&#160;如果你修改了代码，需要再被修改的文件中说明。&nbsp;<br/>3.&#160;&#160;&#160;&#160;在延伸的代码中（修改和有源代码衍生的代码中）需要带有原来代码中的协议，商标，专利声明和其他原来作者规定需要包含的说明。&nbsp;<br/>4.&#160;&#160;&#160;&#160;如果再发布的产品中包含一个Notice文件，则在Notice文件中需要带有Apache&nbsp;Licence。你可以在Notice中增加自己的许可，但不可以表现为对Apache&nbsp;Licence构成更改。&nbsp;<br/>Apache&nbsp;Licence也是对商业应用友好的许可。使用者也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布/销售。<br/>GPL（GNU&nbsp;General&nbsp;Public&nbsp;License）<br/>我们很熟悉的Linux就是采用了GPL。GPL协议和BSD,&nbsp;Apache&nbsp;Licence等鼓励代码重用的许可很不一样。GPL的出发点是代码的开源/免费使用和引用/修改/衍生代码的开源/免费使用，但不允许修改后和衍生的代码做为闭源的商业软件发布和销售。这也就是为什么我们能用免费的各种linux，包括商业公司的linux和linux上各种各样的由个人，组织，以及商业软件公司开发的免费软件了。<br/>GPL协议的主要内容是只要在一个软件中使用(“使用”指类库引用，修改后的代码或者衍生代码)GPL&nbsp;协议的产品，则该软件产品必须也采用GPL协议，既必须也是开源和免费。这就是所谓的”传染性”。GPL协议的产品作为一个单独的产品使用没有任何问题，还可以享受免费的优势。<br/>由于GPL严格要求使用了GPL类库的软件产品必须使用GPL协议，对于使用GPL协议的开源代码，商业软件或者对代码有保密要求的部门就不适合集成/采用作为类库和二次开发的基础。<br/>其它细节如再发布的时候需要伴随GPL协议等和BSD/Apache等类似。<br/>LGPL（GNU&nbsp;Lesser&nbsp;General&nbsp;Public&nbsp;License）<br/>LGPL是GPL的一个为主要为类库使用设计的开源协议。和GPL要求任何使用/修改/衍生之GPL类库的的软件必须采用GPL协议不同。LGPL允许商业软件通过类库引用(link)方式使用LGPL类库而不需要开源商业软件的代码。这使得采用LGPL协议的开源代码可以被商业软件作为类库引用并发布和销售。<br/>但是如果修改LGPL协议的代码或者衍生，则所有修改的代码，涉及修改部分的额外代码和衍生的代码都必须采用LGPL协议。因此LGPL协议的开源代码很适合作为第三方类库被商业软件引用，但不适合希望以LGPL协议代码为基础，通过修改和衍生的方式做二次开发的商业软件采用。<br/>GPL/LGPL都保障原作者的知识产权，避免有人利用开源代码复制并开发类似的产品<br/>MIT（MIT）<br/>MIT是和BSD一样宽范的许可协议,作者只想保留版权,而无任何其他了限制.也就是说,你必须在你的发行版里包含原许可协议的声明,无论你是以二进制发布的还是以源代码发布的.<br/>本文来自：<a href="http://www.awflasher.com/blog/archives/939" target="_blank">http://www.awflasher.com/blog/archives/939</a><br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=114</link>
			<title><![CDATA[海量查询的数据优化（四）]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Thu,15 Jul 2010 10:46:50 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=114</guid>	
		<description><![CDATA[2、只要建立索引就能显著提高查询速度<br/>事实上，我们可以发现上面的例子中，第2、3条语句完全相同，且建立索引的字段也相同；不同的仅是前者在fariqi字段上建立的是非聚合索引，后者在此字段上建立的是聚合索引，但查询速度却有着天壤之别。所以，并非是在任何字段上简单地建立索引就能提高查询速度。&nbsp;<br/><br/>从建表的语句中，我们可以看到这个有着1000万数据的表中fariqi字段有5003个不同记录。在此字段上建立聚合索引是再合适不过了。在现实中，我们每天都会发几个文件，这几个文件的发文日期就相同，这完全符合建立聚集索引要求的：“既不能绝大多数都相同，又不能只有极少数相同”的规则。由此看来，我们建立“适当”的聚合索引对于我们提高查询速度是非常重要的。&nbsp;<br/><br/>3、把所有需要提高查询速度的字段都加进聚集索引，以提高查询速度&nbsp;<br/><br/>上面已经谈到：在进行数据查询时都离不开字段的是“日期”还有用户本身的“用户名”。既然这两个字段都是如此的重要，我们可以把他们合并起来，建立一个复合索引（compound&nbsp;index）。&nbsp;<br/><br/>很多人认为只要把任何字段加进聚集索引，就能提高查询速度，也有人感到迷惑：如果把复合的聚集索引字段分开查询，那么查询速度会减慢吗？带着这个问题，我们来看一下以下的查询速度（结果集都是25万条数据）：（日期列fariqi首先排在复合聚集索引的起始列，用户名neibuyonghu排在后列）&nbsp;<br/><br/>（1）sel&#101;ct&nbsp;gid,fariqi,neibuyonghu,title&nbsp;from&nbsp;Tgongwen&nbsp;wh&#101;re&nbsp;fariqi&gt;&#39;2004-5-5&#39;&nbsp;<br/><br/>查询速度：2513毫秒&nbsp;<br/><br/>（2）sel&#101;ct&nbsp;gid,fariqi,neibuyonghu,title&nbsp;from&nbsp;Tgongwen&nbsp;wh&#101;re&nbsp;fariqi&gt;&#39;2004-5-5&#39;&nbsp;and&nbsp;neibuyonghu=&#39;办公室&#39;&nbsp;<br/><br/>查询速度：2516毫秒&nbsp;<br/><br/>（3）sel&#101;ct&nbsp;gid,fariqi,neibuyonghu,title&nbsp;from&nbsp;Tgongwen&nbsp;wh&#101;re&nbsp;neibuyonghu=&#39;办公室&#39;&nbsp;<br/><br/>查询速度：60280毫秒<br/>从以上试验中，我们可以看到如果仅用聚集索引的起始列作为查询条件和同时用到复合聚集索引的全部列的查询速度是几乎一样的，甚至比用上全部的复合索引列还要略快（在查询结果集数目一样的情况下）；而如果仅用复合聚集索引的非起始列作为查询条件的话，这个索引是不起任何作用的。当然，语句1、2的查询速度一样是因为查询的条目数一样，如果复合索引的所有列都用上，而且查询结果少的话，这样就会形成“索引覆盖”，因而性能可以达到最优。同时，请记住：无论您是否经常使用聚合索引的其他列，但其前导列一定要是使用最频繁的列。&nbsp;<br/><br/>（四）其他书上没有的索引使用经验总结&nbsp;<br/><br/>1、用聚合索引比用不是聚合索引的主键速度快&nbsp;<br/><br/>下面是实例语句：（都是提取25万条数据）&nbsp;<br/><br/>sel&#101;ct&nbsp;gid,fariqi,neibuyonghu,reader,title&nbsp;from&nbsp;Tgongwen&nbsp;wh&#101;re&nbsp;fariqi=&#39;2004-9-16&#39;&nbsp;<br/><br/>使用时间：3326毫秒&nbsp;<br/><br/>sel&#101;ct&nbsp;gid,fariqi,neibuyonghu,reader,title&nbsp;from&nbsp;Tgongwen&nbsp;wh&#101;re&nbsp;gid&lt;=250000&nbsp;<br/><br/>使用时间：4470毫秒&nbsp;<br/><br/>这里，用聚合索引比用不是聚合索引的主键速度快了近1/4。&nbsp;<br/><br/>2、用聚合索引比用一般的主键作order&nbsp;by时速度快，特别是在小数据量情况下&nbsp;<br/><br/>sel&#101;ct&nbsp;gid,fariqi,neibuyonghu,reader,title&nbsp;from&nbsp;Tgongwen&nbsp;o&#114;der&nbsp;by&nbsp;fariqi&nbsp;<br/><br/>用时：12936&nbsp;<br/><br/>sel&#101;ct&nbsp;gid,fariqi,neibuyonghu,reader,title&nbsp;from&nbsp;Tgongwen&nbsp;o&#114;der&nbsp;by&nbsp;gid&nbsp;<br/><br/>用时：18843<br/>这里，用聚合索引比用一般的主键作order&nbsp;by时，速度快了3/10。事实上，如果数据量很小的话，用聚集索引作为排序列要比使用非聚集索引速度快得明显的多；而数据量如果很大的话，如10万以上，则二者的速度差别不明显。<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=113</link>
			<title><![CDATA[海量查询的数据优化（三）]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Tue,06 Jul 2010 09:38:40 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=113</guid>	
		<description><![CDATA[<br/>（三）结合实际，谈索引使用的误区&nbsp;<br/><br/>理论的目的是应用。虽然我们刚才列出了何时应使用聚集索引或非聚集索引，但在实践中以上规则却很容易被忽视或不能根据实际情况进行综合分析。下面我们将根据在实践中遇到的实际问题来谈一下索引使用的误区，以便于大家掌握索引建立的方法。&nbsp;<br/><br/>1、主键就是聚集索引&nbsp;<br/><br/>这种想法笔者认为是极端错误的，是对聚集索引的一种浪费。虽然SQL&nbsp;SERVER默认是在主键上建立聚集索引的。&nbsp;<br/><br/>通常，我们会在每个表中都建立一个ID列，以区分每条数据，并且这个ID列是自动增大的，步长一般为1。我们的这个办公自动化的实例中的列Gid就是如此。此时，如果我们将这个列设为主键，SQL&nbsp;SERVER会将此列默认为聚集索引。这样做有好处，就是可以让您的数据在数据库中按照ID进行物理排序，但笔者认为这样做意义不大。&nbsp;<br/><br/>显而易见，聚集索引的优势是很明显的，而每个表中只能有一个聚集索引的规则，这使得聚集索引变得更加珍贵。&nbsp;<br/><br/>从我们前面谈到的聚集索引的定义我们可以看出，使用聚集索引的最大好处就是能够根据查询要求，迅速缩小查询范围，避免全表扫描。在实际应用中，因为ID号是自动生成的，我们并不知道每条记录的ID号，所以我们很难在实践中用ID号来进行查询。这就使让ID号这个主键作为聚集索引成为一种资源浪费。其次，让每个ID号都不同的字段作为聚集索引也不符合“大数目的不同值情况下不应建立聚合索引”规则；当然，这种情况只是针对用户经常修改记录内容，特别是索引项的时候会负作用，但对于查询速度并没有影响。&nbsp;<br/><br/>在办公自动化系统中，无论是系统首页显示的需要用户签收的文件、会议还是用户进行文件查询等任何情况下进行数据查询都离不开字段的是“日期”还有用户本身的“用户名”。&nbsp;<br/><br/>通常，办公自动化的首页会显示每个用户尚未签收的文件或会议。虽然我们的wh&#101;re语句可以仅仅限制当前用户尚未签收的情况，但如果您的系统已建立了很长时间，并且数据量很大，那么，每次每个用户打开首页的时候都进行一次全表扫描，这样做意义是不大的，绝大多数的用户1个月前的文件都已经浏览过了，这样做只能徒增数据库的开销而已。事实上，我们完全可以让用户打开系统首页时，数据库仅仅查询这个用户近3个月来未阅览的文件，通过“日期”这个字段来限制表扫描，提高查询速度。如果您的办公自动化系统已经建立的2年，那么您的首页显示速度理论上将是原来速度8倍，甚至更快。<br/>在这里之所以提到“&nbsp;理论上”三字，是因为如果您的聚集索引还是盲目地建在ID这个主键上时，您的查询速度是没有这么高的，即使您在“日期”这个字段上建立的索引（非聚合索引）。下面我们就来看一下在1000万条数据量的情况下各种查询的速度表现（3个月内的数据为25万条）：&nbsp;<br/><br/>（1）仅在主键上建立聚集索引，并且不划分时间段：&nbsp;<br/><br/>Sel&#101;ct&nbsp;gid,fariqi,neibuyonghu,title&nbsp;from&nbsp;tgongwen&nbsp;<br/><br/>用时：128470毫秒（即：128秒）&nbsp;<br/><br/>（2）在主键上建立聚集索引，在fariq上建立非聚集索引：&nbsp;<br/><br/>sel&#101;ct&nbsp;gid,fariqi,neibuyonghu,title&nbsp;from&nbsp;Tgongwen&nbsp;<br/><br/>wh&#101;re&nbsp;fariqi&gt;&nbsp;dateadd(day,-90,getdate())&nbsp;<br/><br/>用时：53763毫秒（54秒）&nbsp;<br/><br/>（3）将聚合索引建立在日期列（fariqi）上：&nbsp;<br/><br/>sel&#101;ct&nbsp;gid,fariqi,neibuyonghu,title&nbsp;from&nbsp;Tgongwen&nbsp;<br/><br/>wh&#101;re&nbsp;fariqi&gt;&nbsp;dateadd(day,-90,getdate())&nbsp;<br/><br/>用时：2423毫秒（2秒）&nbsp;<br/><br/>虽然每条语句提取出来的都是25万条数据，各种情况的差异却是巨大的，特别是将聚集索引建立在日期列时的差异。事实上，如果您的数据库真的有1000万容量的话，把主键建立在ID列上，就像以上的第1、2种情况，在网页上的表现就是超时，根本就无法显示。这也是我摒弃ID列作为聚集索引的一个最重要的因素。&nbsp;<br/><br/>得出以上速度的方法是：在各个sel&#101;ct语句前加：declare&nbsp;@d&nbsp;datetime<br/>set&nbsp;@d=getdate()&nbsp;<br/><br/>并在sel&#101;ct语句后加：<br/>sel&#101;ct&nbsp;[语句执行花费时间(毫秒)]=datediff(ms,@d,getdate())<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=112</link>
			<title><![CDATA[海量数据的查询优化（二）]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Fri,25 Jun 2010 13:36:25 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=112</guid>	
		<description><![CDATA[<br/>（二）何时使用聚集索引或非聚集索引&nbsp;<br/><br/>下面的表总结了何时使用聚集索引或非聚集索引（很重要）。<br/>动作描述&nbsp;<br/>使用聚集索引&nbsp;<br/>使用非聚集索引&nbsp;<br/><br/>列经常被分组排序&nbsp;<br/>应&nbsp;<br/>应&nbsp;<br/><br/>返回某范围内的数据&nbsp;<br/>应&nbsp;<br/>不应&nbsp;<br/><br/>一个或极少不同值&nbsp;<br/>不应&nbsp;<br/>不应&nbsp;<br/><br/>小数目的不同值&nbsp;<br/>应&nbsp;<br/>不应&nbsp;<br/><br/>大数目的不同值&nbsp;<br/>不应&nbsp;<br/>应&nbsp;<br/><br/>频繁更新的列&nbsp;<br/>不应&nbsp;<br/>应&nbsp;<br/><br/>外键列&nbsp;<br/>应&nbsp;<br/>应&nbsp;<br/><br/>主键列&nbsp;<br/>应&nbsp;<br/>应&nbsp;<br/><br/>频繁修改索引列&nbsp;<br/>不应&nbsp;<br/>应<br/>事实上，我们可以通过前面聚集索引和非聚集索引的定义的例子来理解上表。如：返回某范围内的数据一项。比如您的某个表有一个时间列，恰好您把聚合索引建立在了该列，这时您查询2004年1月1日至2004年10月1日之间的全部数据时，这个速度就将是很快的，因为您的这本字典正文是按日期进行排序的，聚类索引只需要找到要检索的所有数据中的开头和结尾数据即可；而不像非聚集索引，必须先查到目录中查到每一项数据对应的页码，然后再根据页码查到具体内容。&nbsp;<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=111</link>
			<title><![CDATA[海量查询的数据优化（一）]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Fri,18 Jun 2010 11:21:42 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=111</guid>	
		<description><![CDATA[<br/>一、因情制宜，建立“适当”的索引&nbsp;<br/><br/>建立“适当”的索引是实现查询优化的首要前提。&nbsp;<br/><br/>索引（index）是除表之外另一重要的、用户定义的存储在物理介质上的数据结构。当根据索引码的值搜索数据时，索引提供了对数据的快速访问。事实上，没有索引,数据库也能根据Sel&#101;ct语句成功地检索到结果，但随着表变得越来越大，使用“适当”的索引的效果就越来越明显。注意，在这句话中，我们用了“适当”这个词，这是因为，如果使用索引时不认真考虑其实现过程，索引既可以提高也会破坏数据库的工作性能。&nbsp;<br/><br/>（一）深入浅出理解索引结构&nbsp;<br/><br/>实际上，您可以把索引理解为一种特殊的目录。微软的SQL&nbsp;SERVER提供了两种索引：聚集索引（clustered&nbsp;index，也称聚类索引、簇集索引）和非聚集索引（nonclustered&nbsp;index，也称非聚类索引、非簇集索引）。下面，我们举例来说明一下聚集索引和非聚集索引的区别：&nbsp;<br/><br/>其实，我们的汉语字典的正文本身就是一个聚集索引。比如，我们要查“安”字，就会很自然地翻开字典的前几页，因为“安”的拼音是“an”，而按照拼音排序汉字的字典是以英文字母“a”开头并以“z”结尾的，那么“安”字就自然地排在字典的前部。如果您翻完了所有以“a”开头的部分仍然找不到这个字，那么就说明您的字典中没有这个字；同样的，如果查“张”字，那您也会将您的字典翻到最后部分，因为“张”的拼音是“zhang”。也就是说，字典的正文部分本身就是一个目录，您不需要再去查其他目录来找到您需要找的内容。&nbsp;<br/><br/>我们把这种正文内容本身就是一种按照一定规则排列的目录称为“聚集索引”。&nbsp;<br/><br/>如果您认识某个字，您可以快速地从自动中查到这个字。但您也可能会遇到您不认识的字，不知道它的发音，这时候，您就不能按照刚才的方法找到您要查的字，而需要去根据“偏旁部首”查到您要找的字，然后根据这个字后的页码直接翻到某页来找到您要找的字。但您结合“部首目录”和“检字表”而查到的字的排序并不是真正的正文的排序方法，比如您查“张”字，我们可以看到在查部首之后的检字表中“张”的页码是672页，检字表中“张”的上面是“驰”字，但页码却是63页，“张”的下面是&nbsp;“弩”字，页面是390页。很显然，这些字并不是真正的分别位于“张”字的上下方，现在您看到的连续的“驰、张、弩”三字实际上就是他们在非聚集索引中的排序，是字典正文中的字在非聚集索引中的映射。我们可以通过这种方式来找到您所需要的字，但它需要两个过程，先找到目录中的结果，然后再翻到您所需要的页码。&nbsp;<br/><br/>我们把这种目录纯粹是目录，正文纯粹是正文的排序方式称为“非聚集索引”。&nbsp;<br/><br/>通过以上例子，我们可以理解到什么是“聚集索引”和“非聚集索引”。&nbsp;<br/><br/>进一步引申一下，我们可以很容易的理解：每个表只能有一个聚集索引，因为目录只能按照一种方法进行排序。&nbsp;<br/><br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=110</link>
			<title><![CDATA[网络舆情的特点及应对]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Tue,08 Jun 2010 14:57:29 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=110</guid>	
		<description><![CDATA[　近年来，网络舆情已经成为社会舆论的重要组成部分，党的十七大报告中也明确提出要“加强网络文化建设和管理，营造良好网络环境”。如何正确看待和有效应对网络舆情是我们党和政府必须深入思考的重要问题。从政府响应、信息透明度、政府公信力三项常规指标和恢复秩序、动态反应、官员问责三项特殊指标的角度就地方政府的网络舆情应对处置能力做出了分析，并提出了一系列应对网络舆情的建议，这对我们以后处理网络舆情具有非常重要的参考价值。网络舆情之所以具有如此重大的影响力，这跟其传播的平台——网络是分不开的，要想正确应对网络舆情，就必须从网络以及网络舆情的特点出发，有针对性地采取应对策略。笔者认为在网络舆情的诸多特点中，有几点须引起重视。<br/>　　网络舆情产生的突发性<br/>　　由于借助论坛、博客等网络平台传播信息简单直接且身份隐蔽，网民能够快速、大胆地发表意见，呼唤声援,在短时间内形成一种力量,以期引起社会和政府的重视。因此网络舆情的形成往往非常迅速，事先没有征兆。一个热点事件的存在加上一种情绪化的意见就能形成星火燎原之势。当前民众对网络运用的热情较之部分地方机关单位的懒于应对,也助长了部分网民对官方“不作为”的负面情绪。这就要求我们要做好网络舆情的应急预案，在舆情发生后最短时间内采取应对措施。由于网上的信息量十分巨大，仅依靠人工的方法难以应对网上海量信息的收集和分析，需要加强相关信息技术的研究，形成一套自动化的网络舆情分析系统，及时发现网络舆情，争取先手。<br/>　　情绪、观点的传染性<br/>　　在应对网络舆情时，不仅需要注重对客观事实真相的揭示，还须重视网民中各种情绪、观点的引导。在网络中“三人成虎”的效果非常明显，即使错误的情绪或观点，如果被多个网民传播，就容易产生极强的说服力，而当一个人形成第一印象后，这种认识就很难改变。到目前为止的绝大多数网络舆情在初始阶段均体现出对某个社会现象的普遍化情绪，这种情绪在网民中迅速传播，产生普遍认识与共鸣，进而推动舆情向更广的范围和更深的领域漫延扩散。如杭州飙车案中，网民先是表现出对死者的悲痛同情、对肇事者漠视生命行为的鄙视和对“富二代”狂妄态度的憎恶，在警方公布70码后，网民又产生对该结论的猜疑与愤怒情绪。在网络舆情中，随着时间的推移，如果没有新的激发因素的介入，网民的情绪会逐渐减退，并朝着理性化方向发展，这时观点的传染性日益重要，官方、民众、专家学者的不同观点在网民中传播、讨论，引导事件走向理性解决。因此，在网络舆情发生后须注意两点，一是仔细分析、掌握真相。在网络舆情发生之初，要充分梳理网民存在的各种情绪，加以正确的安抚、引导，在制定应对方案时，也应考虑网民的情绪。在杭州飙车案发生之初，网民中就有很强的仇富情绪，认为“富人犯法难以与庶民同罪”，而杭州警方草率公布车速为70码，无异于火上浇油，网民对杭州司法机关的不信任和不满情绪由此而生，这种情绪一直到法院判决后都没有得到改观，应引以为戒。二是快速反应，公开透明。依据事实尽快形成官方观点，通过网络、新闻媒体等向公众表达，力求取得公众的认同，使官方的观点能够在网民中广泛传播，民众的知情权得到满足，谣言就会失去市场，相反，麻木、沉默都有可能加剧情绪对立。同时，要重视民间学者的观点，在一些事件中，政府本身就是事件当事人，政府的观点难以得到网民的充分认同，此时民间学者的相对专业和权威的观点则可以起到意想不到的作用。<br/>　　主流观点的道德性<br/>　　道德是社会公认的行为正当与否的衡量标准，一般受到文化、民族、传统、意识形态等因素的影响。在网络中鱼龙混杂，形形色色的观点充斥其中，但最终形成主流的往往是符合中国社会一般道德的观点，这是由于道德是一种为社会普遍认可的行为规范，符合绝大多数民众的价值观、人生观，故能取得多数民众的认同。如在许霆盗窃案、邓玉娇杀人案中，虽然许多法学学者在网上发表了从法学层次上研讨许霆、邓玉娇罪与非罪、罪轻罪重的文章，但是在非法律专业网民中占据主导地位的依然是依据一般道德的认识。在社会舆论中，道德比法律更容易获得民众的普遍认可，因此，在网络舆情发生后，须认真研究其中反映出的公众道德取向，在有客观认识的基础上进行适当的引导、教育。若因其与法律法规等其他社会规范的精神不尽吻合而草率批判、打压，很可能会触发公众的抵触情绪，使问题更难解决，正确的舆论导向也是提高公民素质的重要方法。<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=109</link>
			<title><![CDATA[如何做好垂直搜索？(二）]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Wed,26 May 2010 16:05:03 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=109</guid>	
		<description><![CDATA[如何做好垂直搜索？（二）<br/>搜索引擎是一个产品，给用户提供服务的产品，需要长期的不断的改进升级调整才能持续不断的提用户体验，需要满足用户不断增长并且变化的需求、需要不断适应网络的变化。这是因为网络环境是不断变化的、网民的需求也是不断变化的。千万不要把搜索当成项目来做，做完了撂那让用户去用那你肯定没戏。在搜索引擎领域是讲体验的、新的引擎如果用户体验一旦整体上有领先一年以上的差距并且持续2年，那前期的领先者的优势就荡然无存，因为搜索引擎的用户转移成本相对而言是比较低的而且口碑是最佳的传播方式。如果一个搜索引擎不能持续不断的技术创新理念创新，那对于这个搜索引擎来说就等于死亡。我们一般形容搜索引擎的领先是以时间计算的。在用户体验面前，任何的炒作都显得很渺小。&nbsp;<br/><br/>作垂直搜索引擎，麻雀虽小，但是五脏俱全。无论理念文化、产品管理、应用、技术都和搜索引擎的楔形理论没有什么区别。所以要做好一垂直搜索必须解决这几个方面。&nbsp;<br/><br/>楔形的尖:垂直搜索技术。&nbsp;&nbsp;<br/>垂直搜索技术主要分为两个层次:模板级和网页库级。模板级是针对网页进行模板设定或者自动生成模板的方式抽取数据，对网页的采集也是针对性的采集，适合规模比较小、信息源少且稳定的需求，优点是快速实施、成本低、灵活性强，缺点是后期维护成本高，信息源和信息量小。网页库级就是在信息源数量上、数据容量上检索容量上、稳定性可*性上都是网页库搜索引擎级别的要求，和模板方式最大的区别是对具体网页不依赖，可针对任意正常的网页进信息采集信息抽取……。这就导致这种方式数据容量上和模板方式有质的区别，但是其灵活性差、成本高。当然模板方式和网页库级的方式不是对立的，这两者对于垂直搜索引擎来说是相互补充的，因为技术只是手段，目的是切反用户之需。本文谈及的技术主要是指网页库级别垂直搜索引擎技术。&nbsp;<br/><br/>搜索引擎的确是一项对技术要求比较高的应用，几年前相关的人才也比较少。现在搜索技术人才多了，相关的技术和技术的应用得相对以前而言更加成熟，但是竞争也更加激烈了。垂直搜索大致需要以下技术：<br/><br/>1.&nbsp;信息采集技术<br/>2.&nbsp;网页信息抽取技术&nbsp;<br/>3.&nbsp;信息的处理技术，包括:重复识别、重复识别、聚类、比较、分析、语料分析等&nbsp;<br/>4.&nbsp;语意相关性分析&nbsp;<br/>5.&nbsp;分词&nbsp;<br/>6.&nbsp;索引&nbsp;<br/>信息采集技术，垂直搜索引擎spider和网页库的spider相比应该是更加专业，可定制化。可定向性的采集和垂直搜索范围相关的网页忽略不相关的网页和不必要的网页，选择内容相关的以及适合做进一步处理的网页深度优先采集、对页面有选择的调整更新频率……，采集可通过人工设定网址和网页分析url方式共同进行。垂直搜索对信息的更新有着特别的要求，根据这些特点可以从以下几点考虑1.信息源的稳定性(不能让信息源网站感觉到spider的压力)2.抓取的成本问题3.对用户体验改善程度。根据以上几点制定一种比较好的策略，要做到恰到好处。策略上可以评估网站/网页更新的系数、网站/网页的重要系数、用户点击系数(或曝光系数)、网站稳定系数……，根据这些系数来确定对这些网站/网页更新的频率。再由于新信息和更新了的信息list页面前面或者首页，所以对网页进行很好的分级可以以低成本很好的解决更新问题，系数比较低的网页一月up&#100;ate一次，稍微高点的一周up&#100;ate一次、中等的几天到一天一次、高的几小时到几分钟一次。类似搜索引擎的大库、周库、日库，小时库……&nbsp;<br/><br/>基于视觉网页块分析技术，模拟IE浏览器的显示方式，对网页进行解析。根据人类视觉原理，把网页解析处理的结果，进行分块，再根据需要，对这些块进行处理，如:采集定向、介绍抽取和一些必要的内容的抽取正文抽取……&nbsp;<br/><br/>结构化信息抽取技术，将网页中的非结构化数据按照一定的需求抽取成结构化数据。有两种方式，简单的就是模板方式，另外就是对网页不依赖web结构化信息抽取方式，这两种方式可以互取长处，以最简单最有效的办法满足需求。垂直搜索引擎和通用搜索引擎最大的区别就是对网页信息结构化抽取后再结构化数据进行深度的处理，提供专业的搜索服务。所以web结构化信息抽取的技术水平是决定垂直搜索引擎质量的重要技术指标。其实web结构化信息抽取在百度、google早已经广泛应用了，如:MP3、图片搜索、google的本地搜索就是从网页库抽取出企业信息，添加到其地图搜索中的，google通过这种技术正在颠覆做内容的方式。同样的技术应用还在qihoo、sogou购物、shopping等各种应用中体现。&nbsp;<br/><br/>简单的语法分析，简单的语法分析在搜索引擎中非常重要，可以通过简单的语法分析来改善数据的质量，低成本的获得某类信息，改善排序，寻找需要的内容……&nbsp;<br/><br/>信息处理技术，信息处理包括的范围比较广，主要包括去重、聚类、分析……，这根据需要相关的技术就非常多。&nbsp;<br/><br/>数据挖掘，找出您的信息的关联性对于垂直搜索来说非常重要，有效，可以在这些相关性上为用户提供更细致的服务。&nbsp;<br/><br/>分词技术，面向搜索的分词技术，建立和您的行业相关的词库。注意这是面向搜索的分词，不是面向识别和准确的分词。就这个工作安排十几个人不停的维护也不会嫌多。&nbsp;<br/><br/>索引技术，索引技术对于垂直搜索非常关键，一个网页库级的搜索引擎必须要支持分布索引、分层建库、分布检索、灵活的更新、灵活的权值调整、灵活的索引和灵活的升级扩展、高可*性稳定性冗余性。还需要支持各种技术的扩展，如偏移量计算等。&nbsp;<br/><br/><br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=108</link>
			<title><![CDATA[如何做好垂直搜索？（一)]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Tue,18 May 2010 16:52:45 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=108</guid>	
		<description><![CDATA[<br/>垂直搜索技术主要分为两个层次:模板级和网页库级。模板级是针对网页进行模板设定或者自动生成模板的方式抽取数据，对网页的采集也是针对性的采集，适合规模比较小、信息源少且稳定的需求，优点是快速实施、成本低、灵活性强，缺点是后期维护成本高，信息源和信息量小。网页库级就是在信息源数量上、数据容量上检索容量上、稳定性可*性上都是网页库搜索引擎级别的要求，和模板方式最大的区别是对具体网页不依赖，可针对任意正常的网页进信息采集信息抽取。这就导致这种方式数据容量上和模板方式有质的区别，但是其灵活性差、成本高。当然模板方式和网页库级的方式不是对立的，这两者对于垂直搜索引擎来说是相互补充的，因为技术只是手段，目的是切返用户之需。本文谈及的技术主要是指网页库级别垂直搜索引擎技术。&nbsp;<br/><br/>搜索引擎的确是一项对技术要求比较高的应用，几年前相关的人才也比较少。现在搜索技术人才多了，相关的技术和技术的应用得相对以前而言更加成熟，但是竞争也更加激烈了。垂直搜索大致需要以下技术:&nbsp;<br/><br/>1.&nbsp;信息采集技术&nbsp;<br/>2.&nbsp;网页信息抽取技术&nbsp;<br/>3.&nbsp;信息的处理技术，包括:重复识别、重复识别、聚类、比较、分析、语料分析等&nbsp;<br/>4.&nbsp;语意相关性分析&nbsp;<br/>5.&nbsp;分词&nbsp;<br/>6.&nbsp;索引&nbsp;本文先引用几句话:&nbsp;&nbsp;<br/>“确解用户之意，切返用户之需。”&nbsp;<br/>“门户网站都想着是怎样省钱，而不是怎样花钱来买技术。”&nbsp;<br/>“搜索引擎不是人人都能做的领域，进入的门槛比较高。”&nbsp;<br/>“只是优秀还不够，最好的方式是将一件事情做到极致。”(google十大真理)&nbsp;<br/>“做搜索引擎需要专注”&nbsp;“对于一项排到第四的业务，门户很难做到专注。”<br/>“用户无法描述道他要找什么，除非让他看到想找的东西。”&nbsp;<br/><br/>“所谓楔形，其实就是个倒三角，倒三角的尖端部分代表搜索技术，中部是基于技术的产品应用平台，最上端是对整个搜索引擎用户人群文化的认识和理解，以及现代公司竞争最关键也最捉摸不定的所谓品牌。”&nbsp;<br/><br/>“楔形”蕴涵的另一个意义是:楔子要打到墙里，尖端是否锐利很重要，但楔子的破坏性有多强，究竟能在墙面挤压出多大的空间，其中端、后端的沉稳与厚重才是关键。&nbsp;<br/><br/>搜索引擎的技术和理念都是需要时间和经验的积累的，更是需要长期不断的完善进步的，绝对不要认为可以一蹴而就，要达到一个相对成熟领先的搜索引擎从开始到领先的周期一般需要是四年。着急不得。原因是因为搜索引擎太复杂，而且“用户无法描述他要找什么，除非让他看到想找的东西。”&nbsp;一切都需要摸索，尝试，问题需要一个一个解决，用户的需要得一点点的挖掘。&nbsp;<br/><br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=107</link>
			<title><![CDATA[中文搜索引擎技术揭密:系统架构（二）]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[全文检索]]></category>
			<pubDate>Mon,10 May 2010 16:45:35 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=107</guid>	
		<description><![CDATA[<br/>搜索引擎的系统架构<br/>&nbsp;&nbsp;&nbsp;&nbsp;这里主要针对全文检索搜索引擎的系统架构进行说明，下文中提到的搜索引擎如果没有特殊说明也是指全文检索搜索引擎。搜索引擎的实现原理，可以看作四步：从互联网上抓取网页→建立索引数据库→在索引数据库中搜索→对搜索结果进行处理和排序。　　<br/>&nbsp;1、从互联网上抓取网页<br/>利用能够从互联网上自动收集网页的网络蜘蛛程序，自动访问互联网，并沿着任何网页中的所有URL爬到其它网页，重复这过程，并把爬过的所有网页收集到服务器中。<br/>2、建立索引数据库<br/>&nbsp;&nbsp;&nbsp;由索引系统程序对收集回来的网页进行分析，提取相关网页信息(包括网页所在URL、编码类型、页面内容包含的关键词、关键词位置、生成时间、大小、与其它网页的链接关系等)，根据一定的相关度算法进行大量复杂计算，得到每一个网页针对页面内容中及超链中每一个关键词的相关度(或重要性)，然后用这些相关信息建立网页索引数据库。<br/>&nbsp;3、在索引数据库中搜索<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当用户输入关键词搜索后，分解搜索请求，由搜索系统程序从网页索引数据库中找到符合该关键词的所有相关网页。<br/>4、对搜索结果进行处理排序<br/>所有相关网页针对该关键词的相关信息在索引库中都有记录，只需综合相关信息和网页级别形成相关度数值，然后进行排序，相关度越高，排名越靠前。最后由页面生成系统将搜索结果的链接地址和页面内容摘要等内容组织起来返回给用户。<br/>搜索引擎的索引和搜索<br/>数据的索引分为三个步骤：网页内容的提取、词的识别、标引库的建立。<br/>&nbsp;&nbsp;&nbsp;&nbsp;互联网上大部分信息都是以HTML格式存在，对于索引来说，只处理文本信息。因此需要把网页中文本内容提取出来，过滤掉一些脚本标示符和一些无用的广告信息，同时记录文本的版面格式信息[1]。词的识别是搜索引擎中非常关键的一部分，通过字典文件对网页内的词进行识别。对于西文信息来说，需要识别词的不同形式，例如：单复数、过去式、组合词、词根等，对于一些亚洲语言(中文、日文、韩文等)需要进行分词处理[3]。识别出网页中的每个词，并分配唯一的wordID号，用于为数据索引中的标引模块服务。<br/>标引库的建立是数据索引中结构最复杂的一部分。一般需要建立两种标引：文档标引和关键词标引。文档标引分配每个网页一个唯一的docID号，根据docID标引出在这个网页中出现过多少过wordID，每个wordID出现的次数、位置、大小写格式等，形成docID对应wordID的数据列表；关键词标引其实是对文档标引的逆标引，根据wordID标引出这个词出现在那些网页(用wordID表示)，出现在每个网页的次数、位置、大小写格式等，形成wordID对应docID的列表。<br/>搜索的处理过程是对用户的搜索请求进行满足的过程，通过用户输入搜索关键字，搜索服务器对应关键词字典，把搜索关键词转化为wordID，然后在标引库中得到docID列表，对docID列表进行扫描和wordID的匹配，提取满足条件的网页，然后计算网页和关键词的相关度，根据相关度的数值返回前K篇结果(不同的搜索引擎每页的搜索结果数不同)返回给用户。如果用户查看的第二页或者第多少页，重新进行搜索，把排序结果中在第K+1到2*K的网页组织返回给用户。<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=106</link>
			<title><![CDATA[中国银行经济情报预警平台]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Wed,05 May 2010 14:57:04 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=106</guid>	
		<description><![CDATA[<br/><br/>客户介绍：<br/><br/>北京讯达恒通信息科技有限公司（“讯达恒通”）是一家专业的金融信息工程公司。讯达恒通以先进的金融管理理念和成熟的信息技术为基础，为银行及其他金融服务机构提供风险管理、决策智能支持、信息科技蓝图规划、信用风险情报预警等多种解决方案，并协助其实施。&nbsp;<br/><br/>讯达恒通的服务可以有效地提升其客户的核心竞争力，应对不断增加的竞争压力。&nbsp;技术和业务相结合、咨询和实施相结合、国际经验和本土环境相结合，是讯达恒通工作的理念。在这样的理念下，讯达恒通汇集了金融工程人才，银行业务及管理人才，金融和IT科技的复合型人才。&nbsp;<br/><br/>讯达恒通致力于引进国际先进经验并创新地运用于国内金融机构。<br/><br/>项目背景：<br/><br/>千里眼经济情报预警平台是北京迅达恒通信息技术有限公司建立的商业信息服务系统，面向国内各大银行提供在线的金融风险预警信息服务，为相关工作人员提供及时、准确地情报信息。<br/><br/>平台的其中两大块功能，一块是互联网的信息、数据抓取，即网络雷达，另一块是海量数据的检索，管理功能，管理功能包括了发布，增加，编辑，删除等等。<br/><br/>其对全文检索产品的要求是响应速度快，不仅在于检索，还在于新增数据的索引，索引的编辑，删除等等，而且对于索引的编辑、删除操作可能非常的频繁。由于是为金融机构提供服务，对于产品的稳定性，无故障运行能力也相当高。<br/><br/>项目内容：<br/><br/><br/>讯达恒通最后选择了线点科技作为其软件产品的供应商，并且线点科技也承担了部分接口开发和集成的工作。<br/><br/>目前，该平台已经提供给多家金融机构进行体验和使用。&nbsp;<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=105</link>
			<title><![CDATA[赶集网多源异构数据检索引擎]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Wed,05 May 2010 14:55:57 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=105</guid>	
		<description><![CDATA[<br/><br/>客户介绍：<br/><br/>赶集网络（www.ganji.com）是一家座落在北京清华留学生创业园的初创企业，公司由来自美国硅谷的归国人员创办，致力于下一代本地生活资讯网络平台的开发与运营，其管理团队由具有中国互联网多年运营经验的人士组成。赶集网是国内知名的分类信息平台，曾多次获国外风险投资青睐，并作为google的战略合作伙伴。&nbsp;<br/><br/>项目背景：<br/><br/>赶集网是一个分类信息网站，其内容按城市纵向分割，再每个城市按照信息分类进行划分，在网站建设时，采用数据库的方式搭建系统，为不同的城市、不同的分类建立不同的数据库，而这些数据库也是分布在不同的服务器上，彼此之间没有逻辑连接，而且在网站系统建设的不同阶段，使用的操作系统、数据库类型、版本也有所差异，这样就形成了一个个数据孤岛，虽然这样的结构并不妨碍网站的常规功能应用，但是当需要对这些数据进行整合、分析、统计时就遇到了难题，按照常规开发模式，很难对分布在几十台计算机上的不同数据库进行一个统一管理。最典型的应用就是骗子识别，互联网上一些骗子会在不同的城市，不同分类下发布相似或不同的骗子信息，这些可以通过对于所有数据的手机号或email地址的统计得到可疑的信息。<br/><br/>在这样的情况下，赶集网的技术团队需要一个可以适应各种数据库、数据源，能够高效及时对数据进行整合，并提供丰富的开发接口以供他们调用的一个中间件产品。<br/><br/>项目内容：<br/><br/><br/>线点科技的全文检索中间件通过其优异的性能和品质，战胜了其他厂商，成为赶集网的软件产品提供商和技术合作伙伴。<br/><br/>如今，通过线点科技的全文检索产品，赶集网的技术团队能够轻松得开发多项应用，中间件在业务系统与繁多的数据库中间建立一个不透明的连接，而向业务系统提供数据的准确性、高效性与及时性由中间件负责，彻底打破了数据孤岛的瓶颈，也使得网站的应用更为便利。同时，我们的全文检索产品提供有多种语言开发接口，便于不同的技术团队进行开发。另外还值得一提的是，由于我们的全文检索产品采用的是数据库推送方式，在部署时对于数据库的压力相当小，丝毫不影响网站数据库的性能，称为是“完美的解决方案”。&nbsp;<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=104</link>
			<title><![CDATA[搜娱网站内检索系统]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Wed,05 May 2010 14:54:42 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=104</guid>	
		<description><![CDATA[<br/><br/>客户介绍：<br/><br/><br/>搜娱手机网是北京搜娱网络科技有限公司旗下网站，成立于2006年9月，由业内资深人士和风险资本共同创立，致力于打造一个适合中国人使用的手机门户网站。搜娱手机网从成立发展至今（2007年12月）已累积注册用户200多万，月访问数800多万，月浏览量3000多万。众多用户的认可是我们发展的动力，也是我们孜孜以求的目标之一。搜娱手机网的手机商城现在有2000多家商家入驻，涉及品牌近100家。<br/><br/>项目背景：<br/><br/>搜娱网的信息分有多种分类，数据内容是存储在Sql&nbsp;Server中，面临日益增长的数据量，网站的站内检索性能日益降低，根据网站的用户友好指数，一个页面加载的时间最好是在2秒钟以内，而搜娱网的仅数据库查询时间就至少在5秒钟以上，而且由于一次检索通常都需要多个连表查询，占用数据库连接时间较长，不仅是查询速度慢，也影响了系统的整体性能。<br/><br/>项目内容：<br/><br/><br/>搜娱网在经过权衡比较后，采用了线点科技的站内搜索解决方案，在数据库与应用层之间建立数据中间件，而中间件通过Sql&nbsp;Server的视图功能与数据建立隐射，并通过轮询方式，将数据变化记录下来，以建立索引，如此一来不仅速度问题得到了极大提升，平均检索时间从7秒钟，降低到了0.1秒以内，用户体验也得到了极大的改善，并且在这样的情况下，随着检索频率和次数的增长，并不会给数据库带来压力，我们的中间件充当了压力分流的角色，Sql&nbsp;Server的数据库压力也得到大大缓解。如今，搜娱网的技术总监面临日益增长的数据也可以高枕无忧了<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=103</link>
			<title><![CDATA[港澳资讯股票搜索平台]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Wed,05 May 2010 14:53:33 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=103</guid>	
		<description><![CDATA[<br/><br/>客户介绍：<br/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;海南港澳资讯产业股份有限公司是专业从事金融数据库研发、信息技术平台开发、证券资讯终端信息服务、证券投资咨询及互联网相关项目开发的资讯高科技企业，具有中国证监会授予的证券投资咨询从业资格。&nbsp;<br/>　&nbsp;公司于1994年6月成立，2001年7月改制为股份制公司，注册资本3300万元人民币，总部设在海口市，下设上海、深圳、成都、北京及武汉五个分公司，并在全国各主要城市设有13家办事机构，现有员工160多名。&nbsp;<br/><br/>项目背景：<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;随着股票市场的升温，金融资讯行业在近两年得到了极大的发展，中金在线、中国上市公司资讯网，这些网站每天都在新增、发布着各种纷乱复杂的股票信息，特别是股评，个股推荐等重要信息，人们也渴望有一个集中的平台能够对这些信息进行自动的整理归类，列表展示，自动抓取和检索。<br/><br/>项目内容：<br/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;港澳资讯作为国内证券资讯行业第一品牌，将此作为公司的一个新的发展方向，通过对北京、上海等地多个知名搜索引擎厂商进行实地调查、产品试用，最终确定选择线点科技作为软件技术提供商，共同打造“搜股易”股票搜索平台。搜股易的搜索目标为行业内近百家知名金融资讯行业网站，栏目近千个，通过对于网站优先级的配置及爬虫的策略，对于热点网站，可达5分钟进行一次数据更新。&nbsp;<br/>搜股易采用HP&nbsp;360服务器，匹配了16G内存，两颗四核CPU，设计数据容量为2000万，更新频率为5分钟至半小时，并使用了独享百M带宽，采用Linux操作系统，在上线一年以来，系统稳定运行，平均每天响应检索次数为20万，高峰时达40万，平均响应时间为0.125秒，整个网站实施周期为两个月，包括前台的页面开发。&nbsp;<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=102</link>
			<title><![CDATA[中国煤科院行业搜索系统]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Wed,05 May 2010 14:52:14 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=102</guid>	
		<description><![CDATA[<br/>客户介绍：<br/><br/>煤炭科学研究总院（以下简称煤科总院）成立于1957年，是我国煤炭行业唯一的大型综合性科研开发机构和技术创新基地，是原煤炭工业部直属的科研事业单位，1999年7月转制为中央直属的科技型企业，2008年6月改革重组，煤科总院成为中国煤炭科工集团有限公司的全资子企业。<br/><br/>经过50年的发展建设，特别是30年的改革开放煤科总院已经建设成为一个学科门类齐全、专业设置合理、研究方向明确、科技力量雄厚、科研成果领先，在国际上具有较高知名度和较大影响力的煤炭科学技术与工程技术的创新中心与研发中心。<br/><br/>项目背景：<br/><br/>此项目属于国家科技基础条件平台项目之一，也是煤科总院的信息化建设的一部分，煤科总院下属有多个网站平台，之前各网站的资源、数据均是独立建设，缺乏整体的规划和部署，现在，需要以一个公共平台的方式将各个系统的数据，例如仪器的数据信息，进行整合，再结合权限系统，达到对数据统一检索，统一管理的目的。数据的形式也是各种各样，包括各种类型的数据库，网页格式的文件，附件等等，因此，不仅是需要从数据库中获取数据内容，也可能是通过http，或ftp协议从其它服务器上来抓取文件，并且提供一个及时的更新响应。<br/><br/>项目内容：<br/><br/><br/>煤科总院最终采用了线点科技提供的解决方案，通过搜索引擎及全文检索引擎对数据进行抓取、整理、整合，由调度服务器对任务之间的工作进行调度，并通过接口对外提供检索服务。&nbsp;<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=101</link>
			<title><![CDATA[用友移动WAP垂直搜索平台]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Wed,05 May 2010 14:50:27 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=101</guid>	
		<description><![CDATA[<br/><br/>客户介绍：<br/><br/>用友公司成立于1988年，致力于把基于先进信息技术（包括通信技术）的最佳管理与业务实践普及到客户的管理与业务创新活动中，全面提供具有自主知识产权的企业管理/ERP软件、服务与解决方案，是中国最大的管理软件、ERP软件、集团管理软件、人力资源管理软件、客户关系管理软件及小型企业管理软件提供商。目前，中国及亚太地区超过70万家企业与机构通过使用用友软件，实现降低成本、提高效率，加快市场响应速度，提升绩效的业务价值。2001年5月18日，用友软件股份有限公司成功在上海证券交易所发行上市（股票简称：用友软件；股票代码：600588）。&nbsp;<br/><br/>项目背景：<br/><br/>用友软件移动商务部门期望搭建一个基于WAP的生活类垂直搜索平台，通过此平台可以为用户提供诸如餐厅、电影院、咖啡厅之类的生活系统检索服务，这些数据都是经过互联网例如大众点评网，抓取之后再人工进行校正，不仅如此，系统还需能自动抓取评论信息，并能够智能识别，将相关的评论聚合在一起，同时，对于大量数据还需要承担检索的功能。<br/><br/>项目内容：<br/><br/><br/>线点科技作为用友软件的合作伙伴，与用友软件有着多次的合作，特别是用友软件的军工事业部，线点科技承接过其中电集团的领导查询系统和航天科工集团的技术支持网站系统建设。在这次的产品选型中，线点科技的搜索引擎产品一如既往的表现出优异的性能，完全贴近客户的功能体验，再次成为用友的软件技术供应商。&nbsp;<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=100</link>
			<title><![CDATA[ATA全美评测软件公司-实训平台]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Wed,05 May 2010 14:48:02 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=100</guid>	
		<description><![CDATA[<br/><br/>客户介绍：<br/><br/>ATA公司是中国智能化考试服务的创始者，中国最大的考试和教育服务供应商。<br/><br/>ATA公司创立于1999年，成立之初凭借先进的考试理念自主研发了世界领先的动态操作试题考试技术(DST)，向客户提供优化考试解决方案，极大地提高了考试的信度和效度，解决了困扰全球考试业界的众多难题，公司亦获得快速发展。2001年ATA公司凭借长期积累的独特技术和资源优势，依托现代教育理念，积极投身于中国职业教育改革，整合了微软、Adobe等国内外著名IT厂商的优质教育资源，为中国院校提供新型人才培养方案和教学方案，以及全面配套服务与支持。ATA公司凭借富有创新的教育理念、先进的技术打破了传统考试模式、教育模式的弊端，服务于中国人才的选拔、培养，推动了中国考试及教育事业的发展。&nbsp;<br/><br/>项目内容：<br/><br/><br/>线点科技作为ATA的外包服务提供商，为ATA提供其教育平台的开发技术服务。ATA作为软件开发培训机构，素以注重产品质量和规范著称，对于供应商的选择也极为严格，线点科技能够作为其技术提供商，表明线点科技的技术和管理质量都达到了相当高的水准。<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=99</link>
			<title><![CDATA[中文搜索引擎技术揭密:系统架构（一）]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Wed,28 Apr 2010 10:49:03 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=99</guid>	
		<description><![CDATA[<br/>互联网发展的今天，一方面离不开其开放、共享的特性带给人们的全新体验，另一方面也离不开数以亿计的为其提供各类丰富内容的网络节点。互联网被普及前，人们查阅资料第一想到的便是拥有大量书籍资料的图书馆，到了今天你怎么想？或许今天的很多人都会选择一种更方便、快捷、全面、准确的方式——互联网。你可以坐在家里轻点几下鼠标就查到想要的各类信息，这在互联网没有被普及之前，还都仅是一个梦而已，但如今这一切已成为了现实。<br/>而帮助你通过整个互联网快速查找到目标信息的就是越来越被重视的搜索引擎。有关搜索引擎的技术资料网络上已经很多，关于搜索引擎经济的多方面报道各大媒体也都已经铺天盖地。下面谈一些我对搜索引擎的理解：<br/>搜索引擎技术和分类<br/>搜索引擎的技术基础是全文检索技术，从20世纪60年代，国外对全文检索技术就开始有研究。全文检索通常指文本全文检索，包括信息的存储、组织、表现、查询、存取等各个方面，其核心为文本信息的索引和检索，一般用于企事业单位。随着互联网信息的发展，搜索引擎在全文检索技术上逐渐发展起来，并得到广泛的应用，但搜索引擎还是不同于全文检索。搜索引擎和常规意义上的全文检索主要区别有以下几点：<br/>1.&#160;&#160;&#160;&#160;数据量<br/>传统全文检索系统面向的是企业本身的数据或者和企业相关的数据，一般索引库规模多在GB级，数据量大的也只有几百万条；但互联网网页搜索需要处理几十亿的网页，搜索引擎的策略都是采用服务器群集和分布式计算技术。<br/>2.&#160;&#160;&#160;&#160;内容相关性<br/>信息太多，查准和排序就特别重要，Google等搜索引擎采用网页链接分析技术，根据互联网上网页被链接次数作为重要性评判的依据；但全文检索的数据源中相互链接的程度并不高，不能作为判别重要性的依据，只能基于内容的相关性排序。<br/>3.&#160;&#160;&#160;&#160;安全性<br/>互联网搜索引擎的数据来源都是互联网上公开的信息，而且除了文本正文以外，其它信息都不太重要；但企业全文检索的数据源都是企业内部的信息，有等级、权限等限制，对查询方式也有更严格的要求，因此其数据一般会安全和集中地存放在数据仓库中以保证数据安全和管理的要求。<br/>4.&#160;&#160;&#160;&#160;个性化和智能化<br/>搜索引擎面向的是互联网访问者，由于其数据量和客户数量的限制，自然语言处理技术、知识检索、知识挖掘等计算密集的智能计算技术很难应用，这也是目前搜索引擎技术努力的方向；而全文检索数据量小，检索需求明确，客户量少，在智能化和个性可走得更远。<br/><br/><br/>&nbsp;&#160;&#160;&#160;&#160;<br/><br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=98</link>
			<title><![CDATA[中文分词（三）]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[分词]]></category>
			<pubDate>Fri,16 Apr 2010 11:01:18 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=98</guid>	
		<description><![CDATA[分词中的难题<br/>有了成熟的分词算法，是否就能容易的解决中文分词的问题呢？事实远非如此。中文是一种十分复杂的语言，让计算机理解中文语言更是困难。在中文分词过程中，有两大难题一直没有完全突破。<br/>1、歧义识别<br/>&nbsp;&nbsp;&nbsp;&nbsp;歧义是指同样的一句话，可能有两种或者更多的切分方法。例如：表面的，因为“表面”和“面的”都是词，那么这个短语就可以分成“表面&nbsp;的”和“表&nbsp;面的”。这种称为交叉歧义。像这种交叉歧义十分常见，前面举的“和服”的例子，其实就是因为交叉歧义引起的错误。“化妆和服装”可以分成“化妆&nbsp;和&nbsp;服装”或者“化妆&nbsp;和服&nbsp;装”。由于没有人的知识去理解，计算机很难知道到底哪个方案正确。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;交叉歧义相对组合歧义来说是还算比较容易处理，组合歧义就必需根据整个句子来判断了。例如，在句子“这个门把手坏了”中，“把手”是个词，但在句子“请把手拿开”中，“把手”就不是一个词；在句子“将军任命了一名中将”中，“中将”是个词，但在句子“产量三年中将增长两倍”中，“中将”就不再是词。这些词计算机又如何去识别?<br/>&nbsp;&nbsp;&nbsp;&nbsp;如果交叉歧义和组合歧义计算机都能解决的话，在歧义中还有一个难题，是真歧义。真歧义意思是给出一句话，由人去判断也不知道哪个应该是词，哪个应该不是词。例如：“乒乓球拍卖完了”，可以切分成“乒乓&nbsp;球拍&nbsp;卖&nbsp;完&nbsp;了”、也可切分成“乒乓球&nbsp;拍卖&nbsp;完&nbsp;了”，如果没有上下文其他的句子，恐怕谁也不知道“拍卖”在这里算不算一个词。<br/>2、新词识别<br/>&nbsp;&nbsp;&nbsp;&nbsp;新词，专业术语称为未登录词。也就是那些在字典中都没有收录过，但又确实能称为词的那些词。最典型的是人名，人可以很容易理解句子“王军虎去广州了”中，“王军虎”是个词，因为是一个人的名字，但要是让计算机去识别就困难了。如果把“王军虎”做为一个词收录到字典中去，全世界有那么多名字，而且每时每刻都有新增的人名，收录这些人名本身就是一项巨大的工程。即使这项工作可以完成，还是会存在问题，例如：在句子“王军虎头虎脑的”中，“王军虎”还能不能算词？<br/>&nbsp;&nbsp;&nbsp;&nbsp;新词中除了人名以外，还有机构名、地名、产品名、商标名、简称、省略语等都是很难处理的问题，而且这些又正好是人们经常使用的词，因此对于搜索引擎来说，分词系统中的新词识别十分重要。目前新词识别准确率已经成为评价一个分词系统好坏的重要标志之一。<br/>&nbsp;中文分词的应用<br/>目前在自然语言处理技术中，中文处理技术比西文处理技术要落后很大一段距离，许多西文的处理方法中文不能直接采用，就是因为中文必需有分词这道工序。中文分词是其他中文信息处理的基础，搜索引擎只是中文分词的一个应用。其他的比如机器翻译（MT）、语音合成、自动分类、自动摘要、自动校对等等，都需要用到分词。因为中文需要分词，可能会影响一些研究，但同时也为一些企业带来机会，因为国外的计算机处理技术要想进入中国市场，首先也是要解决中文分词问题。在中文研究方面，相比外国人来说，中国人有十分明显的优势。<br/>&nbsp;&nbsp;&nbsp;&nbsp;分词准确性对搜索引擎来说十分重要，但如果分词速度太慢，即使准确性再高，对于搜索引擎来说也是不可用的，因为搜索引擎需要处理数以亿计的网页，如果分词耗用的时间过长，会严重影响搜索引擎内容更新的速度。因此对于搜索引擎来说，分词的准确性和速度，二者都需要达到很高的要求。<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=97</link>
			<title><![CDATA[  中文分词技术（二）]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[分词]]></category>
			<pubDate>Tue,06 Apr 2010 11:51:12 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=97</guid>	
		<description><![CDATA[中文分词技术属于自然语言处理技术范畴，对于一句话，人可以通过自己的知识来明白哪些是词，哪些不是词，但如何让计算机也能理解？其处理过程就是分词算法。<br/>&nbsp;&nbsp;&nbsp;现有的分词算法可分为三大类：基于字符串匹配的分词方法、基于理解的分词方法和基于统计的分词方法。<br/>1、基于字符串匹配的分词方法&#160;&#160;&#160;&#160;<br/>&nbsp;&nbsp;&nbsp;&nbsp;这种方法又叫做机械分词方法，它是按照一定的策略将待分析的汉字串与一个“充分大的”机器词典中的词条进行配，若在词典中找到某个字符串，则匹配成功（识别出一个词）。按照扫描方向的不同，串匹配分词方法可以分为正向匹配和逆向匹配；按照不同长度优先匹配的情况，可以分为最大（最长）匹配和最小（最短）匹配；按照是否与词性标注过程相结合，又可以分为单纯分词方法和分词与标注相结合的一体化方法。常用的几种机械分词方法如下：<br/>&nbsp;&nbsp;&nbsp;&nbsp;1）正向最大匹配法（由左到右的方向）；<br/>&nbsp;&nbsp;&nbsp;&nbsp;2）逆向最大匹配法（由右到左的方向）；<br/>&nbsp;&nbsp;&nbsp;&nbsp;3）最少切分（使每一句中切出的词数最小）。<br/>&nbsp;&nbsp;&nbsp;&nbsp;还可以将上述各种方法相互组合，例如，可以将正向最大匹配方法和逆向最大匹配方法结合起来构成双向匹配法。由于汉语单字成词的特点，正向最小匹配和逆向最小匹配一般很少使用。一般说来，逆向匹配的切分精度略高于正向匹配，遇到的歧义现象也较少。统计结果表明，单纯使用正向最大匹配的错误率为1/169，单纯使用逆向最大匹配的错误率为1/245。但这种精度还远远不能满足实际的需要。实际使用的分词系统，都是把机械分词作为一种初分手段，还需通过利用各种其它的语言信息来进一步提高切分的准确率。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一种方法是改进扫描方式，称为特征扫描或标志切分，优先在待分析字符串中识别和切分出一些带有明显特征的词，以这些词作为断点，可将原字符串分为较小的串再来进机械分词，从而减少匹配的错误率。另一种方法是将分词和词类标注结合起来，利用丰富的词类信息对分词决策提供帮助，并且在标注过程中又反过来对分词结果进行检验、调整，从而极大地提高切分的准确率。<br/>对于机械分词方法，可以建立一个一般的模型，在这方面有专业的学术论文，这里不做详细论述。<br/>&nbsp;&nbsp;&nbsp;&nbsp;2、基于理解的分词方法<br/>&nbsp;&nbsp;&nbsp;&nbsp;这种分词方法是通过让计算机模拟人对句子的理解，达到识别词的效果。其基本思想就是在分词的同时进行句法、语义分析，利用句法信息和语义信息来处理歧义现象。它通常包括三个部分：分词子系统、句法语义子系统、总控部分。在总控部分的协调下，分词子系统可以获得有关词、句子等的句法和语义信息来对分词歧义进行判断，即它模拟了人对句子的理解过程。这种分词方法需要使用大量的语言知识和信息。由于汉语语言知识的笼统、复杂性，难以将各种语言信息组织成机器可直接读取的形式，因此目前基于理解的分词系统还处在试验阶段。<br/>&nbsp;&nbsp;&nbsp;3、基于统计的分词方法<br/>&nbsp;&nbsp;&nbsp;&nbsp;从形式上看，词是稳定的字的组合，因此在上下文中，相邻的字同时出现的次数越多，就越有可能构成一个词。因此字与字相邻共现的频率或概率能够较好的反映成词的可信度。可以对语料中相邻共现的各个字的组合的频度进行统计，计算它们的互现信息。定义两个字的互现信息，计算两个汉字X、Y的相邻共现概率。互现信息体现了汉字之间结合关系的紧密程度。当紧密程度高于某一个阈值时，便可认为此字组可能构成了一个词。这种方法只需对语料中的字组频度进行统计，不需要切分词典，因而又叫做无词典分词法或统计取词方法。但这种方法也有一定的局限性，会经常抽出一些共现频度高、但并不是词的常用字组，例如“这一”、“之一”、“有的”、“我的”、“许多的”等，并且对常用词的识别精度差，时空开销大。实际应用的统计分词系统都要使用一部基本的分词词典（常用词词典）进行串匹配分词，同时使用统计方法识别一些新的词，即将串频统计和串匹配结合起来，既发挥匹配分词切分速度快、效率高的特点，又利用了无词典分词结合上下文识别生词、自动消除歧义的优点。<br/>到底哪种分词算法的准确度更高，目前并无定论。对于任何一个成熟的分词系统来说，不可能单独依靠某一种算法来实现，都需要综合不同的算法。<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=96</link>
			<title><![CDATA[中文搜索引擎技术揭密:中文分词（一）]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Wed,31 Mar 2010 13:16:55 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=96</guid>	
		<description><![CDATA[<br/>什么是中文分词？<br/>众所周知，英文是以词为单位的，词和词之间是靠空格隔开，而中文是以字为单位，句子中所有的字连起来才能描述一个意思。例如，英文句子I&nbsp;am&nbsp;a&nbsp;student，用中文则为：“我是一个学生”。计算机可以很简单通过空格知道student是一个单词，但是不能很容易明白“学”、“生”两个字合起来才表示一个词。把中文的汉字序列切分成有意义的词，就是中文分词，有些人也称为切词。我是一个学生，分词的结果是：我&nbsp;是&nbsp;一个&nbsp;学生。<br/>中文分词和搜索引擎<br/>中文分词到底对搜索引擎有多大影响？对于搜索引擎来说，最重要的并不是找到所有结果，因为在上百亿的网页中找到所有结果没有太多的意义，没有人能看得完，最重要的是把最相关的结果排在最前面，这也称为相关度排序。中文分词的准确与否，常常直接影响到对搜索结果的相关度排序。笔者最近替朋友找一些关于日本和服的资料，在搜索引擎上输入“和服”，得到的结果就发现了很多问题。下面就以这个例子来说明分词对搜索结果的影响，在现有两个中文搜索引擎上做测试，测试方法是直接在Google（<a href="http://www.google.com" target="_blank">http://www.google.com</a>）、百度（<a href="http://www.baidu.com" target="_blank">http://www.baidu.com</a>）上以“和服”为关键词进行搜索：<br/>&nbsp;&nbsp;&nbsp;&nbsp;在Google上输入“和服”搜索所有中文简体网页，总共结果507,000条，前20条结果中有14条与和服一点关系都没有。在第一页就有以下错误：<br/>&nbsp;在Google上输入“和服”搜索所有中文简体网页，总共结果507,000条，前20条结果中有14条与和服一点关系都没有。在第一页就有以下错误：<br/>&nbsp;&nbsp;&nbsp;&nbsp;“通信信息报：瑞星以技术和服务开拓网络安全市场”<br/>&nbsp;&nbsp;&nbsp;&nbsp;“使用纯HTML的通用数据管理和服务-&nbsp;开发者-&nbsp;ZDNet&nbsp;...”<br/>&nbsp;&nbsp;&nbsp;“陈慧琳《心口不一》化妆和服装自己包办”<br/>&nbsp;&nbsp;&nbsp;&nbsp;“外交部：中国境外领事保护和服务指南(2003年版)&nbsp;...”<br/>&nbsp;&nbsp;&nbsp;&nbsp;“产品和服务”<br/>&nbsp;&nbsp;&nbsp;&nbsp;等等。第一页只有三篇是真正在讲“和服”的结果。<br/>&nbsp;&nbsp;&nbsp;&nbsp;在百度上输入“和服”搜索网页，总共结果为287,000条，前20条结果中有6条与和服一点关系都没有。在第一页有以下错误：<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;“福建省晋江市恒和服装有限公司系独资企业”<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;“关于商品和服务实行明码标价的规定”<br/>&nbsp;&nbsp;&nbsp;&nbsp;“青岛东和服装设备”<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这次搜索引擎结果中的错误，就是由于分词的不准确所造成的。通过笔者的了解，Google的中文分词技术采用的是美国一家名叫Basis&nbsp;Technology（<a href="http://www.basistech.com" target="_blank">http://www.basistech.com</a>）的公司提供的中文分词技术，百度使用的是自己公司开发的分词技术。<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=95</link>
			<title><![CDATA[使用站内搜索的五大理由]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[全文检索]]></category>
			<pubDate>Wed,31 Mar 2010 13:15:47 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=95</guid>	
		<description><![CDATA[<br/>自从有了计算机以后，人类开始用计算机保存信息，有保存，就有查找，于是检索技术诞生了。文本检索技术的发展从最初的SMART文档检索系统[1]到Altavista搜索引擎，到现在的搜索巨头Google[2]，其发展可谓日新月异、与时具进，人们开始习惯互联网的搜索时代，站内检索的需求也逐渐显露出来。下面列举需要站内检索的五大理由：<br/>一、所寻即所得<br/>信息量总在不断增长，而访问者的耐心却逐渐下降。据统计，每需要多点击一次鼠标，就有三分之一的用户选择放弃。这意味着100个访问者进入我们的网站，如果需要点击三次鼠标才能找到所需要的东西，那么就只剩下不到4个人了。根据第十一次中国互联网信息调查表明，53.1%的人上网是为了获取信息[3]，大部分网站的目的是让外界了解自己，了解的人越多，效果就越好。把访问者最想要的返回给用户，就可让更多的用户了解自己，这样站内检索成为必然选择。<br/>二、了解访问者的意图<br/>管理大师彼得.德鲁克说：“一定要知道你的客户想要什么？”客户的需求永远都是最重要的，因此我们总在分析我们的客户在哪里及他们需要什么。所有访问我们网站的人都可能是我们的潜在客户，了解他们的意图对于我们做决策很重要。站内检索技术可以实现这个功能，站内检索的日志功能可以记录每个访问者的检索词和检索结果，这是访问者意图的最直接的表现。通过分析这些信息，我们还可以调整网站结构，把访问者最想要的放在明显的位置（了解我们的人就多啦）。这个理由经常被人忽视，我在这里放在第二位也是希望引起大家重视，特别是那些已经使用站内检索的网站所有者。<br/>三、&nbsp;&nbsp;符合网民习惯<br/>根据调查表明，68.3％的上网者经常使用搜索引擎[3]。大部分人已经习惯通过检索来找到他们想要的东西，而不是按照某个栏目一级一级往下找(我就很少用yahoo的分类目录）。在网站内访问者要是没看见那熟悉的按钮会多少有些不习惯（我们千万不要让上帝感到不习惯）。在心理学角度讲，人们如果对某个事物不习惯很容易产生厌烦情绪，这也就是为什么你第一次去某个地方会觉得特别远，要是路熟了这种感觉就消失了。看来，为了上帝我们也需要使用站内检索。<br/>四、&nbsp;&nbsp;提升网站信息价值<br/>我们经常会发生这样的事情：明明记得有一篇写关于吃香辣虾的文件，就是想不起存放在什么地方了。访问者也有类似困扰，只记得某个网站上说了关于张国荣跳楼的消息，但不知道具体的链接在哪里。另外，要是隐藏在目录很深的html文档可能自从网站建立到整个网站关闭也没有一个人看过，这些都不是我们所想要的。站内检索毫无疑问可以解决上述问题。同时，按照一个主题把所有相关文档提供给访问者，可以让访问者更全面的了解他所想要的东西，这增加了网站信息间的组织性和逻辑性，方便了访问者的使用，提升用户体验度（用户体验度：一个让我们忐忑不安的名词）<br/><br/><br/>五、&nbsp;身份的象征<br/>有没有站内检索其实已经不只是用户体验度的问题了，还是一个网站专业身份的象征。浏览国外公司的网站，会发现几乎所有网站都在首页最明显的区域放置了一个搜索框，这传达的信息是：专业的网站都有站内检索（呵呵，我没说国外网站就是专业网站）。网民的心态是：我用不用，你管不着，你要是没有就说明你不够专业。为了树立形象，也需要使用站内检索。<br/>最后还得解释一个问题：为什么有了搜索引擎还需要站内检索？用网际搜索引擎不是直接可以查到吗？这其中有两个问题：1&nbsp;搜索羽毛球，你会搜索到235,000个网页[4]，也不知道我公司的排在第10,000页还是10,001页，搜索者可能永远也不会去看。2&nbsp;搜索引擎通过网络Spider收集网页，对于网站内隐藏很深的网页很难索引到的。<br/>当然，目前不选择站内检索的最大理由是成本太高。麻雀虽小五脏俱全，站内检索具有和网际搜索引擎一样的技术构成，价格自然也不会低。如果有很便宜的站内检索系统（5毛钱一斤？），或者是免费的，所有网站都会十分高兴，当然会选择站内检索，那时互联网就步入真正的搜索时代……<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=94</link>
			<title><![CDATA[全文检索]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[全文检索]]></category>
			<pubDate>Wed,31 Mar 2010 13:14:09 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=94</guid>	
		<description><![CDATA[<br/>有专家认为，无论对文献标引的质量如何，对用户检索的满足率都不可能百分之百。例如，用户想检索关于陈毅在抗日战争中活动的文献，采用对标引词(主题词、关键词)字段的检索就很难满足检索要求，只有全文检索才能满足这一检索目的。因此，无论对文献的标引和分类如何，全文检索的功能都是不可替代的。然而，由于全文检索是直接对“原文”的检索，检索时会产生误检，大量的检索垃圾降低了全文检索的查准率，同时由于作者用词的不统一，同义词繁多，全文检索的查全率也受到影响。所以，解决这些问题是刻不容缓的。<br/>1．提高查全率<br/>作者用词的不统一，影响了用户的查全。例如，查找“非典型肺炎”，由于不同的文献使用的词汇不同，如“非典型肺炎”、“SARS”、“非典”等，只用某一词查找就可能出现漏检，如果让用户去列举出所有同义词来检索，势必增加了用户的检索负担。因此，构造全文检索算法时应考虑到检索词的扩充，采用同义词词典无疑是一个好的方法。<br/>同义词词典是把含义相同的词汇关联起来，在全文检索中的作用是，当用户使用某个词汇检索时，系统直接将同义词取出，构成“或”运算检索式，在全文中匹配查询，这样确保了具有高查全率的检索效果。对于同义词词典，应能够及时更新，或具有学习功能，为维护同义词词典提供帮助。<br/>2．提高查准率<br/>由于中文词之间没有间隔标记，所以进行全文检索时极易产生误检索，使查准率偏低。例如，用“华人”一词去检索，会使得含有“中华人民共和国”词汇的文献被检索出来；用“民法’’检索，会把“人民法院”检索出来。解决这类问题同样可通过构造检索辅助词典来完成，而实现这一任务的词典，称为“排除词词典”。<br/>排除词词典的结构为，将检索用词(如民法)与欲排除词(如人民法院、移民法等)关联起来，用于在检索时消除误检。用排除词词典排除误检的做法有许多，最简单的方法是将检索词在每一文献中检索出数量(检索词在文献中出现次数)与所有欲排除词在文献中出现的数量相比较，若相等，该文献就被排除，否则为命中。<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=93</link>
			<title><![CDATA[网络舆情监控系统]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Wed,31 Mar 2010 13:12:29 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=93</guid>	
		<description><![CDATA[<br/>　&nbsp;网络舆情监控系统是指通过对网络各类信息汇集、分类、整合、筛选等技术处理，再形成对网络热点、动态、网民意见等实时统计报表的软件工具。<br/>　　随着互联网的快速发展，网络媒体作为一种新的信息传播形式，已深入人们的日常生活。网友言论活跃已达到前所未有的程度，不论是国内还是国际重大事件，都能马上形成网上舆论，通过这种网络来表达观点、传播思想，进而产生巨大的舆论压力，达到任何部门、机构都无法忽视的地步。可以说，互联网已成为思想文化信息的集散地和社会舆论的放大器。<br/>　　舆情监控系统通过对热点问题和重点领域比较集中的网站信息，如：网页、论坛、BBS等，进行24小时监控，随时下载最新的消息和意见。下载后完成对数据格式的转换及元数据的标引。对下载本地的信息，进行初步的过滤和预处理。对热点问题和重要领域实施监控，前提是必须通过人际交互建立舆情监控的知识库，用来指导智能分析的过程。对热点问题的智能分析，首先基于传统基于向量空间的特征分析技术上，对抓取的内容做分类、聚类和摘要分析，对信息完成初步的再组织。然后在监控知识库的指导下进行基于舆情的语义分析，使管理者看到的民情民意更有效，更符合现实。最后将监控的结果，分别推送到不同的职能部门，供制定对策使用。<br/>　　网络舆情监控系统是利用搜索引擎技术和网络信息挖掘技术，通过网页内容的自动采集处理、敏感词过滤、智能聚类分类、主题检测、专题聚焦、统计分析，实现各单位对自己相关网络舆情监督管理的需要，最终形成舆情简报、舆情专报、分析报告、移动快报，为决策层全面掌握舆情动态，做出正确舆论引导，提供分析依据。<br/>　　“网络舆情监测系统”是针对在一定的社会空间内，围绕中介性社会事件的发生、发展和变化，民众对社会管理者产生和持有的社会政治态度于网络上表达出来意愿集合而进行的计算机监测的系统统称。<br/>　　“网络舆情”是较多群众关于社会中各种现象、问题所表达的信念、态度、意见和情绪等等表现的总和。网络舆情形成迅速，对社会影响巨大，加强互联网信息监管的同时，组织力量开展信息汇集整理和分析，对于及时应对网络突发的公共事件和全面掌握社情民意很有意义。<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=92</link>
			<title><![CDATA[垂直搜索和开放式搜索的技术模式之异同]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Wed,31 Mar 2010 13:10:49 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=92</guid>	
		<description><![CDATA[<br/>一、垂直搜索和开放式搜索的相同点主要是：<br/>　　1．都是解决用户从海量信息中找到自己想要信息的目的；<br/>　　2．基本技术都是信息检索；<br/>　　3．对中文语言而言，都需要中文分词等关键技术；<br/>　　4．都需要spider获取外部信息；<br/>二、垂直搜索和开放式网页搜索的不同点：<br/>　　1．产生的背景不同：开发网页搜索的产生背景是因为互联网上的网页太多，用户无法找到自己想要的网页，而垂直搜索的产生是因为两个原因：第一，用户从开放式的网页搜索中想要找到自己想要的某一个特定领域的信息时，需要花费大量的时间。例如，对于求职而言，如果用户在google中输入“java开发”，得到的结果都是讲java开发技巧的，要想看到关于“java开发”的职位，需要用不断的翻页；垂直搜索产生的第二个原因是，领域性网站数量的日益增多，拿招聘来说，现在国内的招聘网站可以说是几百家，除了51job、chinahr、zhaopin这样的门户之外，各地还有自己的招聘门户，因此，用户想要得到全面的招聘信息，就需要一个网站一个网站打开去看，耗时耗力！<br/>　　2．受限领域：垂直搜索一定是针对用户在某一个方面的需求，专门搜索该方面的内容，例如：票务搜索、房地产搜索、汽车搜索、招聘搜索……<br/>　　3．定向spider：垂直搜索所用的spider和google、baidu所用的spider并不一样，当然开发的基本思想是一样的。只是垂直搜索的spider是针对已经收集好的website&nbsp;list进行爬取4.信息抽取：垂直搜索中一项很关键技术就是信息抽取（IE：Information&nbsp;Extraction）。网页搜索引擎（google）是针对去掉广告内容后的整个网页内容进行索引，然后呈现给用户的也是一个网页。而垂直搜索往往需要对爬下来网页中的部分内容进行索引，同时呈现给用户的也是经过抽取整理后的内容，而不是一个简单的summary加上网页链接。<br/>　　4．排序技术：通常我们所知道的排序都是PR（page&nbsp;rank），google有google的pr技术，baidu有baidu的pr技术，但基本思想就是做网页的链接分析：包含一个关键词的网页有10万个，那到底哪个该排在第一个。网页搜索引擎通常都是分析一个网页中链接了多少个其它的网页，加上其它网页链接到这个网页有多少个，再加上更新时间，然后做一个数学运算得到最后的排序权值。垂直搜索的排序就和机遇链接分析的方法大不相同。链接分析的pr方法，需要爬取海量的网页信息，而垂直搜索并没有这样的海量数据，所以客观上的条件不允许做链接分析。同时垂直搜索的用户需求决定了常用的排序依据：内容相关性、实时性。因此，我们看到现在所有的垂直搜索都采用了按相关性和时间交叉排序的方法。<br/>　　5．结果页面呈现方式：垂直搜索的结果页面呈现通常都是除了给出检索结果的title、summary、time、url等基本信息之外，还要给出一些经过信息抽取之后的内容：例如，房地产垂直搜索要给出地点、价格等信息，招聘垂直搜索要给出招聘单位名称、地点等信息。票务垂直搜索要给出预定机构，价格，预定方法等信息<br/>　　6．核心技术：开放式的网页搜索引擎（google、baidu）的核心技术通常是：分布式存储、分布式检索、网页链接分析、自动摘要等技术。垂直搜索的核心技术主要是全文检索、信息抽取。相比之下，垂直搜索在自动摘要方面做得研究都很少，简单的拿出原文中的一定字数内容就可以做摘要。<br/>　　7．索引结构：垂直搜索是对抽取后的内容分字段索引，而开发网页搜索是对整个页面进行索引。<br/>线点科技的垂直搜索产品既是针对特定领域，和确定范围内网站的内容提供定向搜索服务的产品，但同时也融合了开放式搜索技术的一些特点和优点，从而能够给客户提供更优的搜索体验。<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=91</link>
			<title><![CDATA[用 Lucene 加速 Web 搜索应用程序的开发（五）]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Wed,31 Mar 2010 13:09:17 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=91</guid>	
		<description><![CDATA[5．在&nbsp;Tomcat&nbsp;5.0&nbsp;上运行应用程序<br/>现在我们可以在&nbsp;Tomcat&nbsp;5.0&nbsp;上运行开发好的应用程序。&nbsp;<br/>1.&#160;&#160;&#160;&#160;右键单击&nbsp;search.jsp，然后选择&nbsp;Run&nbsp;as&nbsp;&gt;&nbsp;Run&nbsp;on&nbsp;Server，如图7所示。&nbsp;<br/><br/><br/>图7：配置&nbsp;Tomcat&nbsp;5.0<br/>&nbsp;在弹出的窗口中，选择&nbsp;Tomcat&nbsp;v5.0&nbsp;Server&nbsp;作为目标&nbsp;Web&nbsp;应用程序服务器，然后点击&nbsp;Next，如图8&nbsp;所示：<br/>选择&nbsp;Tomcat&nbsp;5.0<br/>&nbsp;<br/>3.&#160;&#160;&#160;&#160;现在需要指定用来运行&nbsp;Web&nbsp;应用程序的&nbsp;Apache&nbsp;Tomcat&nbsp;5.0&nbsp;以及&nbsp;JRE&nbsp;的路径。这里你所选择的&nbsp;JRE&nbsp;的版本必须和你用来编译&nbsp;Java&nbsp;文件的&nbsp;JRE&nbsp;的版本一致。配置好之后，点击&nbsp;如&nbsp;图9&nbsp;所示。&nbsp;图9：完成Tomcat&nbsp;5.0的配置<br/>&nbsp;<br/>4.&#160;&#160;&#160;&#160;配置好之后，Tomcat&nbsp;会自动运行，并且会对&nbsp;search.jsp&nbsp;进行编译并显示给用户。如&nbsp;图10&nbsp;所示。&nbsp;<br/>图10：用户&nbsp;界面在输入框中输入关键词&nbsp;“information”&nbsp;然后单击&nbsp;Search&nbsp;按钮。然后这个页面上会显示出搜索结果来，如&nbsp;图11&nbsp;所示。&nbsp;图11：搜索结果<br/>&nbsp;<br/>单击搜索结果的第一个链接，页面上就会显示出所链接到的页面的内容。如&nbsp;图12&nbsp;所示.&nbsp;图12：详细信息<br/>&nbsp;<br/>现在我们已经成功的完成了示例项目的开发，并成功的用Lucene实现了搜索和索引功能。你可以下载这个项目的源代码（下载）。&nbsp;<br/>总结<br/>Lucene&nbsp;提供了灵活的接口使我们更加方便的设计我们的&nbsp;Web&nbsp;搜索应用程序。如果你想在你的应用程序中加入搜索功能，那么&nbsp;Lucene&nbsp;是一个很好的选择。在设计你的下一个带有搜索功能的应用程序的时候可以考虑使用&nbsp;Lucene&nbsp;来提供搜索功能。&nbsp;<br/><br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=90</link>
			<title><![CDATA[用 Lucene 加速 Web 搜索应用程序的开发（四）]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Wed,31 Mar 2010 13:08:05 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=90</guid>	
		<description><![CDATA[4.索引子系统:&nbsp;类&nbsp;IndexManager&nbsp;用来实现这个子系统。清单8&nbsp;给出了这个类的源代码。&nbsp;<br/><br/>清单8：索引子系统的实现<br/>package&nbsp;sample.dw.paper.lucene.index;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;java.io.File;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;java.io.IOException;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;java.io.Reader;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;o&#114;g.apache.lucene.analysis.Analyzer;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;o&#114;g.apache.lucene.analysis.standard.StandardAnalyzer;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;o&#114;g.apache.lucene.document.Document;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;o&#114;g.apache.lucene.document.Field;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;o&#114;g.apache.lucene.index.IndexWriter;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;o&#114;g.apache.lucene.store.Directory;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;o&#114;g.apache.lucene.store.FSDirectory;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;sample.dw.paper.lucene.util.HTMLDocParser;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;This&nbsp;class&nbsp;is&nbsp;used&nbsp;to&nbsp;cr&#101;ate&nbsp;an&nbsp;index&nbsp;for&nbsp;HTML&nbsp;files&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;class&nbsp;IndexManager&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//the&nbsp;directory&nbsp;that&nbsp;stores&nbsp;HTML&nbsp;files&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;final&nbsp;String&nbsp;dataDir&nbsp;&nbsp;=&nbsp;&#34;c:\\dataDir&#34;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//the&nbsp;directory&nbsp;that&nbsp;is&nbsp;used&nbsp;to&nbsp;store&nbsp;a&nbsp;Lucene&nbsp;index&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;final&nbsp;String&nbsp;indexDir&nbsp;=&nbsp;&#34;c:\\indexDir&#34;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;cr&#101;ate&nbsp;index&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;boolean&nbsp;cr&#101;ateIndex()&nbsp;throws&nbsp;IOException{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(true&nbsp;==&nbsp;ifIndexExist()){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;true;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File&nbsp;dir&nbsp;=&nbsp;new&nbsp;File(dataDir);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!dir.exists()){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;false;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File[]&nbsp;htmls&nbsp;=&nbsp;dir.listFiles();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Directory&nbsp;fsDirectory&nbsp;=&nbsp;FSDirectory.getDirectory(indexDir,&nbsp;true);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Analyzer&nbsp;&nbsp;analyzer&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;new&nbsp;StandardAnalyzer();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IndexWriter&nbsp;indexWriter&nbsp;=&nbsp;new&nbsp;IndexWriter(fsDirectory,&nbsp;analyzer,&nbsp;true);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;htmls.length;&nbsp;i++){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;htmlPath&nbsp;=&nbsp;htmls[i].getAbsolutePath();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(htmlPath.endsWith(&#34;.html&#34;)&nbsp;||&nbsp;htmlPath.endsWith(&#34;.htm&#34;)){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addDocument(htmlPath,&nbsp;indexWriter);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;indexWriter.optimize();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;indexWriter.close();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;true;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Add&nbsp;one&nbsp;document&nbsp;to&nbsp;the&nbsp;Lucene&nbsp;index&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;addDocument(String&nbsp;htmlPath,&nbsp;IndexWriter&nbsp;indexWriter){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HTMLDocParser&nbsp;htmlParser&nbsp;=&nbsp;new&nbsp;HTMLDocParser(htmlPath);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;path&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;htmlParser.getPath();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;title&nbsp;&nbsp;&nbsp;=&nbsp;htmlParser.getTitle();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reader&nbsp;content&nbsp;=&nbsp;htmlParser.getContent();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Document&nbsp;document&nbsp;=&nbsp;new&nbsp;Document();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.add(new&nbsp;Field(&#34;path&#34;,path,Field.Store.YES,Field.Index.NO));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.add(new&nbsp;Field(&#34;title&#34;,title,Field.Store.YES,Field.Index.TOKENIZED));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.add(new&nbsp;Field(&#34;content&#34;,content));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;indexWriter.addDocument(document);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(IOException&nbsp;e)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;judge&nbsp;if&nbsp;the&nbsp;index&nbsp;exists&nbsp;already&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;boolean&nbsp;ifIndexExist(){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File&nbsp;directory&nbsp;=&nbsp;new&nbsp;File(indexDir);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(0&nbsp;&lt;&nbsp;directory.listFiles().length){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;true;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}else{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;false;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;getDataDir(){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;this.dataDir;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;getIndexDir(){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;this.indexDir;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>这个类包含两个私有属性，分别是&nbsp;dataDir&nbsp;和&nbsp;indexDir。dataDir&nbsp;代表存放等待进行索引的&nbsp;HTML&nbsp;页面的路径，indexDir&nbsp;代表了存放&nbsp;Lucene&nbsp;索引文件的路径。类&nbsp;IndexManager&nbsp;提供了三个方法，分别是&nbsp;cr&#101;ateIndex,&nbsp;addDocument&nbsp;和&nbsp;ifIndexExist。如果索引不存在的话，你可以使用方法&nbsp;cr&#101;ateIndex&nbsp;去创建一个新的索引，用方法&nbsp;addDocument&nbsp;去向一个索引上添加文档。在我们的场景中，一个文档就是一个&nbsp;HTML&nbsp;页面。方法&nbsp;addDocument&nbsp;会调用由类&nbsp;HTMLDocParser&nbsp;提供的方法对&nbsp;HTML&nbsp;文档进行解析。你可以使用最后一个方法&nbsp;ifIndexExist&nbsp;来判断&nbsp;Lucene&nbsp;的索引是否已经存在。&nbsp;<br/>现在我们来看一下放在包&nbsp;sample.dw.paper.lucene.util&nbsp;里面的类&nbsp;HTMLDocParser。这个类用来从&nbsp;HTML&nbsp;文件中提取出文本信息。这个类包含三个方法，分别是&nbsp;getContent，getTitle&nbsp;和&nbsp;getPath。第一个方法返回去除了&nbsp;HTML&nbsp;标记的文本内容，第二个方法返回&nbsp;HTML&nbsp;文件的标题，最后一个方法返回&nbsp;HTML&nbsp;文件的路径。清单9&nbsp;给出了这个类的源代码。&nbsp;<br/><br/>清单9：HTML&nbsp;解析器<br/>package&nbsp;sample.dw.paper.lucene.util;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;java.io.FileInputStream;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;java.io.FileNotFoundException;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;java.io.IOException;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;java.io.InputStream;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;java.io.InputStreamReader;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;java.io.Reader;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;java.io.UnsupportedEncodingException;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;o&#114;g.apache.lucene.demo.html.HTMLParser;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;class&nbsp;HTMLDocParser&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;String&nbsp;htmlPath;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;HTMLParser&nbsp;htmlParser;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;HTMLDocParser(String&nbsp;htmlPath){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.htmlPath&nbsp;=&nbsp;htmlPath;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;initHtmlParser();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;void&nbsp;initHtmlParser(){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InputStream&nbsp;inputStream&nbsp;=&nbsp;null;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inputStream&nbsp;=&nbsp;new&nbsp;FileInputStream(htmlPath);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(FileNotFoundException&nbsp;e)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(null&nbsp;!=&nbsp;inputStream){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;htmlParser&nbsp;=&nbsp;new&nbsp;HTMLParser(new&nbsp;InputStreamReader(inputStream,&nbsp;&#34;utf-8&#34;));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(UnsupportedEncodingException&nbsp;e)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;getTitle(){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(null&nbsp;!=&nbsp;htmlParser){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;htmlParser.getTitle();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(IOException&nbsp;e)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(InterruptedException&nbsp;e)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&#34;&#34;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Reader&nbsp;getContent(){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(null&nbsp;!=&nbsp;htmlParser){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;htmlParser.getReader();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(IOException&nbsp;e)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;null;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;getPath(){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;this.htmlPath;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=89</link>
			<title><![CDATA[用 Lucene 加速 Web 搜索应用程序的开发（三）]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Wed,31 Mar 2010 13:06:51 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=89</guid>	
		<description><![CDATA[用&nbsp;Lucene&nbsp;加速&nbsp;Web&nbsp;搜索应用程序的开发（三）<br/>3.&nbsp;子系统的实现<br/>在分析了系统的架构设计之后，我们接下来看系统实现的详细信息。&nbsp;<br/>1.&#160;&#160;&#160;&#160;用户接口:&nbsp;这个子系统有一个名为&nbsp;search.jsp&nbsp;的&nbsp;JSP&nbsp;文件来实现，这个&nbsp;JSP&nbsp;页面包含两个部分。第一部分提供了一个用户接口去向&nbsp;Web&nbsp;应用程序服务器提交搜索请求，如图5所示。注意到这里的搜索请求发送到了一个名为&nbsp;SearchController&nbsp;的&nbsp;Servlet&nbsp;上面。Servlet&nbsp;的名字和具体实现的类的对应关系在&nbsp;web.xml&nbsp;里面指定。&nbsp;<br/><br/>图5：向Web服务器提交搜索请求<br/>&nbsp;这个JSP的第二部分负责显示搜索结果给用户，如图6所示：&nbsp;图6：显示搜索结果<br/>&nbsp;<br/>2.&#160;&#160;&#160;&#160;请求管理器:&nbsp;一个名为&nbsp;SearchController&nbsp;的&nbsp;servlet&nbsp;用来实现该子系统。清单６给出了这个类的源代码。&nbsp;<br/><br/>清单６：请求管理器的实现<br/>package&nbsp;sample.dw.paper.lucene.servlet;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;java.io.IOException;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;java.util.List;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;javax.servlet.RequestDispatcher;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;javax.servlet.ServletException;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;javax.servlet.http.HttpServlet;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;javax.servlet.http.HttpServletRequest;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;javax.servlet.http.HttpServletResponse;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;sample.dw.paper.lucene.search.SearchManager;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;This&nbsp;servlet&nbsp;is&nbsp;used&nbsp;to&nbsp;deal&nbsp;with&nbsp;the&nbsp;search&nbsp;request&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;and&nbsp;return&nbsp;the&nbsp;search&nbsp;results&nbsp;to&nbsp;the&nbsp;client&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;class&nbsp;SearchController&nbsp;extends&nbsp;HttpServlet{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;final&nbsp;long&nbsp;serialVersionUID&nbsp;=&nbsp;1L;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;doPost(HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throws&nbsp;IOException,&nbsp;ServletException{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;searchWord&nbsp;=&nbsp;request.getParameter(&#34;searchWord&#34;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SearchManager&nbsp;searchManager&nbsp;=&nbsp;new&nbsp;SearchManager(searchWord);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;searchResult&nbsp;=&nbsp;null;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;searchResult&nbsp;=&nbsp;searchManager.search();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RequestDispatcher&nbsp;dispatcher&nbsp;=&nbsp;request.getRequestDispatcher(&#34;search.jsp&#34;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request.setAttribute(&#34;searchResult&#34;,searchResult);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dispatcher.forward(request,&nbsp;response);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;doGet(HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throws&nbsp;IOException,&nbsp;ServletException{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doPost(request,&nbsp;response);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>在清单6中，doPost&nbsp;方法从客户端获取搜索词并创建类&nbsp;SearchManager&nbsp;的一个实例，其中类&nbsp;SearchManager&nbsp;在搜索子系统中进行了定义。然后，SearchManager&nbsp;的方法&nbsp;search&nbsp;会被调用。最后搜索结果被返回到客户端。&nbsp;<br/>3.&#160;&#160;&#160;&#160;搜索子系统:&nbsp;在这个子系统中，我们定义了两个类：SearchManager&nbsp;和&nbsp;SearchResultBean。第一个类用来实现搜索功能，第二个类是个JavaBean，用来描述搜索结果的结构。清单7给出了类&nbsp;SearchManager&nbsp;的源代码。&nbsp;<br/><br/>清单7：搜索功能的实现<br/>package&nbsp;sample.dw.paper.lucene.search;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;java.io.IOException;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;java.util.ArrayList;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;java.util.List;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;o&#114;g.apache.lucene.analysis.Analyzer;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;o&#114;g.apache.lucene.analysis.standard.StandardAnalyzer;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;o&#114;g.apache.lucene.queryParser.ParseException;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;o&#114;g.apache.lucene.queryParser.QueryParser;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;o&#114;g.apache.lucene.search.Hits;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;o&#114;g.apache.lucene.search.IndexSearcher;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;o&#114;g.apache.lucene.search.Query;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;sample.dw.paper.lucene.index.IndexManager;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;This&nbsp;class&nbsp;is&nbsp;used&nbsp;to&nbsp;search&nbsp;the&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Lucene&nbsp;index&nbsp;and&nbsp;return&nbsp;search&nbsp;results&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;class&nbsp;SearchManager&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;String&nbsp;searchWord;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;IndexManager&nbsp;indexManager;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;Analyzer&nbsp;analyzer;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;SearchManager(String&nbsp;searchWord){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.searchWord&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;searchWord;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.indexManager&nbsp;=&nbsp;&nbsp;new&nbsp;IndexManager();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.analyzer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;new&nbsp;StandardAnalyzer();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;do&nbsp;search&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;List&nbsp;search(){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;searchResult&nbsp;=&nbsp;new&nbsp;ArrayList();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(false&nbsp;==&nbsp;indexManager.ifIndexExist()){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(false&nbsp;==&nbsp;indexManager.cr&#101;ateIndex()){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;searchResult;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(IOException&nbsp;e)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;searchResult;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IndexSearcher&nbsp;indexSearcher&nbsp;=&nbsp;null;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;indexSearcher&nbsp;=&nbsp;new&nbsp;IndexSearcher(indexManager.getIndexDir());&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}catch(IOException&nbsp;ioe){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ioe.printStackTrace();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QueryParser&nbsp;queryParser&nbsp;=&nbsp;new&nbsp;QueryParser(&#34;content&#34;,analyzer);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Query&nbsp;query&nbsp;=&nbsp;null;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;query&nbsp;=&nbsp;queryParser.parse(searchWord);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(ParseException&nbsp;e)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(null&nbsp;!=&nbsp;query&nbsp;&gt;&gt;&nbsp;null&nbsp;!=&nbsp;indexSearcher){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hits&nbsp;hits&nbsp;=&nbsp;indexSearcher.search(query);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;hits.length();&nbsp;i&nbsp;++){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SearchResultBean&nbsp;resultBean&nbsp;=&nbsp;new&nbsp;SearchResultBean();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;resultBean.setHtmlPath(hits.doc(i).get(&#34;path&#34;));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;resultBean.setHtmlTitle(hits.doc(i).get(&#34;title&#34;));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;searchResult.add(resultBean);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(IOException&nbsp;e)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;searchResult;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>在清单7中，注意到在这个类里面有三个私有属性。第一个是&nbsp;searchWord，代表了来自客户端的搜索词。第二个是&nbsp;indexManager，代表了在索引子系统中定义的类&nbsp;IndexManager&nbsp;的一个实例。第三个是&nbsp;analyzer，代表了用来解析搜索词的解析器。现在我们把注意力放在方法&nbsp;search&nbsp;上面。这个方法首先检查索引文件是否已经存在，如果已经存在，那么就在已经存在的索引上进行检索，如果不存在，那么首先调用类&nbsp;IndexManager&nbsp;提供的方法来创建索引，然后在新创建的索引上进行检索。搜索结果返回后，这个方法从搜索结果中提取出需要的属性并为每个搜索结果生成类&nbsp;SearchResultBean&nbsp;的一个实例。最后这些&nbsp;SearchResultBean&nbsp;的实例被放到一个列表里面并返回给请求管理器。<br/>在类&nbsp;SearchResultBean&nbsp;中，含有两个属性，分别是&nbsp;htmlPath&nbsp;和&nbsp;htmlTitle，以及这个两个属性的&nbsp;get&nbsp;和&nbsp;set&nbsp;方法。这也意味着我们的搜索结果包含两个属性：htmlPath&nbsp;和&nbsp;htmlTitle，其中&nbsp;htmlPath&nbsp;代表了&nbsp;HTML&nbsp;文件的路径，htmlTitle&nbsp;代表了&nbsp;HTML&nbsp;文件的标题。&nbsp;<br/><br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=88</link>
			<title><![CDATA[用 Lucene 加速 Web 搜索应用程序的开发（二）]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Wed,31 Mar 2010 13:05:14 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=88</guid>	
		<description><![CDATA[用&nbsp;Lucene&nbsp;加速&nbsp;Web&nbsp;搜索应用程序的开发（二）<br/>模糊查询<br/>Lucene&nbsp;提供的模糊查询基于编辑距离算法(Edit&nbsp;distance&nbsp;algorithm)。你可以在搜索词的尾部加上字符&nbsp;~&nbsp;来进行模糊查询。例如，查询语句&nbsp;“think~”&nbsp;返回所有包含和&nbsp;think&nbsp;类似的关键词的文档。清单&nbsp;4&nbsp;显示了如果利用&nbsp;Lucene&nbsp;的&nbsp;API&nbsp;进行模糊查询的代码。&nbsp;<br/><br/>清单4：实现模糊查询<br/>//Test&nbsp;fuzzy&nbsp;search&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;testFuzzySearch(String&nbsp;indexDirectory)throws&nbsp;Exception{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Directory&nbsp;dir&nbsp;=&nbsp;FSDirectory.getDirectory(indexDirectory,false);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IndexSearcher&nbsp;indexSearcher&nbsp;=&nbsp;new&nbsp;IndexSearcher(dir);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String[]&nbsp;searchWords&nbsp;=&nbsp;{&#34;text&#34;,&nbsp;&#34;funny&#34;};&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Query&nbsp;query;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;searchWords.length;&nbsp;i++){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;query&nbsp;=&nbsp;new&nbsp;FuzzyQuery(new&nbsp;Term(&#34;title&#34;,searchWords[i]));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hits&nbsp;results&nbsp;=&nbsp;indexSearcher.search(query);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(results.length()&nbsp;+&nbsp;&#34;search&nbsp;results&nbsp;for&nbsp;query&nbsp;&#34;&nbsp;+&nbsp;searchWords[i]);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>范围搜索(Range&nbsp;Search)<br/>范围搜索匹配某个域上的值在一定范围的文档。例如，查询&nbsp;“age:[18&nbsp;TO&nbsp;35]”&nbsp;返回所有&nbsp;age&nbsp;域上的值在&nbsp;18&nbsp;到&nbsp;35&nbsp;之间的文档。清单5显示了利用&nbsp;Lucene&nbsp;的&nbsp;API&nbsp;进行返回搜索的过程。&nbsp;<br/><br/>清单5：测试范围搜索<br/>//Test&nbsp;range&nbsp;search&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;testRangeSearch(String&nbsp;indexDirectory)throws&nbsp;Exception{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Directory&nbsp;dir&nbsp;=&nbsp;FSDirectory.getDirectory(indexDirectory,false);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IndexSearcher&nbsp;indexSearcher&nbsp;=&nbsp;new&nbsp;IndexSearcher(dir);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Term&nbsp;begin&nbsp;=&nbsp;new&nbsp;Term(&#34;birthDay&#34;,&#34;20000101&#34;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Term&nbsp;end&nbsp;&nbsp;&nbsp;=&nbsp;new&nbsp;Term(&#34;birthDay&#34;,&#34;20060606&#34;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Query&nbsp;query&nbsp;=&nbsp;new&nbsp;RangeQuery(begin,end,true);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hits&nbsp;results&nbsp;=&nbsp;indexSearcher.search(query);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(results.length()&nbsp;+&nbsp;&#34;search&nbsp;results&nbsp;is&nbsp;returned&#34;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>&nbsp;<br/>&nbsp;<br/>回页首<br/><br/><br/><br/>在&nbsp;Web&nbsp;应用程序中集成&nbsp;Lucene<br/>接下来我们开发一个&nbsp;Web&nbsp;应用程序利用&nbsp;Lucene&nbsp;来检索存放在文件服务器上的&nbsp;HTML&nbsp;文档。在开始之前，需要准备如下环境：<br/>1.&#160;&#160;&#160;&#160;Eclipse&nbsp;集成开发环境&nbsp;<br/>2.&#160;&#160;&#160;&#160;Tomcat&nbsp;5.0&nbsp;<br/>3.&#160;&#160;&#160;&#160;Lucene&nbsp;Library&nbsp;<br/>4.&#160;&#160;&#160;&#160;JDK&nbsp;1.5&nbsp;<br/>这个例子使用&nbsp;Eclipse&nbsp;进行&nbsp;Web&nbsp;应用程序的开发，最终这个&nbsp;Web&nbsp;应用程序跑在&nbsp;Tomcat&nbsp;5.0&nbsp;上面。在准备好开发所必需的环境之后，我们接下来进行&nbsp;Web&nbsp;应用程序的开发。&nbsp;<br/>1、创建一个动态&nbsp;Web&nbsp;项目<br/>1.&#160;&#160;&#160;&#160;在&nbsp;Eclipse&nbsp;里面，选择&nbsp;File&nbsp;&gt;&nbsp;New&nbsp;&gt;&nbsp;Project，然后再弹出的窗口中选择动态&nbsp;Web&nbsp;项目，如图二所示。&nbsp;<br/>图二：创建动态Web项目<br/>&nbsp;<br/>2.&#160;&#160;&#160;&#160;在创建好动态&nbsp;Web&nbsp;项目之后，你会看到创建好的项目的结构，如图三所示，项目的名称为&nbsp;sample.dw.paper.lucene。&nbsp;图三：动态&nbsp;Web&nbsp;项目的结构<br/>&nbsp;<br/>2.&nbsp;设计&nbsp;Web&nbsp;项目的架构<br/>在我们的设计中，把该系统分成如下四个子系统：<br/>1.&#160;&#160;&#160;&#160;用户接口:&nbsp;这个子系统提供用户界面使用户可以向&nbsp;Web&nbsp;应用程序服务器提交搜索请求，然后搜索结果通过用户接口来显示出来。我们用一个名为&nbsp;search.jsp&nbsp;的页面来实现该子系统。&nbsp;<br/>2.&#160;&#160;&#160;&#160;请求管理器:&nbsp;这个子系统管理从客户端发送过来的搜索请求并把搜索请求分发到搜索子系统中。最后搜索结果从搜索子系统返回并最终发送到用户接口子系统。我们使用一个&nbsp;Servlet&nbsp;来实现这个子系统。&nbsp;<br/>3.&#160;&#160;&#160;&#160;搜索子系统:&nbsp;这个子系统负责在索引文件上进行搜索并把搜索结构传递给请求管理器。我们使用&nbsp;Lucene&nbsp;提供的&nbsp;API&nbsp;来实现该子系统。&nbsp;<br/>4.&#160;&#160;&#160;&#160;索引子系统:&nbsp;这个子系统用来为&nbsp;HTML&nbsp;页面来创建索引。我们使用&nbsp;Lucene&nbsp;的&nbsp;API&nbsp;以及&nbsp;Lucene&nbsp;提供的一个&nbsp;HTML&nbsp;解析器来创建该子系统。&nbsp;<br/>图4&nbsp;显示了我们设计的详细信息，我们将用户接口子系统放到&nbsp;webContent&nbsp;目录下面。你会看到一个名为&nbsp;search.jsp&nbsp;的页面在这个文件夹里面。请求管理子系统在包&nbsp;sample.dw.paper.lucene.servlet&nbsp;下面，类&nbsp;SearchController&nbsp;负责功能的实现。搜索子系统放在包&nbsp;sample.dw.paper.lucene.search&nbsp;当中，它包含了两个类，SearchManager&nbsp;和&nbsp;SearchResultBean，第一个类用来实现搜索功能，第二个类用来描述搜索结果的结构。索引子系统放在包&nbsp;sample.dw.paper.lucene.index&nbsp;当中。类&nbsp;IndexManager&nbsp;负责为&nbsp;HTML&nbsp;文件创建索引。该子系统利用包&nbsp;sample.dw.paper.lucene.util&nbsp;里面的类&nbsp;HTMLDocParser&nbsp;提供的方法&nbsp;getTitle&nbsp;和&nbsp;getContent&nbsp;来对&nbsp;HTML&nbsp;页面进行解析。&nbsp;<br/><br/>图四：项目的架构设计<br/>&nbsp;<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=87</link>
			<title><![CDATA[用 Lucene 加速 Web 搜索应用程序的开发（一）]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Wed,31 Mar 2010 13:04:03 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=87</guid>	
		<description><![CDATA[Lucene&nbsp;是基于&nbsp;Java&nbsp;的全文信息检索包，它目前是&nbsp;Apache&nbsp;Jakarta&nbsp;家族下面的一个开源项目。在这篇文章中，我们首先来看如何利用&nbsp;Lucene&nbsp;实现高级搜索功能，然后学习如何利用&nbsp;Lucene&nbsp;来创建一个健壮的&nbsp;Web&nbsp;搜索应用程序。<br/>在本篇文章中，你会学习到如何利用&nbsp;Lucene&nbsp;实现高级搜索功能以及如何利用&nbsp;Lucene&nbsp;来创建&nbsp;Web&nbsp;搜索应用程序。通过这些学习，你就可以利用&nbsp;Lucene&nbsp;来创建自己的搜索应用程序。<br/>架构概览<br/>通常一个&nbsp;Web&nbsp;搜索引擎的架构分为前端和后端两部分，就像图一中所示。在前端流程中，用户在搜索引擎提供的界面中输入要搜索的关键词，这里提到的用户界面一般是一个带有输入框的&nbsp;Web&nbsp;页面，然后应用程序将搜索的关键词解析成搜索引擎可以理解的形式，并在索引文件上进行搜索操作。在排序后，搜索引擎返回搜索结果给用户。在后端流程中，网络爬虫或者机器人从因特网上获取&nbsp;Web&nbsp;页面，然后索引子系统解析这些&nbsp;Web&nbsp;页面并存入索引文件中。如果你想利用&nbsp;Lucene&nbsp;来创建一个&nbsp;Web&nbsp;搜索应用程序，那么它的架构也和上面所描述的类似，就如图一中所示。<br/>Figure&nbsp;1.&nbsp;Web&nbsp;搜索引擎架构<br/>&nbsp;<br/>利用&nbsp;Lucene&nbsp;实现高级搜索<br/>Lucene&nbsp;支持多种形式的高级搜索，我们在这一部分中会进行探讨，然后我会使用&nbsp;Lucene&nbsp;的&nbsp;API&nbsp;来演示如何实现这些高级搜索功能。<br/>布尔操作符<br/>大多数的搜索引擎都会提供布尔操作符让用户可以组合查询，典型的布尔操作符有&nbsp;AND,&nbsp;o&#114;,&nbsp;NOT。Lucene&nbsp;支持&nbsp;5&nbsp;种布尔操作符，分别是&nbsp;AND,&nbsp;o&#114;,&nbsp;NOT,&nbsp;加(+),&nbsp;减(-)。接下来我会讲述每个操作符的用法。&nbsp;<br/>•&#160;&#160;&#160;&#160;o&#114;:&nbsp;如果你要搜索含有字符&nbsp;A&nbsp;或者&nbsp;B&nbsp;的文档，那么就需要使用&nbsp;o&#114;&nbsp;操作符。需要记住的是，如果你只是简单的用空格将两个关键词分割开，其实在搜索的时候搜索引擎会自动在两个关键词之间加上&nbsp;o&#114;&nbsp;操作符。例如，“Java&nbsp;o&#114;&nbsp;Lucene”&nbsp;和&nbsp;“Java&nbsp;Lucene”&nbsp;都是搜索含有&nbsp;Java&nbsp;或者含有&nbsp;Lucene&nbsp;的文档。&nbsp;<br/>•&#160;&#160;&#160;&#160;AND:&nbsp;如果你需要搜索包含一个以上关键词的文档，那么就需要使用&nbsp;AND&nbsp;操作符。例如，“Java&nbsp;AND&nbsp;Lucene”&nbsp;返回所有既包含&nbsp;Java&nbsp;又包含&nbsp;Lucene&nbsp;的文档。&nbsp;<br/>•&#160;&#160;&#160;&#160;NOT:&nbsp;Not&nbsp;操作符使得包含紧跟在&nbsp;NOT&nbsp;后面的关键词的文档不会被返回。例如，如果你想搜索所有含有&nbsp;Java&nbsp;但不含有&nbsp;Lucene&nbsp;的文档，你可以使用查询语句&nbsp;“Java&nbsp;NOT&nbsp;Lucene”。但是你不能只对一个搜索词使用这个操作符，比如，查询语句&nbsp;“NOT&nbsp;Java”&nbsp;不会返回任何结果。&nbsp;<br/>•&#160;&#160;&#160;&#160;加号（+）:&nbsp;这个操作符的作用和&nbsp;AND&nbsp;差不多，但它只对紧跟着它的一个搜索词起作用。例如，如果你想搜索一定包含&nbsp;Java，但不一定包含&nbsp;Lucene&nbsp;的文档，就可以使用查询语句“+Java&nbsp;Lucene”。&nbsp;<br/>•&#160;&#160;&#160;&#160;减号（-）:&nbsp;这个操作符的功能和&nbsp;NOT&nbsp;一样，查询语句&nbsp;“Java&nbsp;-Lucene”&nbsp;返回所有包含&nbsp;Java&nbsp;但不包含&nbsp;Lucene&nbsp;的文档。&nbsp;<br/>接下来我们看一下如何利用&nbsp;Lucene&nbsp;提供的&nbsp;API&nbsp;来实现布尔查询。清单1&nbsp;显示了如果利用布尔操作符进行查询的过程。<br/><br/>清单1：使用布尔操作符<br/>&nbsp;&nbsp;//Test&nbsp;boolean&nbsp;operator&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;testOperator(String&nbsp;indexDirectory)&nbsp;throws&nbsp;Exception{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Directory&nbsp;dir&nbsp;=&nbsp;FSDirectory.getDirectory(indexDirectory,false);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IndexSearcher&nbsp;indexSearcher&nbsp;=&nbsp;new&nbsp;IndexSearcher(dir);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String[]&nbsp;searchWords&nbsp;=&nbsp;{&#34;Java&nbsp;AND&nbsp;Lucene&#34;,&nbsp;&#34;Java&nbsp;NOT&nbsp;Lucene&#34;,&nbsp;&#34;Java&nbsp;o&#114;&nbsp;Lucene&#34;,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#34;+Java&nbsp;+Lucene&#34;,&nbsp;&#34;+Java&nbsp;-Lucene&#34;};&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Analyzer&nbsp;language&nbsp;=&nbsp;new&nbsp;StandardAnalyzer();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Query&nbsp;query;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;searchWords.length;&nbsp;i++){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;query&nbsp;=&nbsp;QueryParser.parse(searchWords[i],&nbsp;&#34;title&#34;,&nbsp;language);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hits&nbsp;results&nbsp;=&nbsp;indexSearcher.search(query);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(results.length()&nbsp;+&nbsp;&#34;search&nbsp;results&nbsp;for&nbsp;query&nbsp;&#34;&nbsp;+&nbsp;searchWords[i]);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>域搜索(Field&nbsp;Search)<br/>Lucene&nbsp;支持域搜索，你可以指定一次查询是在哪些域(Field)上进行。例如，如果索引的文档包含两个域，Title&nbsp;和&nbsp;Content，你就可以使用查询&nbsp;“Title:&nbsp;Lucene&nbsp;AND&nbsp;Content:&nbsp;Java”&nbsp;来返回所有在&nbsp;Title&nbsp;域上包含&nbsp;Lucene&nbsp;并且在&nbsp;Content&nbsp;域上包含&nbsp;Java&nbsp;的文档。清单&nbsp;2&nbsp;显示了如何利用&nbsp;Lucene&nbsp;的&nbsp;API&nbsp;来实现域搜索。&nbsp;<br/><br/>清单2：实现域搜索<br/>//Test&nbsp;field&nbsp;search&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;testFieldSearch(String&nbsp;indexDirectory)&nbsp;throws&nbsp;Exception{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Directory&nbsp;dir&nbsp;=&nbsp;FSDirectory.getDirectory(indexDirectory,false);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IndexSearcher&nbsp;indexSearcher&nbsp;=&nbsp;new&nbsp;IndexSearcher(dir);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;searchWords&nbsp;=&nbsp;&#34;title:Lucene&nbsp;AND&nbsp;content:Java&#34;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Analyzer&nbsp;language&nbsp;=&nbsp;new&nbsp;StandardAnalyzer();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Query&nbsp;query&nbsp;=&nbsp;QueryParser.parse(searchWords,&nbsp;&#34;title&#34;,&nbsp;language);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hits&nbsp;results&nbsp;=&nbsp;indexSearcher.search(query);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(results.length()&nbsp;+&nbsp;&#34;search&nbsp;results&nbsp;for&nbsp;query&nbsp;&#34;&nbsp;+&nbsp;searchWords);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>通配符搜索(Wildcard&nbsp;Search)<br/>Lucene&nbsp;支持两种通配符：问号（？）和星号（*）。你可以使用问号（？）来进行单字符的通配符查询，或者利用星号（*）进行多字符的通配符查询。例如，如果你想搜索&nbsp;tiny&nbsp;或者&nbsp;tony，你就可以使用查询语句&nbsp;“t?ny”；如果你想查询&nbsp;Teach,&nbsp;Teacher&nbsp;和&nbsp;Teaching，你就可以使用查询语句&nbsp;“Teach*”。清单3&nbsp;显示了通配符查询的过程。&nbsp;<br/><br/>清单3：进行通配符查询<br/>//Test&nbsp;wildcard&nbsp;search&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;testWildcardSearch(String&nbsp;indexDirectory)throws&nbsp;Exception{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Directory&nbsp;dir&nbsp;=&nbsp;FSDirectory.getDirectory(indexDirectory,false);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IndexSearcher&nbsp;indexSearcher&nbsp;=&nbsp;new&nbsp;IndexSearcher(dir);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String[]&nbsp;searchWords&nbsp;=&nbsp;{&#34;tex*&#34;,&nbsp;&#34;tex?&#34;,&nbsp;&#34;?ex*&#34;};&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Query&nbsp;query;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;searchWords.length;&nbsp;i++){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;query&nbsp;=&nbsp;new&nbsp;WildcardQuery(new&nbsp;Term(&#34;title&#34;,searchWords[i]));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hits&nbsp;results&nbsp;=&nbsp;indexSearcher.search(query);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(results.length()&nbsp;+&nbsp;&#34;search&nbsp;results&nbsp;for&nbsp;query&nbsp;&#34;&nbsp;+&nbsp;searchWords[i]);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/><br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=86</link>
			<title><![CDATA[浅析网络舆情的特点和应对方法]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Tue,30 Mar 2010 17:36:11 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=86</guid>	
		<description><![CDATA[作者：技术科<br/>随着信息技术特别是互联网的飞速发展，社会舆论特别是网络舆情对司法工作包括检察工作的影响力明显加大。截至2009年6月底，我国3.38亿网民中，有78.7％经常上网浏览新闻，在网络应用中排名第二位。显然，三亿多的中国网民，已经成为一个不可小觑的舆论监督力量。基层检察院处在执法办案第一线，是服务和谐社会建设的中坚力量，因对某些案件介入不及时，处置措施不当等原因，被网络关注，可能引发网络舆情危机。如何研判和应对网络舆情，及时有效地正确引导，消除网络舆情危机对检察机关的负面影响，在网络监督下提高检察机关执法公信力，是基层检察机关必须深入研究、正确对待的重要课题。<br/>一&nbsp;&nbsp;网络舆情的现状<br/>网络舆情是指在互联网背景之下，众多网民对于社会（现实社会、虚拟社会）各种现象、问题所表达的信念、态度、意见和情绪表现的总和，或简言之为网络舆论和民情。<br/>2009年1月，《人民日报》与人民网联合进行网上调查，参与调查的网民有87.9%非常关注网络监督，当遇到社会不良现象时，93.3%的网民选择网络曝光。据此，《人民日报》评论指出，网络监督已经成为畅达民意、维护权益、鞭挞腐败的便捷而有效的手段。如“南京市江宁区房管局长抽天价烟”、“云南躲猫猫”事件、“湖北邓玉娇事件”&nbsp;、“贵州瓮安事件”，事件发生后，短时间内网民意见铺天盖地，大有一发不可收拾的趋势。这些都对司法检察机关办理个案形成了很大的网络监督压力，有的甚至成为促使相关部门下决心研究解决类似问题的契机和推手。<br/>二&nbsp;&nbsp;网络舆情的特点<br/>一是突发性：由于借助网络平台传播信息简单直接且身份隐蔽，网民能够快速、大胆地发表意见，呼唤声援,在短时间内形成一种力量,以期引起社会和政府的重视。因此网络舆情的形成往往非常迅速，事先没有征兆。一个热点事件的存在加上一种情绪化的意见就能形成星火燎原之势。<br/>二是破坏性：检察机关网络舆情危机往往会引发社会大众与检察机关、执法人员在观点甚至行动上的剧烈冲突。<br/>三是紧迫性：检察机关必须对即将或者已经发生的舆情危机迅速做出正确的反应，防止事态的扩大，减少损失。<br/>而目前,&nbsp;我国检察机关在应对网络舆情危机能力方面还显得比较薄弱。具体来说主要存在以下二个问题：一个是认识不到位，观念落后。一些基层检察院对网络舆情的重要性认识不足，对网络舆情不关注，特别是对涉及本机关和当地党委政府形象的舆情不能引起应有的重视，认为网络舆情与自己无关，错误地认为虚拟的东西不值得关注；二是缺乏处置预案，一旦发生舆情束手无策。有的基层检察院对网络舆情工作缺乏前瞻性和预见性，对可能引发涉法、涉检信访的群体性事件、苗头性问题缺乏政治敏感性，对如何处置突发性重大事件没有制定处置预案，一旦发生网络舆情危急情形，不知如何下手，难以应对，不能及时地引导和有效控制事态发展，负面影响难以及时消除。<br/>三&nbsp;&nbsp;检察机关应对网络舆情的几点建议<br/>新时期，检察机关如何应对网络舆情危机，及时掌握社会舆情动态，不断增强引导舆论的本领，牢牢把握政法舆论工作的主动权，可以从以下几个方面入手：<br/>（一）从自身下手，要在检务公开上下功夫。<br/>一是加大公开力度。认真执行最高人民检察院《关于进一步深化人民检察院“检务公开”的意见》，凡是与检察职权相关而又不涉及国家秘密、商业秘密和个人隐私的事项都应当公开。<br/>二是创新公开形式。借鉴其他单位的先进经验，多形式接受人民群众来访，邀请人民群众参观，主动公开检察机关工作职责、办案流程等不涉密的事项和程序。<br/>三是丰富公开载体。突出抓好检察门户网站建设，把检察门户网站建设成为征求意见、网上受理、在线交流、咨询问答、网上展览等多功能有序整合的统一平台，切实加强检察机关、检察干警与人民群众的互动交流，进一步畅通检察机关接受监督的渠道，并引导群众正确认识当前社会矛盾，理性合法表达诉求，自觉维护社会主义法制权威，不断拓宽人民群众了解检察工作的渠道，最大限度地保障人民群众对检察工作的知情权、参与权、表达权、监督权。<br/>（二）增强检察机关工作人员的舆情意识，树立正确的舆情观念。<br/>长期以来，在部分检察机关工作人员的观念中存在一个误区，认为与媒体打交道是宣传部门的事，与己无关。对一些突发事件反应迟缓、被动应付、危机公关意识缺位。由此，往往造成恶性循环，引起更为严重的后果。<br/>要有正确的舆情观念，包括堵不如疏，盖不如开，被动不如主动，事后救火不如事前防火。对于舆情危机事件，要更新观念，争分夺秒抢发突发事件新闻稿。先上网，后见报。先简报，后详报。占领网上发言主动权和主导权。<br/>（三）加强正面引导，平息舆论风波。<br/>面对网络舆情，不可束手无策，最要紧的是直接面对网民，把已经了解和可以确定的事实真相、正在采取的措施、有关部门和责任人员的态度予以公布，只有让真相站出来，占领舆论的制高点，才能防止流言蜚语，变被动为主动。对重大舆情要适时跟踪，及时公开事件调查、处置情况，不给滥加猜测留有空间。应当允许社会大众对事件的进展和查处结果进行监督，对舆情进行疏导而不是封锁，一味地回避只会让小道消息、社会谣言占据信息传播的主渠道。对舆情及网络事件应当更宽容，允许民众以一种更主动的方式参与到司法监督中来，反而有利于促进问题的实质性解决。<br/>（四）制定详细而周密的网络舆情危机阶梯预案。<br/>详细而周密的预案，保证了在危机发生时有条不紊，获得最大程度的主动权。可以借鉴《国家突发公共事件总体应急预案》，将危机分为四级，即Ⅰ级（特别重大）、Ⅱ级（重大）、Ⅲ级（较大）和Ⅳ级（一般）。每一等级都由不同级别、不同范围的力量参与到危机应对中，根据危机的等级，调动与之对应的资源和力量进行危机化解。<br/>（五）要在总结经验教训上下功夫。<br/>要注意及时总结经验、汲取教训，不断提升检察机关应对网络舆情、接受网络监督、提高执法公信力的能力和水平。网络时代带给检察机关的，是无孔不入的监督，只有严格执法，让群众满意，才不会产生舆情危机。<br/>网络舆情是新时期的新问题，我们一定要牢固树立理性、配合、文明、规范执法的理念，进一步深化检务公开，加强涉检信访的源头治理和妥善化解，切实提高执法公信力。要引导人们正确认识当前社会矛盾，理性合法表达诉求，自觉维护社会主义法制权威，切实维护社会和谐稳定。<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=85</link>
			<title><![CDATA[德阳公安信息化：成就“千里眼”与“顺风耳”]]></title>
			<author>webmaster@xd-tech.com(baijl)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Tue,30 Mar 2010 17:31:19 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=85</guid>	
		<description><![CDATA[作者：佚名<br/>面对国际国内的新格局，科技发展的大趋势，决策者们用历史的眼光审视着公安机关的发展方向，谋划着这场意义深远的现代警务战略布局，提出了科技强警战略。<br/>　　当计算机、网络信息技术等被广泛运用之时，人类社会步入信息时代。在信息化的大潮中，传统警务面临着向现代警务转变的前所未有的新挑战。<br/>　　如何使每一位公安民警都成为拥有“千里眼”和“顺风耳”等特殊功能的“天兵天将”呢?<br/>　　面对国际国内的新格局，科技发展的大趋势，决策者们用历史的眼光审视着公安机关的发展方向，谋划着这场意义深远的现代警务战略布局，提出了科技强警战略：公安工作由数量规模型向质量效能型转变，由人才密集型向科技密集型转变。以公安信息化为标志的强警&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;工程全面展开。<br/>　　德阳市公安机关按照公安部、省公安厅推进“三项建设”的战略部署，坚持以科学发展观为指导，把信息化作为推动公安工作全面发展进步的强大引擎，着眼现代警务机制构建，以攻坚克难的勇气、超常规的力度与举措，大力实施德阳公安信息化建设“1373”工程，推动全市公安信息化建设的整体跨越发展，促使全市公安系统打击防范能力明显提升，人民群众安全感明显提升，党委、政府对公安机关的满意度明显提升。<br/>　　信息化成为德阳公安“千里眼”和“顺风耳”<br/>　　“没有公安机关的信息化建设，震惊全省、全国的‘1•10’持枪杀人案就不可能在短时间内成功告破。”12月8日，说起信息化建设提升公安机关侦查办案、治安防控能力的作用时，德阳市副市长、公安局长陈正权赞不绝口。<br/>　　今年1月10日14时许，广汉市雒城镇一露天茶铺发生一起3死2伤的持枪杀人案。受害人陈富伟等3人被3名男子开枪打死，2人被流弹击伤。案发后，中央、省、市各级领导高度重视，有关领导相继作出重要批示，要求尽快破案，消除影响。<br/>　　专案组经缜密侦查，成功抓获1名直接实施枪击犯罪的嫌疑人和7名涉案嫌疑人，缴获手枪4支(其中作案枪支3支)、子弹40发。<br/>　　陈正权介绍说，该案的成功告破，信息化建设居功至伟。<br/>　　充分、合理利用公安信息系统，极大提高了工作效率。专案组通过网上比对、串并案分析、网上协作、网上协查，在短时间内完成了对数百人身份的识别和对数十名重点人员的排查和对上千条案件线索的筛查，不仅节省了大量的人力、物力，而且为案件的侦破赢得了时间;<br/>　　公安信息化建设延伸到社会单位是突破该案的关键。广汉市公安局建成的社会成员单位内部“小天网”工程，与“天网”工程形成了互为衔接、互相补充的监控格局，极大拓展了监控范围，正是由于这些基础设施的完善，为该案的侦破提供了极大的帮助。专案组通过对“天网”和“小天网”的分析，发现其中一名犯罪嫌疑人，据此线索，逐渐理清案件脉络，将该案的策划者、组织者、实施者以及涉嫌包庇的人员一一查出，并相继抓获。<br/>　　公安信息系统为追逃提供了极大便利。专案组利用信息系统，成功获取犯罪嫌疑人详细信息和活动轨迹，成功将枪手张东华锁定在重庆，并在重庆将其抓获。<br/>　　陈正权介绍，一年来，该市利用网上情报信息直接破获刑事案件1354起，占破案总数的17.8%;协助破获刑事案件1613起，占破案总数的21.2%。这其中包括震惊全国的大案、要案，运用经侦信息系统，破获西部地区首例印制假币1100多万元的特大犯罪案件，包括部督逃犯吴小辉在内的9名犯罪嫌疑人悉数落网;运用禁毒信息系统，侦破“1•3”特大制造冰毒案，缴获冰毒1054.2余公斤、麻黄草粉3200公斤、用于制造冰毒的麻黄草10多吨以及汽车9辆、毒资66万多元，抓获犯罪嫌疑人22名。运用禁毒信息系统，抓获了公安部挂牌督办、涉案冰毒达115公斤的“9•9”特大贩毒案主犯玉罕丽、邬富安。运用刑侦信息系统，破获百万电信诈骗案。<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=84</link>
			<title><![CDATA[lucene.net系列三]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Mon,10 Nov 2008 14:44:10 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=84</guid>	
		<description><![CDATA[<strong>--- index 中</strong><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">本文将进一步讨论有关</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"><a title="" href="http://www.baidu.com/s?wd=lucene&amp;tn=cnidc8&amp;bar=">lucene</a><a title="介绍.NET相关技术知识" href="http://www.baidu.com/s?wd=.NET&amp;tn=cnidc8&amp;bar=">.NET</a></span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">建立<a title="介绍搜索引擎相关技术知识" href="http://www.baidu.com/s?wd=%CB%F7%D2%FD&amp;tn=cnidc8&amp;bar=">索引</a>的问题</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">:</span>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">主要包含以下主题</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">:<br />1.</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">索引的权重</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"><br />2.</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">利用</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">IndexWriter </span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">属性对建立索引进行高级管理</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"><br />3.</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">利用</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">RAMDirectory</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">充分发挥内存的优势</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"><br />4.</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">利用</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">RAMDirectory</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">并行建立索引</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"><br />5.</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">控制索引内容的长度</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"><br />6.Optimize </span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt"><a title="介绍优化相关技术,技巧,知识" href="http://www.baidu.com/s?wd=%D3%C5%BB%AF&amp;tn=cnidc8&amp;bar=">优化</a>的是什么</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">?</span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"><a href="http://www.alphatom.com/component/option,com_docman/task,cat_view/gid,74/lang,/?mosmsg=You+are+trying+to+access+from+a+non-authorized+domain.+%28%29" target="_blank"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><span lang="EN-US"><font color="#008000">源代码下载</font></span></span></a></span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">本文将进一步讨论有关</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">Lucene.net</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">建立索引的问题</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">:</span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><b><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">索引的权重</span></b><b><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"><br /></span></b><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">根据文档的重要性的不同</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">显然对于某些文档你希望提高权重以便将来搜索的时候</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">更符合你想要的结果</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">. </span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">下面的代码演示了如何提高符合某些条件的文档的权重</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">比如对公司内很多的邮件做了索引</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">你当然希望主要查看和公司有关的邮件</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">而不是员工的个人邮件</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">这点根据邮件的地址就可以做出判断比如包含</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">@alphatom.com</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">的就是公司邮件</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">而</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">@gmail.com</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">等等就是私人邮件</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">如何提高相应邮件的权重</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">? </span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">代码如下</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">:</span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left"><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp; public static&nbsp; String COMPANY_DOMAIN = &quot;alphatom.com&quot;;</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br /></span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp; Document doc = new Document();</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br /></span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp; String senderEmail = GetSenderEmail();</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br /></span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp; String senderName = getSenderName();</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br /></span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp; String subject = GetSubject();</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br /></span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp; String body = GetBody();</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br /></span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp; doc.Add(Field.Keyword(&quot;senderEmail&rdquo;, senderEmail));</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br /></span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp; doc.Add(Field.Text(&quot;senderName&quot;, senderName));</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br /></span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp; doc.Add(Field.Text(&quot;subject&quot;, subject));</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br /></span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp; doc.Add(Field.UnStored(&quot;body&quot;, body));</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> </span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp; if (GetSenderDomain().EndsWith(COMPANY_DOMAIN))&nbsp;</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"></span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp;//</span><span style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-hansi-font-family: Verdana; mso-font-kerning: 0pt">如果是公司邮件</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">,</span><span style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-hansi-font-family: Verdana; mso-font-kerning: 0pt">提高权重</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">,</span><span style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-hansi-font-family: Verdana; mso-font-kerning: 0pt">默认权重是</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">1.0</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br /></span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doc.SetBoost(1.5);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br /></span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp; else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//</span><span style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-hansi-font-family: Verdana; mso-font-kerning: 0pt">如果是私人邮件</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">,</span><span style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-hansi-font-family: Verdana; mso-font-kerning: 0pt">降低权重</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">.</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br /></span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doc.SetBoost(0.1);</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"></span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><b><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 'Courier New'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp; writer.AddDocument(doc);</span></b><b><span lang="EN-US" style="COLOR: #3366ff; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"> </span></b><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"></span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left"><span style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-family: 宋体; mso-hansi-font-family: Verdana; mso-font-kerning: 0pt">不仅如此你还可以对</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">Field</span><span style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-family: 宋体; mso-hansi-font-family: Verdana; mso-font-kerning: 0pt">也设置权重</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">.</span><span style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-family: 宋体; mso-hansi-font-family: Verdana; mso-font-kerning: 0pt">比如你对邮件的主题更感兴趣</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">.</span><span style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-family: 宋体; mso-hansi-font-family: Verdana; mso-font-kerning: 0pt">就可以提高它的权重</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">.&nbsp;&nbsp;&nbsp; </span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp;</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">Field senderNameField = Field.Text(&quot;senderName&quot;, senderName);</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"></span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left"><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp; Field subjectField = Field.Text(&quot;subject&quot;, subject);</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br /></span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp; subjectField.SetBoost(1.2);</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br /></span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">lucene</span><span style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-family: 宋体; mso-hansi-font-family: Verdana; mso-font-kerning: 0pt">搜索的时候会对符合条件的文档按匹配的程度打分</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">,</span><span style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-family: 宋体; mso-hansi-font-family: Verdana; mso-font-kerning: 0pt">这点就和</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">google</span><span style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-family: 宋体; mso-hansi-font-family: Verdana; mso-font-kerning: 0pt">的</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">PageRank</span><span style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-family: 宋体; mso-hansi-font-family: Verdana; mso-font-kerning: 0pt">有点类似</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">, </span><span style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-family: 宋体; mso-hansi-font-family: Verdana; mso-font-kerning: 0pt">而</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">SetBoost</span><span style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-family: 宋体; mso-hansi-font-family: Verdana; mso-font-kerning: 0pt">中的</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">Boost</span><span style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-family: 宋体; mso-hansi-font-family: Verdana; mso-font-kerning: 0pt">就是其中的一个因素</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">,</span><span style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-family: 宋体; mso-hansi-font-family: Verdana; mso-font-kerning: 0pt">当然还有其他的因素</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">.</span><span style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-family: 宋体; mso-hansi-font-family: Verdana; mso-font-kerning: 0pt">这要放到搜索里再说</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">. </span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><b><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">利用</span></b><b><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">IndexWriter </span></b><b><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">变量对建立索引进行高级管理</span></b><b><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"><br /></span></b><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">在建立索引的时候对性能影响最大的地方就是在将索引写入文件的时候</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">, </span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">所以在具体应用的时候就需要对此加以控制</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left"><span style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-family: 宋体; mso-hansi-font-family: Verdana; mso-font-kerning: 0pt">在建立索引的时候对性能影响最大的地方就是在将索引写入文件的时候所以在具体应用的时候就需要对此加以控制</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> </span></p>
<table style="mso-padding-alt: 0cm 0cm 0cm 0cm; mso-cellspacing: 0cm" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes">
            <td style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; WIDTH: 86.25pt; PADDING-TOP: 0cm" width="115">
            <p style="TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left"><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">IndexWriter</span><span style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-family: 宋体; mso-hansi-font-family: Verdana; mso-font-kerning: 0pt">属性</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">&nbsp;&nbsp; </span></p>
            </td>
            <td style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; WIDTH: 81pt; PADDING-TOP: 0cm" width="108">
            <p style="TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left"><span style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-family: 宋体; mso-hansi-font-family: Verdana; mso-font-kerning: 0pt">默认值</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"></span></p>
            </td>
            <td style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; WIDTH: 225pt; PADDING-TOP: 0cm" width="300">
            <p style="TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left"><span style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-family: 宋体; mso-hansi-font-family: Verdana; mso-font-kerning: 0pt">描述</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"></span></p>
            </td>
        </tr>
        <tr style="mso-yfti-irow: 1">
            <td style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; WIDTH: 86.25pt; PADDING-TOP: 0cm" width="115">
            <p style="TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left"><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">MergeFactory</span></p>
            </td>
            <td style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; WIDTH: 81pt; PADDING-TOP: 0cm" width="108">
            <p style="TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left"><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">10</span></p>
            </td>
            <td style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; WIDTH: 225pt; PADDING-TOP: 0cm" width="300">
            <p style="TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left"><span style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-family: 宋体; mso-hansi-font-family: Verdana; mso-font-kerning: 0pt">控制</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">segment</span><span style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-family: 宋体; mso-hansi-font-family: Verdana; mso-font-kerning: 0pt">合并的频率和大小</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"></span></p>
            </td>
        </tr>
        <tr style="mso-yfti-irow: 2">
            <td style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; WIDTH: 86.25pt; PADDING-TOP: 0cm" width="115">
            <p style="TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left"><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">MaxMergeDocs</span></p>
            </td>
            <td style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; WIDTH: 81pt; PADDING-TOP: 0cm" width="108">
            <p style="TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left"><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">Int32.MaxValue</span></p>
            </td>
            <td style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; WIDTH: 225pt; PADDING-TOP: 0cm" width="300">
            <p style="TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left"><span style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-family: 宋体; mso-hansi-font-family: Verdana; mso-font-kerning: 0pt">限制每个</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">segment</span><span style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-family: 宋体; mso-hansi-font-family: Verdana; mso-font-kerning: 0pt">中包含的文档数</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"></span></p>
            </td>
        </tr>
        <tr style="mso-yfti-irow: 3; mso-yfti-lastrow: yes">
            <td style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; WIDTH: 86.25pt; PADDING-TOP: 0cm" width="115">
            <p style="TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left"><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">MinMergeDocs</span></p>
            </td>
            <td style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; WIDTH: 81pt; PADDING-TOP: 0cm" width="108">
            <p style="TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left"><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">10</span></p>
            </td>
            <td style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; WIDTH: 225pt; PADDING-TOP: 0cm" width="300">
            <p style="TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left"><span style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-family: 宋体; mso-hansi-font-family: Verdana; mso-font-kerning: 0pt">当内存中的文档达到多少的时候再写入</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">segment</span></p>
            </td>
        </tr>
    </tbody>
</table>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">&nbsp;</span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">Lucene</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">默认情况是每加入</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">10</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">份文档就从内存往</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">index</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">文件写入并生成一个</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">segement,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">然后每</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">10</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">个</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">segment</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">就合并成一个</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">segment.</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">通过</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">MergeFactory</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">这个变量就可以对此进行控制</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">. </span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">MaxMergeDocs</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">用于控制一个</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">segment</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">文件中最多包含的</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">Document</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">数</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">比如限制为</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">100</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">的话</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">即使当前有</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">10</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">个</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">segment</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">也不会合并</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">因为合并后的</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">segmnet</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">将包含</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">1000</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">个文档</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">超过了限制</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">MinMergeDocs</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">用于确定一个当内存中文档达到多少的时候才写入文件</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">该项对</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">segment</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">的数量和大小不会有什么影响</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">它仅仅影响内存的使用</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">进一步影响写索引的效率</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">为了生动的体现这些变量对性能的影响</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">用一个小程序对此做了说明</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">. </span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">这里有点不可思议</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.Lucene in Action</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">书上的结果比我用</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">dotLucene</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">做的结果快了近千倍</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">这里给出书中用</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">Lucene</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">的数据</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">希望大家比较一下看看是不是我的问题</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">Lucene in Action</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">书中的数据</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">:</span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">% <a title="" href="http://www.baidu.com/s?wd=java&amp;tn=cnidc8&amp;bar=">java</a> lia.indexing.IndexTuningDemo 100000 10 9999999 10</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br /></span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">Merge factor: 10</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br /></span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">Max merge docs: 9999999</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br /></span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">Min merge docs: 10</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br /></span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">Time: 74136 ms</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br /></span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">% java lia.indexing.IndexTuningDemo 100000 100 9999999 10</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br /></span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">Merge factor: 100</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br /></span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">Max merge docs: 9999999</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br /></span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">Min merge docs: 10</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br /></span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">Time: 68307 ms</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"><br /></span><span style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-hansi-font-family: Verdana; mso-font-kerning: 0pt">我的数据</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">: 336684128 ms</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"><br /></span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">可以看出</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">MinMergeDocs(</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">主要用于控制内存</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">)</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">和</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">MergeFactory(</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">控制合并的次数和合并后的大小</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">) </span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">对建立索引有显著的影响</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">但是并不是</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">MergeFactory</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">越大越好</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">因为如果一个</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">segment</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">的文档<span>数很多</span>的话</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">在搜索的时候必然也会影响效率</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">所以这里</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">MergeFactory</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">的取值是一个需要平衡的问题</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">而</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">MinMergeDocs</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">主要受限于内存</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><b><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">利用</span></b><b><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">RAMDirectory</span></b><b><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">充分发挥内存的优势</span></b><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"></span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">从上面来看充分利用内存的<a title="" href="http://www.baidu.com/s?wd=%BF%D5%BC%E4&amp;tn=cnidc8&amp;bar=">空间</a></span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">减少读写文件</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">(</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">写入</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">index)</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">的次数是优化建立索引的重要方法</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">其实在</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">Lucene</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">中提供了更强大的方法来利用内存建立索引</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">使用</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">RAMDirectory</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">来替代</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">FSDirectory. </span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">这时所有的索引都将建立在内存当中</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">这种方法对于数据量小的搜索业务很有帮助</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">同时可以使用它来进行一些小的测试</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">避免在测试时频繁建立删除索引文件</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">在实际应用中</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">RAMDirectory</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">和</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">FSDirectory</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">协作可以更好的利用内存来优化建立索引的时间</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">具体方法如下</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">:</span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">1.</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">建立一个使用</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">FSDirectory</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">的</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">IndexWriter</span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">2 .</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">建立一个使用</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">RAMDirectory</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">的</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">IndexWriter </span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">3 </span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">把</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">Document</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">添加到</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">RAMDirectory</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">中</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"></span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">4 </span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">当达到某种条件将</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">RAMDirectory </span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">中的</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">Document</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">写入</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">FSDirectory.</span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">5 </span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">重复第三步</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"> </span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">示意代码</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">:<br />&nbsp;&nbsp;&nbsp;&nbsp; </span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;<span>private</span> FSDirectory fsDir = FSDirectory.GetDirectory(&quot;index&quot;,true);</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">&nbsp; </span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<span>private</span> RAMDirectory ramDir = new RAMDirectory();</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"></span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private IndexWriter fsWriter = IndexWriter(fsDir,new SimpleAnalyzer(), true);</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br /></span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private IndexWriter ramWriter = new IndexWriter(ramDir,new SimpleAnalyzer(), true);</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br /></span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (there are documents to index) </span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br /></span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br /></span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ramWriter.addDocument(doc);</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br /></span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (condition for flushing memory to disk has been met) </span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br /></span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br /></span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fsWriter.AddIndexes(Directory[]{ramDir}) ;</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br /></span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ramWriter.Close();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //why not support flush?</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br /></span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ramWriter =new IndexWriter(ramDir,new SimpleAnalyzer(),true);</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br /></span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br /></span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp; } </span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"></span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">这里的条件完全由用户控制</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">而不是</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">FSDirectory</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">采用对</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">Document</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">计数的方式控制何时写入文件</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">相比之下有更大的自由性</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">更能提升性能</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><b><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">利用</span></b><b><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">RAMDirectory</span></b><b><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">并行建立索引</span></b><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"></span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">RAMDirectory</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">还提供了使用多线程来建立索引的可能性</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">下面这副<span>图很好</span>的说明了这一点</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">&nbsp;</span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left"><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">&nbsp; </span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">甚至你可以在一个高速的网络里使用多台计算机来同时建立索引</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">就像下面这种图所示</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"></span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">&nbsp;</span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">虽然有关并行同步的问题需要你自己进行处理</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">不过通过这种方式可以大大提高对大量数据建立索引的能力</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">&nbsp;</span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left"><b><span style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-hansi-font-family: Verdana; mso-font-kerning: 0pt">控制索引内容的长度</span></b><b><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">.</span></b><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"></span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">在我的一篇</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"><a href="http://www.alphatom.com/content/view/114/1/" target="_blank"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><span lang="EN-US"><font color="#008000">速递</font></span></span></a></span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">介绍过</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">Google Desktop Search</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">只能搜索到文本中第</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">5000</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">个字的</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">也就是</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">google</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">在建立索引的时候只考虑前</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">5000</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">个字</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">在</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">Lucene</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">中同样也有这个配置功能</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">Lucene</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">对一份文本建立索引时默认的索引长度是</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">10,000. </span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">你可以通过</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">IndexWriter </span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">的</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">MaxFieldLength</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">属性对此加以修改</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">还是用一个例子说明问题</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.&nbsp;</span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp;</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt"> [Test]</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br /></span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp; public void FieldSize()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br /></span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp; // AddDocuments </span><span style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-hansi-font-family: Verdana; mso-font-kerning: 0pt">和</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt"> GetHitCount</span><span style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-hansi-font-family: Verdana; mso-font-kerning: 0pt">都是自定义的方法</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">,</span><span style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-hansi-font-family: Verdana; mso-font-kerning: 0pt">详见源代码</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br /></span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp; {</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br /></span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AddDocuments(dir, 10);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br /></span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //</span><span style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-hansi-font-family: Verdana; mso-font-kerning: 0pt">第一个参数是目录</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">,</span><span style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-hansi-font-family: Verdana; mso-font-kerning: 0pt">第二个配置是索引的长度</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br /></span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Assert.AreEqual(1, GetHitCount(&quot;contents&quot;, &quot;bridges&quot;))</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br /></span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //</span><span style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-hansi-font-family: Verdana; mso-font-kerning: 0pt">原文档的</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">contents</span><span style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-hansi-font-family: Verdana; mso-font-kerning: 0pt">为</span><span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&rdquo;</span></span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">Amsterdam has lots of bridges<span>&rdquo;</span></span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br /></span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //</span><span style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-hansi-font-family: Verdana; mso-font-kerning: 0pt">当索引长度为</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">10</span><span style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-hansi-font-family: Verdana; mso-font-kerning: 0pt">个字时能找到</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">bridge</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br /></span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AddDocuments(dir, 1);</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br /></span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Assert.AreEqual(0, GetHitCount(&quot;contents&quot;, &quot;bridges&quot;));</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br /></span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //</span><span style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-hansi-font-family: Verdana; mso-font-kerning: 0pt">当索引长度限制为</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">1</span><span style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-hansi-font-family: Verdana; mso-font-kerning: 0pt">个字时就无法发现第</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">5</span><span style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-hansi-font-family: Verdana; mso-font-kerning: 0pt">个字</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">bridges</span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br /></span><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366c0; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp; }</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"></span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">对索引内容限长往往是处于效率和空间大小的考虑</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">能够对此进行配置是建立索引必备的一个功能</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><b><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">Optimize </span></b><b><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">优化的是什么</span></b><b><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">?</span></b><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"></span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">在以前的例子里</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">你可能已经多次见过</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">writer.Optimize()</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">这段代码</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.Optimize</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">到底做了什么</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">?</span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">让你吃惊的是这里的优化对于建立索引不仅没有起到加速的作用</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">反而是延长了建立索引的时间</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">为什么</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">?</span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">因为这里的优化不是为建立索引做的</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">而是为<span>搜索做</span>的</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">之前我们提到</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">Lucene</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">默认每遇到</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">10</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">个</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">Segment</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">就合并一次</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">尽管如此在索引完成后仍然会留下几个</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">segmnets,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">比如</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">6,7.</span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">而</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">Optimize</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">的过程就是要减少剩下的</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">Segment</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">的数量</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">尽量让它们处于一个文件中</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">它的过程很简单</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">就是新建一个空的</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">Segmnet,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">然后把原来的几个</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">segmnet</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">全合并到这一个</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">segmnet</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">中</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">在此过程中</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">你的硬盘空间会变大</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">因为同时存在两份一样大小的索引</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">不过在优化完成后</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,Lucene</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">会自动将原来的多份</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">Segments</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">删除</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">只保留最后生成的一份包含原来所有索引的</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">segment.</span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">尽量减少</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">segments</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">的个数主要是为了增加查询的效率</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">假设你有一个</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">Server,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">同时有很多的</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">Client</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">建立了各自不同的索引</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">如果此时搜索</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">那么必然要同时打开很多的索引文件</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">这样显然会受到很大的限制</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">对性能产生影响</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left"><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">当然也不是随时做</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">Optimize</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">就好</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">如前所述做优化时要花费更多的时间和空间</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">而且在做优化的时候是不能进行查询的</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">所以索引建立的后期</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">并且索引的内容不会再发生太多的变化的时候做优化是一个比较好的时段</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span></p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=83</link>
			<title><![CDATA[lucene.net系列二]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Mon,10 Nov 2008 14:29:07 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=83</guid>	
		<description><![CDATA[<strong><font face="Verdana" color="#45739c">index </font></strong><span><strong>上</strong>一详细介绍了有关</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">lucene.NET</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">索引添加删除更新的详细内容</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">并给出了所有的</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">TestCase</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">供学习参考</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">Lucene</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">建立</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">Index</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">的过程</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">:</span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><b><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">抽取文本</span></b><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">&nbsp;&nbsp; </span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">比如将</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">PDF</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">以及</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">Word</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">中的内容以纯文本的形式提取出来</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.Lucene</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">所支持的类型主要为</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">String,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">为了方便同时也支持</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">Date </span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">以及</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">Reader.</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">其实如果使用这两个类型</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">lucene</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">会自动进行类型转换</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><b><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">文本分析</span></b><b><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span></b><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"></span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">&nbsp;&nbsp; Lucene</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">将针对所给的文本进行一些最基本的分析</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">并从中去除一些不必要的信息</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">比如一些常用字</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">a ,an, the </span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">等等</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">如果搜索的时候不在乎字母的大小写</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">, </span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">又可以去掉一些不必要的信息</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">总而言之你可以把这个过程想象成一个文本的过滤器</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">所有的文本内容通过分析</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">, </span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">将过滤掉一些内容</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">剩下最有用的信息</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><b><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">写入</span></b><b><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">index.</span></b><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"></span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">和</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">google</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">等常用的索引技术一样</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">lucene</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">在写</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">index</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">的时候都是采用的倒排索引技术</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">(inverted index.) </span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">简而言之</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">就是通过某种方法</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">(</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">类似</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">hash</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">表</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">?)</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">将常见的</span><span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">&rdquo;</span></span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">一篇文档中含有哪些词</span><span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">&rdquo;</span></span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">这个问题转成</span><span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">&rdquo;</span></span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">哪篇文档中有这些词</span><span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">&rdquo;</span></span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">. </span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">而各个搜索引擎的索引机制的不同主要在于如何为这张倒排表添加更准确的描述</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">比如</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">google</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">有名的</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">PageRank</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">因素</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.Lucene</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">当然也有自己的技术</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">希望在以后的文章中能为大家加以介绍</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">在上一篇文章中</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">使用了最基本的建立索引的方法</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">在这里将对某些问题加以详细的讨论</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">1. </span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">添加</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">Document</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">至索引</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"><br /></span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">上次添加的每份文档的信息是一样的</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">都是文档的</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">filename</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">和</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">contents.</span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><b><span lang="EN-US" style="COLOR: #3366ff; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">doc.Add(Field.Keyword(&quot;filename&quot;, file.FullName));<br />doc.Add(Field.Text(&quot;contents&quot;, new StreamReader(file.FullName)));</span></b><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"></span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">在</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">Lucene</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">中对每个文档的描述是可以不同的</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">比如</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">两份文档都是描述一个人</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">其中一个添加的是</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">name, age </span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">另一个添加的是</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">id, sex ,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">这种不规则的文档描述在</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">Lucene</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">中是允许的</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.<br /></span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">还有一点</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">Lucene</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">支持对</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">Field</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">进行</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">Append , </span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">如下</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">:</span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><b><span lang="EN-US" style="COLOR: #3366ff; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">string baseWord = &quot;fast&quot;;<br />string synonyms[] = String {&quot;quick&quot;, &quot;rapid&quot;, &quot;speedy&quot;};<br />Document doc = new Document();<br />doc.Add(Field.Text(&quot;word&quot;, baseWord));<br />for (int i = 0; i &lt; synonyms.length; i++) <br />&nbsp;&nbsp;&nbsp; doc.Add(Field.Text(&quot;word&quot;, synonyms[i]));</span></b><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"></span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">这点纯粹是为了方便用户的使用</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">在内部</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">Lucene</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">自动做了转化</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">效果和将它们拼接好再存是一样</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><b><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">2. </span></b><b><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">删除索引中的文档</span></b><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"></span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">这一点</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">Lucene</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">所采取的方式比较怪</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">它使用</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">IndexReader</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">来对要删除的项进行标记</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">然后在</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">Reader Close</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">的时候一起删除</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.<br /></span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">这里简要介绍几个方法</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><b><span lang="EN-US" style="COLOR: #3366ff; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">[TestFixture]<br />public class DocumentDeleteTest : BaseIndexingTestCase&nbsp;&nbsp; // BaseIndexingTestCase</span></b><b><span style="COLOR: #3366ff; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt">中的</span></b><b><span lang="EN-US" style="COLOR: #3366ff; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">SetUp</span></b><b><span style="COLOR: #3366ff; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt">方法</span></b><b><span lang="EN-US" style="COLOR: #3366ff; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //</span></b><b><span style="COLOR: #3366ff; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt">建立了索引其中加入了两个</span></b><b><span lang="EN-US" style="COLOR: #3366ff; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">Document<br />{<br />&nbsp;&nbsp;&nbsp; [Test]<br />&nbsp;&nbsp;&nbsp; public void testDeleteBeforeIndexMerge()<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IndexReader reader = IndexReader.Open(dir);&nbsp; //</span></b><b><span style="COLOR: #3366ff; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt">当前索引中有两个</span></b><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">Document</span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><b><span lang="EN-US" style="COLOR: #3366ff; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Assert.AreEqual(2, reader.MaxDoc());&nbsp;&nbsp; //</span></b><b><span style="COLOR: #3366ff; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt">文档从</span></b><b><span lang="EN-US" style="COLOR: #3366ff; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">0</span></b><b><span style="COLOR: #3366ff; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt">开始计数</span></b><b><span lang="EN-US" style="COLOR: #3366ff; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,MaxDoc</span></b><b><span style="COLOR: #3366ff; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt">表示下一个文档的序号</span></b><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"></span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><b><span lang="EN-US" style="COLOR: #3366ff; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Assert.AreEqual(2, reader.NumDocs());&nbsp; //NumDocs</span></b><b><span style="COLOR: #3366ff; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt">表示当前索引中文档的个数</span></b><b><span lang="EN-US" style="COLOR: #3366ff; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reader.Delete(1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //</span></b><b><span style="COLOR: #3366ff; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt">对标号为</span></b><b><span lang="EN-US" style="COLOR: #3366ff; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">1</span></b><b><span style="COLOR: #3366ff; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt">的文档标记为待删除</span></b><b><span lang="EN-US" style="COLOR: #3366ff; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span></b><b><span style="COLOR: #3366ff; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt">逻辑删除</span></b><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"><br /></span><b><span lang="EN-US" style="COLOR: #3366ff; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Assert.IsTrue(reader.IsDeleted(1));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //</span></b><b><span style="COLOR: #3366ff; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt">检测某个序号的文档是否被标记删除</span></b><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"><br /></span><b><span lang="EN-US" style="COLOR: #3366ff; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Assert.IsTrue(reader.HasDeletions());&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //</span></b><b><span style="COLOR: #3366ff; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt">检测索引中是否有</span></b><b><span lang="EN-US" style="COLOR: #3366ff; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">Document</span></b><b><span style="COLOR: #3366ff; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt">被标记删除</span></b><b><span lang="EN-US" style="COLOR: #3366ff; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Assert.AreEqual(2, reader.MaxDoc());&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //</span></b><b><span style="COLOR: #3366ff; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt">当前下一个文档序号仍然为</span></b><b><span lang="EN-US" style="COLOR: #3366ff; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Assert.AreEqual(1, reader.NumDocs());&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //</span></b><b><span style="COLOR: #3366ff; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt">当前索引中文档<span>数变成</span></span></b><b><span lang="EN-US" style="COLOR: #3366ff; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reader.Close();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //</span></b><b><span style="COLOR: #3366ff; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt">此时真正从物理上删除之前被标记的文档</span></b><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"><br /></span><b><span lang="EN-US" style="COLOR: #3366ff; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reader = IndexReader.<span>Open(</span>dir);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Assert.AreEqual(2, reader.MaxDoc());&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Assert.AreEqual(1, reader.NumDocs());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reader.Close();<br />&nbsp;&nbsp;&nbsp; }</span></b><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"></span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><b><span lang="EN-US" style="COLOR: #3366ff; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp; [Test]<br />&nbsp;&nbsp;&nbsp; public void DeleteAfterIndexMerge()&nbsp;&nbsp;&nbsp;&nbsp;//</span></b><b><span style="COLOR: #3366ff; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt">在索引重排之后</span></b><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"><br /></span><b><span lang="EN-US" style="COLOR: #3366ff; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IndexReader reader = IndexReader.Open(dir);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Assert.AreEqual(2, reader.MaxDoc());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Assert.AreEqual(2, reader.NumDocs());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reader.Delete(1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reader.Close();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IndexWriter writer = new IndexWriter(dir, GetAnalyzer(), false);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writer.Optimize();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//</span></b><b><span style="COLOR: #3366ff; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt">索引重排</span></b><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"><br /></span><b><span lang="EN-US" style="COLOR: #3366ff; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writer.Close();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reader = IndexReader.Open(dir);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Assert.IsFalse(reader.IsDeleted(1));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Assert.IsFalse(reader.HasDeletions());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Assert.AreEqual(1, reader.MaxDoc());&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //</span></b><b><span style="COLOR: #3366ff; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt">索引重排后</span></b><b><span lang="EN-US" style="COLOR: #3366ff; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span></b><b><span style="COLOR: #3366ff; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt">下一个文档序号变为</span></b><b><span lang="EN-US" style="COLOR: #3366ff; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Assert.<span>AreEqual(</span>1, reader.NumDocs());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reader.Close();<br />&nbsp;&nbsp;&nbsp; }<br />}</span></b><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"></span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"><br /></span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">当然你也可以不通过文档序号进行删除工作</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">采用下面的方法</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">可以从索引中删除包含特定的内容文档</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><b><span lang="EN-US" style="COLOR: #3366ff; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">IndexReader reader = <span>IndexReader.Open(</span>dir);<br />reader.Delete(new Term(&quot;city&quot;, &quot;Amsterdam&quot;));<br />reader.Close();</span></b><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"></span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">你还可以通过</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">reader.UndeleteAll()</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">这个方法取消前面所做的标记</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">即在</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">read.Close()</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">调用之前取消所有的删除工作</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"> </span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><b><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">3. </span></b><b><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">更新索引中的文档</span></b><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"></span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">&nbsp;&nbsp; </span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">这个功能</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">Lucene</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">没有支持</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">, </span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">只有通过删除后在添加来实现</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">. </span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">看看代码</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">很好理解的</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">[</span><b><span lang="EN-US" style="COLOR: #3366ff; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">TestFixture]<br />public class DocumentUpdateTest : BaseIndexingTestCase<br />{<br />&nbsp;&nbsp;&nbsp; [Test]<br />&nbsp;&nbsp;&nbsp; public void Update()<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Assert.AreEqual(1, GetHitCount(&quot;city&quot;, &quot;Amsterdam&quot;));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IndexReader reader = IndexReader.Open(dir);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reader.Delete(new Term(&quot;city&quot;, &quot;Amsterdam&quot;));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reader.Close();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Assert.AreEqual(0, GetHitCount(&quot;city&quot;, &quot;Amsterdam&quot;));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IndexWriter writer = new IndexWriter(dir, GetAnalyzer(),false);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Document doc = new Document();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doc.Add(Field.Keyword(&quot;id&quot;, &quot;1&quot;));</span></b><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"></span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">&nbsp;</span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left"><b><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366ff; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doc.Add(Field.UnIndexed(&quot;country&quot;, &quot;Netherlands&quot;));</span></b><b><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366ff; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"><br /></span></b><b><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366ff; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doc.Add(Field.UnStored(&quot;contents&quot;,&quot;Amsterdam has lots of bridges&quot;));</span></b><b><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366ff; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"><br /></span></b><b><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366ff; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doc.Add(Field.Text(&quot;city&quot;, &quot;Haag&quot;));</span></b><b><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366ff; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"><br /></span></b><b><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366ff; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writer.AddDocument(doc);</span></b><b><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366ff; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"><br /></span></b><b><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366ff; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writer.Optimize();</span></b><b><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366ff; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"><br /></span></b><b><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366ff; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writer.Close();</span></b><b><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366ff; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"><br /></span></b><b><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366ff; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Assert.AreEqual(1, GetHitCount(&quot;city&quot;, &quot;Haag&quot;));</span></b><b><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366ff; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"><br /></span></b><b><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #3366ff; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp; }</span></b><span lang="EN-US" style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"></span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">&nbsp;</span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><b><span lang="EN-US" style="COLOR: #3366ff; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp; protected override Analyzer GetAnalyzer()<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return new WhitespaceAnalyzer();&nbsp; //</span></b><b><span style="COLOR: #3366ff; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt">注意此处如果用</span></b><b><span lang="EN-US" style="COLOR: #3366ff; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">SimpleAnalyzer</span></b><b><span style="COLOR: #3366ff; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt">搜索会失败</span></b><b><span lang="EN-US" style="COLOR: #3366ff; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span></b><b><span style="COLOR: #3366ff; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt">因为建立索引的时候使用的</span></b><b><span lang="EN-US" style="COLOR: #3366ff; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">SimpleAnalyse</span></b><b><span style="COLOR: #3366ff; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt">它会将所有字母变成小写</span></b><b><span lang="EN-US" style="COLOR: #3366ff; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span></b><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"></span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><b><span lang="EN-US" style="COLOR: #3366ff; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp; }</span></b><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"></span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><b><span lang="EN-US" style="COLOR: #3366ff; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp; <span>private</span> int GetHitCount(String fieldName, String searchString)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IndexSearcher searcher = new IndexSearcher(dir);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Term t = new Term(fieldName, searchString);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Query query = new TermQuery(t);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Hits hits = searcher.Search(query);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int hitCount = hits.Length();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; searcher.Close();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return hitCount;<br />&nbsp;&nbsp;&nbsp; }<br />}</span></b><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"></span></p>
<p style="TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left"><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">需要注意的是以上所有有关索引的操作</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">为了避免频繁的打开和关闭</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">Writer</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">和</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">Reader.</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">又由于添加和删除是不同的连接</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">(Writer, Reader)</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">做的</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">所以应该尽可能的将添加文档的操作放在一起批量执行</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">,</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">然后将删除文档的操作也放在一起批量执行</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Georgia; mso-font-kerning: 0pt">避免添加删除交替进行</span><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: Georgia; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">.</span></p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=82</link>
			<title><![CDATA[lucene.net系列一]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Mon,10 Nov 2008 14:17:23 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=82</guid>	
		<description><![CDATA[<p style="TEXT-INDENT: 2em">本文介绍了什么是lucene,Lucene能做什么.</p>
<p style="TEXT-INDENT: 2em">如何从一个文件夹下的所有txt文件中查找特定的词?</p>
<p style="TEXT-INDENT: 2em">本文将围绕该个实例介绍了lucene.NET的索引的建立以及如何针对索引进行搜索.最后还将给出源代码供大家学习.</p>
<p style="TEXT-INDENT: 2em"><font color="#ff4666"><a href="http://www.alphatom.com/component/option,com_docman/task,doc_download/gid,5/lang,/">源代码下载</a></font></p>
<p style="TEXT-INDENT: 2em">What&rsquo;s Lucene</p>
<p style="TEXT-INDENT: 2em">Lucene是一个信息检索的函数库(Library),利用它你可以为你的应用加上索引和搜索的功能.</p>
<p style="TEXT-INDENT: 2em">Lucene的使用者不需要深入了解有关全文检索的知识,仅仅学会使用库中的一个类,你就为你的应用实现全文检索的功能.</p>
<p style="TEXT-INDENT: 2em">不过千万别以为Lucene是一个象google那样的搜索引擎,Lucene甚至不是一个应用程序,它仅仅是一个工具,一个Library.你也可以把它理解为一个将索引,搜索功能封装的很好的一套简单易用的API.利用这套API你可以做很多有关搜索的事情,而且很方便.</p>
<p style="TEXT-INDENT: 2em">What Can Lucene Do</p>
<p style="TEXT-INDENT: 2em">Lucene可以对任何的数据做索引和搜索. Lucene不管数据源是什么格式,只要它能被转化为文字的形式,就可以被Lucene所分析利用.也就是说不管是MS word, HTML ,pdf还是其他什么形式的文件只要你可以从中抽取出文字形式的内容就可以被Lucene所用.你就可以用Lucene对它们进行索引以及搜索.</p>
<p style="TEXT-INDENT: 2em">How To Use Lucene --- A Simple Example</p>
<p style="TEXT-INDENT: 2em">示例介绍:</p>
<p style="TEXT-INDENT: 2em">为作为输入参数的文件夹下的所有txt类型的文件做索引,做好的索引文件放入index文件夹.</p>
<p style="TEXT-INDENT: 2em">然后在索引的基础上对文件进行全文搜索.</p>
<p style="TEXT-INDENT: 2em">1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 建立索引</p>
<p style="TEXT-INDENT: 2em">IndexWriter writer = new IndexWriter(&quot;index&quot;, new StandardAnalyzer(), true);</p>
<p style="TEXT-INDENT: 2em">IndexDocs(writer, new System.IO.FileInfo(args[0]));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p style="TEXT-INDENT: 2em">writer.Optimize();</p>
<p style="TEXT-INDENT: 2em">writer.Close(); </p>
<p style="TEXT-INDENT: 2em">IndexWriter是对索引进行写操作的一个类,利用它可以创建一个索引对象然后往其中添加文件.需要注意它并不是唯一可以修改索引的类.在索引建好后利用其他类还可以对其进行修改.</p>
<p style="TEXT-INDENT: 2em">构造函数第一个参数是建立的索引所要放的文件夹的名字.第二个参数是一个分析对象,主要用于从文本中抽取那些需要建立索引的内容,把不需要参与建索引的文本内容去掉.比如去掉一些a the之类的常用词,还有决定是否大小写敏感.不同的选项通过指定不同的分析对象控制.第三个参数用于确定是否覆盖原有索引的.</p>
<p style="TEXT-INDENT: 2em">第二步就是利用这个writer往索引中添加文件.具体后面再说.</p>
<p style="TEXT-INDENT: 2em">第三步进行优化.</p>
<p style="TEXT-INDENT: 2em">第四步关闭writer.</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">下面具体看看第二步:</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;public static void IndexDirectory(IndexWriter writer, FileInfo file)</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (Directory.Exists(file.FullName))</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String[] files = Directory.GetFileSystemEntries(file.FullName);</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // an IO error could occur</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (files != null)</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; files.Length; i++)</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IndexDirectory(writer, new FileInfo(files[i]));&nbsp; //这里是一个递归</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if (file.Extension == &quot;.txt&quot;)</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IndexFile(file, writer);</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private static void IndexFile(FileInfo file, IndexWriter writer)</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.Out.WriteLine(&quot;adding &quot; + file);</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Document doc = new Document();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doc.Add(Field.Keyword(&quot;filename&quot;, file.FullName));</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doc.Add(Field.Text(&quot;contents&quot;, new StreamReader(file.FullName)));</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writer.AddDocument(doc);</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (FileNotFoundException fnfe)</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p style="TEXT-INDENT: 2em">主要就是两个函数一个用于处理文件夹(不是为文件夹建立索引),一个用于真正为文件建立索引.</p>
<p style="TEXT-INDENT: 2em">因此主要集中看一下IndexFile这个方法.首先建立Document对象,然后为Document对象添加一些属性Field.你可以把Document对象看成是虚拟文件,将来将从此获取信息.而Field则看成是描述此虚拟文件的元数据(metadata).</p>
<p style="TEXT-INDENT: 2em">其中Field包括四个类型:
<table cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td width="91">
            <p>&nbsp;</p>
            <p style="TEXT-INDENT: 2em">Keywork</p>
            </td>
            <td width="477">
            <p>&nbsp;</p>
            <p style="TEXT-INDENT: 2em">该类型的数据将不被分析,而会被索引并保存保存在索引中.</p>
            </td>
        </tr>
        <tr>
            <td width="91">
            <p>&nbsp;</p>
            <p style="TEXT-INDENT: 2em">UnIndexed</p>
            </td>
            <td width="477">
            <p>&nbsp;</p>
            <p style="TEXT-INDENT: 2em">该类型的数据不会被分析也不会被索引,但是会保存在索引.</p>
            </td>
        </tr>
        <tr>
            <td width="91">
            <p>&nbsp;</p>
            <p style="TEXT-INDENT: 2em">UnStored</p>
            </td>
            <td width="477">
            <p>&nbsp;</p>
            <p style="TEXT-INDENT: 2em">和UnIndexed刚好相反,被分析被索引,但是不被保存.</p>
            </td>
        </tr>
        <tr>
            <td width="91">
            <p>&nbsp;</p>
            <p style="TEXT-INDENT: 2em">Text</p>
            </td>
            <td width="477">
            <p>&nbsp;</p>
            <p style="TEXT-INDENT: 2em">和UnStrored类似.如果值的类型为string还会被保存.如果值的类型Reader就不会被保存和UnStored一样.</p>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">最后将每一个Document添加到索引当中.</p>
<p style="TEXT-INDENT: 2em">需要注意的是索引不仅可以建立在文件系统上,也可以建立在内存中.</p>
<p style="TEXT-INDENT: 2em">例如</p>
<p style="TEXT-INDENT: 2em">IndexWriter writer = new IndexWriter(&quot;index&quot;, new StandardAnalyzer(), true);</p>
<p style="TEXT-INDENT: 2em">在第一个参数不是指定文件夹的名字而是使用Directory对象,并使用它的子类RAMDirectory,就可以将索引建立在内存当中.</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对索引进行搜索</p>
<p style="TEXT-INDENT: 2em">IndexSearcher indexSearcher= new IndexSearcher(indexDir);</p>
<p style="TEXT-INDENT: 2em">Query query = QueryParser.Parse(queryString, &quot;contents&quot;,new StandardAnalyzer());</p>
<p style="TEXT-INDENT: 2em">Hits hits = indexSearcher.Search(query);</p>
<p style="TEXT-INDENT: 2em">&nbsp;第一步利用IndexSearcher打开索引文件用于后面搜索,其中的参数是索引文件的路径.</p>
<p style="TEXT-INDENT: 2em">第二步使用QueryParser将可读性较好的查询语句(比如查询的词lucene ,以及一些高级方式lucene AND .net)转化为Lucene内部使用的查询对象.</p>
<p style="TEXT-INDENT: 2em">第三步执行搜索.并将结果返回到hits集合.需要注意的是Lucene并不是一次将所有的结果放入hits中而是采取一次放一部分的方式.出于空间考虑.</p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=81</link>
			<title><![CDATA[JAVA 强制数据类型转换]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Mon,10 Nov 2008 14:10:33 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=81</guid>	
		<description><![CDATA[class Change{<br />　　 public static void main(String[] args){<br />　　 <br />　　 short shortvar=0; <br />　　 int intvar=0; <br />　　 String stringvar;<br />　　 float floatvar=9.99f; <br />　　 double doublevar=99999999.99;<br />　　 char charvar='9';<br />　　 String intstring=&quot;10&quot;; <br />　　 String floatstring=&quot;10.1f&quot;; <br />　　 String longstring=&quot;99999999&quot;;<br />　　 String doubleString=&quot;99999999.9&quot;;<br />　　 String s1=&quot;0&quot;;<br />　　 String s2=&quot;abc&quot;;<br />　　 String s3=&quot;true&quot;;<br />　　<br />　　 //1.short--&gt;int<br />　　 intvar=shortvar; <br />　　 System.out.println(intvar);<br /><br />//2.int--&gt;short <br />shortvar= (short) intvar ;<br />　　 System.out.println(shortvar);<br />　　 <br />//3.int-&gt;String <br />　　 intvar=1; <br />　　 stringvar=String.valueOf (intvar); <br />　　 System.out.println(stringvar);<br />　　 <br />　　 //4.float-&gt;String <br />　　 stringvar=String.valueOf (floatvar); <br />　　 System.out.println(stringvar);<br />　　 <br />　　 //5. double-&gt;String <br />　　 stringvar=String.valueOf (doublevar); <br />　　 System.out.println(stringvar);<br />　　 <br />　　 //6. char-&gt;String <br />　　 stringvar=String.valueOf (charvar);<br />　　 System.out.println(stringvar); <br />　　 <br />　　 //7 String-&gt;int、float、long、double <br />　　 int i=Integer.parseInt (intstring); <br />　　 float f= Float.parseFloat (floatstring); <br />　　 long lo=Long. parseLong (longstring); <br />　　 double d=Double. parseDouble(doubleString); <br />　　 System.out.println(i+&quot;\n&quot;+f+&quot;\n&quot;+lo+&quot;\n&quot;+d);<br />　　<br />　　 //8 String-&gt;byte、short <br />　　 byte b=Byte.parseByte(s1); <br />　　 short sh=Short.parseShort(s1);<br />　　 System.out.println(b+&quot;\n&quot;+sh) ;<br />　　 <br />　　 //9 String-&gt;char <br />　　 char a=s2.charAt(0);<br />　　 System.out.println(a); <br />　　 <br />　　 //10 String--&gt;boolean <br />　　 boolean flag=Boolean.getBoolean(s3); <br />　　 System.out.println(s3);<br />　　 <br />　　 <br />　　 }<br />　　}&nbsp;&nbsp;<br />]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=80</link>
			<title><![CDATA[Lucene 2.1研究：文件存储]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Mon,10 Nov 2008 11:25:21 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=80</guid>	
		<description><![CDATA[一．&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lucene原始存储数据类型（Primitive&nbsp;Types）<br/><br/>&nbsp;<br/><br/>类型名称<br/>&nbsp;说明<br/>&nbsp;<br/>Byte<br/>&nbsp;8&nbsp;byte<br/>&nbsp;<br/>UInt32<br/>&nbsp;32&nbsp;byte四字节无符号整型，高位优先<br/>&nbsp;<br/>UInt64<br/>&nbsp;64byte八字节无符号整型，高位优先<br/>&nbsp;<br/>VInt<br/>&nbsp;可变长度整型。0-127单字节，128-16383两字节，类推<br/>&nbsp;<br/>Chars<br/>&nbsp;UNICODE字符串<br/>&nbsp;<br/>String<br/>&nbsp;写入格式为：VInt，Chars，字符串长度加字符串<br/>&nbsp;<br/><br/>&nbsp;<br/><br/>二．&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Lucene索引文件<br/><br/>1．&nbsp;&nbsp;Segments<br/><br/>文件名称：segments_N，N为36进制数。<br/><br/>&nbsp;<br/><br/>说明：在一个索引目录中，至少存在一个Segments文件，但可索引活动的只会有一个：N值最大的。其他的Segments文件可能为临时文件，一般情况是索引修改进程没有完成。<br/><br/>&nbsp;<br/><br/>格式：Format，Version，NameCounter，SegCount，&lt;SegName，SegSize，DelGen，HasSingleNormFile，NumField，NormGenNumField，IsCompoundFile&gt;SegCount<br/><br/>Format，NameCounter，SegCount，SegCount，SegSize，NumField：UInt32<br/><br/>Version，DelGen，NormGen：UInt64<br/><br/>SegName：String<br/><br/>IsCompound，HasSingleNormFile：Byte<br/><br/>&nbsp;<br/><br/>格式说明：Format&nbsp;=&nbsp;SegmentInfos.FORMAT_SINGLE_NORM_FILE&nbsp;=&nbsp;-2；Version当前时间与UTC时间的差值的毫秒数，每次对索引进行修改时会变化；SegName是所有索引生成文件的前缀；SegSize是当前Segment中包含的Document的数量；<br/><br/>&nbsp;<br/><br/>示例：<br/><br/><br/><br/>FF&nbsp;FF&nbsp;FF&nbsp;FD：FOMAT&nbsp;=&nbsp;-2，UInt32<br/><br/>00&nbsp;00&nbsp;01&nbsp;13&nbsp;29&nbsp;30&nbsp;B6&nbsp;33：Version&nbsp;=&nbsp;1181807064627，UInt64<br/><br/>00&nbsp;00&nbsp;00&nbsp;01：NameCount&nbsp;=&nbsp;1，UInt32<br/><br/>00&nbsp;00&nbsp;00&nbsp;01：SegmentCount&nbsp;=&nbsp;1，UInt32<br/><br/>02：SegmentNamePrefixLength&nbsp;=&nbsp;2，VInt<br/><br/>5F&nbsp;30：SegmentName&nbsp;=&nbsp;“_0”，Chars<br/><br/>00&nbsp;00&nbsp;00&nbsp;01：SegSize&nbsp;=&nbsp;1，UInt32<br/><br/>FF&nbsp;FF&nbsp;FF&nbsp;FF&nbsp;FF&nbsp;FF&nbsp;FF&nbsp;FF：DelGen&nbsp;=&nbsp;-1，UInt64<br/><br/>01：HasSingleNormFile&nbsp;=&nbsp;1，Byte<br/><br/>FF&nbsp;FF&nbsp;FF&nbsp;FF：NumField&nbsp;=&nbsp;-1，UInt32<br/><br/>FF：IsCompoundFile&nbsp;=&nbsp;-1，Byte<br/><br/>&nbsp;<br/><br/>在2.1版本中还会生成segment.gen文件，主要保存了索引计数，格式为：Version（SegmentInfos.LOCKLESS&nbsp;=&nbsp;-2），Generation，Generation。<br/><br/>&nbsp;<br/><br/>示例：<br/><br/><br/><br/>&nbsp;<br/><br/>FF&nbsp;FF&nbsp;FF&nbsp;FE：Version&nbsp;=&nbsp;-2，UInt32<br/><br/>00&nbsp;00&nbsp;00&nbsp;00&nbsp;00&nbsp;00&nbsp;00&nbsp;02：Generation&nbsp;=&nbsp;2，UInt64<br/><br/>00&nbsp;00&nbsp;00&nbsp;00&nbsp;00&nbsp;00&nbsp;00&nbsp;02：Generation&nbsp;=&nbsp;2，UInt64<br/><br/>&nbsp;<br/><br/>2．&nbsp;&nbsp;Field&nbsp;Info<br/><br/>文件名称：SegmentName.fnm。<br/><br/>&nbsp;<br/><br/>说明：保存了所有Field的名称。<br/><br/>&nbsp;<br/><br/>格式：FieldCount，&lt;FieldName，FieldBits&gt;FieldCount<br/><br/>FieldCount：VInt<br/><br/>FieldName：String<br/><br/>FieldBits：Byte<br/><br/>&nbsp;<br/><br/>格式说明：<br/><br/>&nbsp;<br/><br/>示例：<br/><br/><br/><br/>&nbsp;<br/><br/>01：FieldCount&nbsp;=&nbsp;1，VInt<br/><br/>04：FieldNamePrefixLength&nbsp;=&nbsp;4，VInt<br/><br/>49&nbsp;6E&nbsp;66&nbsp;6F：FieldName&nbsp;=&nbsp;“Info”，Chars<br/><br/>01：Bits&nbsp;=&nbsp;1，Byte<br/><br/>&nbsp;<br/><br/>3．&nbsp;&nbsp;Stored&nbsp;Field&nbsp;Index<br/><br/>文件名称：SegmentName.fdx<br/><br/>&nbsp;<br/><br/>说明：保存了每个Document的Field&nbsp;Data的地址指针<br/><br/>&nbsp;<br/><br/>格式：&lt;FieldValuesPosition&gt;SegSize<br/><br/>FieldValuesPosition：UInt64<br/><br/>&nbsp;<br/><br/>格式说明：<br/><br/>&nbsp;<br/><br/>示例：<br/><br/><br/><br/>&nbsp;<br/><br/>00&nbsp;00&nbsp;00&nbsp;00&nbsp;00&nbsp;00&nbsp;00&nbsp;00：FieldValuesPosition&nbsp;=&nbsp;0，UInt64<br/><br/>&nbsp;<br/><br/>4．&nbsp;&nbsp;Stroed&nbsp;Field&nbsp;Data<br/><br/>文件名称：SegmentName.fdt<br/><br/>&nbsp;<br/><br/>说明：保存了每个Document的需要存储的Field数据。<br/><br/>&nbsp;<br/><br/>格式：&lt;DocFieldData&gt;SegSize<br/><br/>DocFieldData：FieldCount，&lt;FieldNum，Bits，Value&gt;FieldCount<br/><br/>FieldCount：VInt<br/><br/>FieldNum：Vint<br/><br/>Bits：Byte<br/><br/>Value：String&nbsp;|&nbsp;BinaryValue（取决于Bits）<br/><br/>BinaryValue：ValueSize，&lt;Byte&gt;^ValueSize<br/><br/>ValueSize：VInt<br/><br/>&nbsp;<br/><br/>格式说明：<br/><br/>&nbsp;<br/><br/>示例：<br/><br/><br/><br/>&nbsp;<br/><br/>01：FieldCount&nbsp;=&nbsp;1，VInt<br/><br/>00：FieldNum&nbsp;=&nbsp;0，VInt<br/><br/>01：Bits&nbsp;=&nbsp;1，Byte<br/><br/>17：FieldValuePrefixLength&nbsp;=&nbsp;23，VInt<br/><br/>49&nbsp;20&nbsp;77&nbsp;72&nbsp;69&nbsp;74&nbsp;65&nbsp;20&nbsp;61&nbsp;20&nbsp;6C&nbsp;65&nbsp;74&nbsp;74&nbsp;65&nbsp;72&nbsp;20&nbsp;6C&nbsp;65&nbsp;74&nbsp;74&nbsp;65&nbsp;72：Value&nbsp;=&nbsp;“I&nbsp;write&nbsp;a&nbsp;letter&nbsp;letter”，Chars<br/><br/>&nbsp;<br/><br/>5．&nbsp;&nbsp;Term&nbsp;Info&nbsp;Index<br/><br/>文件名称：SegmentName.tii<br/><br/>&nbsp;<br/><br/>说明：保存了所有Term&nbsp;Inofs（.its）文件的索引间隔条目。<br/><br/>&nbsp;<br/><br/>格式：TIVersion，IndexTermCount，IndexInterval，SkipIntervala，MaxSkipLevels，TermIndices<br/><br/>TIVersion：UInt32<br/><br/>IndexTermCount：UInt64<br/><br/>IndexInterval：UInt32<br/><br/>SkipInterval：UInt32<br/><br/>TermIndeices：&lt;TermInfo，IndexDelta&gt;IndexTermCount<br/><br/>IndexDelta：VInt<br/><br/>&nbsp;<br/><br/>格式说明：<br/><br/>&nbsp;<br/><br/>示例：<br/><br/><br/>&nbsp;<br/><br/>FF&nbsp;FF&nbsp;FF&nbsp;FE：TIVersion&nbsp;=&nbsp;-2，UInt32<br/><br/>00&nbsp;00&nbsp;00&nbsp;00&nbsp;00&nbsp;00&nbsp;00&nbsp;01：TermCount&nbsp;=&nbsp;1，UInt64<br/><br/>00&nbsp;00&nbsp;00&nbsp;08：IndexInterval&nbsp;=&nbsp;128，UInt32<br/><br/>00&nbsp;00&nbsp;00&nbsp;10：SkipInterval&nbsp;=&nbsp;16，UInt32<br/><br/>00：MaxSkipLevels&nbsp;=&nbsp;0，Byte<br/><br/>&nbsp;<br/><br/>6．&nbsp;&nbsp;Term&nbsp;Infos<br/><br/>文件名称：SegmentName.tis<br/><br/>&nbsp;<br/><br/>说明：存储了所有Term的信息。<br/><br/>&nbsp;<br/><br/>格式：TIVersion，IndexTermCount，IndexInterval，SkipIntervala，MaxSkipLevels，TIVersion：UInt32<br/><br/>IndexTermCount：UInt64<br/><br/>IndexInterval：UInt32<br/><br/>SkipInterval：UInt32<br/><br/>MaxSkipLevels：VInt<br/><br/>TermInfos：&lt;Term，DocFreq，FreqDelta，ProxDelta，SkipDelta&gt;TermCount<br/><br/>Term：&lt;PriefixLength，Suffix，FieldNum&gt;<br/><br/>&nbsp;<br/><br/>格式说明：Term按照字典顺序排序；Term的内容是可以共享的。例如：上一个Term为“bone”，当前Term为“boy”，则当前的Temr的PrefixLength为2，Suffix为“y”。<br/><br/>&nbsp;<br/><br/>示例：<br/><br/><br/>&nbsp;<br/><br/>FF&nbsp;FF&nbsp;FF&nbsp;FE：TIVersion&nbsp;=&nbsp;-2，UInt32<br/><br/>00&nbsp;00&nbsp;00&nbsp;00&nbsp;00&nbsp;00&nbsp;00&nbsp;01：TermCount&nbsp;=&nbsp;1，UInt64<br/><br/>00&nbsp;00&nbsp;00&nbsp;08：IndexInterval&nbsp;=&nbsp;128，UInt32<br/><br/>00&nbsp;00&nbsp;00&nbsp;10：SkipInterval&nbsp;=&nbsp;16，UInt32<br/><br/>00：MaxSkipLevels&nbsp;=&nbsp;0，Byte<br/><br/>01：TermTextPrefixLength&nbsp;=&nbsp;1，VInt<br/><br/>69：TermText&nbsp;=&nbsp;“i”，Chars<br/><br/>00：FieldNumber&nbsp;=&nbsp;0，VInt<br/><br/>01：DocFreq&nbsp;=&nbsp;1，VInt<br/><br/>00：FreqDelta&nbsp;=&nbsp;0，VInt<br/><br/>00：ProxDelta&nbsp;=&nbsp;0，VInt<br/><br/>00：SkipDelta&nbsp;=&nbsp;0，Vint<br/><br/>&nbsp;<br/><br/>以下Term类似<br/><br/>&nbsp;<br/><br/>7：Frequencies&nbsp;File<br/><br/>文件名称：SegmentName.frq<br/><br/>&nbsp;<br/><br/>说明：<br/><br/>&nbsp;<br/><br/>格式：<br/><br/>&nbsp;<br/><br/>格式说明：<br/><br/>&nbsp;<br/><br/>示例：<br/><br/><br/>&nbsp;<br/><br/>8.&nbsp;Positions&nbsp;File<br/><br/>文件名称：SegmentName.prx<br/><br/>&nbsp;<br/><br/>说明：保存了每个Term在Document中的位置集合。<br/><br/>&nbsp;<br/><br/>格式：<br/><br/>&nbsp;<br/><br/>格式说明：<br/><br/>&nbsp;<br/><br/>示例：<br/><br/><br/><br/>&nbsp;<br/><br/>9.TermVectors&nbsp;Iindex&nbsp;File<br/><br/>文件名称：SegmentName.tvx<br/><br/>&nbsp;<br/><br/>说明：保存了在.tvd中的文档数据的指针。<br/><br/>&nbsp;<br/><br/>格式：TVXVersion，&lt;DocumentPosition&gt;NumDocs<br/><br/>TVXVersion：UInt32<br/><br/>DcoumentPosition：UInt64<br/><br/>&nbsp;<br/><br/>格式说明：<br/><br/>&nbsp;<br/><br/>示例：<br/><br/><br/><br/>&nbsp;<br/><br/>00&nbsp;00&nbsp;00&nbsp;02：TVXVersion&nbsp;=&nbsp;2，UInt32<br/><br/>00&nbsp;00&nbsp;00&nbsp;00&nbsp;00&nbsp;00&nbsp;00&nbsp;04：DocumentPosition&nbsp;=&nbsp;4，UInt64<br/><br/>&nbsp;<br/><br/>&nbsp;<br/><br/>10.Term&nbsp;Vectors&nbsp;Document<br/><br/>文件名称：SegmentName.tvd<br/><br/>&nbsp;<br/><br/>说明：<br/><br/>&nbsp;<br/><br/>格式：TVDVersion，&lt;NumFields，FieldNums，FieldPositions&gt;NumDocs<br/><br/>TVDVersion：UInt32<br/><br/>NumFields：VInt<br/><br/>FieldNums：&lt;FieldNumDelta&nbsp;&gt;NumFields<br/><br/>FieldPosition：VInt<br/><br/>&nbsp;<br/><br/>格式说明：<br/><br/>&nbsp;<br/><br/>示例：<br/><br/><br/>&nbsp;<br/><br/>00&nbsp;00&nbsp;00&nbsp;02：TVDVersion&nbsp;=&nbsp;2，UInt32<br/><br/>01：NumFields&nbsp;=&nbsp;1，VInt<br/><br/>00：FieldNumDelta&nbsp;=&nbsp;0，VInt<br/><br/>04：FieldPosition&nbsp;=&nbsp;4，VInt<br/><br/>&nbsp;<br/><br/>11.Term&nbsp;Vectors&nbsp;Field<br/><br/>文件名称：SegmentName.tvf<br/><br/>&nbsp;<br/><br/>说明：<br/><br/>&nbsp;<br/><br/>&nbsp;<br/><br/>格式：TVFVersion，&lt;NumTerms，Position/Offset，TermFreqs&gt;NumFields<br/><br/>TVFVersion：UInt32<br/><br/>NumTerms：VInt<br/><br/>Position/Offset：Byte<br/><br/>TermFreqs：&lt;TermText，TermFreq，Positions/Offsets&gt;NumTerms<br/><br/>TermText：&lt;PrefixLength，Suffix&gt;<br/><br/>PrefixLength：VInt<br/><br/>Suffix：Chars<br/><br/>TermFreq：VInt<br/><br/>Position：&lt;VInt&gt;TermFreq<br/><br/>Offsets：&lt;VInt，VInt&gt;TermFreq<br/><br/>&nbsp;<br/><br/>格式说明：<br/><br/>&nbsp;<br/><br/>示例：<br/><br/><br/><br/>&nbsp;<br/><br/>00&nbsp;00&nbsp;00&nbsp;02：TVFVersion&nbsp;=&nbsp;2，UInt32<br/><br/>03：NumTerms&nbsp;=&nbsp;3，VInt<br/><br/>00：<br/><br/>00：<br/><br/>01：TermTextPrefixLength&nbsp;=&nbsp;1，VInt<br/><br/>69：TermText&nbsp;=&nbsp;“i”，Chars<br/><br/>01：TermFreq&nbsp;=&nbsp;1，VInt<br/><br/>00：Position/Offset&nbsp;=&nbsp;0，VInt<br/><br/>06：TermTextPrefixLength&nbsp;=&nbsp;6，VInt<br/><br/>6C&nbsp;65&nbsp;74&nbsp;74&nbsp;65&nbsp;72：TextText&nbsp;=&nbsp;“letter”，VInt<br/><br/>02：TermFreq&nbsp;=&nbsp;2，VInt<br/><br/>00：Position/Offset&nbsp;=&nbsp;0，VInt<br/><br/>05：TermTextPrefixlength&nbsp;=&nbsp;5，VInt<br/><br/>77&nbsp;72&nbsp;69&nbsp;74&nbsp;65：TermText&nbsp;=&nbsp;“write”，Chars<br/><br/>01：Position/Offset&nbsp;=&nbsp;1，VInt<br/><br/>&nbsp;<br/><br/>12.Compound&nbsp;File<br/><br/>文件名称：SegmentName.cfs<br/><br/>&nbsp;<br/><br/>说明：当采用复合文件建立索引时，所有索引文件会保存在一个.cfs文件内。<br/><br/>&nbsp;<br/><br/>格式：FileCount，&lt;DataOffset，FileName&gt;FielCount，FileDataFielCount<br/><br/>FielCount：VInt<br/><br/>DataOffset：UInt64<br/><br/>FileName：String<br/><br/>FielData：文件原始数据（raw&nbsp;file&nbsp;data）<br/><br/>&nbsp;<br/><br/>格式说明：<br/><br/>&nbsp;<br/><br/>示例：<br/><br/><br/><br/>&nbsp;<br/><br/>0B：FileCount&nbsp;=&nbsp;8，VInt<br/><br/>00&nbsp;00&nbsp;00&nbsp;00&nbsp;00&nbsp;00&nbsp;00&nbsp;A6：DataOffset&nbsp;=&nbsp;166，UInt64<br/><br/>06：FileNamePrefixLength&nbsp;=&nbsp;6，VInt<br/><br/>5F&nbsp;30&nbsp;2E&nbsp;66&nbsp;6E&nbsp;6D：FileName&nbsp;=&nbsp;“_0.fnm”，Chars<br/><br/>根据文件数据偏移量（DataOffset）&nbsp;166，可以知道字段信息文件（Field&nbsp;Info）“_0.fnm”的数据存储起始位置在167处。其他文件类]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=79</link>
			<title><![CDATA[初识 Lucene]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Mon,10 Nov 2008 10:30:20 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=79</guid>	
		<description><![CDATA[本文首先介绍了Lucene的一些基本概念，然后开发了一个应用程序演示了利用Lucene建立索引并在该索引上进行搜索的过程。<br/>Lucene&nbsp;简介<br/><br/>Lucene&nbsp;是一个基于&nbsp;Java&nbsp;的全文信息检索工具包，它不是一个完整的搜索应用程序，而是为你的应用程序提供索引和搜索功能。Lucene&nbsp;目前是&nbsp;Apache&nbsp;Jakarta&nbsp;家族中的一个开源项目。也是目前最为流行的基于&nbsp;Java&nbsp;开源全文检索工具包。<br/><br/>目前已经有很多应用程序的搜索功能是基于&nbsp;Lucene&nbsp;的，比如&nbsp;Eclipse&nbsp;的帮助系统的搜索功能。Lucene&nbsp;能够为文本类型的数据建立索引，所以你只要能把你要索引的数据格式转化的文本的，Lucene&nbsp;就能对你的文档进行索引和搜索。比如你要对一些&nbsp;HTML&nbsp;文档，PDF&nbsp;文档进行索引的话你就首先需要把&nbsp;HTML&nbsp;文档和&nbsp;PDF&nbsp;文档转化成文本格式的，然后将转化后的内容交给&nbsp;Lucene&nbsp;进行索引，然后把创建好的索引文件保存到磁盘或者内存中，最后根据用户输入的查询条件在索引文件上进行查询。不指定要索引的文档的格式也使&nbsp;Lucene&nbsp;能够几乎适用于所有的搜索应用程序。<br/><br/>图&nbsp;1&nbsp;表示了搜索应用程序和&nbsp;Lucene&nbsp;之间的关系，也反映了利用&nbsp;Lucene&nbsp;构建搜索应用程序的流程：<br/><br/><br/>图1.&nbsp;搜索应用程序和&nbsp;Lucene&nbsp;之间的关系<br/><img src="http://www-128.ibm.com/developerworks/cn/java/j-lo-lucene1/fig001.jpg" border="0" alt=""/><br/>索引和搜索<br/><br/>索引是现代搜索引擎的核心，建立索引的过程就是把源数据处理成非常方便查询的索引文件的过程。为什么索引这么重要呢，试想你现在要在大量的文档中搜索含有某个关键词的文档，那么如果不建立索引的话你就需要把这些文档顺序的读入内存，然后检查这个文章中是不是含有要查找的关键词，这样的话就会耗费非常多的时间，想想搜索引擎可是在毫秒级的时间内查找出要搜索的结果的。这就是由于建立了索引的原因，你可以把索引想象成这样一种数据结构，他能够使你快速的随机访问存储在索引中的关键词，进而找到该关键词所关联的文档。Lucene&nbsp;采用的是一种称为反向索引（inverted&nbsp;index）的机制。反向索引就是说我们维护了一个词/短语表，对于这个表中的每个词/短语，都有一个链表描述了有哪些文档包含了这个词/短语。这样在用户输入查询条件的时候，就能非常快的得到搜索结果。我们将在本系列文章的第二部分详细介绍&nbsp;Lucene&nbsp;的索引机制，由于&nbsp;Lucene&nbsp;提供了简单易用的&nbsp;API，所以即使读者刚开始对全文本进行索引的机制并不太了解，也可以非常容易的使用&nbsp;Lucene&nbsp;对你的文档实现索引。<br/><br/>对文档建立好索引后，就可以在这些索引上面进行搜索了。搜索引擎首先会对搜索的关键词进行解析，然后再在建立好的索引上面进行查找，最终返回和用户输入的关键词相关联的文档。<br/><br/>Lucene&nbsp;软件包分析<br/><br/>Lucene&nbsp;软件包的发布形式是一个&nbsp;JAR&nbsp;文件，下面我们分析一下这个&nbsp;JAR&nbsp;文件里面的主要的&nbsp;JAVA&nbsp;包，使读者对之有个初步的了解。<br/><br/>Package:&nbsp;o&#114;g.apache.lucene.document<br/><br/>这个包提供了一些为封装要索引的文档所需要的类，比如&nbsp;Document,&nbsp;Field。这样，每一个文档最终被封装成了一个&nbsp;Document&nbsp;对象。<br/><br/>Package:&nbsp;o&#114;g.apache.lucene.analysis<br/><br/>这个包主要功能是对文档进行分词，因为文档在建立索引之前必须要进行分词，所以这个包的作用可以看成是为建立索引做准备工作。<br/><br/>Package:&nbsp;o&#114;g.apache.lucene.index<br/><br/>这个包提供了一些类来协助创建索引以及对创建好的索引进行更新。这里面有两个基础的类：IndexWriter&nbsp;和&nbsp;IndexReader，其中&nbsp;IndexWriter&nbsp;是用来创建索引并添加文档到索引中的，IndexReader&nbsp;是用来删除索引中的文档的。<br/><br/>Package:&nbsp;o&#114;g.apache.lucene.search<br/><br/>这个包提供了对在建立好的索引上进行搜索所需要的类。比如&nbsp;IndexSearcher&nbsp;和&nbsp;Hits,&nbsp;IndexSearcher&nbsp;定义了在指定的索引上进行搜索的方法，Hits&nbsp;用来保存搜索得到的结果。<br/><br/><br/>一个简单的搜索应用程序<br/><br/>假设我们的电脑的目录中含有很多文本文档，我们需要查找哪些文档含有某个关键词。为了实现这种功能，我们首先利用&nbsp;Lucene&nbsp;对这个目录中的文档建立索引，然后在建立好的索引中搜索我们所要查找的文档。通过这个例子读者会对如何利用&nbsp;Lucene&nbsp;构建自己的搜索应用程序有个比较清楚的认识。<br/><br/><br/>建立索引<br/><br/>为了对文档进行索引，Lucene&nbsp;提供了五个基础的类，他们分别是&nbsp;Document,&nbsp;Field,&nbsp;IndexWriter,&nbsp;Analyzer,&nbsp;Directory。下面我们分别介绍一下这五个类的用途：<br/><br/>Document<br/><br/>Document&nbsp;是用来描述文档的，这里的文档可以指一个&nbsp;HTML&nbsp;页面，一封电子邮件，或者是一个文本文件。一个&nbsp;Document&nbsp;对象由多个&nbsp;Field&nbsp;对象组成的。可以把一个&nbsp;Document&nbsp;对象想象成数据库中的一个记录，而每个&nbsp;Field&nbsp;对象就是记录的一个字段。<br/><br/>Field<br/><br/>Field&nbsp;对象是用来描述一个文档的某个属性的，比如一封电子邮件的标题和内容可以用两个&nbsp;Field&nbsp;对象分别描述。<br/><br/>Analyzer<br/><br/>在一个文档被索引之前，首先需要对文档内容进行分词处理，这部分工作就是由&nbsp;Analyzer&nbsp;来做的。Analyzer&nbsp;类是一个抽象类，它有多个实现。针对不同的语言和应用需要选择适合的&nbsp;Analyzer。Analyzer&nbsp;把分词后的内容交给&nbsp;IndexWriter&nbsp;来建立索引。<br/><br/>IndexWriter<br/><br/>IndexWriter&nbsp;是&nbsp;Lucene&nbsp;用来创建索引的一个核心的类，他的作用是把一个个的&nbsp;Document&nbsp;对象加到索引中来。<br/><br/>Directory<br/><br/>这个类代表了&nbsp;Lucene&nbsp;的索引的存储的位置，这是一个抽象类，它目前有两个实现，第一个是&nbsp;FSDirectory，它表示一个存储在文件系统中的索引的位置。第二个是&nbsp;RAMDirectory，它表示一个存储在内存当中的索引的位置。<br/><br/>熟悉了建立索引所需要的这些类后，我们就开始对某个目录下面的文本文件建立索引了，清单1给出了对某个目录下的文本文件建立索引的源代码。<br/><br/><br/>清单&nbsp;1.&nbsp;对文本文件建立索引<br/>package&nbsp;TestLucene;<br/>import&nbsp;java.io.File;<br/>import&nbsp;java.io.FileReader;<br/>import&nbsp;java.io.Reader;<br/>import&nbsp;java.util.Date;<br/>import&nbsp;o&#114;g.apache.lucene.analysis.Analyzer;<br/>import&nbsp;o&#114;g.apache.lucene.analysis.standard.StandardAnalyzer;<br/>import&nbsp;o&#114;g.apache.lucene.document.Document;<br/>import&nbsp;o&#114;g.apache.lucene.document.Field;<br/>import&nbsp;o&#114;g.apache.lucene.index.IndexWriter;<br/>/**<br/>&nbsp;*&nbsp;This&nbsp;class&nbsp;demonstrate&nbsp;the&nbsp;process&nbsp;of&nbsp;creating&nbsp;index&nbsp;with&nbsp;Lucene&nbsp;<br/>&nbsp;*&nbsp;for&nbsp;text&nbsp;files<br/>&nbsp;*/<br/>public&nbsp;class&nbsp;TxtFileIndexer&nbsp;{<br/>&#160;&#160;&#160;&#160;public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args)&nbsp;throws&nbsp;Exception{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//indexDir&nbsp;is&nbsp;the&nbsp;directory&nbsp;that&nbsp;hosts&nbsp;Lucene&#39;s&nbsp;index&nbsp;files<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File&nbsp;&nbsp;&nbsp;indexDir&nbsp;=&nbsp;new&nbsp;File(&#34;D:\\luceneIndex&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//dataDir&nbsp;is&nbsp;the&nbsp;directory&nbsp;that&nbsp;hosts&nbsp;the&nbsp;text&nbsp;files&nbsp;that&nbsp;to&nbsp;be&nbsp;indexed<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File&nbsp;&nbsp;&nbsp;dataDir&nbsp;&nbsp;=&nbsp;new&nbsp;File(&#34;D:\\luceneData&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Analyzer&nbsp;luceneAnalyzer&nbsp;=&nbsp;new&nbsp;StandardAnalyzer();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File[]&nbsp;dataFiles&nbsp;&nbsp;=&nbsp;dataDir.listFiles();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IndexWriter&nbsp;indexWriter&nbsp;=&nbsp;new&nbsp;IndexWriter(indexDir,luceneAnalyzer,true);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long&nbsp;startTime&nbsp;=&nbsp;new&nbsp;Date().getTime();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;dataFiles.length;&nbsp;i++){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#160;&#160;&#160;&#160;if(dataFiles[i].isFile()&nbsp;&amp;&amp;&nbsp;dataFiles[i].getName().endsWith(&#34;.txt&#34;)){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;System.out.println(&#34;Indexing&nbsp;file&nbsp;&#34;&nbsp;+&nbsp;dataFiles[i].getCanonicalPath());<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Document&nbsp;document&nbsp;=&nbsp;new&nbsp;Document();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Reader&nbsp;txtReader&nbsp;=&nbsp;new&nbsp;FileReader(dataFiles[i]);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;document.add(Field.Text(&#34;path&#34;,dataFiles[i].getCanonicalPath()));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;document.add(Field.Text(&#34;contents&#34;,txtReader));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;indexWriter.addDocument(document);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#160;&#160;&#160;&#160;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;indexWriter.optimize();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;indexWriter.close();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long&nbsp;endTime&nbsp;=&nbsp;new&nbsp;Date().getTime();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&#34;It&nbsp;takes&nbsp;&#34;&nbsp;+&nbsp;(endTime&nbsp;-&nbsp;startTime)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+&nbsp;&#34;&nbsp;milliseconds&nbsp;to&nbsp;cr&#101;ate&nbsp;index&nbsp;for&nbsp;the&nbsp;files&nbsp;in&nbsp;directory&nbsp;&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+&nbsp;dataDir.getPath());&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&#160;&#160;&#160;&#160;}<br/>}<br/>&nbsp;<br/><br/><br/>在清单1中，我们注意到类&nbsp;IndexWriter&nbsp;的构造函数需要三个参数，第一个参数指定了所创建的索引要存放的位置，他可以是一个&nbsp;File&nbsp;对象，也可以是一个&nbsp;FSDirectory&nbsp;对象或者&nbsp;RAMDirectory&nbsp;对象。第二个参数指定了&nbsp;Analyzer&nbsp;类的一个实现，也就是指定这个索引是用哪个分词器对文挡内容进行分词。第三个参数是一个布尔型的变量，如果为&nbsp;true&nbsp;的话就代表创建一个新的索引，为&nbsp;false&nbsp;的话就代表在原来索引的基础上进行操作。接着程序遍历了目录下面的所有文本文档，并为每一个文本文档创建了一个&nbsp;Document&nbsp;对象。然后把文本文档的两个属性：路径和内容加入到了两个&nbsp;Field&nbsp;对象中，接着在把这两个&nbsp;Field&nbsp;对象加入到&nbsp;Document&nbsp;对象中，最后把这个文档用&nbsp;IndexWriter&nbsp;类的&nbsp;add&nbsp;方法加入到索引中去。这样我们便完成了索引的创建。接下来我们进入在建立好的索引上进行搜索的部分。<br/><br/><br/>搜索文档<br/><br/>利用Lucene进行搜索就像建立索引一样也是非常方便的。在上面一部分中，我们已经为一个目录下的文本文档建立好了索引，现在我们就要在这个索引上进行搜索以找到包含某个关键词或短语的文档。Lucene提供了几个基础的类来完成这个过程，它们分别是呢IndexSearcher,&nbsp;Term,&nbsp;Query,&nbsp;TermQuery,&nbsp;Hits.&nbsp;下面我们分别介绍这几个类的功能。<br/><br/>Query<br/><br/>这是一个抽象类，他有多个实现，比如TermQuery,&nbsp;BooleanQuery,&nbsp;PrefixQuery.&nbsp;这个类的目的是把用户输入的查询字符串封装成Lucene能够识别的Query。<br/><br/>Term<br/><br/>Term是搜索的基本单位，一个Term对象有两个String类型的域组成。生成一个Term对象可以有如下一条语句来完成：Term&nbsp;term&nbsp;=&nbsp;new&nbsp;Term(“fieldName”,”queryWord”);&nbsp;其中第一个参数代表了要在文档的哪一个Field上进行查找，第二个参数代表了要查询的关键词。<br/><br/>TermQuery<br/><br/>TermQuery是抽象类Query的一个子类，它同时也是Lucene支持的最为基本的一个查询类。生成一个TermQuery对象由如下语句完成：&nbsp;TermQuery&nbsp;termQuery&nbsp;=&nbsp;new&nbsp;TermQuery(new&nbsp;Term(“fieldName”,”queryWord”));&nbsp;它的构造函数只接受一个参数，那就是一个Term对象。<br/><br/>IndexSearcher<br/><br/>IndexSearcher是用来在建立好的索引上进行搜索的。它只能以只读的方式打开一个索引，所以可以有多个IndexSearcher的实例在一个索引上进行操作。<br/><br/>Hits<br/><br/>Hits是用来保存搜索的结果的。<br/><br/>介绍完这些搜索所必须的类之后，我们就开始在之前所建立的索引上进行搜索了，清单2给出了完成搜索功能所需要的代码。<br/><br/><br/>清单2&nbsp;：在建立好的索引上进行搜索<br/>package&nbsp;TestLucene;<br/>import&nbsp;java.io.File;<br/>import&nbsp;o&#114;g.apache.lucene.document.Document;<br/>import&nbsp;o&#114;g.apache.lucene.index.Term;<br/>import&nbsp;o&#114;g.apache.lucene.search.Hits;<br/>import&nbsp;o&#114;g.apache.lucene.search.IndexSearcher;<br/>import&nbsp;o&#114;g.apache.lucene.search.TermQuery;<br/>import&nbsp;o&#114;g.apache.lucene.store.FSDirectory;<br/>/**<br/>&nbsp;*&nbsp;This&nbsp;class&nbsp;is&nbsp;used&nbsp;to&nbsp;demonstrate&nbsp;the&nbsp;<br/>&nbsp;*&nbsp;process&nbsp;of&nbsp;searching&nbsp;on&nbsp;an&nbsp;existing&nbsp;<br/>&nbsp;*&nbsp;Lucene&nbsp;index<br/>&nbsp;*<br/>&nbsp;*/<br/>public&nbsp;class&nbsp;TxtFileSearcher&nbsp;{<br/>&#160;&#160;&#160;&#160;public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args)&nbsp;throws&nbsp;Exception{<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;queryStr&nbsp;=&nbsp;&#34;lucene&#34;;<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;//This&nbsp;is&nbsp;the&nbsp;directory&nbsp;that&nbsp;hosts&nbsp;the&nbsp;Lucene&nbsp;index<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File&nbsp;indexDir&nbsp;=&nbsp;new&nbsp;File(&#34;D:\\luceneIndex&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FSDirectory&nbsp;directory&nbsp;=&nbsp;FSDirectory.getDirectory(indexDir,false);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IndexSearcher&nbsp;searcher&nbsp;=&nbsp;new&nbsp;IndexSearcher(directory);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!indexDir.exists()){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#160;&#160;&#160;&#160;System.out.println(&#34;The&nbsp;Lucene&nbsp;index&nbsp;is&nbsp;not&nbsp;exist&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#160;&#160;&#160;&#160;return;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Term&nbsp;term&nbsp;=&nbsp;new&nbsp;Term(&#34;contents&#34;,queryStr.toLowerCase());<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TermQuery&nbsp;luceneQuery&nbsp;=&nbsp;new&nbsp;TermQuery(term);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hits&nbsp;hits&nbsp;=&nbsp;searcher.search(luceneQuery);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;hits.length();&nbsp;i++){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#160;&#160;&#160;&#160;Document&nbsp;document&nbsp;=&nbsp;hits.doc(i);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#160;&#160;&#160;&#160;System.out.println(&#34;File:&nbsp;&#34;&nbsp;+&nbsp;document.get(&#34;path&#34;));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&#160;&#160;&#160;&#160;}<br/>}<br/>&nbsp;<br/><br/><br/>在清单2中，类IndexSearcher的构造函数接受一个类型为Directory的对象，Directory是一个抽象类，它目前有两个子类：FSDirctory和RAMDirectory.&nbsp;我们的程序中传入了一个FSDirctory对象作为其参数，代表了一个存储在磁盘上的索引的位置。构造函数执行完成后，代表了这个IndexSearcher以只读的方式打开了一个索引。然后我们程序构造了一个Term对象，通过这个Term对象，我们指定了要在文档的内容中搜索包含关键词”lucene”的文档。接着利用这个Term对象构造出TermQuery对象并把这个TermQuery对象传入到IndexSearcher的search方法中进行查询，返回的结果保存在Hits对象中。最后我们用了一个循环语句把搜索到的文档的路径都打印了出来。好了，我们的搜索应用程序已经开发完毕，怎么样，利用Lucene开发搜索应用程序是不是很简单。<br/><br/><br/><br/>总结<br/><br/>本文首先介绍了&nbsp;Lucene&nbsp;的一些基本概念，然后开发了一个应用程序演示了利用&nbsp;Lucene&nbsp;建立索引并在该索引上进行搜索的过程。希望本文能够为学习&nbsp;Lucene&nbsp;的读者提供帮助。]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=78</link>
			<title><![CDATA[中文全文检索的实现以及一些经验]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[全文检索]]></category>
			<pubDate>Wed,05 Nov 2008 11:35:43 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=78</guid>	
		<description><![CDATA[最近在项目中面临中文全文检索的需求，关键需求如下：<br/>1&nbsp;支持中文、英文字词的全文检索，待检索文本是古文言文。<br/>2&nbsp;全文检索表达式支持：&nbsp;AND,OR,NOT,NEAR,BEFORE&nbsp;运算符，支持()。<br/>3&nbsp;速度要求：400M文本，要求在2-5秒内能够检索完毕。<br/><br/>尝试Lucene以及放弃原因：<br/>在尝试Lucene和不同的中文Analyzer后，终告放弃。<br/>原因如下：<br/>由于待检索文本是古文，中文分词技术无法派上用场。在将分隔存储每个汉字后，发现从Lucene中检索到的文本远远少于关键字实际匹配的文本，这一问题对于较长的检索关键字尤其明显。<br/>因为对于检索准确程度要求很高，故此放弃，但是Lucene出的这个问题的原因尚不清楚，希望能够有人提出解答。<br/><br/><br/>自行实现中文全文检索原理以及方法：<br/>1&nbsp;构建过程，忽略标点符号，自行计算每个汉字在每个文本文件中的偏移量，并保存。<br/>2&nbsp;检索过程，定位每个汉字的偏移量，如果检索表达式中每个汉字的预期偏移量与实际偏移量吻合，则匹配成功。<br/>3&nbsp;采用&nbsp;MappedByteBuffer&nbsp;加快检索速度，采用二分查找加快偏移量匹配速度，3个左右的关键字复合检索能够在3-5秒内完成匹配（要求操作系统有足够大的缓存）。<br/><br/>全文检索代码示例(TestFullTextQuery.java)：<br/>File&nbsp;storeDir&nbsp;=&nbsp;new&nbsp;File(&#34;C:\\temp\\fulltext\\index&#34;);<br/>StoreSearcher&nbsp;searcher&nbsp;=&nbsp;new&nbsp;StoreSearcher(storeDir);<br/>String&nbsp;str&nbsp;=&nbsp;&#34;大?藏&nbsp;&amp;&nbsp;阿难&#34;;&nbsp;//同时出现&nbsp;&#34;大?藏&#34;&nbsp;和&nbsp;&#34;阿难&#34;，&nbsp;?代表任意字符<br/>searcher.queryBegin(str,&nbsp;true);<br/>while(true){<br/>&nbsp;&nbsp;&nbsp;&nbsp;StoreSearcherResult&nbsp;ssr&nbsp;=&nbsp;searcher.getNextQueryResult();<br/>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(&nbsp;ssr&nbsp;==&nbsp;null&nbsp;){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&#34;ID&nbsp;&#34;+ssr.docId+&#34;:&#34;+ssr.matchedCount);<br/>}<br/>searcher.queryEnd();<br/>searcher.close();<br/><br/>运行结果<br/>ID&nbsp;T01n0001.TXT:320<br/>ID&nbsp;T01n0002.TXT:3<br/>ID&nbsp;T01n0004.TXT:2<br/>ID&nbsp;T01n0005.TXT:202<br/>ID&nbsp;T01n0006.TXT:131<br/>....<br/><br/>附：全文检索表达式举例<br/><br/>关键字中间可以出现?，表明匹配任意字符。<br/><br/>运算符名称：运算符字符<br/>AND:&amp;<br/>o&#114;:,<br/>BEFORE:*<br/>NEAR:+<br/>NOT:-<br/><br/>表达式举例：<br/>(KEY1&nbsp;&lt;AND|OR|BEFORE|NEAR&gt;&nbsp;KEY2)&nbsp;&amp;&nbsp;(NOT&nbsp;KEY3)<br/>KEY1&nbsp;KEY2&nbsp;(关键字之间无运算符假设为AND)<br/><br/><br/><br/>附：全文检索文件格式信息<br/><br/>DocInfoStore(文档信息)<br/>--HEAD--<br/>DocCount:Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;文档数目<br/>--DOC&nbsp;HEAD(PER&nbsp;DOC)--<br/>DocSeq:&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;文档顺序号，内部使用<br/>DocId:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Char[128]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;文档唯一ID，字符串格式<br/>DocSepOfs:&nbsp;Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;文档分隔符数组的Ofs<br/>--DOC&nbsp;SEP&nbsp;OFS(PER&nbsp;DOC)--<br/>DocOfs:&nbsp;&nbsp;&nbsp;&nbsp;ArrayOfInteger&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;文档分隔数组<br/><br/><br/>WordInfoStore(每个汉字信息)<br/>--HEAD--<br/>WordCount:Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;汉字数<br/>--WORD&nbsp;IDX(Per&nbsp;Word)--<br/>WordChar:Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;汉字的Unicode值<br/>WordInfoOfs:Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;汉字信息在文件中的偏移量<br/>WordInfoSize:Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;汉字信息大小<br/>--WORD&nbsp;INFO(Per&nbsp;Word)--<br/>DocCount:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;汉字出现的文档数<br/>DocSeq(Per&nbsp;Doc):&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;每个文档的顺序号<br/>WordInDocs:ArrayOfInteger&nbsp;每个文档中出现的汉字的偏移数组，从小到大排列<br/><br/>源码下载地址:<a href="http://www.blogjava.net/Files/zhugf000/foreader2_ftsearch.zip" target="_blank">http://www.blogjava.net/Files/zhugf000/foreader2_ftsearch.zip</a>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=77</link>
			<title><![CDATA[浅谈图片搜索引擎的实现]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Wed,15 Oct 2008 17:34:20 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=77</guid>	
		<description><![CDATA[&nbsp;leo在他的《博客营销》中说不清楚全文检索博客的领域是什么,呵呵，整个Minidx.com其实都只不过是一个自己随便涂鸦的地方，倒还真没考虑过什么领域，更加没有考虑过自己的博客应该专注于哪一方面……如果非要划分，大概<a href="http://minidx.com" target="_blank">http://minidx.com</a>勉强还能算得上一点“领域”吧。呵呵，无所谓了，随便涂鸦吧……OODA&nbsp;SAN说他在研究图片搜索引擎，所以就和他探讨了一些图片搜索的实现的问题，这里也记录一下自己的思路，OODA是这方面的专家，而我只能算是“新手上路”，下面说的有什么不对的还望包涵指出，：）<br/><br/>简单的说，图片搜索是搜索引擎针对网络上的图片所提供的服务。包括Google,&nbsp;Yahoo!,&nbsp;Ask,&nbsp;MSN和AOL以及国内的Baidu这些大型搜索引擎都提供有图片搜索，还有号称图片搜索专用的picsearch，但它们并非真正地对文件中的图像进行搜索，而是对附加在图片中的文字（比如img标签的alt属性）以及文件名进行搜索，也就是通常意义上的关键字索引，所以实质上用的还是基于文本内容的检索，因此也只能搜索数量较少的文件，IBM&nbsp;公司的研究人员也曾经开发一种名为Marvel的可以实现音像资料搜索的搜索引擎，它能够获取目前在互联网上很难获取的音像资料，只是没有关注过目前的进展。目前微软也正在研究可以通过头像来查找某人的信息这样的搜索引擎，微软将之成为Photo2Search，“a&nbsp;picture&nbsp;is&nbsp;worth&nbsp;a&nbsp;thousand&nbsp;words”，真正意义上的多媒体搜索引擎的实现，带给人们的影响，将可以与蒸汽机，电脑相媲美……<br/><br/><br/>也许有人不明白图片搜索能给我们带来什么<br/><br/>当你看到了一种植物，但是不知道叫什么名字及其相关信息……<br/><br/>当你有一张某酒店的照片但是不知道这一酒店的信息……<br/><br/>当你看到某张照片上美丽的风光是你很向往的但是却偏偏没有相关的介绍……<br/><br/>当摄像头拍下了某“坏蛋”的面孔但是却没有人认识这个人……<br/><br/>当你看到上面的美女却压根找不到一点相关的信息……<br/><br/>对于这些问题，用google的图片搜索，可以吗？baidu能够告诉你答案吗？虽然Google&nbsp;图片搜索的时候，在搜索结果页面的网址后面加入&amp;imgtype=face这个参数，即可将图片类型限定为人脸，但是很显然，这样的技术并不能帮助我们解决上面那些问题。而这些需求却是一直都存在的，那么能够帮我们解决这些问题的真正意义上的多媒体（注：不仅仅是图片，其实包括声音文件，影像文件等）搜索引擎应该如何去实现？下面是我所能想到的几种方案<br/><br/>●统一多媒体文件的存储格式。不管是BMP,JPG,GIF……还是MP3,RM，AVI……在生成这样的文件的时候都必须添加必要的文本信息，以特有的结构体存储。这样输入一张图片进行查询的时候，搜索引擎需要的只不过是去解析这一图片的信息，抽取关键字进行查询就可以了。但是，这个世界，是没有想象中那么理想的，否则也不会存在中文，英文，法语，日语……也不会有东方神仙与西方大神了……要制定这样的标准，不是google，yahoo这样的公司可以做到的，也不是美国，中国可以做到的。所以这只能说是镜中水月……无法实现的，就当时我心中的一个美丽的肥皂泡吧。<br/><br/>●提取事物特有的信息对搜索引擎进行训练。研究过搜索引擎的朋友们应该知道，中文分词不同于英文分词，英文可以按照空格来划分单词，但是中文却是连成一片的。所以为了提高中文分词的准确率，通常会准备大量的语料对其进行训练。而有用3D&nbsp;Max之类工具建模经验的朋友们应该知道，在构造某一事物的时候，最先需要对这一事物的特征进行分析，确定好坐标，然后进行构造。不管后面用什么场景来渲染，所建的模都是一样的。比如茶壶，有自己特有的曲线，还有人的脸，一些坐标是相对固定的，不管这个人是年轻，还是变老，这些特征都是无法改变的。所以如果可以采集到足够的“语料”，对搜索引擎进行训练，那么随着训练的进行，搜索引擎认识的东西也就不断的增加，能够提供给我们的信息帮助我们解决的问题也就越来越多。这个和早期的文本搜索引擎应该是一样的。<br/><br/>●对多媒体文件的内容进行分析索引。这种方式是OODA告诉我他正在研究的，大体思路是这样的，比如BMP位图，实际上是以比特流，也就是位的方式存储的，某一类物质，比如说rose，实际上内部的很多比特流都是有一定特征的，这个和通常意义上的文本分类很像，先根据大的特征进行大的分类，然后范围逐步缩小，最终确定目标。不过这个所需要的知识面太过于广泛，至少我无法分析出两张rose图片的相似比特流，希望OODA能够带来一个惊喜吧。<br/><br/>各大搜索引擎公司目前都在投入大量的资金研究这样的搜索引擎，我的Minidx是基于文本的搜索引擎，而我本身对图片之类的比较“白痴”，所以也只能写这么些废话，来贻笑大方了。：）]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=76</link>
			<title><![CDATA[搜索引擎之排序技术分析]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Wed,15 Oct 2008 17:25:38 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=76</guid>	
		<description><![CDATA[什么是排序技术<br/><br/>所谓的排序技术，我们可以简单的理解为曝光率，谁出现的次数最多，谁排在前面。要谈到排序技术，就不得不说Google的PageRank，而提到PageRank，则我们需要先来了解一下一种称为HillTop的排序算法。<br/><br/><br/>PageRank技术：通过对由超过&nbsp;50,000&nbsp;万个变量和&nbsp;20&nbsp;亿个词汇组成的方程进行计算，PageRank能够对网页的重要性做出客观的评价。PageRank&nbsp;并不计算直接链接的数量，而是将从网页&nbsp;A&nbsp;指向网页&nbsp;B&nbsp;的链接解释为由网页&nbsp;A&nbsp;对网页B&nbsp;所投的一票。这样，PageRank&nbsp;会根据网页&nbsp;B&nbsp;所收到的投票数量来评估该页的重要性。&nbsp;<br/><br/>PageRank的思想，链接的重要度整体加重了网站的权重，而网站的权重又反过来影响内部链接的排名。而HillTop算法（也被称为“专家系统”，由Krishna&nbsp;Bharat和George&nbsp;A.&nbsp;Mihaila提出），则是以Dan&nbsp;Thiesw为首的TSPR(Topic-Sensitive-PageRank：主题性页面级别技术)理论。相比PageRank算法，HillTop更强调了内容的相关性，也就是我们常说的“粘性”，“黏度”，而非网站权重，这样避免了可能转贴的权重较高的站点（比如门户站点）比原创作者站点排名还要靠前的问题。那么，到底<br/><br/>什么是Hilltop算法&nbsp;<br/><br/>Bharat提出：在利用”页面等级”来寻找”权威”网页时，不应单纯依赖于值的大小来定夺，而应将重点放在它与查询主题的相关性上；即不但需要考虑网页的页面等级，还要考虑该网页的页面等级与查询主题的相关性是否相称。若一个网页只与查询主题只沾点边，那么即使其页面等级非常之高，对用户来说也是没有意义的。如此一来，于网页而言，那些来自于”相关主题”的文档的链接就更有意义了&nbsp;(Bharat称这种”相关主题”文档为”专家文档”)，一个网页的所有外部”专家文档”链接构成了该网页的”权威性值”。Hilltop算法的意义在于：相同主题网站之间的链接应比非相关网站的链接具有更高的价值。&nbsp;<br/><br/>其实GOOLE早在几年前已经开始混合使用HiilTop和PageRank算法共同确定搜索结果排名了，通过HiilTop的方法，计算来自描述相同主题的相关文档的链接对于搜索者的价值会更大（即相同主题网站之间的链接比不相关网站的链接价值要更大），正是由于HiilTop的影响，这也是我们看到即使各项指标（被收录链接数量，反向链接，访问量等）都非常不错的门户类网站PR很难达到7以上，而专业性的站点却非常容易就达到7，甚至有一大批的都达到了9（注：这里的PR指的是Google综合结果通过Google&nbsp;工具条显示的结果，而并非上面的PageRank值）。<br/><br/>Hilltop算法的不足&nbsp;<br/><br/>●Hilltop的前提是每个专家文件都是完全公正的，且无欺骗和人工操纵成分。专家文件的一个小小污点就可以对排名产生极大的负面影响。&nbsp;<br/><br/>●运行Hilltop算法需要大量的计算机处理能力，像Google的成千上万台服务器集群可以轻松的实现，但是对于一般的企业级用户，服务器就未必具有这样的处理能力。&nbsp;<br/><br/>排名所采用的相关技术&nbsp;<br/><br/>●词干技术(stemming)&nbsp;<br/><br/>Google等各搜索引擎中，目前都已经采用了词干技术(stemming)&nbsp;。最早的搜索引擎，如果搜索一个单数查询条件如”live”，则搜索结果中不会出现如”lives”，”living”这样的关键词变化形式，反之亦然。对于搜索引擎的用户来说，这种特性是一件好事情，因为搜索提供的结果更多了，但站在搜索引擎商业用户来说，那就意味着需要多购买一些关键词，这个也体现了技术的进步在商业中的价值。&nbsp;<br/><br/>●拼写纠错&nbsp;<br/><br/>拼写检查和上面的词干技术一样，也已经被应用于搜索结果中。例如，当输入查询条件为”Search&nbsp;Engine&nbsp;Optimisation”后，以往Google只会提示你是否是要找”Search&nbsp;Engine&nbsp;Optimization”，但显示的还是符合”Optimisation”的搜索结果。不过现在则能看到”Optimization”的搜索结果。&nbsp;<br/><br/>这两项处理其实都是在分词阶段完成的。&nbsp;&nbsp;<br/><br/>排名的商业价值<br/><br/>排名在商业中的价值，在互联网蓬勃发展的今天，已经得到了充分的体现。2003年Google大规模调整算法的时候就引来了种种传言和猜测&nbsp;：&nbsp;<br/><br/>开始使用词典对号入座；&nbsp;<br/>意图施压使商业站点使用Adwords广告服务；&nbsp;<br/>开始使用”基于贝叶斯定理的SPAM过滤系统”&nbsp;；&nbsp;<br/>开始处罚互惠链接，”优化”网页，或”链接文本”&nbsp;；&nbsp;<br/>众多猜测中，”Google意图施压使商业站点使用Adwords广告服务”显然占了上风。许多搜索引擎优化分析家都认为：Google通过一个保密的过滤系统”黑名单”来对商业网站进行筛选，从而达到上述目的。虽然这都紧紧是一些猜测，但是这样的传言和猜测，恰恰反应了排名的重要商业价值。<br/>参考资料：<br/>・The&nbsp;Google&nbsp;Hilltop&nbsp;Algorithm<br/><a href="http://www.rankforsales.com/search-engine-algorithms/google-hilltop-algorithm.html" target="_blank">http://www.rankforsales.com/search-engine-algorithms/google-hilltop-algorithm.html</a><br/>・Hilltop:&nbsp;A&nbsp;Search&nbsp;Engine&nbsp;based&nbsp;on&nbsp;Expert&nbsp;Documents<br/><a href="ftp://ftp.cs.toronto.edu/pub/reports/csri/405/hilltop.html" target="_blank">ftp://ftp.cs.toronto.edu/pub/reports/csri/405/hilltop.html</a>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=75</link>
			<title><![CDATA[使用Netbeans开发搜索引擎Nutch]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Wed,15 Oct 2008 17:04:44 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=75</guid>	
		<description><![CDATA[　Nutch简介&nbsp;<br/><br/>　　Nutch&nbsp;是一个开源的、Java&nbsp;实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具。Nutch致力于让每个人能很容易,&nbsp;同时花费很少就可以配置世界一流的Web搜索引擎.&nbsp;为了完成这一宏伟的目标,&nbsp;nutch能够做到:&nbsp;每个月取几十亿网页;&nbsp;为这些网页维护一个索引;&nbsp;对索引文件进行每秒上千次的搜索;&nbsp;提供高质量的搜索结果;&nbsp;以最小的成本运作.&nbsp;<br/><br/>　　测试环境：&nbsp;<br/><br/>　　Nutch&nbsp;release&nbsp;0.9&nbsp;<br/><br/>　　Netbean5.5.1&nbsp;中文版&nbsp;<br/><br/>　　Java&nbsp;1.6&nbsp;<br/><br/>　　Ubuntu&nbsp;7.10&nbsp;<br/><br/>　　步骤:&nbsp;<br/><br/>　　1.安装：Nutch&nbsp;<br/><br/>　　下载&nbsp;Nutch&nbsp;0.9&nbsp;的压缩包并解压&nbsp;<br/><br/>　　（下载地址：<a href="http://apache.mirror.phpchina.com/lucene/nutch/" target="_blank">http://apache.mirror.phpchina.com/lucene/nutch/</a>）&nbsp;<br/><br/>　　按照教程进行安装&nbsp;<br/><br/>　　(教程地址:&nbsp;<a href="http://wiki.apache.org/nutch/NutchTutorial" target="_blank">http://wiki.apache.org/nutch/NutchTutorial</a>)&nbsp;<br/><br/>　　2.在Netbeans中创建项目&nbsp;<br/><br/>　　启动Netbeans5.5.1；&nbsp;<br/><br/>　　创建过程：文件-＞新建项目-＞常规；&nbsp;<br/><br/>　　选择“基于现有源代码的Java项目”-＞下一步，选择项目名称和项目文件夹，可以根据自己的需要自行指定；&nbsp;<br/><br/>　　选择下一步，点击“源包文件夹”文本框右边的“添加文件夹”按钮，浏览文件目录选择Nutch安装目录下的src文件夹；&nbsp;<br/><br/>　　点击完成，此时工程已经建立，当需要对项目进行配置才能实现代码的调试；&nbsp;<br/><br/>　　在左边的“项目”导航窗口中，选择库包，点击右键，选择属性，此时弹出项目属性配置窗口&nbsp;<br/><br/>　　选择配置“库”，点击按钮“添加JAR/文件夹”，添加Nutch安装目录下的&nbsp;&#34;conf&#34;目录以及nutch-0.9.jar包；&nbsp;<br/><br/>　　继续将Nutch安装目录下“lib”和“plugin”文件夹中的所有JAR包添加进来，此处比较麻烦，因为Netbeans不能自动扫描到文件夹下所有的JAR包，必须手工将其添加进来。&nbsp;<br/><br/>　　最后需要添加两个JAR包，这两个包分别是解析MP3和RTF文档的，因为license的不兼容性，它们从代码中分离了，你可以在如下地址下载：&nbsp;<br/><br/><a href="http://nutch.cvs.sourceforge.net/nutch/nutch/src/plugin/parse-mp3/lib/" target="_blank">http://nutch.cvs.sourceforge.net/nutch/nutch/src/plugin/parse-mp3/lib/</a>&nbsp;<br/><br/><a href="http://nutch.cvs.sourceforge.net/nutch/nutch/src/plugin/parse-rtf/lib/" target="_blank">http://nutch.cvs.sourceforge.net/nutch/nutch/src/plugin/parse-rtf/lib/</a>&nbsp;<br/><br/>　　下载后将其分别放至src/plugin/parse-mp3/lib和src/plugin/parse-rtf/lib/目录下，同时像添加其他JAR包一样，将其添加至“编译时库”中。此时，您可以选择左方“项目”导航窗口中的项目图标，点击右键，选择“生成项目”，项目应该能正确通过编译。您还需要对Nutch进行配置以调试Nutch的爬行代码。&nbsp;<br/><br/>　　3.配置&nbsp;Nutch&nbsp;<br/><br/>　　在Nutch安装目录下，找到文件/conf/nutch-defaul.xml，&nbsp;将其&nbsp;&#34;plugin.folders&#34;&nbsp;属性值改为&#34;Nutch安装目录/src/plugin&#34;&nbsp;<br/><br/>　　4.在Nutch中运行Nutch爬虫&nbsp;<br/><br/>　　选择左方“项目”导航窗口中的项目图标，点击右键，选择“属性”，在左方类别窗口中选择“运行”，对运行参数进行配置&nbsp;<br/><br/>　　主类：&nbsp;选择&nbsp;o&#114;g.apache.nutch.crawl.Crawl&nbsp;<br/><br/>　　参数：&nbsp;填入&nbsp;urls&nbsp;-dir&nbsp;crawl&nbsp;-depth&nbsp;3&nbsp;-topN&nbsp;50&nbsp;<br/><br/>　　VM选项：填入&nbsp;-Dhadoop.log.dir=logs&nbsp;-Dhadoop.log.file=hadoop.log&nbsp;<br/><br/>　　点击“确定”按钮退出&nbsp;<br/><br/>　　选择左方“项目”导航窗口中的项目图标，点击右键，选择“运行项目”&nbsp;<br/><br/>　　注:对于Ubuntu来说，可能由于权限的问题导致不能正常调试，可以在用户和组管理中设置当前用户的组为ROOT组。<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=74</link>
			<title><![CDATA[基于Lucene/XML的站内全文检索解决方案：WebLucene]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[全文检索]]></category>
			<pubDate>Wed,15 Oct 2008 16:52:08 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=74</guid>	
		<description><![CDATA[内容摘要：<br/>为Lucene做一个通用XML接口一直是我最大的心愿：更方便的在WEB应用中嵌入全文检索功能<br/><br/>提供了XML的数据输入接口：适合将原有基于各种数据库的数据源导入到全文索引中，保证了数据源的平台无关性；&nbsp;<br/>通过了基于XML的搜索结果输出：方便了通过XSLT进行前台的结果显示；&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;MySQL&nbsp;&nbsp;\&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;JSP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;o&#114;acle&nbsp;-&nbsp;DB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;&nbsp;==&gt;&nbsp;&nbsp;&nbsp;XML&nbsp;==&gt;&nbsp;(Lucene&nbsp;Index)&nbsp;==&gt;&nbsp;XML&nbsp;&nbsp;-&nbsp;&nbsp;ASP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MSSQL&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;&nbsp;PHP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MS&nbsp;Word&nbsp;/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;XHTML&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PDF&nbsp;/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=XSLT=&gt;&nbsp;-&nbsp;&nbsp;TEXT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\&nbsp;XML&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\_________WebLucene__________/&nbsp;使用过程如下：将数据用脚本导出成XML格式；&nbsp;<br/>将XML数据源导入LUCENE索引；&nbsp;<br/>从WEB界面得到XML结果输出，并通过XSLT生成HTML页面<br/><br/>站内全文检索的必要性<br/>虽然大型搜索引擎的功能已经越来越强大了，很多站点都使用了Google的站内检索site:domain.com代替了自己的站内数据库“全文”检索。&nbsp;但依靠GOOGLE这样的大型搜索引擎做站内检索会有以下弊端：<br/><br/>数量有限：搜索引擎并不会深度遍历一个网站，而将网站所有的内容都索引进去，比如Google就喜欢静态网页，而且是最新更新的，而不喜欢带?的动态网页，Google甚至会定期将缺少入口的网站内容逐渐抛弃；&nbsp;<br/>更新慢：搜索引擎针对站点的更新频率也是有一定周期的，很多内容需要一定时间后才能进入GOOGLE的索引：目前Google&nbsp;Dance的周期是21天左右；&nbsp;<br/>内容不精确：搜索引擎需要通过页面内容提取技术将导航条，页头页尾等内容过滤掉，反而不如直接从后台数据库提取数据来得直接，这种摘要和排重机制是很难实现的；&nbsp;<br/>无法控制输出：也许有更多的输出需求，按时间排序，按价格，按点击量，按类目过滤等&nbsp;<br/>系统的搭建<br/>下载：<br/><a href="http://sourceforge.net/projects/weblucene/" target="_blank">http://sourceforge.net/projects/weblucene/</a><br/><br/>XML数据源的导入：<br/><br/>只要数据源可以导出成3层的XML结构，就都可以用IndexRunner这个命令行工具导入：<br/><br/>比如从数据库导出：news_dump.xml<br/>&lt;?xml&nbsp;version=&#34;1.0&#34;&nbsp;encoding=&#34;GB2312&#34;?&gt;<br/>&lt;Table&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;Record&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Title&gt;标题&lt;/Title&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Author&gt;作者&lt;/Author&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Content&gt;内容&lt;/Content&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;PubTime&gt;2003-06-29&lt;/PubTime&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/Record&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;Record&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Title&gt;My&nbsp;Title&lt;/Title&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Author&gt;chedong&lt;/Author&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Content&gt;abc&lt;/Content&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;PubTime&gt;2003-06-30&lt;/PubTime&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/Record&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;...<br/>&lt;/Table&gt;<br/><br/>IndexRunner&nbsp;-i&nbsp;news_dump.xml&nbsp;-o&nbsp;c:\index&nbsp;-t&nbsp;Title,Content&nbsp;-n&nbsp;Author&nbsp;<br/>-i&nbsp;news_dump.xml:&nbsp;&nbsp;以news_dump.xml为数据源<br/>-o&nbsp;c:\index&nbsp;&nbsp;&nbsp;索引库建立在c:\index目录下<br/>索引建立Title&nbsp;Author&nbsp;Content&nbsp;PubTime这几个字段外，按以下规则建立索引：<br/>-t&nbsp;Title,Content&nbsp;一个进行分词的全文索引TokenIndex：数据是Title&nbsp;Content这2个字段<br/>-n&nbsp;Author&nbsp;&nbsp;&nbsp;&nbsp;一个不分词的索引：NoTokenIndex：数据源是Author这个字段。<br/><br/>对于RSS数据源：<br/>&lt;?xml&nbsp;version=&#34;1.0&#34;?&gt;<br/>&lt;rss&nbsp;version=&#34;0.92&#34;&gt;<br/>&lt;channel&gt;<br/>&nbsp;&nbsp;&lt;title&gt;Amazon:&nbsp;Books&nbsp;Arts&nbsp;&amp;amp;&nbsp;Photography&lt;/title&gt;<br/>&nbsp;&nbsp;&lt;link&gt;<a href="http://www.lockergnome.com/" target="_blank">http://www.lockergnome.com/</a>&lt;/link&gt;<br/>&nbsp;&nbsp;&lt;description&gt;Amazon&nbsp;RSS&nbsp;Feed&lt;/description&gt;<br/>&nbsp;&nbsp;&lt;lastBuildDate&gt;Sun,&nbsp;29&nbsp;Jun&nbsp;2003&nbsp;01:05:01&nbsp;GMT&lt;/lastBuildDate&gt;<br/>&nbsp;&nbsp;&lt;docs&gt;<a href="http://www.lockergnome.com/" target="_blank">http://www.lockergnome.com/</a>&lt;/docs&gt;<br/>&nbsp;&nbsp;&lt;webMaster&gt;amazonfeed@lockergnome.com&nbsp;(Lockergnome&nbsp;RSS&nbsp;Generator)&lt;/webMaster&gt;<br/>&nbsp;&nbsp;&lt;item&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;title&gt;The&nbsp;Artist&#39;s&nbsp;Way:&nbsp;A&nbsp;Spiritual&nbsp;Path&nbsp;to&nbsp;Higher&nbsp;Creativity&nbsp;-&nbsp;$11.17&lt;/title&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;link&gt;<a href="http://www.amazon.com/exec/obidos/ASIN/1585421464/lockergnomedigit/?ref=nosim" target="_blank">http://www.amazon.com/exec/obidos/ASIN/1585421464/lockergnomedigit/?ref=nosim</a>&amp;amp;dev-it=D34HUVGKB34YFX&lt;/link&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;description&gt;<a href="http://www.lockergnome.com/" target="_blank">http://www.lockergnome.com/</a>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/description&gt;<br/>&nbsp;&nbsp;&lt;/item&gt;<br/>&nbsp;&nbsp;...<br/>&lt;/channel&gt;<br/><br/>IndexRunner&nbsp;-i&nbsp;<a href="http://www.example.com/rss.xml" target="_blank">http://www.example.com/rss.xml</a>&nbsp;-o&nbsp;c:\index&nbsp;-t&nbsp;title,description&nbsp;-n&nbsp;link&nbsp;&nbsp;-l&nbsp;&nbsp;4<br/>-l&nbsp;4&nbsp;表示拿第4层节点作为字段映射，<br/><br/>IndexRunner还提供了-a&nbsp;-m这两个选项：用于增量索引和批量索引优化。<br/>-a&nbsp;&nbsp;增量索引，表示在原有索引的基础上扩展<br/>-m&nbsp;&nbsp;mergeFactor&nbsp;在Lucene中mergeFactor是一个针对批量索引的优化参数，控制多少条处理完多少条记录（Document）后，写入一次索引，写入频率越高，内存使用越少，但索引速度越慢，所以在大批量数据导入时需要增大文件写入的间隔，多让索引在内存中操作。<br/><br/>搜索结果输出：<br/><br/><br/>以下是系统设计过程中一些设计的思路：<br/><br/>做为工业标准的XML<br/>记得以前有关于肯德基的炸薯条断顿的报道。从这个事件报道中我们可以看到一种更高效的管理体系：对于快餐店这样全球性的企业来说，要保证各地提供的薯条品质，成本最低的方法肯定是依靠机器而不是厨师，如果要求薯条机能够处理各种形状不一的土豆，机器的复杂程度和维护成本都会很高。所以土豆必须严格符合工业标准才能让结构比较简单的薯条机生产出符合标准的薯条，因此，薯条的加工机械会严格按照土豆协会的土豆工业标准设计。高质量的原料可以大大降低后期加工设备的成本，因此从总体成本上讲还是合算的。&nbsp;<br/>对于软件应用开发者来说：应用和应用之间，企业和企业之间交换的数据好比就是土豆，白菜，按照严格的XML标准设计的接口作为企业之间后台数据交换的工业标准，虽然不如简单的CSV格式高效，但缺能大大简化下游工序的后期加工成本。<br/><br/><br/>不难想象为什么处理HTML的浏览器：IE和Mozilla等浏览器软件大小都在10M以上，但一般处理XML的解析器一般都在几百K。除了没有界面外，HTML浏览器需要为太多不规范的HTML代码提供大量容错处理也是一个很重要的原因，而语法严格，规则简单的XML处理器就可以做的很简短，高效，体积越“小”就意味着适应性越广：这点在手机这样的硬件配置比较低的设备环境中显得尤其重要。<br/><br/>虽然XML在后台数据交换方面，有着巨大的潜力。在前台表现方面，XML并不会马上代替HTML，很多通过XSLT输出的HTML仍然需要结合CSS来进行表现。XML&nbsp;==XSLT==&gt;&nbsp;HTML&nbsp;+&nbsp;CSS。但是由于太多的网页都是用HTML做的，相信XML没有必要马上代替这些已有的机制。<br/><br/>此外在应用的国际化支持方面XML和Java简直是绝配：XML数据源用Java解析后是UNICODE，这样无论是日文，繁体中文还是德文的内容我们都可以在一个索引库中同时进行搜索。这样针对其他语言的支持只是设计各种语言界面的问题了。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GBK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;BIG5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BIG5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;&nbsp;UNICODE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;====&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Unicode&nbsp;-&nbsp;&nbsp;GB2312&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SJIS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;&nbsp;&nbsp;(XML)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(XML)&nbsp;&nbsp;&nbsp;-&nbsp;&nbsp;SJIS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ISO-8859-1&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\&nbsp;ISO-8859-1使用XML的另外一个额外好处在于：开发人员一般都没有仔细理解Java的字符集（其实上是JVM的缺省file.encoding属性）受系统本地化设置的影响，基于XML的输入使得数据的字符解码过程变得透明：不用再和用户解释需要如何解码，编码数据源。不过，XML的学习成本还是比较高的，假设你HTML的学习成本是1，XML则可能为10，而XSLT的学习成本则可能高达100。<br/><br/>传统数据库应用的全文检索加速<br/>让数据库负责精确匹配，将模糊匹配用独立的系统实现<br/>一个站点内容积累在万级以上，站内全文检索就会是用户定位最主要的手段，而关键词检索是用户最熟悉的方法。因此基于数据库的传统WEB应用在全文检索需求还是很大的。<br/><br/>但是可怕的%like%数据库操作可能会吃掉数据库服务器90%以上的CPU。Oracle&nbsp;MSSQL等数据库服务器中数据库内置的全文检索基本上都不太适合WEB应用。而数据库另外一个的弊端在于对于条件简单的查询返回结果集非常大：数据库并不知道如何面向用户最关心的的头100条结果进行优化。根据以前的统计：头100条结果往往已经可以满足95％以上用户需求。<br/><br/>需要缓存设计：根据我们的经验，在应用设计中没有必要进行内置的结果缓存设计：让前台的应用服务器内置的缓存机制或者反相代理缓存服务器进行缓存就够了。<br/><br/>数据同步策略<br/>总体上讲，全文检索和数据库其实是2种根本不同的应用模式，全文检索系统其实往往也没有必要和数据库那么高的实时同步机制，如果按照：低更新，高缓存的模式进行设计：数据库数据到全文索引的同步过程一般都可以通过脚本定期将数据库的数据导出成XML，然后进入Lucene的全文索引。而针对原有数据记录的更新和删除，其实一般可以通过定期的重建索引解决。WebLucene其中索引部分是一个IndexRunner的命令行程序实现的。<br/><br/>结果排序策略<br/>站内全文索引另外一个很重要的需求是可定制的排序：按时间，按价格，按点击量……Lucene全文索引缺省只提供了根据关键词在原文中的匹配度排序，而任何根据某个字段的值进行排序的都无法避免再次遍历数据，从而导致性能有数量级的下降（等于又是做%Like%检索），而在索引中，除了匹配度SCORE外，唯一能用来排序的就是索引记录的ID，所以一个比较高效率实现定制排序的方法时：在索引时，让进入Lucene全文的顺序对应着一定规则：比如时间，然后在搜索时，让搜索结果按照索引记录的ID进行排序（或倒排）。<br/><br/>搜索结果关键词标引的实现<br/>搜索结果中关键词通过红色或者黑体字标记出来，为了能够更恰当的显示相关上下文的问题，标引是通过限制了一个扫描范围，然后根据一个分析器将指定的词流式的读取出来，然后<br/><br/>全文检索和其他应用的集成<br/>其实核心的是一个Lucene的XML接口：SAX方式的数据导入和DOM方式的结果输出。<br/><br/>XML的数据源定义：<br/>只要是能够映射成表＝》记录＝》字段这样层次结构的都可以。因此WebLucene索引的设计比较灵活，甚至可以直接用来索引RSS。<br/><br/>XML结果定义：参考了Google的XML接口的设计<br/><br/>如果没有SERVLET界面，提供XML输出的DOMSearcher也可以很方便集成到各种应用系统中。<br/><br/><br/>参考资料：<br/><br/>系统设计中使用的一些模块：<br/><br/><br/>Jakarta&nbsp;Lucene:&nbsp;<a href="http://jakarta.apache.org/lucene/" target="_blank">http://jakarta.apache.org/lucene/</a><br/>Xerces&nbsp;/&nbsp;Xalan&nbsp;<a href="http://xml.apache.org/" target="_blank">http://xml.apache.org/</a><br/><br/>Log4j&nbsp;<a href="http://jakarta.apache.org/log4j/" target="_blank">http://jakarta.apache.org/log4j/</a><br/><br/>Google的XML接口定义：&nbsp;<a href="http://www.google.com/google.dtd" target="_blank">http://www.google.com/google.dtd</a><br/>其他开发人员的一些反馈和改进<br/><br/>将WebLucene中的lucene部分升级到2.1<br/>WebLucene安装实习篇&nbsp;<br/>WebLucene的安装经验<br/>银杏咨询：&nbsp;站内搜索引擎提供商，为点评，饭统网提供了站内全文检索服务；&nbsp;]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=73</link>
			<title><![CDATA[SQL Server 2005全文检索技术在网站上的应用实录(7)]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[全文检索]]></category>
			<pubDate>Wed,15 Oct 2008 15:22:05 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=73</guid>	
		<description><![CDATA[五、全文检索性能考量<br/><br/>除了硬件资源&nbsp;[如内存（3GB&nbsp;限制）、磁盘速度和&nbsp;CPU&nbsp;速度]&nbsp;以外，全文搜索性能还受到&nbsp;Microsoft&nbsp;SQL&nbsp;Server&nbsp;和&nbsp;Microsoft&nbsp;Full-Text&nbsp;Engine&nbsp;for&nbsp;SQL&nbsp;Server&nbsp;(MSFTESQL)&nbsp;服务对这些资源的争用情况的影响。MSFTESQL&nbsp;服务只对磁盘进行写操作，而&nbsp;SQL&nbsp;Server&nbsp;会对磁盘进行读写操作。从性能角度出发，关键是很好地优化&nbsp;MSFTESQL&nbsp;服务，以便获得最佳使用效果。<br/><br/>全文搜索性能包含两个方面：<br/><br/>◆全文索引性能<br/>◆全文查询性能<br/><br/>全文索引性能<br/><br/>Microsoft&nbsp;SQL&nbsp;Server&nbsp;2005&nbsp;中的全文搜索的索引性能很大程度上取决于下面两个因素：<br/><br/>◆SQL&nbsp;Server&nbsp;创建全文批花费的时间。<br/>◆MSFTESQL&nbsp;服务使用这些批的速度。<br/><br/>若要达到最佳性能，需要优化&nbsp;SQL&nbsp;Server&nbsp;与&nbsp;MSFTESQL&nbsp;服务之间的交互。如果&nbsp;MSFTESQL&nbsp;服务处理不完&nbsp;SQL&nbsp;Server&nbsp;生成的批，该服务将暂停，并生成一个爬网日志消息来指示此暂停状态。有关如何解决此问题的信息，请参阅Microsoft&nbsp;SQL&nbsp;Server&nbsp;全文引擎&nbsp;(MSFTESQL)&nbsp;服务已暂停。<br/><br/>另一方面，如果&nbsp;SQL&nbsp;Server&nbsp;没有生成足够的全文批,&nbsp;使&nbsp;MSFTESQL&nbsp;服务充分运行，该服务就会闲置，这样就不能达到最佳性能。若要确保&nbsp;MSFTESQL&nbsp;服务处于最佳使用状况，需要跟踪并优化下列计数器：<br/><br/>正在处理的批计数器&nbsp;-&nbsp;Microsoft&nbsp;Full-Text&nbsp;Engine&nbsp;Filter&nbsp;Daemon&nbsp;(MSFTELFD)<br/><br/>此计数器应当等于系统中的&nbsp;CPU&nbsp;数或其两倍。当&nbsp;CPU&nbsp;使用值为&nbsp;0、1&nbsp;或&nbsp;2&nbsp;时，指示&nbsp;SQL&nbsp;Server&nbsp;执行情况不好。例如，如果计算机上具有&nbsp;4&nbsp;个&nbsp;CPU，此数值就应该为&nbsp;4&nbsp;或&nbsp;8。<br/><br/>已就绪的批队列&nbsp;-&nbsp;MSFTESQL&nbsp;服务<br/><br/>如果批数较少，可以执行下列操作：<br/><br/>◆增加全文批的大小。<br/>◆确保基表具有聚集索引。<br/>◆将&nbsp;SQL&nbsp;日志、数据库文件和全文目录分别放在单独的磁盘上。<br/>◆默认情况下，全文批的大小是每批&nbsp;1600&nbsp;行。如果计算机上有八个频率为&nbsp;700Mhz&nbsp;的&nbsp;CPU，推荐采用的批大小为&nbsp;5000&nbsp;行。<br/><br/>注意：&nbsp;&nbsp;<br/><br/>增加批大小会导致批的生成速度变慢，而且&nbsp;MSFTSQL&nbsp;要执行更多的操作来处理每个批。此外，请记住全文批的大小受共享内存区域大小的限制。共享内存区域大小的默认值为&nbsp;4Mb。<br/><br/>爬网范围&nbsp;<br/><br/>◆使用&nbsp;sp_configure&nbsp;最大全文爬网范围选项增大爬网范围计数器。理想情况下，此值应该是&nbsp;CPU&nbsp;数的两倍。<br/>◆使用&nbsp;Up&#100;ate&nbsp;STATISTICS&nbsp;语句更新基表的统计信息。&nbsp;<br/><br/>提高全文查询性能的建议<br/><br/>下面列出了有助于提高全文查询性能的建议。<br/><br/>使用&nbsp;Alt&#101;r&nbsp;INDEX&nbsp;REORGANIZE&nbsp;对基表的索引进行碎片整理。<br/><br/>使用&nbsp;Alt&#101;r&nbsp;FULLTEXT&nbsp;CATALOG&nbsp;REORGANIZE&nbsp;重新组织全文目录。切记要在进行性能测试之前执行此操作，因为它会引起该目录中全文索引的主合并。<br/><br/>仅选择较小的列作为全文键列。即使支持&nbsp;900&nbsp;字节的列，也不建议您使用这么大的键列来创建全文索引。<br/><br/>将多个&nbsp;CONTAINS&nbsp;合并为一个&nbsp;CONTAIN。在&nbsp;Microsoft&nbsp;SQL&nbsp;Server&nbsp;中，您可以在&nbsp;CONTAINS&nbsp;查询中指定一个包含若干列的列表。<br/><br/>如果只需要全文键或排名的信息，请分别使用&nbsp;CONTAINSTABLE&nbsp;或&nbsp;FREETEXTTABLE，而不要使用&nbsp;CONTAINS&nbsp;或&nbsp;FREETEXT。<br/><br/>使用&nbsp;FREETEXTTABLE&nbsp;和&nbsp;CONTAINSTABLE&nbsp;语法的&nbsp;TOP_N_BY_RANK&nbsp;选项来限制结果数并提高性能。如果您不是对可能查询到的所有信息都感兴趣，可使用此选项。<br/><br/>六、需求规划<br/><br/>我们知道做好网站检索不仅仅面临纯技术的问题，而且本身需要事前的需求规划，这里给出了全网搜索在功能性需求和非功能性需求上的典型需求。<br/><br/>功能性的需求：&nbsp;<br/><br/>（1）哪些业务数据需要提供全文的检索服务？&nbsp;<br/>（2）这些业务数据中那些关键信息是业务人员关心的？&nbsp;<br/>（3）需要支持哪些国家的语言？&nbsp;<br/>（4）有哪些行业术语、常用缩略词、替换词？&nbsp;<br/>（5）需要哪些检索功能，分别基于什么范畴的关键字展开检索？&nbsp;<br/><br/>非功能性的需求：&nbsp;<br/><br/>（1）业务上以前是否尝试过关系数据库查询、多维数据分析解决手头的问题？&nbsp;<br/>（2）检索时效性要求。&nbsp;<br/>（3）习惯的检索操作平台（浏览器&nbsp;/&nbsp;桌面），查询结果的展示方式。&nbsp;<br/>（4）授权控制。&nbsp;<br/>（5）查询结果的导出和发布方式要求。&nbsp;<br/><br/>七、结束语<br/><br/>本文提供了网站如何设计和实现基于SQL&nbsp;Server&nbsp;2005的全文检索实例，希望能对正在使用SQL&nbsp;Server&nbsp;2005构建网站搜索的同仁有所裨益。<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=72</link>
			<title><![CDATA[SQL Server 2005全文检索技术在网站上的应用实录(6)]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[全文检索]]></category>
			<pubDate>Wed,15 Oct 2008 15:21:20 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=72</guid>	
		<description><![CDATA[2)建立通用分页存过程[USP_GetFrontDataList_ByFullIndex]。由于性能考虑，返回给前台页面需要网站数据库端即完成分页。<br/><br/>Cr&#101;ate&nbsp;PROCEDURE&nbsp;[dbo].[USP_GetFrontDataList_ByFullIndex](@TableViewQueryName&nbsp;&nbsp;Varchar(&nbsp;1024&nbsp;),&nbsp;&nbsp;&nbsp;--Table或View或者Query的名字或字符串&nbsp;@Key&nbsp;&nbsp;&nbsp;&nbsp;Varchar(&nbsp;50&nbsp;),&nbsp;&nbsp;--关键字&nbsp;@Sel&#101;ctStr&nbsp;&nbsp;&nbsp;Varchar(&nbsp;500&nbsp;),&nbsp;&nbsp;&nbsp;--选择列字符串&nbsp;@Criteria&nbsp;&nbsp;&nbsp;Varchar(&nbsp;8000&nbsp;),--查询条件&nbsp;@Sort&nbsp;&nbsp;&nbsp;&nbsp;Varchar(&nbsp;255&nbsp;),&nbsp;--排序字符串&nbsp;@FristTopNum&nbsp;&nbsp;&nbsp;INT,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--显示的第一页置顶的数目&nbsp;@Page&nbsp;&nbsp;&nbsp;&nbsp;BIGINT&nbsp;&nbsp;OUTPUT,&nbsp;--显示的当前页号&nbsp;@CurrentPageRow&nbsp;&nbsp;BIGINT,&nbsp;&nbsp;--页大小(显示多少行)@TotalCount&nbsp;&nbsp;&nbsp;BIGINT&nbsp;OUTPUT&nbsp;&nbsp;&nbsp;--通过该查询条件，返回的查询记录的总页数&nbsp;)ASSET&nbsp;NOCOUNT&nbsp;ON&nbsp;if&nbsp;charindex(&#39;;&#39;,@Criteria)&gt;0&nbsp;o&#114;&nbsp;charindex(&#39;--&#39;,@Criteria)&gt;0&nbsp;o&#114;&nbsp;charindex(&#39;/*&#39;,@Criteria)&gt;0&nbsp;o&#114;&nbsp;charindex(&#39;*/&#39;,@Criteria)&gt;0&nbsp;o&#114;&nbsp;charindex(&#39;syscolumns&#39;,@Criteria)&gt;0&nbsp;&nbsp;o&#114;&nbsp;charindex(&#39;sysfiles&#39;,@Criteria)&gt;0or&nbsp;charindex(&#39;char(124)&#39;,@Criteria)&gt;0&nbsp;&nbsp;o&#114;&nbsp;charindex(&#39;1=1&#39;,@Criteria)&gt;0&nbsp;RETURN&nbsp;DECLARE&nbsp;@TotalStr&nbsp;&nbsp;nVarchar(4000)DECLARE&nbsp;@Str&nbsp;&nbsp;&nbsp;nVarchar(4000)DECLARE&nbsp;@TopRowNum&nbsp;bigintIF&nbsp;&nbsp;@Sel&#101;ctStr&nbsp;IS&nbsp;NULL&nbsp;ANDRTRIM(LTRIM(@Criteria))&nbsp;=&nbsp;&#39;&#39;SET&nbsp;@Sel&#101;ctStr&nbsp;=&nbsp;&#39;*&#39;IF&nbsp;@FristTopNum&nbsp;IS&nbsp;NULL&nbsp;AND&nbsp;@FristTopNum&nbsp;&lt;&nbsp;0BEGINSET&nbsp;@FristTopNum&nbsp;=&nbsp;0ENDELSE&nbsp;IF&nbsp;@FristTopNum&nbsp;&gt;&nbsp;@CurrentPageRowBEGINSET&nbsp;@FristTopNum&nbsp;=&nbsp;@CurrentPageRowENDIF&nbsp;&nbsp;@CurrentPageRow&nbsp;&gt;&nbsp;0BEGINIF&nbsp;@Criteria&nbsp;IS&nbsp;NOT&nbsp;NULL&nbsp;ANDRTRIM(LTRIM(@Criteria))&nbsp;&lt;&gt;&nbsp;&#39;&#39;BEGINSET&nbsp;&nbsp;@TotalStr&nbsp;=&nbsp;&#39;Sel&#101;ct&nbsp;@TotalCount=COUNT(*)&nbsp;FROM&nbsp;&nbsp;&#39;&nbsp;+&nbsp;&#39;(&#39;+&nbsp;@TableViewQueryName&nbsp;&nbsp;&nbsp;+&#39;)&#39;+&nbsp;&#39;&nbsp;T&nbsp;&#39;+&nbsp;&#39;&nbsp;Wh&#101;re&nbsp;&#39;&nbsp;+&nbsp;@CriteriaENDELSEBEGINSET&nbsp;&nbsp;@TotalStr&nbsp;=&nbsp;&#39;Sel&#101;ct&nbsp;@TotalCount=COUNT(*)&nbsp;FROM&nbsp;&#39;&nbsp;+&nbsp;&#39;(&#39;+@TableViewQueryName&nbsp;&nbsp;+&#39;)&#39;+&nbsp;&#39;&nbsp;T&nbsp;&#39;&nbsp;ENDPRINT&nbsp;@TotalStrEXEC&nbsp;&nbsp;sp_ExecuteSql&nbsp;@TotalStr,&nbsp;N&#39;@TotalCount&nbsp;bigint&nbsp;output&#39;,@TotalCount&nbsp;outputSET&nbsp;@TotalCount&nbsp;=&nbsp;@TotalCount&nbsp;+&nbsp;isnull(@FristTopNum&nbsp;&nbsp;,0)DECLARE&nbsp;@TotalPage&nbsp;bigintSET&nbsp;@TotalPage&nbsp;=&nbsp;@TotalCount/@CurrentPageRowIF&nbsp;@TotalCount%@CurrentPageRow&nbsp;&gt;&nbsp;0BEGINSET&nbsp;@TotalPage&nbsp;=&nbsp;@TotalPage&nbsp;+&nbsp;1END&nbsp;IF&nbsp;@Page&nbsp;&lt;=&nbsp;0&nbsp;BEGINSET&nbsp;@Page&nbsp;=&nbsp;1ENDIF&nbsp;@TotalPage&nbsp;&gt;&nbsp;0&nbsp;AND@Page&nbsp;&gt;&nbsp;@TotalPageBEGINSET&nbsp;@Page&nbsp;=&nbsp;@TotalPageEND&nbsp;--组织查询语句&nbsp;SET&nbsp;&nbsp;@Str&nbsp;=&nbsp;&nbsp;&#39;Sel&#101;ct&nbsp;&nbsp;&nbsp;&#39;&nbsp;+&nbsp;&nbsp;&nbsp;@Sel&#101;ctStr&nbsp;+&nbsp;&#39;&nbsp;FROM&nbsp;(&#39;&nbsp;+&nbsp;&nbsp;@TableViewQueryName&nbsp;&nbsp;+&nbsp;&#39;)&nbsp;T&nbsp;Wh&#101;re&nbsp;&nbsp;T.SerialNumber&nbsp;&gt;&#39;&nbsp;+cast&nbsp;((@Page-1)&nbsp;&nbsp;as&nbsp;varchar(10))&nbsp;+&nbsp;&#39;*&#39;&nbsp;+cast(&nbsp;@CurrentPageRow&nbsp;as&nbsp;varchar(10))+&nbsp;&nbsp;&#39;&nbsp;AND&nbsp;T.SerialNumber&nbsp;&lt;=&nbsp;&#39;+cast&nbsp;(@Page&nbsp;&nbsp;as&nbsp;varchar(10))&nbsp;+&nbsp;&#39;*&#39;&nbsp;+cast(&nbsp;@CurrentPageRow&nbsp;as&nbsp;varchar(10))IF&nbsp;@Sort&nbsp;IS&nbsp;NOT&nbsp;NULL&nbsp;ANDRTRIM(LTRIM(@Sort))&nbsp;&lt;&gt;&nbsp;&#39;&#39;BEGINIF&nbsp;@Criteria&nbsp;IS&nbsp;NOT&nbsp;NULL&nbsp;AND&nbsp;&nbsp;RTRIM(LTRIM(@Criteria))&nbsp;&lt;&gt;&nbsp;&#39;&#39;BEGINSET&nbsp;&nbsp;@Str&nbsp;=&nbsp;@Str&nbsp;+&nbsp;&nbsp;&nbsp;&#39;&nbsp;AND&nbsp;(&#39;&nbsp;+&nbsp;@Criteria&nbsp;+&nbsp;&#39;)&nbsp;o&#114;DER&nbsp;BY&nbsp;&#39;+@Sort&nbsp;ENDELSEBEGINSET&nbsp;&nbsp;@Str&nbsp;=&nbsp;@Str&nbsp;+&nbsp;&nbsp;&nbsp;&#39;&nbsp;AND&nbsp;&nbsp;(&#39;&nbsp;+&nbsp;@Criteria&nbsp;+&nbsp;&#39;)&nbsp;o&#114;DER&nbsp;BY&nbsp;&#39;+@Sort&nbsp;ENDENDELSEBEGIN&nbsp;IF&nbsp;@Criteria&nbsp;IS&nbsp;NOT&nbsp;NULL&nbsp;AND&nbsp;&nbsp;&nbsp;RTRIM(LTRIM(@Criteria))&nbsp;&lt;&gt;&nbsp;&#39;&#39;BEGINSET&nbsp;@str&nbsp;=&nbsp;@str&nbsp;+&nbsp;&nbsp;&#39;&nbsp;AND&nbsp;(&#39;&nbsp;+&nbsp;@Criteria&nbsp;+&nbsp;&#39;)&nbsp;&nbsp;&#39;&nbsp;&nbsp;&nbsp;ENDEND--对无记录时当前页数的处理&nbsp;IF&nbsp;@TotalCount=0BEGINSET&nbsp;@Page&nbsp;=&nbsp;0ENDENDEXEC&nbsp;&nbsp;sp_ExecuteSql&nbsp;@Str&nbsp;<br/>&nbsp;<br/>由于本行业网站可以提高如下几类信息资源，现列表分示如下：<br/><br/>ID&nbsp;检索内容&nbsp;数据表&nbsp;检索命令示例&nbsp;<br/>1&nbsp;投资&nbsp;CapitalInfoTab&nbsp;DECLARE&nbsp;@RC&nbsp;int&nbsp;<br/>DECLARE&nbsp;@TableViewQueryName&nbsp;varchar(1024)&nbsp;<br/>DECLARE&nbsp;@SearchKeyword&nbsp;nvarchar(100)&nbsp;<br/>DECLARE&nbsp;@Sel&#101;ctStr&nbsp;varchar(500)&nbsp;<br/>DECLARE&nbsp;@Criteria&nbsp;varchar(8000)&nbsp;<br/>DECLARE&nbsp;@Sort&nbsp;varchar(255)&nbsp;<br/>DECLARE&nbsp;@FristTopNum&nbsp;int&nbsp;<br/>DECLARE&nbsp;@Page&nbsp;bigint&nbsp;<br/>DECLARE&nbsp;@CurrentPageRow&nbsp;bigint&nbsp;<br/>DECLARE&nbsp;@TotalCount&nbsp;bigint&nbsp;<br/>DECLARE&nbsp;@Totaltimes&nbsp;bigint&nbsp;<br/>　&nbsp;<br/>--&nbsp;TODO:&nbsp;在此处设置参数值。&nbsp;<br/>&nbsp;SET&nbsp;@SearchKeyword&nbsp;=&nbsp;&#39;地产项目&#39;&nbsp;<br/>&nbsp;SET&nbsp;@Sel&#101;ctStr&nbsp;=&nbsp;&#39;*&#39;&nbsp;<br/>&nbsp;SET&nbsp;@Sort&nbsp;=&nbsp;&#39;&#39;&nbsp;<br/>&nbsp;SET&nbsp;@Page=&nbsp;1&nbsp;<br/>&nbsp;SET&nbsp;@CurrentPageRow&nbsp;=&nbsp;20&nbsp;<br/>&nbsp;&nbsp;<br/>EXECUTE&nbsp;@RC&nbsp;=&nbsp;[InvestDM].[dbo].USP_CapitalInfo_FullIndex&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;@TableViewQueryName&nbsp;<br/>&nbsp;&nbsp;,@SearchKeyword&nbsp;<br/>&nbsp;&nbsp;,@Sel&#101;ctStr&nbsp;<br/>&nbsp;&nbsp;,@Criteria&nbsp;<br/>&nbsp;&nbsp;,@Sort&nbsp;<br/>&nbsp;&nbsp;,@FristTopNum&nbsp;<br/>&nbsp;&nbsp;,@Page&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;,@CurrentPageRow&nbsp;<br/>&nbsp;&nbsp;,@TotalCount&nbsp;OUTPUT&nbsp;<br/>&nbsp;&nbsp;,@Totaltimes&nbsp;OUTPUT&nbsp;<br/>Sel&#101;ct&nbsp;@Page,@TotalCount,@Totaltimes&nbsp;<br/>2&nbsp;融资&nbsp;ProjectInfoTab&nbsp;DECLARE&nbsp;@SearchKeyword&nbsp;nvarchar(100)&nbsp;&nbsp;--传入的查询关键字&nbsp;<br/>SET&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@SearchKeyword&nbsp;=&nbsp;&#39;深圳&#39;&nbsp;<br/>　&nbsp;<br/>Sel&#101;ct&nbsp;&nbsp;p.title,&nbsp;&nbsp;<br/>p.infoid,&nbsp;<br/>f.[rank]&nbsp;,&nbsp;<br/>keyword,title,provinceName,cityName,CountyName&nbsp;&nbsp;<br/>&nbsp;&nbsp;<br/>FROM&nbsp;&nbsp;<br/>FREETEXTTABLE([ProjectInfoFactTab],&nbsp;(provinceName,cityName,CountyName,keyword,title),&nbsp;@SearchKeyword)&nbsp;AS&nbsp;f&nbsp;<br/>INNER&nbsp;JOIN&nbsp;[ProjectInfoFactTab]&nbsp;AS&nbsp;p&nbsp;<br/>ON&nbsp;f.[key]&nbsp;=&nbsp;p.infoID&nbsp;&nbsp;<br/>o&#114;DER&nbsp;BY&nbsp;RANK&nbsp;DESC&nbsp;<br/>3&nbsp;招商&nbsp;MerchantInfoTab&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DECLARE&nbsp;@SearchKeyword&nbsp;nvarchar(100)&nbsp;&nbsp;--传入的查询关键字&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;SET&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@SearchKeyword&nbsp;=&nbsp;&#39;深圳&#39;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Sel&#101;ct&nbsp;&nbsp;&nbsp;<br/>&nbsp;ROW_NUMBER()&nbsp;OVER&nbsp;(ORDER&nbsp;BY&nbsp;RANK&nbsp;DESC)&nbsp;AS&nbsp;SerialNumber&nbsp;,&nbsp;<br/>&nbsp;F.[rank],&nbsp;&nbsp;<br/>&nbsp;p.*&nbsp;&nbsp;<br/>&nbsp;FROM&nbsp;&nbsp;<br/>&nbsp;FREETEXTTABLE(&nbsp;MerchantInfoFactTab&nbsp;,&nbsp;(ProvinceName,&nbsp;CityName,&nbsp;&nbsp;&nbsp;&nbsp;CountyName,&nbsp;Keyword,&nbsp;&nbsp;<br/>&nbsp;Title&nbsp;,IndustryBName&nbsp;,&nbsp;shortcontent,&nbsp;ZoneAbout&nbsp;,&nbsp;ZoneAboutBrief,&nbsp;MerchantTypeName&nbsp;,MerchantAttributeName,<br/><br/>CooperationDemandName&nbsp;)&nbsp;,<br/><br/>@SearchKeyword)&nbsp;AS&nbsp;f&nbsp;<br/>&nbsp;<br/>&nbsp;INNER&nbsp;JOIN&nbsp;&nbsp;&nbsp;MerchantInfoFactTab&nbsp;&nbsp;&nbsp;AS&nbsp;p&nbsp;&nbsp;&nbsp;<br/>&nbsp;ON&nbsp;f.[key]&nbsp;=&nbsp;p.infoID&nbsp;<br/>4&nbsp;资讯&nbsp;NewsTab&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DECLARE&nbsp;@SearchKeyword&nbsp;nvarchar(100)&nbsp;&nbsp;--传入的查询关键字&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SET&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@SearchKeyword&nbsp;=&nbsp;&#39;深圳&#39;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sel&#101;ct&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;ROW_NUMBER()&nbsp;OVER&nbsp;(ORDER&nbsp;BY&nbsp;RANK&nbsp;DESC)&nbsp;AS&nbsp;SerialNumber&nbsp;,&nbsp;&nbsp;<br/>&nbsp;F.[rank]&nbsp;,&nbsp;<br/>&nbsp;&nbsp;p.*&nbsp;&nbsp;&nbsp;<br/>&nbsp;FROM&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;FREETEXTTABLE(&nbsp;NewsInfoFactTab&nbsp;,&nbsp;(AreaName,&nbsp;&nbsp;&nbsp;Keyword,&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;Title&nbsp;,&nbsp;DisplayTitle,&nbsp;subtitle&nbsp;,Summary&nbsp;,&nbsp;Content&nbsp;&nbsp;,NewsIndustryName&nbsp;,&nbsp;&nbsp;&nbsp;&nbsp;NewsTypeName&nbsp;)&nbsp;,&nbsp;@SearchKeyword&nbsp;)&nbsp;AS&nbsp;f&nbsp;&nbsp;<br/>&nbsp;INNER&nbsp;JOIN&nbsp;&nbsp;&nbsp;NewsInfoFactTab&nbsp;&nbsp;&nbsp;AS&nbsp;p&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;ON&nbsp;f.[key]&nbsp;=&nbsp;p.infoID&nbsp;&nbsp;&nbsp;<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=71</link>
			<title><![CDATA[SQL Server 2005全文检索技术在网站上的应用实录(5)]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[全文检索]]></category>
			<pubDate>Wed,15 Oct 2008 15:19:34 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=71</guid>	
		<description><![CDATA[或者键入如下命令：<br/><br/>Cr&#101;ate&nbsp;FULLTEXT&nbsp;INDEX&nbsp;ON&nbsp;TableName&nbsp;KEY&nbsp;INDEX&nbsp;PK_IndexName&nbsp;ON&nbsp;&nbsp;DB&nbsp;WITH&nbsp;CHANGE_TRACKING&nbsp;AUTOAlt&#101;r&nbsp;FULLTEXT&nbsp;INDEX&nbsp;ON&nbsp;TableName&nbsp;ADD&nbsp;ColumnName&nbsp;&nbsp;&nbsp;<br/><br/><br/>b)选择或创建新的索引目录。<br/><br/>&nbsp;<br/><img src="http://new.51cto.com/files/uploadimg/20080111/17431210.gif" border="0" alt=""/><br/>图7&nbsp;<br/><br/>c)定义填充计划。<br/><br/>&nbsp;<br/><img src="http://new.51cto.com/files/uploadimg/20080111/17431211.gif" border="0" alt=""/><br/>图8&nbsp;<br/><br/>至此，表的全文索引已经建立完毕，表示只要键入SQL&nbsp;指令就可以完成全文检索功能。<br/><br/>第三步，开发存储过程并把结果集分页，以供前台页面调用返回查询的结果。<br/><br/>1)&nbsp;建立找资本全文检索储存过程USP_CaptialInfo_FullIndex。<br/><br/>/*&nbsp;找资本全文索引开发过程&nbsp;&nbsp;*/Cr&#101;ate&nbsp;PROCEDURE&nbsp;USP_CaptialInfo_FullIndex(@TableViewQueryName&nbsp;Varchar(&nbsp;1024&nbsp;),&nbsp;--传入的查询字符窜@SearchKeyword&nbsp;&nbsp;nvarchar(100),&nbsp;--传入的查询关键字@Sel&#101;ctStr&nbsp;&nbsp;Varchar(&nbsp;500&nbsp;),&nbsp;&nbsp;--选择列字符串&nbsp;@Criteria&nbsp;&nbsp;Varchar(&nbsp;8000&nbsp;),&nbsp;--查询条件&nbsp;@Sort&nbsp;&nbsp;&nbsp;Varchar(&nbsp;255&nbsp;),&nbsp;&nbsp;--排序字符串&nbsp;@FristTopNum&nbsp;&nbsp;int,&nbsp;&nbsp;&nbsp;--显示的第一页置顶的数目&nbsp;@Page&nbsp;&nbsp;&nbsp;bigint&nbsp;OUTPUT&nbsp;&nbsp;,&nbsp;&nbsp;--显示的当前页号&nbsp;@CurrentPageRow&nbsp;bigint,&nbsp;&nbsp;&nbsp;--页大小(显示多少行)&nbsp;&nbsp;@TotalCount&nbsp;&nbsp;bigint&nbsp;output,&nbsp;&nbsp;--通过该查询条件，返回的查询记录的总页数&nbsp;@Totaltimes&nbsp;&nbsp;bigint&nbsp;output&nbsp;&nbsp;--所有搜索时间，以秒为单位)as&nbsp;&nbsp;DECLARE&nbsp;@starttime&nbsp;datetime,&nbsp;@endtime&nbsp;datetimeSel&#101;ct&nbsp;&nbsp;@starttime&nbsp;=&nbsp;getdate()IF&nbsp;&nbsp;ISNULL(@SearchKeyword,&#39;&#39;)&nbsp;!=&#39;&#39;&nbsp;o&#114;&nbsp;&nbsp;RTRIM(@SearchKeyword)!=&#39;&#39;BEGINSET&nbsp;@TableViewQueryName&nbsp;=&nbsp;&#39;&nbsp;Sel&#101;ct&nbsp;&nbsp;&#39;+&#39;&nbsp;ROW_NUMBER()&nbsp;OVER&nbsp;(ORDER&nbsp;BY&nbsp;RANK&nbsp;DESC)&nbsp;AS&nbsp;SerialNumber&nbsp;,&#39;+&#39;&nbsp;F.[rank],&nbsp;&#39;+&#39;&nbsp;p.*&#39;&nbsp;+&#39;&nbsp;FROM&nbsp;&#39;+&#39;&nbsp;FREETEXTTABLE(&nbsp;CapitalInfoFactTab&nbsp;,&nbsp;(ProvinceName,&nbsp;CityName,&nbsp;&nbsp;CountyName,&nbsp;Keyword,Title&nbsp;,IndustryBName&nbsp;,&nbsp;shortcontent,&nbsp;ComAbout&nbsp;,&nbsp;ComBreif)&nbsp;,&#39;+&nbsp;&#39;&#39;&#39;&#39;+@SearchKeyword+&nbsp;&#39;&#39;&#39;&#39;+&#39;)&nbsp;AS&nbsp;f&nbsp;&#39;+&#39;&nbsp;INNER&nbsp;JOIN&nbsp;&nbsp;&nbsp;CapitalInfoFactTab&nbsp;&nbsp;&nbsp;AS&nbsp;p&nbsp;&nbsp;&#39;+&#39;&nbsp;ON&nbsp;f.[key]&nbsp;=&nbsp;p.infoID&nbsp;&#39;&nbsp;EXEC&nbsp;[USP_GetFrontDataList_ByFullIndex]&nbsp;@TableViewQueryName,&nbsp;@SearchKeyword,&nbsp;@Sel&#101;ctStr,&nbsp;@Criteria,&nbsp;@Sort,&nbsp;@FristTopNum,@Page&nbsp;OUTPUT&nbsp;,&nbsp;@CurrentPageRow&nbsp;,&nbsp;@TotalCount&nbsp;OUTPUTEND&nbsp;ELSE&nbsp;BEGINEXEC&nbsp;dbo.GetFrontDataList&nbsp;&#39;dbo.ProjectInfoFactTab&#39;,&nbsp;&#39;InfoID&#39;,@Sel&#101;ctStr,@Criteria,@Sort,0,&nbsp;@Page&nbsp;output,&nbsp;@CurrentPageRow,&nbsp;@TotalCount&nbsp;outputENDSel&#101;ct&nbsp;&nbsp;@endtime&nbsp;=&nbsp;getdate()Sel&#101;ct&nbsp;&nbsp;@Totaltimes&nbsp;&nbsp;=&nbsp;DATEdiff(Ms,&nbsp;@starttime&nbsp;,@endtime)RETURN&nbsp;&nbsp;<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=70</link>
			<title><![CDATA[SQL Server 2005全文检索技术在网站上的应用实录(4)]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[全文检索]]></category>
			<pubDate>Wed,15 Oct 2008 15:17:26 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=70</guid>	
		<description><![CDATA[CapitalInfoTab（资本信息明细表）<br/><br/>&nbsp;<br/><img src="http://new.51cto.com/files/uploadimg/20080111/1743125.gif" border="0" alt=""/><br/><br/>ProjectInfoTab（项目信息明细表）<br/><br/>&nbsp;<br/><img src="http://new.51cto.com/files/uploadimg/20080111/1743126.gif" border="0" alt=""/><br/><br/>MerchantInfoTab（政府招商信息明细表）<br/><br/>&nbsp;<br/><img src="http://new.51cto.com/files/uploadimg/20080111/1743127.gif" border="0" alt=""/><br/><br/>四、数据库全文检索实现&nbsp;<br/><br/>至此，我们已经完成了全文检索的设计工作，现在可以来实现它的功能啦！<br/><br/>首先，&nbsp;让我们建立检索表的全文检索，全文检索要求唯一索引，故需要在相关表建立唯一聚集索引。<br/><br/>第二步，使用SQL&nbsp;DDL或者SQL&nbsp;Server&nbsp;Management&nbsp;Studio建立表的全文检索。<br/><br/>1）使数据库支持全文检索。<br/><br/>&nbsp;<br/><img src="http://new.51cto.com/files/uploadimg/20080111/1743128.gif" border="0" alt=""/><br/>图5&nbsp;<br/><br/>或者通过键入命令&nbsp;&nbsp;EXEC&nbsp;SP_FULLTEXT_DATABASE&nbsp;&nbsp;&#39;Enable&#39;&nbsp;&nbsp;命令达到同样效果。<br/><br/>2）定义表的全文检索目录和索引字段。<br/><br/>在表的鼠标右键通过点击“全文检索\定义全文检索”将弹出如下执行向导，本向导执行完毕则该表的全文检索业已完毕。<br/><br/>a)选择要索引的字段<br/><img src="http://new.51cto.com/files/uploadimg/20080111/1743129.gif" border="0" alt=""/>&nbsp;<br/>图6&nbsp;]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=69</link>
			<title><![CDATA[SQL Server 2005全文检索技术在网站上的应用实录(3)]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[全文检索]]></category>
			<pubDate>Wed,15 Oct 2008 14:56:18 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=69</guid>	
		<description><![CDATA[三、网站全文检索设计<br/><br/>1、架构设计&nbsp;<br/><br/>采用OLTP交易数据库和OLAP数据仓库（用于搜索和分析）分离的模式，OLTP作为OLAP的数据源通过SQL&nbsp;Server&nbsp;Integration&nbsp;Services&nbsp;(SSIS)定期导入到OLAP数据仓库环境中，OLAP采用星型结构以便于更好地满足搜索和将来的数据挖掘。&nbsp;OLAP数据仓库的建立目标为了检索和数据挖掘，故其事实表的建立可以反范式原则设计。<br/><br/>&nbsp;<br/>图2&nbsp;<br/><br/>2、原型设计（由于篇幅限制，这里仅给出搜索主页和主要资源查询页面）<br/><br/>&nbsp;<br/>图3&nbsp;<br/><br/>3、数据库设计<br/><br/>&nbsp;<br/>图4&nbsp;<br/><br/>4、数据字典<br/><br/>MainInfoTab(信息主表)]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=68</link>
			<title><![CDATA[SQL Server 2005全文检索技术在网站上的应用实录(2)]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[全文检索]]></category>
			<pubDate>Wed,15 Oct 2008 14:54:55 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=68</guid>	
		<description><![CDATA[SQL&nbsp;Server中的全文搜索的体系结构如下所示。<br/><br/>&nbsp;<br/><img src="http://new.51cto.com/files/uploadimg/20080111/1743120.gif" border="0" alt=""/><br/>图1&nbsp;<br/><br/>让我们逐一介绍两类重要的引擎及其在整个体系结构中的重要作用。<br/><br/>Full-Text&nbsp;Engine&nbsp;for&nbsp;SQL&nbsp;Server&nbsp;(MSFTESQL)<br/><br/>MSFTESQL&nbsp;服务负责进行下列操作：<br/><br/>◆填充全文索引。<br/>◆管理全文索引和全文目录。<br/>◆帮助对&nbsp;SQL&nbsp;Server&nbsp;数据库中的表进行全文搜索。<br/><br/>让我们来看看SQL&nbsp;Server&nbsp;2005全文索引的过程<br/><br/>全文填充（也称为爬网或爬虫）开始后，数据库引擎会将大批数据存入内存并通知&nbsp;Microsoft&nbsp;SQL&nbsp;Server&nbsp;全文引擎&nbsp;(MSFTESQL)&nbsp;服务开始进行索引。MSFTESQL&nbsp;服务将对表的某一列或几列中的字符和格式化二进制数据编制索引。全文引擎将使用协议处理程序组件从内存中取出数据并进行进一步处理，从而生成全文索引。<br/><br/>对存储在&nbsp;varbinary(max)&nbsp;或&nbsp;image&nbsp;列中的数据编制索引时，筛选器（实现了&nbsp;IFilter&nbsp;接口）将基于为该数据指定的文件格式（例如，Microsoft&nbsp;Word）来提取文本。在某些情况下，筛选器组件会要求将&nbsp;varbinary(max)&nbsp;或&nbsp;image&nbsp;数据写到服务帐户&nbsp;Temp&nbsp;目录中，而不是将其存入内存。<br/><br/>在处理过程中，通过断字符将收集到的文本数据分隔成各个单独的标记或关键字。用于标记化的语言将在列级指定，或者也可以通过筛选器组件在&nbsp;varbinary(max)、image&nbsp;或&nbsp;xml&nbsp;数据内标识。<br/><br/>还可能执行其他处理以删除干扰词并在将标记存储到全文索引或索引片断中之前将这些标记规范化。&nbsp;<br/><br/>Microsoft&nbsp;Full-Text&nbsp;Engine&nbsp;for&nbsp;SQL&nbsp;Server&nbsp;的功能<br/><br/>SQL&nbsp;Server&nbsp;2005&nbsp;为全文引擎提供了并行安装方式。这意味着对于每个&nbsp;SQL&nbsp;Server&nbsp;实例，都存在一个专用的&nbsp;MSFTESQL&nbsp;实例，其中包括专用的组件（例如断字符和筛选器）、资源（例如内存）和配置（例如服务级设置，实例级的&nbsp;resource_usage&nbsp;是一个更具体的例子）。单个&nbsp;MSFTESQL&nbsp;服务实例可管理相关联的&nbsp;SQL&nbsp;Server&nbsp;实例的全文索引。利用&nbsp;MSFESQL&nbsp;服务，SQL&nbsp;Server&nbsp;可超出&nbsp;SQL&nbsp;标准对字符串列执行更为复杂的搜索。<br/><br/>MSFTESQL&nbsp;服务担当了以下角色：&nbsp;<br/><br/>索引支持&nbsp;<br/><br/>MSFTESQL&nbsp;实现了为数据库定义的全文目录和索引。<br/><br/>查询支持&nbsp;<br/><br/>MSFTESQL&nbsp;可处理全文搜索查询并确定索引中符合全文选择条件的项。对于符合选择条件的每一项，MSFTESQL&nbsp;将向&nbsp;SQL&nbsp;Server&nbsp;服务返回相应行的标识外加一个排名值，而后者将使用这些信息来构造查询结果集。所支持的查询类型包括：<br/><br/>◆搜索词或短语。<br/>◆搜索位置邻近的词。<br/>◆搜索词的变形。&nbsp;<br/><br/>可管理性支持&nbsp;<br/><br/>全文目录和索引不会存储在&nbsp;SQL&nbsp;Server&nbsp;数据库中。MSFTESQL&nbsp;服务负责管理全文目录。<br/><br/>Microsoft&nbsp;Full-Text&nbsp;Engine&nbsp;Filter&nbsp;Daemon<br/><br/>MSFTEFD&nbsp;由负责从表中访问和筛选数据以及进行断字和词干分析的组件组成。<br/><br/>◆筛选器<br/><br/>筛选器的任务是从文档中提取文本化信息流，并舍弃所有非文本化信息和格式化信息。筛选器将生成文本字符串和属性/值对，并依次将它们传递给索引引擎。&nbsp;<br/><br/>筛选器可从特定的文档格式（如&nbsp;Microsoft&nbsp;Word&nbsp;文档或文本文件）中提取文本化信息。例如，Microsoft&nbsp;提供了&nbsp;Microsoft&nbsp;Office&nbsp;筛选器，此筛选器可以从&nbsp;Word、Microsoft&nbsp;Excel&nbsp;和&nbsp;Microsoft&nbsp;PowerPoint&nbsp;文件中提取文本和属性。其他筛选器用于处理&nbsp;HTML&nbsp;或电子邮件。还可以使用第三方筛选器。&nbsp;<br/><br/>◆SQL&nbsp;协议处理程序<br/><br/>在&nbsp;SQL&nbsp;Server&nbsp;2005&nbsp;中，SQL&nbsp;协议处理程序的工作是从指定数据库中的表内访问数据。<br/><br/>断字符<br/><br/>断字符是用于在查询或抓取的文档中确定字符流中的字符边界位置。有关详细信息。<br/><br/>全文搜索的索引组件负责全文索引的初始填充，以及当全文索引表中的数据被修改时该索引的后续更新。为了提升全文索引过程的效率，Microsoft&nbsp;SQL&nbsp;Server&nbsp;2005&nbsp;改进了全文收集机制的体系结构，从而大大增强了性能。<br/><br/>Microsoft&nbsp;Full-Text&nbsp;Engine&nbsp;for&nbsp;SQL&nbsp;Server&nbsp;(MSFTESQL)&nbsp;服务是一个全文索引和搜索引擎。MSFTESQL&nbsp;引擎基于&nbsp;Microsoft&nbsp;Search&nbsp;(MSSearch)&nbsp;技术，它与&nbsp;Microsoft&nbsp;SQL&nbsp;Server&nbsp;2005&nbsp;Database&nbsp;Engine&nbsp;进行了最为紧密的集成。&nbsp;<br/><br/>全文引擎作为&nbsp;MSFTESQL&nbsp;服务在操作系统上运行。SQL&nbsp;Server&nbsp;与&nbsp;MSFTESQL&nbsp;必须拥有相同的服务帐户。默认情况下将安装&nbsp;MSFTESQL&nbsp;服务，但是只有在使用全文搜索时才会运行此项服务。]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=67</link>
			<title><![CDATA[SQL Server 2005全文检索技术在网站上的应用实录(1)]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[全文检索]]></category>
			<pubDate>Wed,15 Oct 2008 14:53:57 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=67</guid>	
		<description><![CDATA[一、前言<br/><br/>“人类失去搜索，世界将会怎样?”，同样，很难想象一个拥有极大信息量的行业网站门户没有站内全文搜索将会出现怎样的局面，网站全文检索对于挖掘网站信息和整合网站资源的价值是不言而喻的。我们看到，通用型的搜索引擎已经成为了互联网世界的门户，而对于一个信息量极其丰富的网站而言，全网搜索或许会成为本网站的门户，正是所谓的门户之门。<br/><br/>实现网站全文检索有几种常见方案，比如应用数据库全文检索，开源搜索引擎，使用Google&nbsp;API等，&nbsp;本文我们将就如何使用SQL&nbsp;Server&nbsp;2005多快好省地建立网站全文检索展开探讨。<br/><br/>二、全文检索技术说明<br/><br/>1、应用背景&nbsp;<br/><br/>先介绍下Z网站，它是国内投融资行业最大的行业门户，网站拥有海量的融资信息、投资信息、招商信息、创业信息、商机信息、资讯信息、产权交易信息、招标投标信息、中标信息、会展信息等投融资行业的信息资源。网站全文检索实现的首要需求就在于能够让用户输入诸如行业关键字后系统能快速返回给符合用户在全范围内查找条件的记录,&nbsp;从而有效地利用资源，更好地满足用户需求。<br/><br/>2、主要检索技术的区别&nbsp;<br/><br/>有了数据但是没有被使用，那么这些数据不应该被称为信息。它们无非是不断充斥设备和网络的比特而已，但是如何把数据挖掘出来提供给需要的人员，检索技术是其中非常有效的途径之一。<br/><br/>现基于微软平台，针对SQL&nbsp;Server&nbsp;2005提供的全文检索技术进行介绍。与关系数据查询、多维数据库查询和基于XML的XQuery、XPath不同，全文检索技术主要处理对象是基于超大&nbsp;数据量的文本数据和结构化的二进制数据上类似LIKE的模糊查询。主要区别见下表。&nbsp;&nbsp;<br/><br/>表1：全文检索与关系数据库查询、多维数据查询、XML查询的对比<br/><br/>　&nbsp;关系数据库查询&nbsp;多维数据查询&nbsp;XML查询&nbsp;全文检索&nbsp;<br/>检索技术&nbsp;SQL&nbsp;MDX&nbsp;XQuery、XPath&nbsp;SQL&nbsp;(extension)&nbsp;<br/>主要处理对象&nbsp;关系二维数据&nbsp;结构化多维数据&nbsp;层次型数据&nbsp;大容量二维和层次型数据的模糊检索&nbsp;<br/>主要应用领域&nbsp;一般的OLTP类应用&nbsp;一般的OLAP类分析型应用&nbsp;面向Internet、Intranet的松散耦合SOA应用&nbsp;企业/网站内部信息/知识管理类应用&nbsp;<br/>索引&nbsp;大量使用非聚簇索引，一般保存在数据库中。&nbsp;通过层次型、保存中间结果的方式，通过不同的轴向快速定位信息剖面。&nbsp;基于XPath的索引，索引一般保存在数据库中。&nbsp;基于关键字的索引，保存在文件系统中。每个表仅支持一个索引。&nbsp;<br/><br/><br/>3、全文检索技术简要介绍&nbsp;<br/><br/>全文检索主要应用领域如下：&nbsp;<br/><br/>（1）大数据量、超大数据量的结构化平文本数据和模糊匹配查找（Char、Varchar、Nvarchar）。&nbsp;<br/><br/>（2）大数据量、超大数据量的层次型XML数据展开后的查找---含模糊查找（Xml&nbsp;type）。&nbsp;<br/><br/>（3）标准格式的二进制非结构化Word数据的查找（VarBinary[max]、Image）。&nbsp;<br/><br/>与其他检索技术不同的是，全文检索不仅仅提供词汇层次的查询支持，而且可以根据语言环境、不同语言的特点，甚至于用户自定义的配置提供不同语义级的大容量的数据模糊匹配检索支持。为了提供语义层次的检索，SQL&nbsp;Server&nbsp;2005的全文检索明确了如下几个概念：&nbsp;<br/><br/>（1）断字符（Word&nbsp;Breaker）：因为对于不同的语言，哪些符号可以用于词汇的分割是不同的，因此全文检索支持不同语言环境的不同断字符。&nbsp;<br/><br/>（2）标记（Token）：是由断字符标识的词或字符串。由于划分是基于特定语言完成的，因此也可以做到语义层次的支持。&nbsp;<br/><br/>（3）干扰词（Noise&nbsp;Word）：主要是那些经常出现，但是对于检索没有多少帮助的词汇。例如：英语中的“a”、&nbsp;“and”、&nbsp;“is”、&nbsp;“the”，汉语中的“的”、&nbsp;“不”、&nbsp;“以”、&nbsp;“了”等。SQL&nbsp;Server&nbsp;2005中提供配置文件，允许用户自定义自己语言、甚至与本行业、本企业的检索干扰词。&nbsp;<br/><br/>（4）词干分析器（Stemmer）：通过断字符分割后，根据具体的语言和该语言的语法规程生成的特定词汇的变形。&nbsp;这个即是搜索引擎常提到的分词技术。<br/><br/>（5）同义词：即便是同一个语言，在检索的情况下也存在同义词如何处理的问题。如果一个检索系统不能够识别近义词，而只能识别完全匹配的词汇，那对于我们中文这种表义的语言而言会带来很大不便。同样的，一个行业内部也有很多同义词或者是缩略语。例如如下的词语。&nbsp;<br/><br/>广播行业：“ABC”与“英国ABC广播公司”基本上类似，但是也可能和“澳大利亚广播公司”混淆。&nbsp;<br/><br/>政府行文：“ABC”与南美的“阿根廷、巴西、智利三国”是同义词。&nbsp;<br/><br/>不仅如此，由于日常使用的习惯，我们在口语表达和书面语表达上也有区别，这个也需要预先定义。例如，很多口头常用的技术产品“Win2K”、&nbsp;“WinXP”等，一般都很正式的称为“Windows&nbsp;2000”和&nbsp;“Windows&nbsp;XP”，因此SQL&nbsp;Server&nbsp;2005上也提供类似词汇替换的支持，而且这些支持也是与具体语言相关的。<br/><br/>4、SQL&nbsp;Server&nbsp;2005全文检索的技术架构&nbsp;<br/><br/>让我们首先得问自己，什么是全文检索？它是指Microsoft&nbsp;SQL&nbsp;Server&nbsp;2005&nbsp;具备针对&nbsp;Microsoft&nbsp;SQL&nbsp;Server&nbsp;表中基于纯字符的数据进行全文查询的功能。全文查询可以包括词和短语，或者词或短语的多种形式。<br/><br/>当我们明确了全文检索概念之后，我们来看看它的内部结构。<br/><br/>Microsoft&nbsp;SQL&nbsp;Server&nbsp;2005&nbsp;中的全文搜索由&nbsp;Microsoft&nbsp;Full-Text&nbsp;Engine&nbsp;for&nbsp;SQL&nbsp;Server&nbsp;(MSFTESQL)&nbsp;服务提供支持。MSFTESQL&nbsp;服务有两个角色，即索引支持和查询支持。&nbsp;<br/><br/>全文搜索的组件<br/><br/>全文搜索的体系结构由下列组件构成：<br/><br/>◆Microsoft&nbsp;Full-Text&nbsp;Engine&nbsp;for&nbsp;SQL&nbsp;Server&nbsp;(MSFTESQL)<br/>◆Microsoft&nbsp;Full-Text&nbsp;Engine&nbsp;Filter&nbsp;Daemon&nbsp;(MSFTEFD)，它包含下列组件：<br/>（1）筛选器<br/>（2）协议处理程序<br/>（3）断字符]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=66</link>
			<title><![CDATA[Oracle9i的全文检索技术]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Wed,15 Oct 2008 14:52:20 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=66</guid>	
		<description><![CDATA[Oracle9i的全文检索技术<br/><br/>　　4&nbsp;为文本建立索引<br/><br/>　　文本装入文本列后，就可以创建Oracle&nbsp;Text索引。文档以许多不同方案、格式和语言存储。因此，每个&nbsp;o&#114;acle&nbsp;Text&nbsp;索引有许多需要设置的选项，以针对特定情况配置索引。创建索引时，Oracle&nbsp;Text可使用若干个默认值，但在大多数情况下要求用户通过指定首选项来配置索引。<br/><br/>　　每个索引的许多选项组成功能组，称为&#34;类&#34;，每个类集中体现配置的某一方面，可以认为这些类就是与文档数据库有关的一些问题。例如：数据存储、过滤器、词法分析器、相关词表、存储等。<br/><br/>　　每个类具有许多预定义的行为，称之为对象。每个对象是类问题可能具有的答案，并且大多数对象都包含有属性。通过属性来定制对象，从而使对索引的配置更加多变以适应于不同的应用。<br/><br/>　　（1）存储（Storage）类<br/><br/>　　存储类指定构成Oracle&nbsp;Text索引的数据库表和索引的表空间参数和创建参数。它仅有一个基本对象：BASIC_STORAGE，其属性包括：I_Index_Clause、I_Table_Clause、K_Table_Clause、N_Table_Clause、P_Table_Clause、R_Table_Clause。<br/><br/>　　（2）数据存储（Datastore）类<br/><br/>　　数据存储：关于列中存储文本的位置和其他信息。默认情况下，文本直接存储到列中，表中的每行都表示一个单独的完整文档。其他数据存储位置包括存储在单独文件中或以其&nbsp;URL&nbsp;标识的&nbsp;Web&nbsp;页上。七个基本对象包括：Default_Datastore、Detail_Datastore、Direct_Datastore、File_Datastore、Multi_Column_Datastore&nbsp;、URL_Datastore、User_Datastore，。<br/><br/>　　（3）文档段组（Section&nbsp;Group）类<br/><br/>　　文档段组是用于指定一组文档段的对象。必须先定义文档段，然后才能使用索引通过&nbsp;WITHIN&nbsp;运算符在文档段内进行查询。文档段定义为文档段组的一部分。包含七个基本对象：AUTO_SECTION_GROUP、BASIC_SECTION_GROUP、HTML_SECTION_GROUP、NEWS_SECTION_GROUP、NULL_SECTION_GROUP、XML_SECTION_GROUP、PATH_SECTION_GROUP。<br/><br/>　　（4）相关词表（Wordlist）类<br/><br/>　　相关词表标识用于索引的词干和模糊匹配查询选项的语言，只有一个基本对象BASIC_WORDLIST，其属性有：Fuzzy_Match、Fuzzy_Numresults、Fuzzy_Score、Stemmer、Substring_Index、Wildcard_Maxterms、Prefix_Index、Prefix_Max_Length、Prefix_Min_Length。<br/><br/>　　（5）索引集（Index&nbsp;Set）<br/><br/>　　索引集是一个或多个Oracle&nbsp;索引&nbsp;(不是Oracle&nbsp;Text索引)&nbsp;的集合，用于创建&nbsp;CTXCAT类型的Oracle&nbsp;Text索引，只有一个基本对象BASIC_INDEX_SET。<br/><br/>　　（6）词法分析器（Lexer）类<br/><br/>　　词法分析器类标识文本使用的语言，还确定在文本中如何标识标记。默认的词法分析器是英语或其他西欧语言，用空格、标准标点和非字母数字字符标识标记，同时禁用大小写。包含8个基本对象：BASIC_LEXER、CHINESE_LEXER、CHINESE_VGRAM_LEXER、JAPANESE_LEXER、JAPANESE_VGRAM_LEXER、KOREAN_LEXER、KOREAN__MORPH_&nbsp;LEXER、MULTI_LEXER。<br/><br/>　　（7）过滤器（Filter）类<br/><br/>　　过滤器确定如何过滤文本以建立索引。可以使用过滤器对文字处理器处理的文档、格式化的文档、纯文本和&nbsp;HTML&nbsp;文档建立索引，包括5个基本对象：CHARSET_FILTER、INSO_FILTER&nbsp;INSO、NULL_FILTER、PROCEDURE_FILTER、USER_FILTER。<br/><br/>　　（8）非索引字表（Stoplist）类<br/><br/>　　非索引字表类是用以指定一组不编入索引的单词&nbsp;(称为非索引字)。有两个基本对象：BASIC_STOPLIST&nbsp;(一种语言中的所有非索引字)&nbsp;、&nbsp;MULTI_STOPLIST&nbsp;(包含多种语言中的非索引字的多语言非索引字表)。<br/><br/>　　5&nbsp;查询<br/><br/>　　建立了索引，就可以使用&nbsp;Sel&#101;ct&nbsp;语句中的&nbsp;CONTAINS&nbsp;运算符发出文本查询。使用&nbsp;CONTAINS&nbsp;可以进行两种查询：单词查询和ABOUT查询。<br/><br/>　　5．1&nbsp;词查询示例<br/><br/>　　词查询是对输入到&nbsp;CONTAINS&nbsp;运算符中单引号间的精确单词或短语的查询。在以下示例中，我们将查找文本列中包含&nbsp;o&#114;acle&nbsp;一词的所有文档。每行的分值由使用标签&nbsp;1&nbsp;的&nbsp;SCORE&nbsp;运算符选定：<br/><br/>Sel&#101;ct&nbsp;SCORE(1)&nbsp;title&nbsp;from&nbsp;news&nbsp;Wh&#101;re&nbsp;CONTAINS(text,&nbsp;’oracle’,&nbsp;1)&nbsp;&gt;0;<br/><br/>　　在查询表达式中，可以使用&nbsp;AND&nbsp;和&nbsp;o&#114;&nbsp;等文本运算符来获取不同结果。还可以将结构性谓词添加到&nbsp;Wh&#101;re&nbsp;子句中。可以使用&nbsp;count(*)、CTX_QUERY.COUNT_HITS&nbsp;或&nbsp;CTX_QUERY.EXPLAIN&nbsp;来计算查询的命中&nbsp;(匹配)&nbsp;数目。<br/><br/>　　5．2&nbsp;ABOUT查询示例<br/><br/>　　在所有语言中，ABOUT查询增加了某查询所返回的相关文档的数目。在英语中，ABOUT&nbsp;查询可以使用索引的主题词组件，该组件在默认情况下创建。这样，运算符将根据查询的概念返回文档，而不是仅依据所指定的精确单词或短语。例如，以下查询将查找文本列中关于主题&nbsp;politics&nbsp;的所有文档，而不是仅包含&nbsp;politics&nbsp;一词的文档：<br/><br/>Sel&#101;ct&nbsp;SCORE(1)&nbsp;title&nbsp;from&nbsp;news&nbsp;Wh&#101;re&nbsp;CONTAINS(text,&nbsp;’about(politics)’,&nbsp;1)&nbsp;&gt;0;]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=65</link>
			<title><![CDATA[全文检索技术、搜索引擎]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[全文检索]]></category>
			<pubDate>Wed,15 Oct 2008 14:51:09 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=65</guid>	
		<description><![CDATA[Apache&nbsp;Lucene是一个开放源程序的搜寻器引擎，利用它可以轻易地为Java软件加入全文搜寻功能。Lucene的最主要工作是替文件的每一个字作索引，索引让搜寻的效率比传统的逐字比较大大提高，Lucen提供一组解读，过滤，分析文件，编排和使用索引的API，它的强大之处除了高效和简单外，是最重要的是使使用者可以随时应自已需要自订其功能。<br/><br/>Lucene是apache软件基金会[4]&nbsp;jakarta项目组的一个子项目，是一个开放源代码[5]的全文检索引擎工具包，即它不是一个完整的全文检索引擎，而是一个全文检索引擎的架构，提供了完整的查询引擎和索引引擎，部分文本分析引擎（英文与德文两种西方语言）。Lucene的目的是为软件开发人员提供一个简单易用的工具包，以方便的在目标系统中实现全文检索的功能，或者是以此为基础建立起完整的全文检索引擎。<br/>Lucene的原作者是Doug&nbsp;Cutting，他是一位资深全文索引/检索专家，曾经是V-Twin搜索引擎[6]的主要开发者，后在Excite[7]担任高级系统架构设计师，目前从事于一些Internet底层架构的研究。早先发布在作者自己的<a href="http://www.lucene.com/" target="_blank">http://www.lucene.com/</a>，后来发布在SourceForge[8]，2001年年底成为apache软件基金会jakarta的一个子项目：<a href="http://jakarta.apache.org/lucene/" target="_blank">http://jakarta.apache.org/lucene/</a>。<br/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;Lucene的应用、特点及优势<br/><br/><br/>作为一个开放源代码项目，Lucene从问世之后，引发了开放源代码社群的巨大反响，程序员们不仅使用它构建具体的全文检索应用，而且将之集成到各种系统软件中去，以及构建Web应用，甚至某些商业软件也采用了Lucene作为其内部全文检索子系统的核心。apache软件基金会的网站使用了Lucene作为全文检索的引擎，IBM的开源软件eclipse[9]的2.1版本中也采用了Lucene作为帮助子系统的全文索引引擎，相应的IBM的商业软件Web&nbsp;Sphere[10]中也采用了Lucene。Lucene以其开放源代码的特性、优异的索引结构、良好的系统架构获得了越来越多的应用。<br/><br/><br/>Lucene作为一个全文检索引擎，其具有如下突出的优点：<br/><br/><br/>（1）索引文件格式独立于应用平台。Lucene定义了一套以8位字节为基础的索引文件格式，使得兼容系统或者不同平台的应用能够共享建立的索引文件。<br/><br/><br/>（2）在传统全文检索引擎的倒排索引的基础上，实现了分块索引，能够针对新的文件建立小文件索引，提升索引速度。然后通过与原有索引的合并，达到优化的目的。<br/><br/><br/>（3）优秀的面向对象的系统架构，使得对于Lucene扩展的学习难度降低，方便扩充新功能。<br/><br/><br/>（4）设计了独立于语言和文件格式的文本分析接口，索引器通过接受Token流完成索引文件的创立，用户扩展新的语言和文件格式，只需要实现文本分析的接口。<br/><br/><br/>（5）已经默认实现了一套强大的查询引擎，用户无需自己编写代码即使系统可获得强大的查询能力，Lucene的查询实现中默认实现了布尔操作、模糊查询（Fuzzy&nbsp;Search[11]）、分组查询等等。<br/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;面对已经存在的商业全文检索引擎，Lucene也具有相当的优势。首先，它的开发源代码发行方式（遵守Apache&nbsp;SoftwareLicense[12]），在此基础上程序员不仅仅可以充分的利用Lucene所提供的强大功能，而且可以深入细致的学习到全文检索引擎制作技术和面相对象编程的实践，进而在此基础上根据应用的实际情况编写出更好的更适合当前应用的全文检索引擎。在这一点上，商业软件的灵活性远远不及Lucene。其次，Lucene秉承了开放源代码一贯的架构优良的优势，设计了一个合理而极具扩充能力的面向对象架构，程序员可以在Lucene的基础上扩充各种功能，比如扩充中文处理能力，从文本扩充到HTML、PDF[13]等等文本格式的处理，编写这些扩展的功能不仅仅不复杂，而且由于Lucene恰当合理的对系统设备做了程序上的抽象，扩展的功能也能轻易的达到跨平台的能力。最后，转移到apache软件基金会后，借助于apache软件基金会的网络平台，程序员可以方便的和开发者、其它程序员交流，促成资源的共享，甚至直接获得已经编写完备的扩充功能。最后，虽然Lucene使用Java语言写成，但是开放源代码社区的程序员正在不懈的将之使用各种传统语言实现（例如.net&nbsp;framework[14]），在遵守Lucene索引文件格式的基础上，使得Lucene能够运行在各种各样的平台上，系统管理员可以根据当前的平台适合的语言来合理的选择。]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=64</link>
			<title><![CDATA[完美解决Discuz 论坛大数据量的全文检索问题]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Wed,15 Oct 2008 14:45:46 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=64</guid>	
		<description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;使用Discuz的朋友一定有这样的经历,&nbsp;那就是在数据量达到一定规模时(100W以上),检索速度往往力不从心；mysqld-nt.exe这个进程占用CPU资源很大&nbsp;,经常在50以上；多人同时请求,会导致系统的瓶颈,甚至宕机。使用本身PHP&nbsp;LIKE&nbsp;MYSQL的效率实在不敢恭维；然而Discuz本身就加入了QIHOO搜索来解决这些问题，大多数用户对搜索的结果也不是很满意，靠QIHOO收录大约也得需要2-6小时，关键是自己辛苦建站流量却成QIHOO的。很多朋友希望有一个完美的解决方案，但是事实的真相是残酷的，这个完美的方案可能让你绞尽脑汁还是两手空空。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;今天我给大家带来的引擎构建于J2EE平台，继承了它跨平台和安全的特性，内置的中文语言处理引擎支持从抓取的数据中自动提取关键字与自动生成摘要、采用增量采集方式，对于已经采集过的数据不会重复抓取，通过后台的配置，可以自动对于已经变动过的数据内容进行再次抓取，这并不需要太多的人工干预。然后建立系统独立的索引供用户检索；下面是我们单台服务器检索性能.<br/><br/>原文&nbsp;地址：<a href="http://hi.baidu.com/xd%5Ftech/blog/item/e614a2f8aa43ad0ad9f9fd02.html" target="_blank">http://hi.baidu.com/xd%5Ftech/blog/item/e614a2f8aa43ad0ad9f9fd02.html</a>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=63</link>
			<title><![CDATA[Lucene：基于Java的全文检索引擎简介]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[全文检索]]></category>
			<pubDate>Wed,15 Oct 2008 14:36:42 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=63</guid>	
		<description><![CDATA[Lucene是一个基于Java的全文索引工具包。<br/><br/>Lucene<br/><br/>Lucene不是一个完整的全文索引应用，而是是一个用Java写的全文索引引擎工具包，它可以方便的嵌入到各种应用中实现针对应用的全文索引/检索功能。<br/><br/>Lucene的作者：Lucene的贡献者Doug&nbsp;Cutting是一位资深全文索引/检索专家，曾经是V-Twin搜索引擎(Apple的Copland操作系统的成就之一)的主要开发者，后在Excite担任高级系统架构设计师，目前从事于一些INTERNET底层架构的研究。他贡献出的Lucene的目标是为各种中小型应用程序加入全文检索功能。<br/><br/>Lucene的发展历程：早先发布在作者自己的www.lucene.com，后来发布在SourceForge，2001年年底成为APACHE基金会jakarta的一个子项目：<a href="http://jakarta.apache.org/lucene/" target="_blank"><a href="http://jakarta.apache.org/lucene/" target="_blank">http://jakarta.apache.org/lucene/</a></a><br/><br/>已经有很多Java项目都使用了Lucene作为其后台的全文索引引擎，比较著名的有：<br/><br/>Jive：WEB论坛系统；&nbsp;<br/>Eyebrows：邮件列表HTML归档/浏览/查询系统，本文的主要参考文档“TheLucene&nbsp;search&nbsp;engine:&nbsp;Powerful,&nbsp;flexible,&nbsp;and&nbsp;free”作者就是EyeBrows系统的主要开发者之一，而EyeBrows已经成为目前APACHE项目的主要邮件列表归档系统。&nbsp;<br/>Cocoon:基于XML的web发布框架，全文检索部分使用了Lucene&nbsp;<br/>Eclipse:基于Java的开放开发平台，帮助部分的全文索引使用了Lucene<br/><br/>对于中文用户来说，最关心的问题是其是否支持中文的全文检索。但通过后面对于Lucene的结构的介绍，你会了解到由于Lucene良好架构设计，对中文的支持只需对其语言词法分析接口进行扩展就能实现对中文检索的支持。<br/><br/>全文检索的实现机制<br/><br/>Lucene的API接口设计的比较通用，输入输出结构都很像数据库的表==&gt;记录==&gt;字段，所以很多传统的应用的文件、数据库等都可以比较方便的映射到Lucene的存储结构/接口中。总体上看：可以先把Lucene当成一个支持全文索引的数据库系统。<br/><br/>比较一下Lucene和数据库：<br/><br/>Lucene&nbsp;数据库&nbsp;<br/>索引数据源：doc(field1,field2...)&nbsp;doc(field1,field2...)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\&nbsp;&nbsp;indexer&nbsp;/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_____________&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;Lucene&nbsp;Index|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--------------&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;searcher&nbsp;\&nbsp;结果输出：Hits(doc(field1,field2)&nbsp;doc(field1...))<br/>&nbsp;索引数据源：record(field1,field2...)&nbsp;record(field1..)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\&nbsp;&nbsp;SQL:&nbsp;ins&#101;rt/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_____________&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;DB&nbsp;&nbsp;Index&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-------------&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;SQL:&nbsp;sel&#101;ct&nbsp;\结果输出：results(record(field1,field2..)&nbsp;record(field1...))<br/>&nbsp;<br/>Document：一个需要进行索引的“单元”<br/>一个Document由多个字段组成&nbsp;Record：记录，包含多个字段&nbsp;<br/>Field：字段&nbsp;Field：字段&nbsp;<br/>Hits：查询结果集，由匹配的Document组成&nbsp;RecordSet：查询结果集，由多个Record组成&nbsp;<br/><br/>全文检索&nbsp;≠&nbsp;like&nbsp;&#34;%keyword%&#34;<br/><br/>通常比较厚的书籍后面常常附关键词索引表（比如：北京：12,&nbsp;34页，上海：3,77页……），它能够帮助读者比较快地找到相关内容的页码。而数据库索引能够大大提高查询的速度原理也是一样，想像一下通过书后面的索引查找的速度要比一页一页地翻内容高多少倍……而索引之所以效率高，另外一个原因是它是排好序的。对于检索系统来说核心是一个排序问题。<br/><br/>由于数据库索引不是为全文索引设计的，因此，使用like&nbsp;&#34;%keyword%&#34;时，数据库索引是不起作用的，在使用like查询时，搜索过程又变成类似于一页页翻书的遍历过程了，所以对于含有模糊查询的数据库服务来说，LIKE对性能的危害是极大的。如果是需要对多个关键词进行模糊匹配：like&#34;%keyword1%&#34;&nbsp;and&nbsp;like&nbsp;&#34;%keyword2%&#34;&nbsp;...其效率也就可想而知了。<br/><br/>所以建立一个高效检索系统的关键是建立一个类似于科技索引一样的反向索引机制，将数据源（比如多篇文章）排序顺序存储的同时，有另外一个排好序的关键词列表，用于存储关键词==&gt;文章映射关系，利用这样的映射关系索引：[关键词==&gt;出现关键词的文章编号，出现次数（甚至包括位置：起始偏移量，结束偏移量），出现频率]，检索过程就是把模糊查询变成多个可以利用索引的精确查询的逻辑组合的过程。从而大大提高了多关键词查询的效率，所以，全文检索问题归结到最后是一个排序问题。<br/><br/>由此可以看出模糊查询相对数据库的精确查询是一个非常不确定的问题，这也是大部分数据库对全文检索支持有限的原因。Lucene最核心的特征是通过特殊的索引结构实现了传统数据库不擅长的全文索引机制，并提供了扩展接口，以方便针对不同应用的定制。<br/><br/>可以通过一下表格对比一下数据库的模糊查询：<br/><br/>　&nbsp;Lucene全文索引引擎&nbsp;数据库&nbsp;<br/>索引&nbsp;将数据源中的数据都通过全文索引一一建立反向索引&nbsp;对于LIKE查询来说，数据传统的索引是根本用不上的。数据需要逐个便利记录进行GREP式的模糊匹配，比有索引的搜索速度要有多个数量级的下降。&nbsp;<br/>匹配效果&nbsp;通过词元(term)进行匹配，通过语言分析接口的实现，可以实现对中文等非英语的支持。&nbsp;使用：like&nbsp;&#34;%net%&#34;&nbsp;会把netherlands也匹配出来，<br/>多个关键词的模糊匹配：使用like&nbsp;&#34;%com%net%&#34;：就不能匹配词序颠倒的xxx.net..xxx.com&nbsp;<br/>匹配度&nbsp;有匹配度算法，将匹配程度（相似度）比较高的结果排在前面。&nbsp;没有匹配程度的控制：比如有记录中net出现5词和出现1次的，结果是一样的。&nbsp;<br/>结果输出&nbsp;通过特别的算法，将最匹配度最高的头100条结果输出，结果集是缓冲式的小批量读取的。&nbsp;返回所有的结果集，在匹配条目非常多的时候（比如上万条）需要大量的内存存放这些临时结果集。&nbsp;<br/>可定制性&nbsp;通过不同的语言分析接口实现，可以方便的定制出符合应用需要的索引规则（包括对中文的支持）&nbsp;没有接口或接口复杂，无法定制&nbsp;<br/>结论&nbsp;高负载的模糊查询应用，需要负责的模糊查询的规则，索引的资料量比较大&nbsp;使用率低，模糊匹配规则简单或者需要模糊查询的资料量少&nbsp;<br/><br/>全文检索和数据库应用最大的不同在于：让最相关的头100条结果满足98%以上用户的需求<br/><br/>Lucene的创新之处：<br/><br/>大部分的搜索（数据库）引擎都是用B树结构来维护索引，索引的更新会导致大量的IO操作，Lucene在实现中，对此稍微有所改进：不是维护一个索引文件，而是在扩展索引的时候不断创建新的索引文件，然后定期的把这些新的小索引文件合并到原先的大索引中（针对不同的更新策略，批次的大小可以调整），这样在不影响检索的效率的前提下，提高了索引的效率。<br/><br/>Lucene和其他一些全文检索系统/应用的比较：<br/><br/>　&nbsp;Lucene&nbsp;其他开源全文检索系统&nbsp;<br/>增量索引和批量索引&nbsp;可以进行增量的索引(Append)，可以对于大量数据进行批量索引，并且接口设计用于优化批量索引和小批量的增量索引。&nbsp;很多系统只支持批量的索引，有时数据源有一点增加也需要重建索引。&nbsp;<br/>数据源&nbsp;Lucene没有定义具体的数据源，而是一个文档的结构，因此可以非常灵活的适应各种应用（只要前端有合适的转换器把数据源转换成相应结构），&nbsp;很多系统只针对网页，缺乏其他格式文档的灵活性。&nbsp;<br/>索引内容抓取&nbsp;Lucene的文档是由多个字段组成的，甚至可以控制那些字段需要进行索引，那些字段不需要索引，近一步索引的字段也分为需要分词和不需要分词的类型：<br/>&nbsp;&nbsp;&nbsp;需要进行分词的索引，比如：标题，文章内容字段<br/>&nbsp;&nbsp;&nbsp;不需要进行分词的索引，比如：作者/日期字段&nbsp;缺乏通用性，往往将文档整个索引了&nbsp;<br/>语言分析&nbsp;通过语言分析器的不同扩展实现：<br/>可以过滤掉不需要的词：an&nbsp;the&nbsp;of&nbsp;等，<br/>西文语法分析：将jumps&nbsp;jumped&nbsp;jumper都归结成jump进行索引/检索<br/>非英文支持：对亚洲语言，阿拉伯语言的索引支持&nbsp;缺乏通用接口实现&nbsp;<br/>查询分析&nbsp;通过查询分析接口的实现，可以定制自己的查询语法规则：<br/>比如：&nbsp;多个关键词之间的&nbsp;+&nbsp;-&nbsp;and&nbsp;o&#114;关系等&nbsp;　&nbsp;<br/>并发访问&nbsp;能够支持多用户的使用&nbsp;　&nbsp;<br/><br/>　<br/><br/>关于亚洲语言的的切分词问题(Word&nbsp;Segment)<br/><br/>对于中文来说，全文索引首先还要解决一个语言分析的问题，对于英文来说，语句中单词之间是天然通过空格分开的，但亚洲语言的中日韩文语句中的字是一个字挨一个，所有，首先要把语句中按“词”进行索引的话，这个词如何切分出来就是一个很大的问题。<br/><br/>首先，肯定不能用单个字符作(si-gram)为索引单元，否则查“上海”时，不能让含有“海上”也匹配。<br/><br/>但一句话：“北京天安门”，计算机如何按照中文的语言习惯进行切分呢？<br/>“北京&nbsp;天安门”&nbsp;还是“北&nbsp;京&nbsp;天安门”？让计算机能够按照语言习惯进行切分，往往需要机器有一个比较丰富的词库才能够比较准确的识别出语句中的单词。<br/><br/>另外一个解决的办法是采用自动切分算法：将单词按照2元语法(bigram)方式切分出来，比如：<br/>&#34;北京天安门&#34;&nbsp;==&gt;&nbsp;&#34;北京&nbsp;京天&nbsp;天安&nbsp;安门&#34;。<br/><br/>这样，在查询的时候，无论是查询&#34;北京&#34;&nbsp;还是查询&#34;天安门&#34;，将查询词组按同样的规则进行切分：&#34;北京&#34;，&#34;天安安门&#34;，多个关键词之间按与&#34;and&#34;的关系组合，同样能够正确地映射到相应的索引中。这种方式对于其他亚洲语言：韩文，日文都是通用的。<br/><br/>基于自动切分的最大优点是没有词表维护成本，实现简单，缺点是索引效率低，但对于中小型应用来说，基于2元语法的切分还是够用的。基于2元切分后的索引一般大小和源文件差不多，而对于英文，索引文件一般只有原文件的30%-40%不同，<br/><br/>&nbsp;自动切分&nbsp;词表切分&nbsp;<br/>实现&nbsp;实现非常简单&nbsp;实现复杂&nbsp;<br/>查询&nbsp;增加了查询分析的复杂程度，&nbsp;适于实现比较复杂的查询语法规则&nbsp;<br/>存储效率&nbsp;索引冗余大，索引几乎和原文一样大&nbsp;索引效率高，为原文大小的30％左右&nbsp;<br/>维护成本&nbsp;无词表维护成本&nbsp;词表维护成本非常高：中日韩等语言需要分别维护。<br/>还需要包括词频统计等内容&nbsp;<br/>适用领域&nbsp;嵌入式系统：运行环境资源有限<br/>分布式系统：无词表同步问题<br/>多语言环境：无词表维护成本&nbsp;对查询和存储效率要求高的专业搜索引擎&nbsp;<br/><br/>目前比较大的搜索引擎的语言分析算法一般是基于以上2个机制的结合。关于中文的语言分析算法，大家可以在Google查关键词&#34;wordsegment&nbsp;search&#34;能找到更多相关的资料。<br/><br/>安装和使用<br/><br/>下载：<a href="http://jakarta.apache.org/lucene/" target="_blank"><a href="http://jakarta.apache.org/lucene/" target="_blank">http://jakarta.apache.org/lucene/</a></a><br/><br/>注意：Lucene中的一些比较复杂的词法分析是用JavaCC生成的（JavaCC：JavaCompilerCompiler，纯Java的词法分析生成器），所以如果从源代码编译或需要修改其中的QueryParser、定制自己的词法分析器，还需要从<a href="https://javacc.dev.java.net/" target="_blank">https://javacc.dev.java.net/</a>下载javacc。<br/><br/>lucene的组成结构：对于外部应用来说索引模块(index)和检索模块(search)是主要的外部应用入口<br/><br/>o&#114;g.apache.Lucene.search/&nbsp;搜索入口&nbsp;<br/>o&#114;g.apache.Lucene.index/&nbsp;索引入口&nbsp;<br/>o&#114;g.apache.Lucene.analysis/&nbsp;语言分析器&nbsp;<br/>o&#114;g.apache.Lucene.queryParser/&nbsp;查询分析器&nbsp;<br/>o&#114;g.apache.Lucene.document/&nbsp;存储结构&nbsp;<br/>o&#114;g.apache.Lucene.store/&nbsp;底层IO/存储结构&nbsp;<br/>o&#114;g.apache.Lucene.util/&nbsp;一些公用的数据结构&nbsp;<br/><br/>简单的例子演示一下Lucene的使用方法：<br/><br/>索引过程：从命令行读取文件名（多个），将文件分路径(path字段)和内容(body字段)2个字段进行存储，并对内容进行全文索引：索引的单位是Document对象，每个Document对象包含多个字段Field对象，针对不同的字段属性和数据输出的需求，对字段还可以选择不同的索引/存储字段规则，列表如下：&nbsp;方法&nbsp;切词&nbsp;索引&nbsp;存储&nbsp;用途&nbsp;<br/>Field.Text(String&nbsp;name,&nbsp;String&nbsp;value)&nbsp;Yes&nbsp;Yes&nbsp;Yes&nbsp;切分词索引并存储，比如：标题，内容字段&nbsp;<br/>Field.Text(String&nbsp;name,&nbsp;Reader&nbsp;value)&nbsp;Yes&nbsp;Yes&nbsp;No&nbsp;切分词索引不存储，比如：META信息，<br/>不用于返回显示，但需要进行检索内容&nbsp;<br/>Field.Keyword(String&nbsp;name,&nbsp;String&nbsp;value)&nbsp;No&nbsp;Yes&nbsp;Yes&nbsp;不切分索引并存储，比如：日期字段&nbsp;<br/>Field.UnIndexed(String&nbsp;name,&nbsp;String&nbsp;value)&nbsp;No&nbsp;No&nbsp;Yes&nbsp;不索引，只存储，比如：文件路径&nbsp;<br/>Field.UnStored(String&nbsp;name,&nbsp;String&nbsp;value)&nbsp;Yes&nbsp;Yes&nbsp;No&nbsp;只全文索引，不存储&nbsp;<br/><br/>public&nbsp;class&nbsp;IndexFiles&nbsp;{&nbsp;&nbsp;&nbsp;//使用方法：:&nbsp;IndexFiles&nbsp;[索引输出目录]&nbsp;[索引的文件列表]&nbsp;...&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args)&nbsp;throws&nbsp;Exception&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;indexPath&nbsp;=&nbsp;args[0];&nbsp;&nbsp;&nbsp;&nbsp;IndexWriter&nbsp;writer;&nbsp;&nbsp;&nbsp;&nbsp;//用指定的语言分析器构造一个新的写索引器（第3个参数表示是否为追加索引）&nbsp;&nbsp;&nbsp;&nbsp;writer&nbsp;=&nbsp;new&nbsp;IndexWriter(indexPath,&nbsp;new&nbsp;SimpleAnalyzer(),&nbsp;false);&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i=1;&nbsp;i&lt;args.length;&nbsp;i++)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&#34;Indexing&nbsp;file&nbsp;&#34;&nbsp;+&nbsp;args[i]);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InputStream&nbsp;is&nbsp;=&nbsp;new&nbsp;FileInputStream(args[i]);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//构造包含2个字段Field的Document对象&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//一个是路径path字段，不索引，只存储&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//一个是内容body字段，进行全文索引，并存储&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Document&nbsp;doc&nbsp;=&nbsp;new&nbsp;Document();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doc.add(Field.UnIndexed(&#34;path&#34;,&nbsp;args[i]));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doc.add(Field.Text(&#34;body&#34;,&nbsp;(Reader)&nbsp;new&nbsp;InputStreamReader(is)));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//将文档写入索引&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writer.addDocument(doc);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;is.close();&nbsp;&nbsp;&nbsp;&nbsp;};&nbsp;&nbsp;&nbsp;&nbsp;//关闭写索引器&nbsp;&nbsp;&nbsp;&nbsp;writer.close();&nbsp;&nbsp;}}　<br/>索引过程中可以看到：<br/><br/>语言分析器提供了抽象的接口，因此语言分析(Analyser)是可以定制的，虽然lucene缺省提供了2个比较通用的分析器SimpleAnalyser和StandardAnalyser，这2个分析器缺省都不支持中文，所以要加入对中文语言的切分规则，需要修改这2个分析器。&nbsp;<br/>Lucene并没有规定数据源的格式，而只提供了一个通用的结构（Document对象）来接受索引的输入，因此输入的数据源可以是：数据库，WORD文档，PDF文档，HTML文档……只要能够设计相应的解析转换器将数据源构造成成Docuement对象即可进行索引。&nbsp;<br/>对于大批量的数据索引，还可以通过调整IndexerWrite的文件合并频率属性（mergeFactor）来提高批量索引的效率。&nbsp;<br/>检索过程和结果显示：<br/><br/>搜索结果返回的是Hits对象，可以通过它再访问Document==&gt;Field中的内容。<br/><br/>假设根据body字段进行全文检索，可以将查询结果的path字段和相应查询的匹配度(score)打印出来，<br/><br/>public&nbsp;class&nbsp;Search&nbsp;{&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args)&nbsp;throws&nbsp;Exception&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;indexPath&nbsp;=&nbsp;args[0],&nbsp;queryString&nbsp;=&nbsp;args[1];&nbsp;&nbsp;&nbsp;&nbsp;//指向索引目录的搜索器&nbsp;&nbsp;&nbsp;&nbsp;Searcher&nbsp;searcher&nbsp;=&nbsp;new&nbsp;IndexSearcher(indexPath);&nbsp;&nbsp;&nbsp;&nbsp;//查询解析器：使用和索引同样的语言分析器&nbsp;&nbsp;&nbsp;&nbsp;Query&nbsp;query&nbsp;=&nbsp;QueryParser.parse(queryString,&nbsp;&#34;body&#34;,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;SimpleAnalyzer());&nbsp;&nbsp;&nbsp;&nbsp;//搜索结果使用Hits存储&nbsp;&nbsp;&nbsp;&nbsp;Hits&nbsp;hits&nbsp;=&nbsp;searcher.search(query);&nbsp;&nbsp;&nbsp;&nbsp;//通过hits可以访问到相应字段的数据和查询的匹配度&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i=0;&nbsp;i&lt;hits.length();&nbsp;i++)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(hits.doc(i).get(&#34;path&#34;)&nbsp;+&nbsp;&#34;;&nbsp;Score:&nbsp;&#34;&nbsp;+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hits.score(i));&nbsp;&nbsp;&nbsp;&nbsp;};&nbsp;&nbsp;}}<br/>在整个检索过程中，语言分析器，查询分析器，甚至搜索器（Searcher）都是提供了抽象的接口，可以根据需要进行定制。&nbsp;<br/>Hacking&nbsp;Lucene<br/><br/>简化的查询分析器<br/><br/>个人感觉lucene成为JAKARTA项目后，画在了太多的时间用于调试日趋复杂QueryParser，而其中大部分是大多数用户并不很熟悉的，目前LUCENE支持的语法：<br/><br/>Query&nbsp;::=&nbsp;(&nbsp;Clause&nbsp;)*<br/>Clause&nbsp;::=&nbsp;[&#34;+&#34;,&nbsp;&#34;-&#34;]&nbsp;[&lt;TERM&gt;&nbsp;&#34;:&#34;]&nbsp;(&nbsp;&lt;TERM&gt;&nbsp;|&nbsp;&#34;(&#34;&nbsp;Query&nbsp;&#34;)&#34;)<br/><br/>中间的逻辑包括：and&nbsp;o&#114;&nbsp;+&nbsp;-&nbsp;&amp;&amp;||等符号，而且还有&#34;短语查询&#34;和针对西文的前缀/模糊查询等，个人感觉对于一般应用来说，这些功能有一些华而不实，其实能够实现目前类似于Google的查询语句分析功能其实对于大多数用户来说已经够了。所以，Lucene早期版本的QueryParser仍是比较好的选择。<br/><br/>添加修改删除指定记录（Document）<br/><br/>Lucene提供了索引的扩展机制，因此索引的动态扩展应该是没有问题的，而指定记录的修改也似乎只能通过记录的删除，然后重新加入实现。如何删除指定的记录呢？删除的方法也很简单，只是需要在索引时根据数据源中的记录ID专门另建索引，然后利用IndexReader.del&#101;te(Termterm)方法通过这个记录ID删除相应的Document。<br/><br/>根据某个字段值的排序功能<br/><br/>lucene缺省是按照自己的相关度算法（score）进行结果排序的，但能够根据其他字段进行结果排序是一个在LUCENE的开发邮件列表中经常提到的问题，很多原先基于数据库应用都需要除了基于匹配度（score）以外的排序功能。而从全文检索的原理我们可以了解到，任何不基于索引的搜索过程效率都会导致效率非常的低，如果基于其他字段的排序需要在搜索过程中访问存储字段，速度回大大降低，因此非常是不可取的。<br/><br/>但这里也有一个折中的解决方法：在搜索过程中能够影响排序结果的只有索引中已经存储的docID和score这2个参数，所以，基于score以外的排序，其实可以通过将数据源预先排好序，然后根据docID进行排序来实现。这样就避免了在LUCENE搜索结果外对结果再次进行排序和在搜索过程中访问不在索引中的某个字段值。<br/><br/>这里需要修改的是IndexSearcher中的HitCollector过程：<br/><br/>...　scorer.score(new&nbsp;HitCollector()&nbsp;{&nbsp;private&nbsp;float&nbsp;minScore&nbsp;=&nbsp;0.0f;&nbsp;public&nbsp;final&nbsp;void&nbsp;collect(int&nbsp;doc,&nbsp;float&nbsp;score)&nbsp;{&nbsp;&nbsp;&nbsp;if&nbsp;(score&nbsp;&gt;&nbsp;0.0f&nbsp;&amp;&amp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;ignore&nbsp;zeroed&nbsp;buckets&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(bits==null&nbsp;||&nbsp;bits.get(doc)))&nbsp;{&nbsp;&nbsp;&nbsp;//&nbsp;skip&nbsp;docs&nbsp;not&nbsp;in&nbsp;bits&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;totalHits[0]++;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(score&nbsp;&gt;=&nbsp;minScore)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;原先：Lucene将docID和相应的匹配度score例入结果命中列表中：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;hq.put(new&nbsp;ScoreDoc(doc,&nbsp;score));&nbsp;&nbsp;&nbsp;//&nbsp;up&#100;ate&nbsp;hit&nbsp;queue&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;如果用doc&nbsp;或&nbsp;1/doc&nbsp;代替&nbsp;score，就实现了根据docID顺排或逆排&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;假设数据源索引时已经按照某个字段排好了序，而结果根据docID排序也就实现了&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;针对某个字段的排序，甚至可以实现更复杂的score和docID的拟合。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hq.put(new&nbsp;ScoreDoc(doc,&nbsp;(float)&nbsp;1/doc&nbsp;));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(hq.size()&nbsp;&gt;&nbsp;nDocs)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;if&nbsp;hit&nbsp;queue&nbsp;overfull&nbsp;&nbsp;hq.pop();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;remove&nbsp;lowest&nbsp;in&nbsp;hit&nbsp;queue&nbsp;&nbsp;minScore&nbsp;=&nbsp;((ScoreDoc)hq.top()).score;&nbsp;//&nbsp;reset&nbsp;minScore&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;}&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;reader.maxDoc());<br/>更通用的输入输出接口<br/><br/>虽然lucene没有定义一个确定的输入文档格式，但越来越多的人想到使用一个标准的中间格式作为Lucene的数据导入接口，然后其他数据，比如PDF只需要通过解析器转换成标准的中间格式就可以进行数据索引了。这个中间格式主要以XML为主，类似实现已经不下4，5个：<br/><br/>数据源:&nbsp;WORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PDF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HTML&nbsp;&nbsp;&nbsp;&nbsp;DB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;other&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XML中间格式&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Lucene&nbsp;INDEX<br/>目前还没有针对MSWord文档的解析器，因为Word文档和基于ASCII的RTF文档不同，需要使用COM对象机制解析。这个是我在Google上查的相关资料：<a href="http://www.intrinsyc.com/products/enterprise_applications.asp" target="_blank">http://www.intrinsyc.com/products/enterprise_applications.asp</a><br/>另外一个办法就是把Word文档转换成text：<a href="http://www.winfield.demon.nl/index.html" target="_blank">http://www.winfield.demon.nl/index.html</a><br/><br/><br/>索引过程优化<br/><br/>索引一般分2种情况，一种是小批量的索引扩展，一种是大批量的索引重建。在索引过程中，并不是每次新的DOC加入进去索引都重新进行一次索引文件的写入操作（文件I/O是一件非常消耗资源的事情）。<br/><br/>Lucene先在内存中进行索引操作，并根据一定的批量进行文件的写入。这个批次的间隔越大，文件的写入次数越少，但占用内存会很多。反之占用内存少，但文件IO操作频繁，索引速度会很慢。在IndexWriter中有一个MERGE_FACTOR参数可以帮助你在构造索引器后根据应用环境的情况充分利用内存减少文件的操作。根据我的使用经验：缺省Indexer是每20条记录索引后写入一次，每将MERGE_FACTOR增加50倍，索引速度可以提高1倍左右。<br/><br/>搜索过程优化<br/><br/><br/>lucene支持内存索引：这样的搜索比基于文件的I/O有数量级的速度提升。<br/><a href="http://www.onjava.com/lpt/a/3273" target="_blank">http://www.onjava.com/lpt/a/3273</a><br/>而尽可能减少IndexSearcher的创建和对搜索结果的前台的缓存也是必要的。<br/><br/><br/>Lucene面向全文检索的优化在于首次索引检索后，并不把所有的记录（Document）具体内容读取出来，而起只将所有结果中匹配度最高的头100条结果（TopDocs）的ID放到结果集缓存中并返回，这里可以比较一下数据库检索：如果是一个10,000条的数据库检索结果集，数据库是一定要把所有记录内容都取得以后再开始返回给应用结果集的。所以即使检索匹配总数很多，Lucene的结果集占用的内存空间也不会很多。对于一般的模糊检索应用是用不到这么多的结果的，头100条已经可以满足90%以上的检索需求。<br/><br/>如果首批缓存结果数用完后还要读取更后面的结果时Searcher会再次检索并生成一个上次的搜索缓存数大1倍的缓存，并再重新向后抓取。所以如果构造一个Searcher去查1－120条结果，Searcher其实是进行了2次搜索过程：头100条取完后，缓存结果用完，Searcher重新检索再构造一个200条的结果缓存，依此类推，400条缓存，800条缓存。由于每次Searcher对象消失后，这些缓存也访问那不到了，你有可能想将结果记录缓存下来，缓存数尽量保证在100以下以充分利用首次的结果缓存，不让Lucene浪费多次检索，而且可以分级进行结果缓存。<br/><br/>Lucene的另外一个特点是在收集结果的过程中将匹配度低的结果自动过滤掉了。这也是和数据库应用需要将搜索的结果全部返回不同之处。<br/><br/>我的一些尝试：<br/><br/>支持中文的Tokenizer：这里有2个版本，一个是通过JavaCC生成的，对CJK部分按一个字符一个TOKEN索引，另外一个是从SimpleTokenizer改写的，对英文支持数字和字母TOKEN，对中文按迭代索引。&nbsp;<br/>基于XML数据源的索引器：XMLIndexer，因此所有数据源只要能够按照DTD转换成指定的XML，就可以用XMLIndxer进行索引了。&nbsp;<br/>根据某个字段排序：按记录索引顺序排序结果的搜索器：IndexOrderSearcher，因此如果需要让搜索结果根据某个字段排序，可以让数据源先按某个字段排好序（比如：PriceField），这样索引后，然后在利用这个按记录的ID顺序检索的搜索器，结果就是相当于是那个字段排序的结果了。&nbsp;<br/>从Lucene学到更多<br/><br/>Luene的确是一个面对对象设计的典范<br/><br/>所有的问题都通过一个额外抽象层来方便以后的扩展和重用：你可以通过重新实现来达到自己的目的，而对其他模块而不需要；&nbsp;<br/>简单的应用入口Searcher,&nbsp;Indexer，并调用底层一系列组件协同的完成搜索任务；&nbsp;<br/>所有的对象的任务都非常专一：比如搜索过程：QueryParser分析将查询语句转换成一系列的精确查询的组合(Query),通过底层的索引读取结构IndexReader进行索引的读取，并用相应的打分器给搜索结果进行打分/排序等。所有的功能模块原子化程度非常高，因此可以通过重新实现而不需要修改其他模块。&nbsp;<br/>除了灵活的应用接口设计，Lucene还提供了一些适合大多数应用的语言分析器实现（SimpleAnalyser,StandardAnalyser），这也是新用户能够很快上手的重要原因之一。&nbsp;<br/>这些优点都是非常值得在以后的开发中学习借鉴的。作为一个通用工具包，Lunece的确给予了需要将全文检索功能嵌入到应用中的开发者很多的便利。<br/><br/>此外，通过对Lucene的学习和使用，我也更深刻地理解了为什么很多数据库优化设计中要求，比如：<br/><br/>尽可能对字段进行索引来提高查询速度，但过多的索引会对数据库表的更新操作变慢，而对结果过多的排序条件，实际上往往也是性能的杀手之一。&nbsp;<br/>很多商业数据库对大批量的数据插入操作会提供一些优化参数，这个作用和索引器的merge_factor的作用是类似的，&nbsp;<br/>20%/80%原则：查的结果多并不等于质量好，尤其对于返回结果集很大，如何优化这头几十条结果的质量往往才是最重要的。&nbsp;<br/>尽可能让应用从数据库中获得比较小的结果集，因为即使对于大型数据库，对结果集的随机访问也是一个非常消耗资源的操作。&nbsp;<br/>参考资料：<br/><br/>Apache:&nbsp;Lucene&nbsp;Project<br/><a href="http://jakarta.apache.org/lucene/" target="_blank">http://jakarta.apache.org/lucene/</a><br/>Lucene开发/用户邮件列表归档<br/>Lucene-dev@jakarta.apache.org<br/>Lucene-user@jakarta.apache.org<br/><br/>The&nbsp;Lucene&nbsp;search&nbsp;engine:&nbsp;Powerful,&nbsp;flexible,&nbsp;and&nbsp;free<br/><a href="http://www.javaworld.com/javaworld/jw-09-2000/jw-0915-Lucene_p.html" target="_blank">http://www.javaworld.com/javaworld/jw-09-2000/jw-0915-Lucene_p.html</a><br/><br/>Lucene&nbsp;Tutorial<br/><a href="http://www.darksleep.com/puff/lucene/lucene.html" target="_blank">http://www.darksleep.com/puff/lucene/lucene.html</a><br/><br/>Notes&nbsp;on&nbsp;distributed&nbsp;searching&nbsp;with&nbsp;Lucene<br/><a href="http://home.clara.net/markharwood/lucene/" target="_blank">http://home.clara.net/markharwood/lucene/</a><br/><br/>中文语言的切分词<br/><a href="http://www.google.com/search?sourceid=navclient" target="_blank">http://www.google.com/search?sourceid=navclient</a>&amp;hl=zh-CN&amp;q=chinese+word+segment<br/><br/>搜索引擎工具介绍<br/><a href="http://searchtools.com/" target="_blank">http://searchtools.com/</a><br/><br/>Lucene作者Cutting的几篇论文和专利<br/><a href="http://lucene.sourceforge.net/publications.html" target="_blank">http://lucene.sourceforge.net/publications.html</a><br/><br/>Lucene的.NET实现：dotLucene<br/><a href="http://sourceforge.net/projects/dotlucene/" target="_blank">http://sourceforge.net/projects/dotlucene/</a><br/><br/><br/>Lucene作者Cutting的另外一个项目：基于Java的搜索引擎Nutch<br/><a href="http://www.nutch.org/" target="_blank">http://www.nutch.org/</a>&nbsp;<a href="http://sourceforge.net/projects/nutch/" target="_blank">http://sourceforge.net/projects/nutch/</a><br/><br/><br/>关于基于词表和N-Gram的切分词比较<br/><a href="http://china.nikkeibp.co.jp/cgi-bin/china/news/int/int200302100112.html" target="_blank">http://china.nikkeibp.co.jp/cgi-bin/china/news/int/int200302100112.html</a>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=62</link>
			<title><![CDATA[使用站内检索的五大理由]]></title>
			<author>webmaster@xd-tech.com(christian)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Fri,07 Dec 2007 13:35:03 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=62</guid>	
		<description><![CDATA[<font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 本文主要介绍站内检索对internet网站的五大作用：所寻即所得；了解访问者的意图；符合网民的习惯；提升网站信息的价值；身份的象征。最后介绍目前的网际搜索引擎不能替代站内检索的原因。<br /></font>
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times=""></span>&nbsp;</p>
<br />
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">自从有了计算机以后，人类开始用计算机保存信息，有保存，就有查找，于是检索技术诞生了。文本检索技术的发展从最初的</span><span lang="EN-US"><font face="Times New Roman">SMART</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">文档检索系统</span><span lang="EN-US"><font face="Times New Roman">[1]</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">到</span><span lang="EN-US"><font face="Times New Roman">Altavista</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">搜索引擎，到现在的搜索巨头</span><span lang="EN-US"><font face="Times New Roman">Google[2]</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">，其发展可谓日新月异、与时具进，人们开始习惯互联网的搜索时代，站内检索的需求也逐渐显露出来。下面列举需要站内检索的五大理由：</span></p>
<br />
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times=""></span>&nbsp;</p>
<br />
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l0 level1 lfo1; tab-stops: list 21.0pt"><span lang="EN-US" style="mso-bidi-font-family: 宋体"><span style="mso-list: Ignore"><font face="Times New Roman">一、</font></span></span><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 11.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">所寻即所得</span></b><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">。</span></p>
<br />
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">信息量总在不断增长，而访问者的耐心却逐渐下降。据统计，每需要多点击一次鼠标，就有三分之一的用户选择放弃。这意味着</span><span lang="EN-US"><font face="Times New Roman">100</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">个访问者进入我们的网站，如果需要点击</span><span lang="EN-US"><font face="Times New Roman">三</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">次鼠标才能找到所需要的东西，那么就只剩下不到</span><span lang="EN-US"><font face="Times New Roman">4</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">个人了。根据第十一次中国互联网信息调查表明，</span><span lang="EN-US"><font face="Times New Roman">53.1%</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">的人上网是为了获取信息</span><span lang="EN-US"><font face="Times New Roman">[3]</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">，大部分网站的目的是让外界了解自己，了解的人越多，效果就越好。把访问者最想要的返回给用户，就可让更多的用户了解自己，这样站内检索成为必然选择。</span></p>
<br />
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times=""></span>&nbsp;</p>
<br />
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 11.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">二、了解访问者的意图。</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 11.5pt; mso-bidi-font-size: 12.0pt">
<p>&nbsp;</p>
</span></b></p>
<br />
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">管理大师彼得</span><span lang="EN-US"><font face="Times New Roman">.</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">德鲁克说：&ldquo;一定要知道你的客户想要什么？&rdquo;客户的需求永远都是最重要的，因此我们总在分析我们的客户在哪里及他们需要什么。所有访问我们网站的人都可能是我们的潜在客户，了解他们的意图对于我们做决策很重要。站内检索技术可以实现这个功能，站内检索的日志功能可以记录每个访问者的检索词和检索结果，这是访问者意图的最直接的表现。通过分析这些信息，我们还可以调整网站结构，把访问者最想要的放在明显的位置（了解我们的人就多啦）。这个理由经常被人忽视，我在这里放在第二位也是希望引起大家重视，特别是那些已经使用站内检索的网站所有者。</span></p>
<br />
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times=""></span>&nbsp;</p>
<br />
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 23.25pt; TEXT-INDENT: -23.25pt; mso-list: l1 level1 lfo2; tab-stops: list 23.25pt"><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 11.5pt; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt"><span style="mso-list: Ignore"><font face="Times New Roman">三、<span style="FONT-WEIGHT: normal; FONT-SIZE: 7pt; LINE-HEIGHT: normal; FONT-STYLE: normal; FONT-VARIANT: normal" new="" times="">&nbsp; </span></font></span></span></b><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 11.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">符合网民习惯。</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 11.5pt; mso-bidi-font-size: 12.0pt">
<p>&nbsp;</p>
</span></b></p>
<br />
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">根据调查表明，</span><span lang="EN-US"><font face="Times New Roman">68.3</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">％的上网者经常使用搜索引擎[3]。大部分人已经习惯通过检索来找到他们想要的东西，而不是按照某个栏目一级一级往下找(我就很少用yahoo的分类目录）。在网站内访问者要是没看见那熟悉的按钮会多少有些不习惯（我们千万不要让上帝感到不习惯）。在心理学角度讲，人们如果对某个事物不习惯很容易产生厌烦情绪，这也就是为什么你第一次去某个地方会觉得特别远，要是路熟了这种感觉就消失了。看来，为了上帝我们也需要使用站内检索。</span></p>
<br />
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times=""></span>&nbsp;</p>
<br />
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 23.25pt; TEXT-INDENT: -23.25pt; mso-list: l1 level1 lfo2; tab-stops: list 23.25pt"><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 11.5pt; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt"><span style="mso-list: Ignore"><font face="Times New Roman">四、<span style="FONT-WEIGHT: normal; FONT-SIZE: 7pt; LINE-HEIGHT: normal; FONT-STYLE: normal; FONT-VARIANT: normal" new="" times="">&nbsp; </span></font></span></span></b><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 11.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">提升网站信息价值。</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 11.5pt; mso-bidi-font-size: 12.0pt">
<p>&nbsp;</p>
</span></b></p>
<br />
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">我们经常会发生这样的事情：明明记得有一篇写关于吃香辣虾的文件，就是想不起存放在什么地方了。访问者也有类似困扰，只记得某个网站上说了关于张国荣跳楼的消息，但不知道具体的链接在哪里。另外，要是隐藏在目录很深的</span><span lang="EN-US"><font face="Times New Roman">html</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">文档可能自从网站建立到整个网站关闭也没有一个人看过，这些都不是我们所想要的。站内检索毫无疑问可以解决上述问题。同时，按照一个主题把所有相关文档提供给访问者，可以让访问者更全面的了解他所想要的东西，这增加了网站信息间的组织性和逻辑性，方便了访问者的使用，提升用户体验度（用户体验度：一个让我们忐忑不安的名词）。</span></p>
<br />
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times=""></span>&nbsp;</p>
<br />
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 23.25pt; TEXT-INDENT: -23.25pt; mso-list: l1 level1 lfo2; tab-stops: list 23.25pt"><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 11.5pt; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt"><span style="mso-list: Ignore"><font face="Times New Roman">五、<span style="FONT-WEIGHT: normal; FONT-SIZE: 7pt; LINE-HEIGHT: normal; FONT-STYLE: normal; FONT-VARIANT: normal" new="" times=""> </span></font></span></span></b><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 11.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">身份的象征。</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 11.5pt; mso-bidi-font-size: 12.0pt">
<p>&nbsp;</p>
</span></b></p>
<br />
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">有没有站内检索其实已经不只是用户体验度的问题了，还是一个网站专业身份的象征。浏览国外公司的网站，会发现几乎所有网站都在首页最明显的区域放置了一个搜索框，这传达的信息是：专业的网站都有站内检索（呵呵，我没说国外网站就是专业网站）。网民的心态是：我用不用，你管不着，你要是没有就说明你不够专业。为了树立形象，也需要使用站内检索。</span></p>
<br />
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 21pt"><span lang="EN-US">
<p><font face="Times New Roman">&nbsp;</font></p>
</span></p>
<br />
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">最后还得解释一个问题：为什么有了搜索引擎还需要站内检索？用网际搜索引擎不是直接可以查到吗？这其中有两个问题：</span><span lang="EN-US"><font face="Times New Roman">1 </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">搜索羽毛球，你会搜索到</span><span lang="EN-US"><font face="Times New Roman">235,000</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">个网页</span><span lang="EN-US"><font face="Times New Roman">[4]</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">，也不知道我公司的排在第</span><span lang="EN-US"><font face="Times New Roman">10,000</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">页还是</span><span lang="EN-US"><font face="Times New Roman">10,001</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">页，搜索者可能永远也不会去看。</span><span lang="EN-US"><font face="Times New Roman">2 </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">搜索引擎通过网络</span><span lang="EN-US"><font face="Times New Roman">Spider</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">收集网页，对于网站内隐藏很深的网页很难索引到的。</span></p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=61</link>
			<title><![CDATA[站内搜索引擎之比较〔转〕]]></title>
			<author>webmaster@xd-tech.com(christian)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Fri,07 Dec 2007 12:02:43 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=61</guid>	
		<description><![CDATA[<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td style="PADDING-LEFT: 15px; HEIGHT: 25px">关键词：<a href="http://www.xd-tech.com.cn/insitesepro.html">站内搜索</a> </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 20px; PADDING-LEFT: 15px; LINE-HEIGHT: 17px" valign="top" height="300">
            <p><br />&nbsp;&nbsp;&nbsp;&nbsp; 有很多网站都在网页上加个&ldquo;站内搜索引擎&rdquo;、&ldquo;搜索引擎&rdquo;、&ldquo;全文检索&rdquo;等等相关字样。<br />&nbsp;&nbsp;&nbsp;&nbsp; 用户一用，结果发现，既不能多关键组合查询，也不能支持国际语法，甚至不能支持全文检索，就更别谈不支持相关性排序等真正的搜索引擎具备的功能了。这些搜索和真正的站内搜索引擎有和区别呢？<br />&nbsp;&nbsp;&nbsp;&nbsp; 真正的全文检索应具备 相关性排序技术 和 分词索引功能。 如果需要进行互联网的信息抓取和采集那么还需要网络蜘蛛模块。 分词、索引、排序这是全文检索的基本和核心，缺一不可。全文检索至少需要具备中文分词、索引、相关性排序功能。<br />&nbsp;&nbsp;&nbsp;&nbsp; 所以简单考查一个站内搜索引擎的真伪只需要知道：能否实现相关性排序、国际标准的搜索语法、动态摘要、飘红、支持海量数据多并快速发查询、搜索耗时极短。<br />（当然这只是全文检索的基本内容，一个全文检索的搜索引擎的品质好坏还和相关的技术水平、各种技术的结合、产品的管理有很大关系。 评价全文检索的标准是用户体验度，今后我们会提供相关方面的内容）</p>
            <br />
            <p><strong>常用的站内搜索技术比较： </strong></p>
            <br />
            <table style="BORDER-COLLAPSE: collapse" bordercolor="#999999" cellpadding="2" width="700" border="1">
                <tbody>
                    <tr>
                        <td width="89">　</td>
                        <td width="145"><b>基于数据库的搜索</b></td>
                        <td width="218"><b>基于spider抓取的站内搜索</b></td>
                        <td width="243"><b>全文检索者站内搜索软件系统</b></td>
                    </tr>
                    <tr>
                        <td width="89"><b>原理 </b></td>
                        <td width="145">数据库搜索</td>
                        <td width="218">通过Spider抓取网页，经html解析，分词，索引实现网页式站内搜索。</td>
                        <td width="243">对数据库数据进行html解析、图片缩略，分词，索引，实现站内搜索。</td>
                    </tr>
                    <tr>
                        <td width="89"><b>检索效率</b></td>
                        <td width="145">非常低下 消耗大量硬件资源</td>
                        <td width="218">高效</td>
                        <td width="243">高效</td>
                    </tr>
                    <tr>
                        <td width="89"><b>检索范围</b></td>
                        <td width="145">无法完成全文检索（可以用sql的单字索引功能最简单的完成索引功能实现最低级的全文检索），只能进行标题检索。 数据库效率太低，无法开展各种附加功能。</td>
                        <td width="218">网页检索 优点：不需要做各种工作，直接即可使用 缺点： 1.有大量的不必要的信息影响搜索结果的排序和显示的效果。严重影响精确度。 2.部分页面无法抓取到。 3.用户对搜索范围和内容以及体现的结果无法精确控制</td>
                        <td width="243">标题＋内容 基于内容分析的排序方法。基于内容分析排序是最佳的排序方法。 标题和内容可控制，搜索结果准确到位。 内容可控，用户可对搜索的内容范围和体现的结果进行精确的控制</td>
                    </tr>
                    <tr>
                        <td width="89"><b>检索语法</b></td>
                        <td width="145">无</td>
                        <td width="218">支持标准的国际搜索语法。</td>
                        <td width="243">支持标准的国际搜索语法。</td>
                    </tr>
                    <tr>
                        <td width="89"><b>动态摘要</b></td>
                        <td width="145">无</td>
                        <td width="218">摘要内容不清晰各种垃圾信息过多</td>
                        <td width="243">提供动态摘要，摘要清晰精确，便于用户快速寻找到需要的信息。</td>
                    </tr>
                    <tr>
                        <td width="89"><b>关键词飘红</b></td>
                        <td width="145">无</td>
                        <td width="218">有</td>
                        <td width="243">有</td>
                    </tr>
                    <tr>
                        <td width="89"><b>内容的范围</b></td>
                        <td width="145">可控制</td>
                        <td width="218">不可有效控制，动态网页抓取效果不佳，没有链接的网页无法抓取，页面出现杂乱信息影响搜索结果。对于时间控制也无法做到精准，对于栏目的归属无法做到准确。</td>
                        <td width="243">可有效控制，您可以把多个字段拆分合并，可以确定那些需要，哪些不需要。所有动态网页和没有链接的网页均可有效收入。 栏目控制精准。</td>
                    </tr>
                    <tr>
                        <td width="89"><b>图片缩略</b></td>
                        <td width="145">无</td>
                        <td width="218">无</td>
                        <td width="243">有</td>
                    </tr>
                    <tr>
                        <td width="89"><b>同义词</b></td>
                        <td width="145">无</td>
                        <td width="218">无</td>
                        <td width="243">有</td>
                    </tr>
                    <tr>
                        <td width="89"><b>相关性排序</b></td>
                        <td width="145">无</td>
                        <td width="218">有</td>
                        <td width="243">有</td>
                    </tr>
                    <tr>
                        <td width="89"><b>其他</b></td>
                        <td width="145">低效率低质量的平台无法开展增值服务</td>
                        <td width="218">二次研发成本高</td>
                        <td width="243">具有持续不断的升级能力和良好的售后服务。</td>
                    </tr>
                    <tr>
                        <td width="89"><b>成本</b></td>
                        <td width="145">低</td>
                        <td width="218">价格高 </td>
                        <td width="243">以产品形式运作，多家客户分摊成本，成本相对低廉。运维成本低。 </td>
                    </tr>
                    <tr>
                        <td width="89"><b>维护成本</b></td>
                        <td width="145">&nbsp;不大 </td>
                        <td width="218">维护量不大。</td>
                        <td width="243">程序维护无须投入，但是需要进行一定量的内容维护。 经过简单培训即可胜任。</td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=60</link>
			<title><![CDATA[Windows 下运行Hadoop的脚本]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Wed,10 Oct 2007 22:22:27 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=60</guid>	
		<description><![CDATA[<p>将以下文本内容存放入HADOOP_HOME\bin 目录下 ， 命名为hadoop.bat，将set HADOOP_HOME=C:\work\hadoop 修改为HADOOP存放的目录，设置一下JAVA_HOME，然后命令行进入 HADOOP_HOME\bin 目录下 ，运行 hadoop 就可以看到效果了。<br />需要注意的是 Hadoop 运行datanode 的时候，它使用了 Runtime 执行操作系统命令 df -k 来获得存储空间信息，而windows 下是不支持这个命令的，所以需要修改一下org.apache.hadoop.fs.DF.java 的 141 行左右如下：</p>
<p>&nbsp; private String[] getExecString() {<br />&nbsp;&nbsp;&nbsp; return new String[] {&quot;df&quot;,&quot;-k&quot;, dirPath};<br />&nbsp; }</p>
<p>把这个命令改掉后编译打包就OK了</p>
<p>@echo off<br />set JAVA_HEAP_MAX=&quot;-Xmx1000m&quot;<br />set JAVA=$JAVA_HOME/bin/java</p>
<p>if not &quot;%1&quot;==&quot;&quot; goto INIT else goto echoMSG<br />:echoMSG&nbsp; <br />&nbsp; echo Title:欢迎使用北京线点科技&nbsp;Hadoop 运行脚本<br />&nbsp; echo Author:jaddy0302 mail:jaddy0302@126.com QQ:5622928<br />&nbsp; echo Site:http://www.xd-tech.com.cn 线点科技 专业垂直搜索引擎产品<br />&nbsp; echo Usage: hadoop [--config confdir] COMMAND<br />&nbsp; echo where COMMAND is one of:<br />&nbsp; echo&nbsp;&nbsp; namenode -format&nbsp;&nbsp;&nbsp;&nbsp; format the DFS filesystem<br />&nbsp; echo&nbsp;&nbsp; secondarynamenode&nbsp;&nbsp;&nbsp; run the DFS secondary namenode<br />&nbsp; echo&nbsp;&nbsp; namenode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; run the DFS namenode<br />&nbsp; echo&nbsp;&nbsp; datanode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; run a DFS datanode<br />&nbsp; echo&nbsp;&nbsp; dfsadmin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; run a DFS admin client<br />&nbsp; echo&nbsp;&nbsp; fsck&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; run a DFS filesystem checking utility<br />&nbsp; echo&nbsp;&nbsp; fs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; run a generic filesystem user client<br />&nbsp; echo&nbsp;&nbsp; jobtracker&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; run the MapReduce job Tracker node <br />&nbsp; echo&nbsp;&nbsp; pipes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; run a Pipes job<br />&nbsp; echo&nbsp;&nbsp; tasktracker&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; run a MapReduce task Tracker node <br />&nbsp; echo&nbsp;&nbsp; job&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; manipulate MapReduce jobs <br />&nbsp; echo&nbsp;&nbsp; version&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print the version<br />&nbsp; echo&nbsp;&nbsp; jar jar&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; run a jar file<br />&nbsp; echo&nbsp;&nbsp; distcp srcurl desturl copy file or directories recursively<br />&nbsp; echo&nbsp; or<br />&nbsp; echo&nbsp;&nbsp; CLASSNAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; run the class named CLASSNAME<br />&nbsp; echo Most commands print help when invoked w/o parameters.<br />&nbsp; goto end;<br />:INIT&nbsp; <br />&nbsp; set HADOOP_HOME=C:\work\hadoop<br />&nbsp; if &quot;%HADOOP_HOME%&quot;==&quot;&quot; set HADOOP_HOME=..&nbsp; <br />&nbsp; set CLASSPATH=%HADOOP_HOME%;%HADOOP_HOME%\conf;%JAVA_HOME%/lib/tools.jar;<br />&nbsp; set HADOOP_LOG_DIR=%HADOOP_HOME%/logs<br />&nbsp; set HADOOP_LOGFILE=hadoop.log<br />&nbsp; @echo @echo off&gt;setclasspath.bat<br />&nbsp; for %%i in (%HADOOP_HOME%\hadoop-*.jar) do @echo set CLASSPATH=%%CLASSPATH%%%%i&gt;&gt;setclasspath.bat;<br />&nbsp; for %%i in (%HADOOP_HOME%\lib\*.jar) do @echo set CLASSPATH=%%CLASSPATH%%%%i&gt;&gt;setclasspath.bat;<br />&nbsp; for %%i in (%HADOOP_HOME%\lib\jetty-ext\*.jar) do @echo set CLASSPATH=%%CLASSPATH%%%%i&gt;&gt;setclasspath.bat;<br />&nbsp; goto EXEC<br />:EXEC<br />&nbsp; call setclasspath.bat<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;namenode&quot; set CLASS=org.apache.hadoop.dfs.NameNode<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;secondarynamenode&quot; set CLASS=org.apache.hadoop.dfs.SecondaryNameNode<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;datanode&quot; set&nbsp; CLASS=org.apache.hadoop.dfs.DataNode<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;fs&quot; set&nbsp; CLASS=org.apache.hadoop.fs.FsShell<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;dfs&quot; set&nbsp; CLASS=org.apache.hadoop.fs.FsShell<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;dfsadmin&quot; set&nbsp; CLASS=org.apache.hadoop.dfs.DFSAdmin<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;fsck&quot; set&nbsp; CLASS=org.apache.hadoop.dfs.DFSck<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;jobtracker&quot; set&nbsp; CLASS=org.apache.hadoop.mapred.JobTracker<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;tasktracker&quot; set&nbsp; CLASS=org.apache.hadoop.mapred.TaskTracker<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;job&quot; set&nbsp; CLASS=org.apache.hadoop.mapred.JobClient<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;pipes&quot; set&nbsp; CLASS=org.apache.hadoop.mapred.pipes.Submitter<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;version&quot; set&nbsp; CLASS=org.apache.hadoop.util.VersionInfo<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;jar&quot; set&nbsp; CLASS=org.apache.hadoop.util.RunJar<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;distcp&quot; set&nbsp; CLASS=org.apache.hadoop.util.CopyFiles<br />goto SPLI<br />:SPLI<br />&nbsp; set HADOOP_OPTS=<br />&nbsp; set HADOOP_OPTS=%HADOOP_OPTS% -Dhadoop.log.dir=%HADOOP_LOG_DIR%<br />&nbsp; set HADOOP_OPTS=%HADOOP_OPTS% -Dhadoop.log.file=%HADOOP_LOGFILE%<br />&nbsp; set HADOOP_OPTS=%HADOOP_OPTS% -Dhadoop.home.dir=%HADOOP_HOME%<br />&nbsp; set HADOOP_OPTS=%HADOOP_OPTS% -Dhadoop.id.str=%HADOOP_IDENT_STRING%<br />&nbsp; call &quot;%JAVA_HOME%\bin\java&quot; %JAVA_HEAP_MAX% %HADOOP_OPTS% -classpath &quot;%CLASSPATH%&quot; %CLASS% %2 %3 %4 %5 %6 %7 %8 %9<br />&nbsp; rem if &quot;%ERRORLEVEL%&quot; == &quot;1&quot; goto SPLI else goto end&nbsp; <br />:end<br /></p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=59</link>
			<title><![CDATA[网络语料正文的识别/抽取规则 标签密度判定法]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Wed,08 Aug 2007 16:57:05 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=59</guid>	
		<description><![CDATA[<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-char-indent-count: 2.0; mso-layout-grid-align: none" align="left"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在确定了对不同的</span><span lang="EN-US"><font face="Times New Roman">URL</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">进行的不同的操作之后，自然就进入到了本软件的核心部分：如何判定</span><span lang="EN-US"><font face="Times New Roman">HTML</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">源码中，哪一部分是正文。只有确定了正文部分，才能够确定操作集中的对象，才能够进行抽取。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-char-indent-count: 2.0; mso-layout-grid-align: none" align="left"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在各种网络文本中，最容易获得的，就是网络新闻之类。这类文章，甚至包括很多的非新闻类的网上文章，特点都是具有一个标题，这个标题一般会放在正文开头在</span><span lang="EN-US"><font face="Times New Roman">&lt;h1&gt; &lt;/h1&gt;</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">标签中，有些网站也会放在</span><span lang="EN-US"><font face="Times New Roman">&lt;title&gt; &lt;/title&gt;</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">标签中；另外，在一般的网上文章中，正文往往都是用</span><span lang="EN-US"><font face="Times New Roman">&lt;p&gt; &lt;/p&gt;</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来进行段落划分。同时，正文成分在网页源代码中，分布往往较为集中。因此，本文提出一种正文判定法则，即标签密度判定法，即，首先判断一个</span><span lang="EN-US"><font face="Times New Roman">&lt;p&gt; &lt;/p&gt;</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">代码块中的标签密度，如果低于某一阈值，就认为其标签含量很低，是正文的可能性就比较大。下面举两个例子来论证标签密度是否能成为判定正文的标准：代码片段</span><span lang="EN-US"><font face="Times New Roman">A</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是一篇新闻网页的源码中，正文部分的</span><span lang="EN-US"><font face="Times New Roman">Fragment</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，而代码片段</span><span lang="EN-US"><font face="Times New Roman">B</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，则是非正文部分的</span><span lang="EN-US"><font face="Times New Roman">Fragment</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。这两段网页源代码，是随机地从某一搜索引擎结果集中抽取的，因而具有相当的代表性：</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-char-indent-count: 2.0; mso-layout-grid-align: none" align="left"><span lang="EN-US">
<p><font face="Times New Roman" size="3">&nbsp;</font></p>
</span></p>
<table class="MsoTableGrid" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes">
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt" valign="top" width="568">
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-char-indent-count: 2.0; mso-layout-grid-align: none" align="left"><font size="3"><span lang="EN-US"><font face="Times New Roman">&lt;P&gt;</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　对于吉林石化爆炸污染松花江水源的说法，吉林省委宣传部表示目前还没有听说这个情况。吉林市市委宣传处一位人士更是表示，由于哈尔滨处于松花江下游，哈尔滨多年来一直抓住水指标的问题，作水污染的文章，这次停水是否因为吉林石化爆炸所导致还不好说。他告诉记者，自</span><chsdate w:st="on" isrocdate="False" islunardate="False" day="14" month="11" year="2006"><chsdate w:st="on" isrocdate="False" islunardate="False" day="14" month="11" year="2006"><span lang="EN-US"><font face="Times New Roman">11</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">月</span><span lang="EN-US"><font face="Times New Roman">14</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">日</span></chsdate><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下午</span></chsdate><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开始，吉林市松花江江北在恢复供水后一直保持正常。</span><span lang="EN-US"><font face="Times New Roman"> </font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-char-indent-count: 2.0; mso-layout-grid-align: none" align="left"><span lang="EN-US"><font face="Times New Roman" size="3">&lt;/P&gt;</font></span></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-char-indent-count: 2.0; mso-layout-grid-align: none" align="left"><font size="3"><span lang="EN-US"><font face="Times New Roman">&lt;P&gt;</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　吉林石化方面人士强调，爆炸产生的是二氧化碳和水，绝对不会污染到水源，而吉林石化也有自己的污水处理厂，不合格的污水是不会排放到松花江的。本报记者翟宇许</span><span lang="EN-US"><font face="Times New Roman"> </font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-char-indent-count: 2.0; mso-layout-grid-align: none" align="left"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">金晶王婷婷</span><font face="Times New Roman"> </font><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">发自哈尔滨</span><font face="Times New Roman"> </font><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">北京</span><span lang="EN-US"><font face="Times New Roman">&lt;A href=&quot;http://weather.qq.com/preend.htm?dc80.htm&quot; </font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-char-indent-count: 2.0; mso-layout-grid-align: none" align="left"><font size="3"><span lang="EN-US"><font face="Times New Roman">target=_blank&gt; &lt;IMG alt=</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">点击查看北京及更多城市天气预报</span><span lang="EN-US"><font face="Times New Roman"> </font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-char-indent-count: 2.0; mso-layout-grid-align: none" align="left"><span lang="EN-US"><font face="Times New Roman" size="3">src=&quot;http://weather.qq.com/images/endnew/weather_icon.gif&quot; </font></span></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-char-indent-count: 2.0; mso-layout-grid-align: none" align="left"><span lang="EN-US"><font face="Times New Roman" size="3">border=0&gt; &lt;/A&gt; &lt;/P&gt;</font></span></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US">
            <p><font face="Times New Roman" size="3">&nbsp;</font></p>
            </span></p>
            </td>
        </tr>
    </tbody>
</table>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">图</span><span lang="EN-US" style="FONT-SIZE: 9pt"><font face="Times New Roman">3-1 </font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">代码片段</span><span lang="EN-US" style="FONT-SIZE: 9pt"><font face="Times New Roman">A</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，从某</span><span lang="EN-US" style="FONT-SIZE: 9pt"><font face="Times New Roman">HTML</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">页面源文件中摘取的片断</span><span lang="EN-US" style="FONT-SIZE: 9pt">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center"><span lang="EN-US" style="FONT-SIZE: 9pt">
<p><font face="Times New Roman">&nbsp;</font></p>
</span></p>
<table class="MsoTableGrid" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes">
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt" valign="top" width="568">
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 10.5pt; TEXT-ALIGN: left; mso-char-indent-count: 1.0; mso-layout-grid-align: none" align="left"><font size="3"><span lang="EN-US"><font face="Times New Roman">&lt;DD class=&quot;nadlinkB<span style="mso-spacerun: yes">&nbsp; </span>marginupdown&quot;&gt; &lt;!--</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">广告</span><span lang="EN-US"><font face="Times New Roman"> --&gt;</font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span lang="EN-US"><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>&lt;DD class=focus&gt;</font></font></span></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>&lt;DIV class=&quot;focustit px14&quot;&gt;</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">焦点关注</span><span lang="EN-US"><font face="Times New Roman"> &lt;/DIV&gt;</font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span lang="EN-US"><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>&lt;DD class=foucscnt&gt;</font></font></span></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span lang="EN-US"><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>&lt;DIV class=foucscnt1&gt; &lt;A href=&quot;http://news.qq.com/a/20051124/000309.htm&quot; </font></font></span></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>target=new&gt; &lt;IMG class=marginupdown height=88 alt=&quot;</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">交友广告在高校派发</span><font face="Times New Roman"> </font><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">寻伊启事专盯单身美女</span><span lang="EN-US"><font face="Times New Roman">&quot; </font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span lang="EN-US"><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>src=&quot;http://img1.qq.com/news/20051124/2719358.jpg&quot; width=130 </font></font></span></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>border=1&gt; &lt;/A&gt; &lt;BR&gt;</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">交友广告专盯单身美女</span><span lang="EN-US"><font face="Times New Roman">&lt;BR&gt; &lt;BR&gt; &lt;A </font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span lang="EN-US"><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>href=&quot;http://ent.qq.com/a/20051124/000048.htm&quot; target=new&gt; &lt;IMG </font></font></span></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span lang="EN-US"><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>class=<span style="Z-INDEX: 1; POSITION: absolute; mso-ignore: vglayout">&nbsp;</span>marginupdown height=88 src=&quot;http://img1.qq.com/ent/20051124/2720851.jpg&quot; </font></font></span></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>width=130 border=0&gt; &lt;/A&gt; &lt;BR&gt; </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">怀孕王菲遭媒体&ldquo;围堵&rdquo;</span><span lang="EN-US"><font face="Times New Roman">&lt;BR&gt; &lt;/DIV&gt;</font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span lang="EN-US"><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>&lt;DIV class=foucscnt2&gt; &middot; &lt;A href=&quot;http://news.qq.com/a/20051120/000704.htm&quot; </font></font></span></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><shapetype id="_x0000_t202" path="m,l,21600r21600,l21600,xe" o:spt="202" coordsize="21600,21600"><stroke joinstyle="miter"></stroke>
            <path o:connecttype="rect" gradientshapeok="t"></path>
            </shapetype><shape id="_x0000_s1026" style="MARGIN-TOP: -16.1pt; Z-INDEX: 1; MARGIN-LEFT: 1in; WIDTH: 4in; POSITION: absolute; HEIGHT: 23.35pt" type="#_x0000_t202" stroked="f" filled="f"><textbox style="mso-next-textbox: #_x0000_s1026"><font face="Times New Roman" size="3"></font></textbox></shape><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>target=_blank&gt; </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">小泉谈中日关系</span><font face="Times New Roman"> </font><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">称不担心中日交恶</span><span lang="EN-US"><font face="Times New Roman">(</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">图</span><span lang="EN-US"><font face="Times New Roman">) &lt;/A&gt; &lt;BR&gt; </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&middot;</span><span lang="EN-US"><font face="Times New Roman"> &lt;A </font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>href=&quot;http://news.qq.com/a/20051119/000757.htm&quot; target=_blank&gt; </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">戒毒所警察强奸女生被判</span><span lang="EN-US"><font face="Times New Roman">10</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">年</span><span lang="EN-US"><font face="Times New Roman"> </font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><font size="3"><span lang="EN-US"><span style="mso-spacerun: yes"><font face="Times New Roman">&nbsp; </font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">不服判决</span><span lang="EN-US"><font face="Times New Roman"> &lt;/A&gt; &lt;BR&gt; </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&middot;</span><span lang="EN-US"><font face="Times New Roman"> &lt;A href=&quot;http://news.qq.com/a/20051118/001595.htm&quot; </font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>target=_blank&gt; </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">甘肃省委宣传部原副部长石星光遇害</span><span lang="EN-US"><font face="Times New Roman">&lt; /A&gt; &lt;BR&gt; </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&middot;</span><span lang="EN-US"><font face="Times New Roman"> &lt;A </font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>href=&quot;http://news.qq.com/a/20051116/001154.htm&quot; target=_blank&gt; </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">按下劫警键五分钟获救</span><span lang="EN-US"><font face="Times New Roman"> </font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><font size="3"><span lang="EN-US"><span style="mso-spacerun: yes"><font face="Times New Roman">&nbsp; </font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">新版</span><span lang="EN-US"><font face="Times New Roman">GPS</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">救下的姐命</span><span lang="EN-US"><font face="Times New Roman"> &lt;/A&gt; &lt;BR&gt; </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&middot;</span><span lang="EN-US"><font face="Times New Roman"> &lt;A href=&quot;http://news.qq.com/a/20051110/001447.htm&quot; </font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>target=new&gt;</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">全国中小学后勤工作论坛上鼾声一片</span><span lang="EN-US"><font face="Times New Roman">(</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">组图</span><span lang="EN-US"><font face="Times New Roman">) &lt;/A&gt; &lt;BR&gt; </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&middot;</span><span lang="EN-US"><font face="Times New Roman"> &lt;A </font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>href=&quot;http://news.qq.com/a/20051110/000472.htm&quot; target=_blank&gt; </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">孕妇被打流产索赔</span><span lang="EN-US"><font face="Times New Roman">81</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">万</span><span lang="EN-US"><font face="Times New Roman"> </font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><font size="3"><span lang="EN-US"><span style="mso-spacerun: yes"><font face="Times New Roman">&nbsp; </font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">被告提异议</span><span lang="EN-US"><font face="Times New Roman"> &lt;/A&gt; &lt;BR&gt; &lt;BR&gt; </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&middot;</span><span lang="EN-US"><font face="Times New Roman"> &lt;A href=&quot;http://news.qq.com/a/20051124/000469.htm&quot; </font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>target=new&gt; </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">女子结婚</span><span lang="EN-US"><font face="Times New Roman">3</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">年未孕</span><font face="Times New Roman"> </font><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">医院检查才知是男儿身</span><span lang="EN-US"><font face="Times New Roman"> &lt;/A&gt; &lt;BR&gt; </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&middot;</span><span lang="EN-US"><font face="Times New Roman"> &lt;A </font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>href=&quot;http://news.qq.com/a/20051124/000540.htm&quot; target=new&gt; </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">变性美女返家</span><span lang="EN-US"><font face="Times New Roman"> </font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>3</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">万乡亲敲锣打鼓迎接</span><span lang="EN-US"><font face="Times New Roman">(</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">图</span><span lang="EN-US"><font face="Times New Roman">) &lt;/A&gt; &lt;BR&gt; </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&middot;</span><span lang="EN-US"><font face="Times New Roman"> &lt;A href=&quot;http://news.qq.com/a/20051124/000833.htm&quot; </font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>target=new&gt; </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">女教师多次性骚扰</span><span lang="EN-US"><font face="Times New Roman">14</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">岁男生被判软禁</span><span lang="EN-US"><font face="Times New Roman">(</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">图</span><span lang="EN-US"><font face="Times New Roman">) &lt;/A&gt; &lt;BR&gt; </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&middot;</span><span lang="EN-US"><font face="Times New Roman"> &lt;A </font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span lang="EN-US"><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>href=&quot;http://news.qq.com/a/20051119/000154.htm&quot; </font></font></span></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>target=new&gt; </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">网络工程师网上散发前女友裸照</span><span lang="EN-US"><font face="Times New Roman">(</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">图</span><span lang="EN-US"><font face="Times New Roman">) &lt;/A&gt; &lt;BR&gt; </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&middot;</span><span lang="EN-US"><font face="Times New Roman"> &lt;A </font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span lang="EN-US"><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>href=&quot;http://news.qq.com/a/20051110/001756.htm&quot; </font></font></span></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>target=new&gt; </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">丈夫迷网络色情与老婆演淫秽真人秀</span><span lang="EN-US"><font face="Times New Roman">(</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">图</span><span lang="EN-US"><font face="Times New Roman">) &lt;/A&gt; &lt;BR&gt; &lt;/DIV&gt;</font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span lang="EN-US"><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>&lt;DIV class=foucscnt3&gt; &lt;A href=&quot;http://sports.qq.com/a/20051124/000243.htm&quot; </font></font></span></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>target=new&gt; &lt;IMG class=marginupdown height=88 alt=</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">鲁尼偷腥事件女主角裸照</span><span lang="EN-US"><font face="Times New Roman"> </font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span lang="EN-US"><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>src=&quot;http://img1.qq.com/sports/20051124/2720121.jpg&quot; </font></font></span></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>width=130&gt; &lt;/A&gt; &lt;BR&gt; </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">鲁尼偷腥事件女主角裸照</span><span lang="EN-US"><font face="Times New Roman"> &lt;BR&gt; &lt;BR&gt; &lt;A </font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span lang="EN-US"><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>href=&quot;http://news.qq.com/a/20051124/001281.htm&quot; target=new&gt; &lt;IMG </font></font></span></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>class=marginupdown height=88 alt=&quot;</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">千万富豪驾宝马高校征婚</span><font face="Times New Roman"> </font><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">传单散</span><span lang="EN-US"><font face="Times New Roman">10</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">所高校</span><span lang="EN-US"><font face="Times New Roman">&quot; </font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span lang="EN-US"><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>src=&quot;http://img1.qq.com/news/20051124/2723345.jpg&quot; width=130 </font></font></span></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 11.25pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><font size="3"><span lang="EN-US"><font face="Times New Roman">border=1&gt; &lt;/A&gt; &lt;BR&gt; </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">千万富豪驾宝马高校征婚</span><span lang="EN-US"><font face="Times New Roman"> &lt;BR&gt; &lt;/DIV&gt; </font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span lang="EN-US">
            <p><font face="Times New Roman" size="3">&nbsp;</font></p>
            </span></p>
            </td>
        </tr>
    </tbody>
</table>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">图</span><span lang="EN-US" style="FONT-SIZE: 9pt"><font face="Times New Roman">3-2 </font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">代码片段</span><span lang="EN-US" style="FONT-SIZE: 9pt"><font face="Times New Roman">B</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，从同一</span><span lang="EN-US" style="FONT-SIZE: 9pt"><font face="Times New Roman">HTML</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">页面源文件中摘取的片断</span><span lang="EN-US" style="FONT-SIZE: 9pt">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center"><span lang="EN-US" style="FONT-SIZE: 9pt">
<p><font face="Times New Roman">&nbsp;</font></p>
</span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-char-indent-count: 2.0; mso-layout-grid-align: none" align="left"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这代码片段</span><span lang="EN-US"><font face="Times New Roman">A</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">指示的就是我们要提取的正文。如何把这样的代码，与代码段</span><span lang="EN-US"><font face="Times New Roman">B</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这样的代码区分开呢？首先从语言内容角度是行不通的，目前电脑很难理解自然语言；也不能从是否是超级链接入手，前面已经说了，正文中有时也会出现不能随意整个去除的超级链接，必须判断出哪里是正文，才能对正文中的超级链接进行处理。笔者在这个问题上也曾徘徊很久，最后的突破在于寻找到了这样一个规律：正文部分的</span><span lang="EN-US"><font face="Times New Roman">HTML</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">标签密度，远远大于非正文部分。为了验证这个规律，我们统计分析一下上面的两个例子（</span><span lang="EN-US"><font face="Times New Roman">HTML</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">标签：这里指所有在</span><span lang="EN-US"><font face="Times New Roman">HTML</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">源代码中出现的，尖括号（</span><span lang="EN-US"><font face="Times New Roman">&lt;&gt;</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）中的内容，每对尖括号，连同其内容，算作一个标签，每个类似于</span><span lang="EN-US"><font face="Times New Roman">&lt;html&gt; &lt;/html&gt;</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的两个标签，其中一个标示标签内容开始，另一个标志标签内容结束的，称为一个标签对。）：</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><em style="mso-bidi-font-style: normal"><u><span style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">代码片段</span></u></em><em style="mso-bidi-font-style: normal"><u><span lang="EN-US" style="FONT-SIZE: 14pt"><font face="Times New Roman">A</font></span></u></em><em style="mso-bidi-font-style: normal"><u><span style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的统计分析：</span></u></em><em style="mso-bidi-font-style: normal"><u><span lang="EN-US" style="FONT-SIZE: 14pt">
<p>&nbsp;</p>
</span></u></em></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">正文字数：</span><span lang="EN-US"><font face="Times New Roman">242</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">字（正文字数：</span><span lang="EN-US"><span style="mso-tab-count: 1"><font face="Times New Roman"> </font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">指的是非标签的文本字数，标点符号计在内。）</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">标签数：</span><span lang="EN-US"><font face="Times New Roman">7</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个（标签数：只计算标签的个数，忽略标签内文本的多少。）</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 126pt; TEXT-INDENT: -126pt; mso-char-indent-count: -12.0"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">标签密度：</span><span lang="EN-US"><font face="Times New Roman">28.93</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个</span><span lang="EN-US"><font face="Times New Roman">/</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">千字（标签密度：指的是前面定义的标签数与正文数的商，单位规定为&ldquo;个</span><span lang="EN-US"><font face="Times New Roman">/</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">千字&rdquo;，计算公式为&ldquo;标签密度</span><span lang="EN-US"><font face="Times New Roman">=1000*</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">标签数</span><span lang="EN-US"><font face="Times New Roman">/</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">字数&rdquo;。）</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><em style="mso-bidi-font-style: normal"><u><span style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">代码片段</span></u></em><em style="mso-bidi-font-style: normal"><u><span lang="EN-US" style="FONT-SIZE: 14pt"><font face="Times New Roman">B</font></span></u></em><em style="mso-bidi-font-style: normal"><u><span style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的统计分析：</span></u></em><em style="mso-bidi-font-style: normal"><u><span lang="EN-US" style="FONT-SIZE: 14pt">
<p>&nbsp;</p>
</span></u></em></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">正文字数（非标签文本）：</span><span lang="EN-US"><font face="Times New Roman">221</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">字</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">标签数：</span><span lang="EN-US"><font face="Times New Roman">69</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">标签密度：</span><span lang="EN-US"><font face="Times New Roman">312.22</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个</span><span lang="EN-US"><font face="Times New Roman">/</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">千字</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">从上面的两组统计数据可以看出，网络文本源代码中，正文部分的</span><span lang="EN-US"><font face="Times New Roman">HTML</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">标签密度远远小于非正文部分，同时，对于更多的网络文本的统计数据分析可以知道，按照上文的方法所算出的标签密度，正文部分与非正文部分，存在着极大的差异。从而我们可以得出初步结论：可以依据对</span><span lang="EN-US"><font face="Times New Roman">HTML</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">标签密度的统计分析来指出在一份</span><span lang="EN-US"><font face="Times New Roman">HTML</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">源代码中，文章正文的位置。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">于是，在对更多的文本进行类似的统计后，笔者得出一个正式的统计的结论，正文部分的</span><span lang="EN-US"><font face="Times New Roman">HTML</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">标签密度大于</span><span lang="EN-US"><font face="Times New Roman">50</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个</span><span lang="EN-US"><font face="Times New Roman">/</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">千字的概率接近于零，而非正文部分的标签密度小于</span><span lang="EN-US"><font face="Times New Roman">200</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个</span><span lang="EN-US"><font face="Times New Roman">/</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">千字的机率也几乎为零。所以，理论上，在</span><span lang="EN-US"><font face="Times New Roman">50</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个</span><span lang="EN-US"><font face="Times New Roman">/</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">千字和</span><span lang="EN-US"><font face="Times New Roman">200</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个</span><span lang="EN-US"><font face="Times New Roman">/</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">千字这个统计得出标签密度数据的&ldquo;真空区&rdquo;中选择任何一个数值作为正文与非正文部分的分界线都是可以的。但是，为了保证不遗漏正文（不遗漏正文：对于标注对象来说，正文的缺失是难以接受的，而少量的冗余资料则被认为是对工作无害的。所以，在提取正文时，宁可放行一些无用的资料，也不能把丝毫的正文过滤掉），笔者建议选择的分界值是</span><span lang="EN-US"><font face="Times New Roman">150</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个</span><span lang="EN-US"><font face="Times New Roman">/</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">千字（</span><span lang="EN-US"><font face="Times New Roman">150</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个</span><span lang="EN-US"><font face="Times New Roman">/</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">千字：这是针对网络新闻资料得出的建议分界值，可能并不适用于其他类型的资料）。当然，在其后的设计分析中，我们可以知道，对于不同网站的文本语料，存在不同的设计风格差异，体现在源码上，就是正文部分与非正文部分的标签密度存在一定的波动。我们可以通过对这个阈值进行调整，来达到最适合的抽取精度。当然，在软件中，会存在一个</span><span lang="EN-US"><font face="Times New Roman">Scroll Bar</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，对这个阈值进行调整。</span></font></p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=58</link>
			<title><![CDATA[Windows 下运行Nutch批处理脚本]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Wed,25 Jul 2007 22:00:55 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=58</guid>	
		<description><![CDATA[<p>将以下文本内容存放入NUTCH_HOME\bin 目录下 ， 命名为nutch.bat，设置以下JAVA_HOME 和 NUTCH_HOME，然后在命令行运行 %NUTCH_HOME%\bin\nutch</p>
<p>&nbsp;@echo off<br />set JAVA_HEAP_MAX=&quot;-Xmx512M&quot;<br />if not &quot;%1&quot;==&quot;&quot; goto INIT else goto echoMSG<br />:echoMSG<br />&nbsp; echo Title:欢迎使用北京线点科技 Nutch 运行脚本<br />&nbsp; echo Author:jaddy0302 mail:jaddy0302@126.com QQ:5622928<br />&nbsp; echo Site:http://www.xd-tech.com.cn 线点科技 专业垂直搜索引擎产品<br />&nbsp; echo Nutch Version: 0.7.2<br />&nbsp; echo Usage: nutch COMMAND <br />&nbsp; echo where COMMAND is one of:<br />&nbsp; echo&nbsp;&nbsp; crawl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; one-step crawler for intranets<br />&nbsp; echo&nbsp;&nbsp; admin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; database administration, including creation<br />&nbsp; echo&nbsp;&nbsp; inject&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inject new urls into the database<br />&nbsp; echo&nbsp;&nbsp; generate&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; generate new segments to fetch<br />&nbsp; echo&nbsp;&nbsp; fetchlist&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print the fetchlist of a segment<br />&nbsp; echo&nbsp;&nbsp; fetch&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fetch a segment's pages<br />&nbsp; echo&nbsp;&nbsp; parse&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; parse a segment's pages<br />&nbsp; echo&nbsp;&nbsp; index&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; run the indexer on a segment's fetcher output<br />&nbsp; echo&nbsp;&nbsp; merge&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; merge several segment indexes<br />&nbsp; echo&nbsp;&nbsp; dedup&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; remove duplicates from a set of segment indexes<br />&nbsp; echo&nbsp;&nbsp; updatedb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; update db from segments after fetching<br />&nbsp; echo&nbsp;&nbsp; updatesegs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; update segments with link data from the db<br />&nbsp; echo&nbsp;&nbsp; mergesegs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; merge multiple segments into a single segment<br />&nbsp; echo&nbsp;&nbsp; readdb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; examine arbitrary fields of the database<br />&nbsp; echo&nbsp;&nbsp; analyze&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adjust database link-analysis scoring<br />&nbsp; echo&nbsp;&nbsp; prune&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prune segment index(es) of unwanted content<br />&nbsp; echo&nbsp;&nbsp; segread&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; read, fix and dump segment data<br />&nbsp; echo&nbsp;&nbsp; segslice&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; append, join and slice segment data<br />&nbsp; echo&nbsp;&nbsp; server&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; run a search server<br />&nbsp; echo&nbsp;&nbsp; namenode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; run the NDFS namenode<br />&nbsp; echo&nbsp;&nbsp; datanode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; run an NDFS datanode<br />&nbsp; echo&nbsp;&nbsp; ndfs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; run an NDFS admin client<br />&nbsp; echo&nbsp;&nbsp; jobtracker&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; run the MapReduce job Tracker node <br />&nbsp; echo&nbsp;&nbsp; tasktracker&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; run a MapReduce task Tracker node <br />&nbsp; echo&nbsp; or<br />&nbsp; echo&nbsp;&nbsp; CLASSNAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; run the class named CLASSNAME<br />&nbsp; echo Most commands print help when invoked w/o parameters.<br />&nbsp; goto end;<br />:INIT&nbsp; <br />&nbsp; set NUTCH_HOME=C:\work\nutch-0.7.2<br />&nbsp; if &quot;%NUTCH_HOME%&quot;==&quot;&quot; set NUTCH_HOME=..&nbsp; <br />&nbsp; set CLASSPATH=%NUTCH_HOME%;%NUTCH_HOME%\conf;%NUTCH_HOME%\plugin<br />&nbsp; @echo @echo off&gt;setclasspath.bat<br />&nbsp; for %%i in (%NUTCH_HOME%\nutch-*.jar) do @echo set CLASSPATH=%%CLASSPATH%%;%%i&gt;&gt;setclasspath.bat;&amp; for %%i in (%NUTCH_HOME%\lib\*.jar) do @echo set CLASSPATH=%%CLASSPATH%%;%%i&gt;&gt;setclasspath.bat;<br />&nbsp; goto EXEC<br />:EXEC<br />&nbsp; call setclasspath<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;crawl&quot; set CLASS=org.apache.nutch.tools.CrawlTool<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;admin&quot; set CLASS=org.apache.nutch.tools.WebDBAdminTool<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;inject&quot; set CLASS=org.apache.nutch.db.WebDBInjector<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;generate&quot; set CLASS=org.apache.nutch.tools.FetchListTool<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;fetchlist&quot; set CLASS=org.apache.nutch.pagedb.FetchListEntry<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;fetch&quot; set CLASS=org.apache.nutch.fetcher.Fetcher<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;parse&quot; set CLASS=org.apache.nutch.tools.ParseSegment<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;index&quot; set CLASS=org.apache.nutch.indexer.IndexSegment<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;merge&quot; set CLASS=org.apache.nutch.indexer.IndexMerger<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;dedup&quot; set CLASS=org.apache.nutch.indexer.DeleteDuplicates<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;updatedb&quot; set CLASS=org.apache.nutch.tools.UpdateDatabaseTool<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;updatesegs&quot; set CLASS=org.apache.nutch.tools.UpdateSegmentsFromDb<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;mergesegs&quot; set CLASS=org.apache.nutch.tools.SegmentMergeTool<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;readdb&quot; set CLASS=org.apache.nutch.db.WebDBReader<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;prune&quot; set CLASS=org.apache.nutch.tools.PruneIndexTool<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;segread&quot; set CLASS=org.apache.nutch.segment.SegmentReader<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;segslice&quot; set CLASS=org.apache.nutch.segment.SegmentSlicer<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;analyze&quot; set CLASS=org.apache.nutch.tools.LinkAnalysisTool<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;server&quot; set CLASS=org.apache.nutch.searcher.DistributedSearch$Server<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;namenode&quot; set CLASS=org.apache.nutch.ndfs.NDFS$NameNode<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;datanode&quot; set CLASS=org.apache.nutch.ndfs.NDFS$DataNode<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;ndfs&quot; set CLASS=org.apache.nutch.fs.TestClient<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;jobtracker&quot; set CLASS=org.apache.nutch.mapReduce.JobTracker<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;tasktracker&quot; set CLASS=org.apache.nutch.mapReduce.TaskTracker<br />&nbsp; call &quot;%JAVA_HOME%\bin\java&quot; %JAVA_HEAP_MAX% -classpath &quot;%CLASSPATH%&quot; %CLASS% %2 %3 %4 %5 %6 %7 %8 %9<br />:end<br /></p>
<p>&nbsp;</p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=57</link>
			<title><![CDATA[搜索引擎重复网页发现技术分析]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Tue,10 Jul 2007 17:55:58 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=57</guid>	
		<description><![CDATA[一. 介绍<br /><br />统计结果表明，近似镜像网页数占总网页数的比例高达全部页面的29%,而完全相同的页面大约占全部页面的22%。这些重复网页有的是没有一点改动的拷贝，有的在内容上稍作修改，比如同一文章的不同版本，一个新一点，一个老一点，有的则仅仅是网页的格式不同（如 HTML, Postscript）,文献[Models and Algorithms for Duplicate Document Detection 1999年]将内容重复归结为以下四个类型:<br /><br />1.如果2篇文档内容和格式上毫无差别，则这种重复叫做full-layout duplicate。<br /><br />2.如果2篇文档内容相同，但是格式不同，则叫做full-content duplicates<br /><br />3.如果2篇文档有部分重要的内容相同，并且格式相同，则称为partial-layout duplicates<br /><br />4.如果2篇文档有部分重要的内容相同，但是格式不同，则称为partial-content duplicates<br /><br />近似重复网页发现技术就是通过技术手段快速全面发现这些重复信息的手段.如何快速准确地发现这些内容上相似的网页已经成为提高搜索引擎服务质量的关键技术之一。发现重复或者近似网页对于搜索引擎有很多好处:<br /><br />1. &nbsp; &nbsp; &nbsp; 首先，如果我们能够找出这些重复网页并从数据库中去掉，就能够节省一部分存储空间，进而可以利用这部分空间来存放更多的有效网页内容，同时也提高了web检索的质量。<br /><br />2. &nbsp; &nbsp; &nbsp; 其次，如果我们能够通过对以往搜集信息的分析，预先发现重复网页，在今后的网页搜集过程中就可以避开这些网页，从而提高有效网页的搜集速度。有研究表明重复网页随着时间级别不发生太大变化,所以这种从重复页面集合中选择部分页面进行索引是有效的.<br /><br />3. &nbsp; &nbsp; &nbsp; 另外，如果某个网页的镜像度较高，也就预示着该网页相对重要，在搜集网页时应赋予它较高的优先级，而当搜索引擎系统在响应用户的检索请求并对输出结果排序时，应该赋予它较高的权值。<br /><br />4. &nbsp; &nbsp; &nbsp; 从另外一个角度看,如果用户点击了一个死链接,那么可以将用户引导到一个相同页面,这样可以有效的增加用户的检索体验.因而近似镜像网页的及时发现有利于改善搜索引擎系统的服务质量。<br /><br /><br /><br />二. 基本处理流程<br /><br />通过分析现有技术,可以归纳出以下几个解决该问题的核心技术点,每个不同的技术基本上是由这几个技术点构成,无非是具体采纳的技术不同而已:<br /><br /><br /><br />1. &nbsp; 文档对象的特征抽取:将文档内容分解,由若干组成文档的特征集合表示,这一步是为了方面后面的特征比较计算相似度.<br /><br />2. &nbsp; 特征的压缩编码:通过HASH编码等文本向数字串映射方式以方便后续的特征存储以及特征比较.起到减少存储空间,加快比较速度的作用.<br /><br />3. &nbsp; 文档相似度计算:根据文档特征重合比例来确定是否重复文档.<br /><br />4. &nbsp; 聚类算法:通过叠代计算算出哪些文档集合是根据相似度计算是相近的;<br /><br />5. &nbsp; 工程化问题:出于海量数据计算速度的考虑,提出一些速度优化算法以使得算法实用化.<br /><br /><br /><br />我们可以从几个不同的角度对于现有的方法进行分类:<br /><br />l &nbsp; 按照利用的信息，现有方法可以分为以下三类<br /><br />1．只是利用内容计算相似<br /><br />2．结合内容和链接关系计算相似<br /><br />3．结合内容，链接关系以及url文字进行相似计算<br /><br />评价:现有绝大部分方法还是利用文本内容进行相似识别,其它两种利用链接关系以及URL文字的方法还不是很成熟,而且从效果看引入其它特征收效并不明显,所以从实际出发还是选择利用内容进行相似计算的算法. <br /><br /><br /><br />l &nbsp; 按照特征提取的粒度现有方法可以分为以下三类<br /><br />1. &nbsp; 按照单词这个级别的粒度进行特征提取.<br /><br />2. &nbsp; 按照SHINGLE这个级别的粒度进行特征提取.SHNGLE是若干个连续出现的单词,级别处于文档和单词之间,比文档粒度小,比单词粒度大.<br /><br />3. &nbsp; 按照整个文档这个级别的粒度进行特征提取<br /><br />评价:<br /><br />目前这个领域里面很多工作借鉴类似于信息检索的方法来识别相似文档,其本质和SHINGLE等是相同的，都是比较两个文档的重合程度，但是区别是SHINGLE是将若干单词组成片断，粒度比较大，而信息检索类方法其实是用单词作为比较粒度，粒度比较小，粒度越大计算速度越快，而粒度越小计算速度越慢，所以信息检索类方法是不实用的，而且对SHINGLE的改进以及新提出的方法的发展趋势也是粒度越来越大，这样才能解决实际使用中速度的问题。粒度最大的极端情况是每个文档用一个HASH函数编码（比如MD5），这样只要编码相同就说明文档完全相同，但是粒度太大带来的问题是对于细微的变化文档无法判别，只能判断是否完全相同，至于部分相同以及相同的程度无法判断.<br /><br />所以，现有方法也可以从以下角度分类：粒度。最小粒度：单词；中等粒度：SHINGLE；最大粒度：整个文档；可见SHINGLE类方法其实是在速度和精确程度上的一种折中方法。可以探讨不同粒度的效果，比如以句子为单位进行编码，以段落为单位编码等不同粒度的编码单位，还可以考虑动态的编码：首先以自然段落编码进行判别，如果发现部分相似，然后针对不同的部分再以细小粒度比如句子甚至单词级别的比较 所谓SUPER SHINGLE就是将粒度放大得到的。粒度越大，好处是计算速度越快（对于MD5整个文档来说，每个文档一个HASH编码，然后排序，将相同的找出，是速度最快的），缺点是会遗漏很多部分相似的文档；粒度越小，好处是招回率比较高，缺点是计算速度减慢。<br /><br /><br /><br />l &nbsp; 按照去处重复的级别进行分类,去处重复三个级别:<br /><br />1. &nbsp; 镜像站点:根据站点内相似页面多少进行判断.实现相对简单.<br /><br />2. &nbsp; 完全相同网页:实现相对简单并且速度比较块,可以根据页面MD5整个文档来说，每个文档一个HASH编码，然后排序，将相同的找出.<br /><br />3. &nbsp; 部分相同页面:实现相对负责,目前大多工作在这个部分.<br /><br /><br /><br />评价:<br /><br />三个级别应该从最高级别到较低级别分别进行,因为有很大比例(22%)的内容是完全相同的,这个部分实现起来相对简单,而且如果这个部分已经识别,那么针对部分相同页面的计算量会大量减少,这样应该可以减少总体的计算时间..<br /><br /><br /><br />l &nbsp; 按照去重的时机,可以分为以下三类<br /><br />（1） &nbsp; 抓取页面的时候去重，这样可以减少带宽以及减少存储数量；<br /><br />（2） &nbsp; 索引之后进行去重；<br /><br />（3） &nbsp; 用户检索时候进行再次去重；增加准确性，耗费时间；<br /><br /><br /><br />评价:<br /><br />可以结合三个时机某个或者所有都结合,对于GOOGLE来说,很可能是结合了2和3两种方法, GOOGLE的很多思路建立在后台计算和实时计算联合，比如相关度计算，后台计算重要性得分，在用户输入查询后得到初始数据集合，然后根据这个数据集合之间文档的关系重新调整顺序；比如去处重复，首先在后台进行重复发现，为了增加精确度，在返回查询结果后，在返回文档集合内，又根据&ldquo;描述&rdquo;部分重新计算哪些文档是重复的，这样增加了准确性，估计其它很多相关算法也采取这种联合策略，为了加快速度，实时计算部分可以和CACHE部分结合进行计算。<br /><br /><br /><br />l &nbsp; 按照不同的特征选择方法,有几种方式:<br /><br />1. &nbsp; 完全保留特征<br /><br />2. &nbsp; 特征选择,设置不同的选择策略来保留部分特征,抛弃其它特征<br /><br />a. &nbsp; 比如对于单词级别的抛弃权重小的单词(I-MATCH)<br /><br />b. &nbsp; 对于SHINGLE方法,可以保留部分SHINGLE抛弃其它SHINGLE<br /><br />(1) &nbsp; 一种是保留FINGERPRINT第I个位置为0的SHINGLE,其它抛弃;<br /><br />(2) &nbsp; 一种是每隔I个SHINGLE进行抽样保留,其它抛弃;这两种得到的文档SHINGLE数目是变长的;<br /><br />(3) &nbsp; 一种是选择最小的K个SHINGLE,这种得到定长的SHINGLE数目;<br /><br />(4) &nbsp; 用84个RABIN FINGERPRINT函数对于每个SHINGLE进行计算,保留数值最小的84个FINGERPRINT,这个方法是定长的.<br /><br /><br /><br />对于SHINGLE类方法来说,还可以区分为:定长的和变长的block切分算法<br /><br />定长算法：速度快，但是如果内容有稍微变化（比如插入或者删除一个字符或者单词），其影响会比较大。比如Shingle及其改进方法（Super-Shingle），CSC及其改进方法（CSC-SS）。<br /><br />变长算法：速度相对慢，但是内容变化只是造成局部影响。比如CDC,TTTD等算法。<br /><br /><br /><br />评价: 为了提高计算速度,一种策略是在特征提取的时候,抛弃部分特征,保留部分特征,通过减少特征数目来加快计算速度.另外一个策略是粒度尽可能加大,比如SUPER-SHINGLE,MEGA-SHINGLE甚至是文档基本;为了提高算法效果,策略是采取变长的内容切割算法比如CSC算法等;这三种策略是方法加快速度和准确性的发展方向.<br /><br /><br /><br /><br /><br />一些初步的结论:<br /><br />1. &nbsp; 对于信息检索类型的方法来说,由于其特征选择是基于单词的,所以计算速度是个根本的问题,所以基本上是不实用的;<br /><br />2. &nbsp; 从利用的信息来看,实用的系统还是应该立足于只是利用文本内容来判别相似性,排除掉利用链接信息等方法;<br /><br />3. &nbsp; 从算法特征抽取粒度来看,应该立足于SHINLGE类的粒度甚至是文档级别的粒度算法;而SHINGLE类别的算法又应该优先选择抛弃部分特征的算法以及变长的算法;<br /><br />4. &nbsp; 从去重级别角度考虑,应该将完全相同的文档和部分相同的文档识别分开进行,而且首先进行完全相同文档的识别,这样会有效加快计算速度;<br /><br />5. &nbsp; 从去重时机考虑,可以考虑结合后台去重以及实时去重,这样增加去重的效果;<br /><br />6. &nbsp; 从压缩编码方法来看,最有效的方式可能是RABIN FINGERPRINT变体算法;<br /><br />7. &nbsp; 从聚类方法来看,最有效的方式可能是UNION FIND算法,目前比较快的算法基本上都采用这个方法;<br /><br />8. &nbsp; 从整体方法选择来看,应该选择改进的SHINLGE方法,在此基础上进行进一步的改进;<br /><br /><br /><br /><br /><br />三. 方法效率比较<br /><br />1. &nbsp; SHINGLING 方法:时间效率O((mn)2) ,其中 m是SHINGLE的大小,n是文档数目.计算时间为:3千万文档,10台机器算一天,或者一台机器算10天;<br /><br />2. &nbsp; 改进的SHINGLE方法(On the Evolution of Clusters of Near-Duplicate Web Pages.):时间效率接近于线性的O(n),计算时间为:1亿5千万网页计算3个小时;<br /><br />3. &nbsp; IMACH方法: 最坏的情况下时间复杂度是(O(d log d))，速度比较快<br /><br />4. &nbsp; BLOOM FILTER方法:10k数据花费大约66ms;<br /><br /><br /><br />从计算效率考虑,速度排序为:<br /><br />1. &nbsp; 改进的SHINGLE方法;<br /><br />2. &nbsp; IMATCH方法;<br /><br />3. &nbsp; BLOOM FILTER方法;<br /><br />4. &nbsp; SHINGLE方法;<br /><br /><br /><br /><br /><br />四. 目前代表性解决方法分析<br /><br />1. &nbsp; Shingle方法(1997年)<br /><br />a. &nbsp; 特征抽取<br /><br />Shingle方法:所谓Shingle类似于自然语言处理中常用的N-GRAM方法,就是将相互连续出现窗口大小为N的单词串作为一个Shingle,两者的不同点在于Shingle是这些串的集合,相同的串会合并为一个,而N-GRAM则由于考虑的是文本线性结构,所以没有相同合并步骤.每个Shingle就是文档的一个特征,一篇文档就是由所有这些Shingle构成的.<br /><br /><br /><br />b. &nbsp; 压缩编码<br /><br />40 bit长度 Rabin FingerPrint方法;至于存储方式则类似于传统信息检索领域的倒排文档技术,存储&lt;Shingle,ID&gt;信息以记录某个特征在哪些文档中出现过,然后进一步计算文档的相似性;<br /><br /><br /><br />c. &nbsp; 文档相似度计算<br /><br />(1) &nbsp; 相似度:任意两个文档A和B,相似度指的是两者相同的Shingle数目占两者Shingle数目总和的比例;<br /><br />(2) &nbsp; 包含度:指的是两者相同的Shingle数目占某篇文档Shingle数目的比例;<br /><br /><br /><br />d. &nbsp; 优化措施:<br /><br />(1) &nbsp; 分布计算然后合并;<br /><br />(2) &nbsp; 抛弃超高频出现Shingle,分析发现这些Shingle是无意义的片断;<br /><br />(3) &nbsp; 完全相同文档保留一份进行聚类;(文档是否完全相同根据压缩编码后数值是否相同判断)<br /><br />(4) &nbsp; Super Shingle:关于Shingle的Shingle,从更大结构上计算相似性以节省存储空间;<br /><br /><br /><br /><br /><br />2. &nbsp; Google可能采取的方法<br /><br />a. &nbsp; 特征抽取<br /><br />类似于Shingle方法,不同点在于:对于每个单词根据HASH函数决定属于哪个LIST,这样每个文档由若干个这样的LIST构成;<br /><br /><br /><br />b. &nbsp; 压缩编码<br /><br />FingerPrint方法;对于组成文档的LIST进行FingerPrint方法计算; <br /><br /><br /><br />c. &nbsp; 文档相似度计算<br /><br />&nbsp; &nbsp; 编辑距离(Edit Distance):如果两个文档有任何一个FingerPrint相似就判断为内容接近.<br /><br /><br /><br />d. &nbsp; 聚类方法<br /><br />首先对&lt;FingerPrint,Doc ID&gt;按照Doc ID进行排序;然后采取Union Find聚类方法,聚类结果就是相似文档集合;<br /><br /><br /><br />e. &nbsp; 优化措施<br /><br /><br /><br />3. &nbsp; HP实验室方法(2005年)<br /><br />a. &nbsp; 特征抽取<br /><br />基于内容的Chunk方法:变长而非定长的Chunk算法(TTTD算法);将一篇文档分解为若干个长度不同的Chunk,每个Chunk作为文本的一个特征.与shingle方法相比这种变长Chunk方法能够增加系统招回率;<br /><br /><br /><br />b. &nbsp; 压缩编码<br /><br />128bit MD5 HASH方法;每篇文章压缩编码后由若干 &lt;Chunk 长度, 定长HASH编码&gt;二元组构成;<br /><br /><br /><br />c. &nbsp; 文档相似度计算<br /><br />(1) &nbsp; 构建所有文档和Chunk构成的二分图;<br /><br />(2) &nbsp; 找到文档A包含的所有CHUNK,计算这些CHUNK还被哪些其它文档包含;<br /><br />(3) &nbsp; 计算这些文档和A的相似性;<br /><br /><br /><br />d. &nbsp; 聚类方法:Union Find 算法<br /><br />e. &nbsp; 优化措施:Bipartite 划分,本质上是将大规模数据分成小规模数据进行识别然后再合并结果.相当于分布计算;<br /><br /><br /><br />4．bloom filter(2005年)<br /><br />(1).特征抽取方法<br /><br />基于内容的语块（Content-defined chunking CDC）：CDC将文档切分为变长的内容片断，切分边界由rabin fringerprint和预先制定的maker数值匹配来进行判断。<br /><br />(2)编码（构造 bloom filter集合元素）<br /><br />对于切分的片断进行编码。bloom filter的编码方式如下：整个文档是由片断构成的，文档由长为m的二值数组表示。在将一个元素（内容片断）进行编码插入集合的时候，利用k个不同的hash函数进行编码，每个hash函数设置m个位置的某个位置为1。这种技术以前主要用来进行判断某个元素是否被集合包含。<br /><br />（3）相似度计算方法<br /><br />bloom filter方法：对于两个已经编码的文档（两个长度为m的二值数组），通过bit逻辑运算AND计算，如果两者很多位置都同时为1，那么两个文档被认为是近似的。<br /><br />（4）优势<br /><br />1．文档编码形式简洁，便于存储。<br /><br />2．由于计算相似性是BIT逻辑运算，所以速度快。<br /><br />3．相对Shingling 方式来说便于判断文档包含关系。（某个文档包含另外一个短小的文档）<br /><br /><br /><br />5．内容+链接关系（2003年）<br /><br />1．特征抽取方法<br /><br />&nbsp; 这个方法在抽取特征的时候同时考虑了文档的内容因素以及链接关系因素。<br /><br />&nbsp; 内容因素：通过Random Projection技术将文档内容从高维空间映射到低维空间，并且由实数表示，如果两个文档映射后的数字越接近则表明两者内容越相似。<br /><br />&nbsp; 链接因素：通过考虑类似于PAGERANK的连接关系，将某个网页的内容因素计算获得的分值通过链接传播到其他网页（传播关系见下列公式），多次叠代计算后得到每个页面的链接得分。<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; <br /><br /><br /><br /><br /><br /><br />2．相似度计算方法<br /><br />&nbsp; 每个文档由二元组&lt;RP,HM&gt;构成，RP代表内容部分的数值，HM代表链接关系代表的数值。如果两个文档每个项之间的差值都小于指定值，则判断两个文档是相似的。<br /><br />3．效果<br /><br />只采取内容精度达到90%，两者结合精度达到93%。从中看出，链接的作用并不明显。这可能跟这个方法的链接使用方法有关，因为通过链接计算的还是内容的情况。<br /><br /><br /><br />6．I-Match方法（2002年）<br /><br />（1）I-Match不依赖于完全的信息分析，而是使用数据集合的统计特征来抽取文档的主要特征，将非主要特征抛弃。输入一篇文档，根据词汇的IDF值过滤出一些关键特征，并且计算出这篇文档的唯一的Hash值，那些Hash值相同的文档就是重复的。<br /><br />（2）使用SHA1作为Hash函数，因为它的速度很快而且适用于任何长度。SHA-1生成一个20-byte 或者160-bit 的hash值并且使用一个安全的冲突消解算法，使得不同的标志串(token streams)生成相同的hash值的概率非常低。.把&lt;docid, hashvalue&gt;元组插入树结构的时间复杂度是(O(d log d))，其他的如检索数据结构（hash表）需要(O(d))。对重复(duplicate)的识别是在将数据插入hash数组或是树结构中进行的，任何的hash值的冲突就表示检测到一个重复内容。<br /><br />（3）最坏的情况下时间复杂度是(O(d log d))，速度比较快。<br />]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=56</link>
			<title><![CDATA[如何才能做好一个垂直搜索引擎 ]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Wed,20 Jun 2007 17:40:14 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=56</guid>	
		<description><![CDATA[本文先引用几句话:&nbsp; <br /><br />&ldquo;确解用户之意，切返用户之需。&rdquo; <br /><br />&ldquo;门户网站都想着是怎样省钱，而不是怎样花钱来买技术。&rdquo; <br /><br />&ldquo;搜索引擎不是人人都能做的领域，进入的门槛比较高。&rdquo; <br /><br />&ldquo;只是优秀还不够，最好的方式是将一件事情做到极致。&rdquo;(google十大真理) <br /><br />&ldquo;做搜索引擎需要专注&rdquo;&nbsp;&ldquo;对于一项排到第四的业务，门户很难做到专注。&rdquo; <br /><br />&ldquo;用户无法描述道他要找什么，除非让他看到想找的东西。&rdquo; <br /><br />&ldquo;所谓楔形，其实就是个倒三角，倒三角的尖端部分代表搜索技术，中部是基于技术的产品应用平台，最上端是对整个搜索引擎用户人群文化的认识和理解，以及现代公司竞争最关键也最捉摸不定的所谓品牌。&rdquo; <br /><br />&ldquo;楔形&rdquo;蕴涵的另一个意义是:楔子要打到墙里，尖端是否锐利很重要，但楔子的破坏性有多强，究竟能在墙面挤压出多大的空间，其中端、后端的沉稳与厚重才是关键。 <br /><br />搜索引擎的技术和理念都是需要时间和经验的积累的，更是需要长期不断的完善进步的，绝对不要认为可以一蹴而就，要达到一个相对成熟领先的搜索引擎从开始到领先的周期一般需要是四年。着急不得。原因是因为搜索引擎太复杂，而且&ldquo;用户无法描述他要找什么，除非让他看到想找的东西。&rdquo;&nbsp;一切都需要摸索，尝试，问题需要一个一个解决，用户的需要得一点点的挖掘。 <br /><br />搜索引擎是一个产品，给用户提供服务的产品，需要长期的不断的改进升级调整才能持续不断的提用户体验，需要满足用户不断增长并且变化的需求、需要不断适应网络的变化。这是因为网络环境是不断变化的、网民的需求也是不断变化的。千万不要把搜索当成项目来做，做完了撂那让用户去用那你肯定没戏。在搜索引擎领域是讲体验的、新的引擎如果用户体验一旦整体上有领先一年以上的差距并且持续2年，那前期的领先者的优势就荡然无存，因为搜索引擎的用户转移成本相对而言是比较低的而且口碑是最佳的传播方式。如果一个搜索引擎不能持续不断的技术创新理念创新，那对于这个搜索引擎来说就等于死亡。我们一般形容搜索引擎的领先是以时间计算的。比如:中搜离百度整体差距&times;年，百度离google的整体差距&times;年，&hellip;&hellip;只要你能在用户体验上保持一年的领先优势持续2年，不需要炒作，一切纷至沓来。在用户体验面前，任何的炒作都显得很渺小。 <br /><br />作垂直搜索引擎，麻雀虽小，但是五脏俱全。无论理念文化、产品管理、应用、技术都和搜索引擎的楔形理论没有什么区别。所以要做好一垂直搜索必须解决这几个方面。 <br /><br />楔形的尖:垂直搜索技术。&nbsp; <br /><br /><br />垂直搜索技术主要分为两个层次:模板级和网页库级。模板级是针对网页进行模板设定或者自动生成模板的方式抽取数据，对网页的采集也是针对性的采集，适合规模比较小、信息源少且稳定的需求，优点是快速实施、成本低、灵活性强，缺点是后期维护成本高，信息源和信息量小。网页库级就是在信息源数量上、数据容量上检索容量上、稳定性可*性上都是网页库搜索引擎级别的要求，和模板方式最大的区别是对具体网页不依赖，可针对任意正常的网页进信息采集信息抽取&hellip;&hellip;。这就导致这种方式数据容量上和模板方式有质的区别，但是其灵活性差、成本高。当然模板方式和网页库级的方式不是对立的，这两者对于垂直搜索引擎来说是相互补充的，因为技术只是手段，目的是切反用户之需。本文谈及的技术主要是指网页库级别垂直搜索引擎技术。 <br /><br />搜索引擎的确是一项对技术要求比较高的应用，几年前相关的人才也比较少。现在搜索技术人才多了，相关的技术和技术的应用得相对以前而言更加成熟，但是竞争也更加激烈了。垂直搜索大致需要以下技术: <br /><br />1.&nbsp;信息采集技术 <br /><br />2.&nbsp;网页信息抽取技术 <br /><br />3.&nbsp;信息的处理技术，包括:重复识别、重复识别、聚类、比较、分析、语料分析等 <br /><br />4.&nbsp;语意相关性分析 <br /><br />5.&nbsp;分词 <br /><br />6.&nbsp;索引 <br /><br />信息采集技术，垂直搜索引擎spider和网页库的spider相比应该是更加专业，可定制化。可定向性的采集和垂直搜索范围相关的网页忽略不相关的网页和不必要的网页，选择内容相关的以及适合做进一步处理的网页深度优先采集、对页面有选择的调整更新频率&hellip;&hellip;，采集可通过人工设定网址和网页分析url方式共同进行。垂直搜索对信息的更新有着特别的要求，根据这些特点可以从以下几点考虑1.信息源的稳定性(不能让信息源网站感觉到spider的压力)2.抓取的成本问题3.对用户体验改善程度。根据以上几点制定一种比较好的策略，要做到恰到好处。策略上可以评估网站/网页更新的系数、网站/网页的重要系数、用户点击系数(或曝光系数)、网站稳定系数&hellip;&hellip;，根据这些系数来确定对这些网站/网页更新的频率。再由于新信息和更新了的信息list页面前面或者首页，所以对网页进行很好的分级可以以低成本很好的解决更新问题，系数比较低的网页一月update一次，稍微高点的一周update一次、中等的几天到一天一次、高的几小时到几分钟一次。类似搜索引擎的大库、周库、日库，小时库&hellip;&hellip; <br /><br />基于视觉网页块分析技术，模拟IE浏览器的显示方式，对网页进行解析。根据人类视觉原理，把网页解析处理的结果，进行分块，再根据需要，对这些块进行处理，如:采集定向、介绍抽取和一些必要的内容的抽取正文抽取&hellip;&hellip; <br /><br />结构化信息抽取技术，将网页中的非结构化数据按照一定的需求抽取成结构化数据。有两种方式，简单的就是模板方式，另外就是对网页不依赖web结构化信息抽取方式，这两种方式可以互取长处，以最简单最有效的办法满足需求。垂直搜索引擎和通用搜索引擎最大的区别就是对网页信息结构化抽取后再结构化数据进行深度的处理，提供专业的搜索服务。所以web结构化信息抽取的技术水平是决定垂直搜索引擎质量的重要技术指标。其实web结构化信息抽取在百度、google早已经广泛应用了，如:MP3、图片搜索、google的本地搜索就是从网页库抽取出企业信息，添加到其地图搜索中的，google通过这种技术正在颠覆做内容的方式。同样的技术应用还在qihoo、sogou购物、shopping等各种应用中体现。 <br /><br />简单的语法分析，简单的语法分析在搜索引擎中非常重要，可以通过简单的语法分析来改善数据的质量，低成本的获得某类信息，改善排序，寻找需要的内容&hellip;&hellip; <br /><br />信息处理技术，信息处理包括的范围比较广，主要包括去重、聚类、分析&hellip;&hellip;，这根据需要相关的技术就非常多。 <br /><br />数据挖掘，找出您的信息的关联性对于垂直搜索来说非常重要，有效，可以在这些相关性上为用户提供更细致的服务。 <br /><br />分词技术，面向搜索的分词技术，建立和您的行业相关的词库。注意这是面向搜索的分词，不是面向识别和准确的分词。就这个工作安排十几个人不停的维护也不会嫌多。 <br /><br />索引技术，索引技术对于垂直搜索非常关键，一个网页库级的搜索引擎必须要支持分布索引、分层建库、分布检索、灵活的更新、灵活的权值调整、灵活的索引和灵活的升级扩展、高可*性稳定性冗余性。还需要支持各种技术的扩展，如偏移量计算等。 <br /><br />其它技术，略。 <br /><br />垂直搜索引擎的技术评估应从以下几点来判断 <br /><br />1.&nbsp;全面性 <br /><br />2.&nbsp;更新性 <br /><br />3.&nbsp;准确性 <br /><br />4.&nbsp;功能性 <br />]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=55</link>
			<title><![CDATA[搜索技术已经发生了改变，您是否跟上了它的发展呢？]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Wed,20 Jun 2007 16:21:54 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=55</guid>	
		<description><![CDATA[<p><a name="sec1"><span class="atitle">寻找并有所发现</span></a></p>
<p>您输入一个关键字列表，点击 <b>Search</b> 按钮，马上将得到相关文档的列表。这非常容易，不是吗？是的，的确很容易。这是什么魔法吗？其实并不是。</p>
<p>信息检索或简称为&ldquo;搜索&rdquo;，目前是计算机科学中的一个非常重要的领域。从技术的角度来看，<a href="http://en.wikipedia.org/wiki/Inverted_index"><font color="#5c81a7">倒排索引</font></a>用于存储文档中出现的关键字，并且支持搜索，它是一种广为熟悉并且精确描述的数据结构。</p>
<p>公正地说，查找包含关键字的文档列表是件很容易的事情，但是，排序技术却涉及到很多未知的技术和深奥的计算公式。事实上，对数以千计的、包含请求搜索的关键字的文档进行排序，以便将与用户最相关的文档列在最上方，这并不是一件容易的任务。尽管如此，用于排序结果的数学模型通常是常用的<a href="http://en.wikipedia.org/wiki/Vector_space_model"><font color="#5c81a7">词频/倒排文档频率模型</font></a>的变体，而对于这种模型，已有很好的研究基础。</p>
<table cellspacing="0" cellpadding="0" width="40%" align="right" border="0">
    <tbody>
        <tr>
            <td width="10"><img height="1" alt="" src="http://www.ibm.com/i/c.gif" width="10" /></td>
            <td>
            <table cellspacing="0" cellpadding="5" width="100%" border="1">
                <tbody>
                    <tr>
                        <td bgcolor="#eeeeee">每年，<a href="http://www.nist.gov/"><font color="#5c81a7">美国国家标准局</font></a>都组织关于搜索引擎的&ldquo;奥运比赛&rdquo;：称为 TREC 挑战赛，这一赛事提供给参赛者海量的文档，而他们必须在这些文档中查找出满足要求的少部分内容。不幸的是，大多数商业搜索引擎都拒绝使用这类科学的方法进行评估。</td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
<p>除了使用关键字进行搜索之外，您还可以使用浏览的方法进行搜索，这种方法使用分层结构的、类似于目录的结构来定位文档。有些时候将这些分层结构称为<b>分类</b>，通常由专家来构建这些分类。例如曾经很受欢迎的 <a href="http://dmoz.org/"><font color="#5c81a7">Open Directory</font></a> 项目，这是一种用于 Web 站点的常规分类。</p>
<p>这个基本搜索方法的一种变体是<b>高级搜索</b>，其中使用预先选定的一组特定字段的值来执行搜索，如标题、作者，等等。通常认为这是&ldquo;超级用户&rdquo;的特性，超级用户希望查找特定的来源，而不是有关特定主题的任何来源。例如，如果您知道准确的标题、作者名、出版时间、或者关于您正在查找的文档的一些其他精确信息，那么您就可以使用高级搜索。</p>
<p>尽管这不是&ldquo;高级&rdquo;用户专用的，但是高级搜索也并非适用于所有的用户。如果您了解关于您正在搜索的对象的细节信息，那么什么因素可能阻止您使用高级搜索，并成为所谓的超级用户呢？高级搜索可能很麻烦。我的看法是，用于定义这些高级条件的用户接口和计算机语言通常令人费解或非常复杂，以至于普通人难以使用。</p>
<p>但是事情正在发生变化，并且现在有更多的方法用于获得相关的内容。要了解搜索技术所经历的发展趋势，并且要了解如何获得所需的搜索结果，很重要的一点是，必须弄清楚下面两种使用搜索引擎的方法之间的区别：<b>发现</b>和<b>获得</b>。</p>
<p>通常在需要<i>发现</i> 网络上可用的资源时，您需要搜索 Web；在您开始进行搜索之前，您并不清楚可能存在什么样的资源。另一方面，当您在搜索自己的硬盘时，通常试图<i>获得</i> 某项已经存在的信息，而您只是不知道该信息的具体位置而已。以下是两个基本的场景：发现与获得之间的比较。换句话说，寻找关于某个特定主题所存在的内容与寻找某项已经知道的特定信息，这两种搜索是不相同的。</p>
<br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /><br /><img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" /></td>
        </tr>
    </tbody>
</table>
<table cellspacing="0" cellpadding="0" align="right" class="no-print">
    <tbody>
        <tr align="right">
            <td><img height="4" alt="" src="http://www.ibm.com/i/c.gif" width="100%" /><br />
            <table cellspacing="0" cellpadding="0" border="0">
                <tbody>
                    <tr>
                        <td valign="middle"><img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" /><br /></td>
                        <td valign="top" align="right"><a class="fbox" href="http://www.ibm.com/developerworks/cn/websphere/techjournal/0705_col_konopnicki/0705_col_konopnicki.html?S_TACT=105AGX52&amp;S_CMP=techcsdn#main"><b><font color="#996699">回页首</font></b></a></td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
<br /><br />
<p><a name="sec3"><span class="atitle">后过滤（Post-filtering）和方面（facet）：这是高级搜索的终结吗？</span></a></p>
<p>很明显，高级搜索主要用于获得场景，而这些场景很少出现在搜索 Web 的情况下。这正是为什么大多数最新的 Web <a href="http://www.readwriteweb.com/archives/top_100_alternative_search_engines.php"><font color="#5c81a7">搜索引擎</font></a>放弃了所谓的高级搜索特性的原因。另一方面，当您在搜索个人数据（或者甚至公司内部网）时，您通常知道关于正在查找的信息的一些细节信息。</p>
<p>这就产生了称为<b>面向方面的搜索</b>的新的搜索范例。面向方面的搜索的价值是，它使用户能够研究结果并且更精确地细化他们的搜索，而无需使用复杂的高级搜索语法所提供的布尔条件。当您使用支持面向方面的搜索特性的搜索引擎时，除了您的搜索结果之外，您还将得到一组<i>方面</i>，每个方面都描述了某种属性，如作者、出版日期，等等。对于其中的每个方面，您可以看见与搜索相关的各种可能的值所组成的列表，并且还提供了一个数字，用于表现包含对应值的结果的数量。</p>
<p>例如，假设您正使用词汇&ldquo;marketing chicken&rdquo;对您的计算机进行搜索。搜索引擎可能为这些词汇返回一个结果列表，同时包括下面的这些方面：</p>
<p><b>Source:Lotus Notes (34), Disk (26)<br />Author:John H. (12), David K (23), Others (25)<br />Updated:Last Week (15), Last Month (45)</b> </p>
<p>这意味着在搜索结果的范围中，其中 34 项存储于您的 Lotus&reg; Notes 电子邮件中，而有 26 项存储在您的硬盘上。如果不考虑存储位置，那么 John H. 是其中 12 项结果的作者，David K. 是其中 23 项结果的作者，而由其他人所撰写的内容共计 25 项。另外，如果不考虑存储位置和作者，那么在上周进行更新的有 15 项，而在上个月进行更新的有 45 项。</p>
<p>如何使用这些方面呢？很容易。这些方面都是链接，所以当您认为某个方面对您是最重要的，只需单击它即可，这将显示来自对应来源的筛选结果，而且所显示的结果将使用剩下的方面进行组织。例如，单击 <b>Lotus Notes</b> 链接，可能出现下列的方面：</p>
<p><b>Author:John H. (3), David K (11), Others (20)<br />Updated:Last Week (11), Last Month (23)</b> </p>
<p>当只考虑那些来自 Lotus Notes 的结果时，您可以通过深入研究最重要的方面并且更精确地定制搜索，直到找到所需的信息。您可以在任何时候撤消所做的选择，从而研究其他的路径。</p>
<p>这种方法的优点可能非常明显。当搜索结果中包含很多属性时，您可以采用简单而直观的方式对其进行研究，而无需求助于布尔逻辑。此外，因为通过数值表示了每个方面可用内容的潜在范围，所以您可以确保不会深入研究任何&ldquo;空&rdquo;的路径。</p>
<p>在 Internet 上的电子商务站点（如消费电子产品站点）中，当前最流行的是面向方面的搜索，这类产品信息有足够的特性和部分，以使得这种导航操作非常有意义。尽管对于标准的 Web 页面，面向方面的搜索目前看起来并不是很合适，但有足够的特性以使得面向方面的搜索适用于个人和内部网搜索引擎的环境，所以我相信在今后的几年中，随着我们越来越多地对电子邮件、个人文件和内部网信息进行搜索，我们将会更多地看到这种特性。</p>
<br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /><br /><img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" /></td>
        </tr>
    </tbody>
</table>
<table cellspacing="0" cellpadding="0" align="right" class="no-print">
    <tbody>
        <tr align="right">
            <td><img height="4" alt="" src="http://www.ibm.com/i/c.gif" width="100%" /><br />
            <table cellspacing="0" cellpadding="0" border="0">
                <tbody>
                    <tr>
                        <td valign="middle"><img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" /><br /></td>
                        <td valign="top" align="right"><a class="fbox" href="http://www.ibm.com/developerworks/cn/websphere/techjournal/0705_col_konopnicki/0705_col_konopnicki.html?S_TACT=105AGX52&amp;S_CMP=techcsdn#main"><b><font color="#996699">回页首</font></b></a></td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
<br /><br />
<p><a name="sec4"><span class="atitle">标记和社会化搜索：这是分类法的终结吗？</span></a></p>
<p>如前所述，您可以使用分类法对感兴趣的主题和相应的文档进行定位。尽管对于这些分类，很难进行维护。在创建一个新的文档时，必须将其与这种复杂数据结构中合适的类别关联。这引出了一种新的趋势，称为<a href="http://en.wikipedia.org/wiki/Folksonomy"><font color="#5c81a7"> <b>大众分类法</b> </font></a>：您可以对您撰写的或者访问的文档进行分类，而无需依赖分类专家或者其他人根据实际情况对信息加以分类。通过将文档关联于单个单词或者标记，就可以完成这项操作。然后，任何用户都可以搜索并利用这个标记空间，查看其中最频繁使用的标记，查看使用这个单词标记了哪些文档，等等。从理论上讲，标记将帮助更多的人找到更多的文档。例如，可以使用&ldquo;微电子学&rdquo;这个单词来标记一篇关于微电子学的文章，即使&ldquo;微电子学&rdquo;这个术语根本没有出现在文档本身的内容中。因此，如果使用这个词作为标记搜索微电子学相关的内容，那么将在搜索结果中找到该文档，这正是由于那位有远见或判断力的人创建了这个标记，并且标记本身具有动态实用性。而使用关键字进行搜索，则不会出现这种情况。</p>
<p>当然，在实践中，标记的使用可能会使得一些事情变得复杂。因为任何人都可以随意地建立标记，所以经过一段时间后，在搜索集合中无法防止无关标记或错误标记的出现。在企业环境中，安全性也是一个问题。如果不允许某些用户访问某个文档，那么当他们使用标记空间时，是否应该允许他们看到与这个文档相关联的标记呢？这种方法可以简化和改进在个人控制的信息集合（您的团队文件、您的照片）中的搜索，但是，同时会使得对大型企业范围内的信息集合的搜索变得更加复杂。</p>
<br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /><br /><img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" /></td>
        </tr>
    </tbody>
</table>
<table cellspacing="0" cellpadding="0" align="right" class="no-print">
    <tbody>
        <tr align="right">
            <td><img height="4" alt="" src="http://www.ibm.com/i/c.gif" width="100%" /><br />
            <table cellspacing="0" cellpadding="0" border="0">
                <tbody>
                    <tr>
                        <td valign="middle"><img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" /><br /></td>
                        <td valign="top" align="right"><a class="fbox" href="http://www.ibm.com/developerworks/cn/websphere/techjournal/0705_col_konopnicki/0705_col_konopnicki.html?S_TACT=105AGX52&amp;S_CMP=techcsdn#main"><b><font color="#996699">回页首</font></b></a></td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
<br /><br />
<p><a name="sec5"><span class="atitle">来自多个来源的结果</span></a></p>
<p>当您进行搜索时，可能希望通过多个来源进行搜索。例如，在 Web 上，通常会限制您只能使用一个搜索引擎，这是因为，使用多个搜索引擎并对其进行比较是非常麻烦的。当搜索您的个人文件或者企业内部网时，这个问题甚至变得更加复杂。有一些搜索引擎，可以使用不同的用户接口进行访问，可以访问不同的数据集，并产生不同的结果集。在这种情况下，<b>联合</b>和<b>聚合</b>这两种方式可以提供帮助。</p>
<p><i>联合</i> 意味着使用某种工具注册所有可用的搜索引擎，将您所进行的搜索转发给所有这些搜索引擎，然后检索结果，并在单个列表中显示经过组合的结果。在大多数情况下，很难以统一的方式对结果进行排序。（在某些搜索引擎中，在对结果的相关性评分中，85% 是一个&ldquo;好&rdquo;的评分，而在其他的引擎中，好的评分是 95%。）因此，在使用联合的时候，很有可能会将来自每个来源的结果分离开来。（在这种情况下，面向方面的搜索可能是很有帮助的。）</p>
<p>在使用<i>聚合</i> 的时候，中央搜索引擎将汇总所有的搜索内容。对某个位置进行搜索，并从所有的来源返回统一的结果。因此，聚合的方式非常方便，但是却难以实现，因为它需要通过爬网的方式处理所有可用的数据来源，并且扩展搜索引擎。多数情况下，您将不得不接受几个不同层次的联合和聚合（对于目前而言）。</p>
<br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /><br /><img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" /></td>
        </tr>
    </tbody>
</table>
<table cellspacing="0" cellpadding="0" align="right" class="no-print">
    <tbody>
        <tr align="right">
            <td><img height="4" alt="" src="http://www.ibm.com/i/c.gif" width="100%" /><br />
            <table cellspacing="0" cellpadding="0" border="0">
                <tbody>
                    <tr>
                        <td valign="middle"><img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" /><br /></td>
                        <td valign="top" align="right"><a class="fbox" href="http://www.ibm.com/developerworks/cn/websphere/techjournal/0705_col_konopnicki/0705_col_konopnicki.html?S_TACT=105AGX52&amp;S_CMP=techcsdn#main"><b><font color="#996699">回页首</font></b></a></td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
<br /><br />
<p><a name="sec6"><span class="atitle">门户搜索工具箱</span></a></p>
<p>随着需要搜索的信息越来越多，我们可以使用的搜索方式也越来越多。WebSphere Portal Search Development 团队希望帮助您使用不同的搜索方式，而有了这些方式，可以让最终用户在企业中查找信息的任务变得更加容易。这正是我们发布<a href="http://www.ibm.com/developerworks/cn/websphere/techjournal/0610_dinur/0610_dinur.html"><font color="#5c81a7">公共 API</font></a> 以及免费提供<a href="http://www.ibm.com/developerworks/websphere/library/techarticles/0701_konopnicki/0701_konopnicki.html?S_TACT=105AGX52&amp;S_CMP=cn-a-wes"><font color="#5c81a7">搜索工具</font></a>的原因。这些工具的目标是帮助您进行试验，以便开发出更有效的搜索应用程序，并对我们周围日益增长的信息空间，找到合适的搜索方式。</p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=54</link>
			<title><![CDATA[搜 索 引 擎 分 类]]></title>
			<author>webmaster@xd-tech.com(christian)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Tue,15 May 2007 17:23:10 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=54</guid>	
		<description><![CDATA[■&nbsp;全文搜索引擎&nbsp;<br/>　　全文搜索引擎是名副其实的搜索引擎，国外具代表性的有Google、Fast/AllTheWeb、AltaVista、Inktomi、Teoma、WiseNut等，国内著名的有百度（Baidu）。它们都是通过从互联网上提取的各个网站的信息（以网页文字为主）而建立的数据库中，检索与用户查询条件匹配的相关记录，然后按一定的排列顺序将结果返回给用户，因此他们是真正的搜索引擎。<br/><br/>　　从搜索结果来源的角度，全文搜索引擎又可细分为两种，一种是拥有自己的检索程序（Indexer），俗称“蜘蛛”（Spider）程序或“机器人”（Robot）程序，并自建网页数据库，搜索结果直接从自身的数据库中调用，如上面提到的7家引擎；另一种则是租用其他引擎的数据库，并按自定的格式排列搜索结果，如Lycos引擎。<br/><br/>　　　　　&nbsp;<br/><br/>&nbsp;<br/><br/>　■&nbsp;目录索引&nbsp;<br/>　　目录索引虽然有搜索功能，但在严格意义上算不上是真正的搜索引擎，仅仅是按目录分类的网站链接列表而已。用户完全可以不用进行关键词（Keywords）查询，仅靠分类目录也可找到需要的信息。目录索引中最具代表性的莫过于大名鼎鼎的Yahoo雅虎。其他著名的还有Open&nbsp;Directory&nbsp;Project（DMOZ）、LookSmart、About等。国内的搜狐、新浪、网易搜索也都属于这一类。<br/><br/>　　　　　　&nbsp;<br/><br/>&nbsp;<br/>　■&nbsp;元搜索引擎&nbsp;(META&nbsp;Search&nbsp;Engine)<br/>　　元搜索引擎在接受用户查询请求时，同时在其他多个引擎上进行搜索，并将结果返回给用户。著名的元搜索引擎有InfoSpace、Dogpile、Vivisimo等（元搜索引擎列表），中文元搜索引擎中具代表性的有搜星搜索引擎。在搜索结果排列方面，有的直接按来源引擎排列搜索结果，如Dogpile，有的则按自定的规则将结果重新排列组合，如Vivisimo。<br/><br/>　　除上述三大类引擎外，还有以下几种非主流形式：<br/><br/>　　1、集合式搜索引擎：如HotBot在2002年底推出的引擎。该引擎类似META搜索引擎，但区别在于不是同时调用多个引擎进行搜索，而是由用户从提供的4个引擎当中选择，因此叫它“集合式”搜索引擎更确切些。<br/>　　2、门户搜索引擎：如AOL&nbsp;Search、MSN&nbsp;Search等虽然提供搜索服务，但自身即没有分类目录也没有网页数据库，其搜索结果完全来自其他引擎。<br/>　　3、免费链接列表（Free&nbsp;For&nbsp;All&nbsp;Links，简称FFA）：这类网站一般只简单地滚动排列链接条目，少部分有简单的分类目录，不过规模比起Yahoo等目录索引来要小得多。　　<br/><br/>　　由于上述网站都为用户提供搜索查询服务，为方便起见，我们通常将其统称为搜索引擎。<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=53</link>
			<title><![CDATA[集成搜索引擎与元搜索引擎]]></title>
			<author>webmaster@xd-tech.com(christian)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Tue,15 May 2007 17:19:58 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=53</guid>	
		<description><![CDATA[&nbsp;&nbsp;搜索引擎是开启网络知识殿堂的钥匙，获取知识信息的工具。随着网络技术的飞速发展，搜索技术的日臻完善，中外搜索引擎已广为人们熟知和使用。任何搜索引擎的设计，均有其特定的数据库索引范围、独特的功能和使用方法，以及预期的用户群指向。一种搜索引擎不可能满足所有人或一个人所有的检索需求。在某些情况下，如文献普查、专题查询、新闻调查与朔源、软件及MP3下载地址搜索等等，人们往往需要使用多种搜索引擎，对搜索结果进行比较、筛选和相互印证。为解决逐一登陆各搜索引擎，并在各搜索引擎中分别多次输入同一检索请求（检索字串）等烦琐操作，集成搜索引擎和元搜索引擎应运而生。<br/><br/>集成搜索引擎和元搜索引擎尽可能地减少和优化了检索操作，实现了“一次检索输入，多引擎同时搜索”。<br/><br/>目前国内对集成搜索引擎和元搜索引擎的概念界定尚不清晰，二者多互称、通用。事实上，集成搜索引擎和元搜索引擎是两种不同类型的搜索工具，既有共同特点，又有明显差异。<br/><br/>一、集成搜索引擎<br/>集成搜索引擎（&nbsp;All－in－One&nbsp;Search&nbsp;Page），亦称为“多引擎同步检索系统&nbsp;”（如<a href="http://www.bioon.com/multisearch.htm" target="_blank">http://www.bioon.com/multisearch.htm</a>）是在一个WWW页面上链接若干种独立的搜索引擎，检索时需点选或指定搜索引擎，一次检索输入，多引擎同时搜索，搜索结果由各搜索引擎分别以不同页面提交，其实质是利用网站链接技术形成的搜索引擎集合，而并非真正意义上的搜索引擎。<br/><br/>集成搜索引擎无自建数据库，不需研发支持技术，当然也不能控制和优化检索结果。但集成搜索引擎制作与维护技术简单，可随时对所链接的搜索引擎进行增删调整和及时更新，尤其大规模专业（如FLASH、MP3等）搜索引擎集成链接，深受特定用户群欢迎。在搜索引擎发展进程中，集成搜索引擎只是元搜索引擎的初级形态，以其方便、实用在网络搜索工具家族中占据一席之地。典型的集成搜索引擎有“搜索之家”（<a href="http://so.web165.com/" target="_blank">http://so.web165.com/</a>）、“网际瑞士军刀”（<a href="http://free.okey.net/~free/search1.htm" target="_blank">http://free.okey.net/~free/search1.htm</a>）等。<br/><br/>二、元搜索引擎<br/>元搜索引擎（Metasearch&nbsp;Engine），是一种调用其它独立搜索引擎的引擎,亦称“搜索引擎之母（The&nbsp;mother&nbsp;of&nbsp;searce&nbsp;engines)”。在这里，“元”（Meta）为“总的”、“超越”之意，元搜索引擎就是对多个独立搜索引擎的整合、调用、控制和优化利用。相对元搜索引擎，可被利用的独立搜索引擎称为“源搜索引擎”（source&nbsp;Engine），或“搜索资源”（searcing&nbsp;resources），整合、调用、控制和优化利用源搜索引擎的技术，称为“元搜索技术”（Meta-searching&nbsp;technique），元搜索技术是元搜索引擎的核心。<br/><br/>元搜索引擎分为并行处理式和串行处理式两大类。并行处理式元搜索引擎将用户的查询请求同时转送给它调用链接的多个独立型搜索引擎进行查询处理，串行处理式元搜索引擎将用户的查询请求依次转送给它调用链接的每一个独立型搜索引擎进行查询处理。&nbsp;<br/><br/>元搜索引擎是用户同时利用多引擎进行网络搜索的中介。检索时，元搜索引擎根据用户提交的检索请求，调用源搜索引擎进行搜索，对搜索结果进行汇集、筛选、删并等优化处理后，以统一的格式在同一界面集中显示。元搜索引擎虽没有网页搜寻机制，亦无独立的索引数据库，但在检索请求提交、检索接口代理和检索结果显示等方面，均有自己研发的特色元搜索技术支持。如提交检索请求时，根据源搜索引擎的特点和技术参数，指定优先顺序，并对检索时间、检索结果数量进行控制；作为若干源搜索引擎的检索接口代理，元搜索引擎必须具有较强的字符和语法转换功能，使用户的检索请求为各具语法特点的不同的源搜索引擎所人知和接受；&nbsp;而对检索结果的显示，不同的元搜索引擎有不同的处理技术，由于元搜索引擎设定的检索结果排序依据、最大返回结果数量、相关度参数及优化机制等不同，调用相同的源搜索引擎的不同元搜索引擎显示检索结果的数量多少、排序先后、结果信息描述选择亦有较大差异。<br/><br/>一款理想的元搜索引擎应该具备以下特点和功能：第一，含盖较多的搜索资源，可随意选择和调用源搜索引擎；其次，具备尽可能多的可选择功能，如资源类型（网站、网页、新闻、软件、FTP、MP3、图像等）选择、返回结果数量控制、结果时段选择、过滤功能选择等；第三，强大的检索请求处理功能（如支持逻辑匹配检索、短语检索、自然语言检索等）和不同搜索引擎间检索语法规则、字符的转换功能（如对不支持“NEAR”算符的搜索引擎，可自动实现由“NEAR”向“AND”算符的转换等）；第四，详尽全面的检索结果信息描述（如网页名称、URL、文摘、源搜索引擎、结果与用户检索需求的相关度等）；第五，支持多种语言检索。<br/><br/>目前运营的元搜索引擎各具特色，功能各有侧重，完全“理想”的尚不多见。一些元搜索引擎在某些方面较为优秀，而其它功能则欠缺或需改进：如大多元搜索引擎不支持多语种，尤其是汉语检索；一些元搜索引擎实现检索语法转换的能力有限，不支持指定字段检索，不能充分发挥各个独立搜索引擎的高级检索功能；部分元搜索引擎无源搜索引擎列表，用户不能自主选择和调用源搜索引擎；大部分元搜索引擎仅支持调用AltaVista、Excite、GoTo．com、Yahoo！、Infoseek、Lycos等常用的搜索引擎，一些大型搜索引擎如NorthernLight、HotBot等被排除在外，人为地限制了搜索资源的利用；在检索结果上，元搜索引擎只能返回十几、数十条“相关度”较高的结果，大量可能有价值的源搜索引擎的检索结果被忽视，影响检索结果的全面性。元搜索引擎的功能受着源搜索引擎和元搜索技术的双重制约：一方面，源搜索引擎的各具特色的强大功能在元搜索引擎中受到限制而不能充分体现，而另一方面，任何一种元搜索技术都不能发掘和利用源搜索引擎的全部功能。<br/><br/>1995年华盛顿大学硕士生&nbsp;Eric&nbsp;Selberg&nbsp;和&nbsp;o&#114;en&nbsp;Etzioni&nbsp;推出第一个元搜索引擎---Metacrawler以来，这一新型的网络检索工具异军突起，发展迅速，目前可用的元搜索引擎已近百种。尽管元搜索引擎存在着这样那样的功能局限，但其以含盖较多的搜索资源，能够在尽可能短的时间内提供相对全面、准确的检索结果等诸多优异功能受到用户的青睐，已渐成为一种不可或缺的极具潜力的网络检索工具。&nbsp;<br/><br/>元搜索引擎一览：<br/><br/>《搜索引擎观察》2002年最佳元搜索引擎<br/><br/>1、Vivisimo&nbsp;（&nbsp;<a href="http://vivisimo.com/" target="_blank">http://vivisimo.com/</a>）<br/>调用多种搜索引擎，并对返回的结果自动分类,界面友好，简单易用。<br/><br/>2、EZ2WWW&nbsp;（&nbsp;<a href="http://www.ez2www.com/" target="_blank">http://www.ez2www.com/</a>）<br/>调用AllTheWeb,&nbsp;AltaVista,&nbsp;Google,&nbsp;Open&nbsp;Directory,&nbsp;Teoma,&nbsp;Wisenut&nbsp;and&nbsp;Yahoo等搜索引擎，高级搜索功能提供1000多种专项资源检索，可进行目录检索。<br/><br/>3、Kartoo&nbsp;（&nbsp;<a href="http://www.kartoo.com/" target="_blank">http://www.kartoo.com/</a>）<br/>在搜索结果中显示链接各相关页面的关键词。<br/><br/>4、SurfWax&nbsp;（&nbsp;<a href="http://www.surfwax.com/" target="_blank">http://www.surfwax.com/</a>）<br/>有一个其它元搜索引擎没有的独特功能，即点击每条结果左边的“网址揿钮”图标，可浏览该结果包括的任何页面，并显示搜索语句在文件中的位置。可以把搜索结果和文件存储起来以备后用。<br/><br/>5、Fazzle&nbsp;（&nbsp;<a href="http://www.fazzle.com/" target="_blank">http://www.fazzle.com/</a>）<br/>即可进行一般的网址搜索，又有一个主题目录提供专题资源搜索。其前身为SearchOnline<br/><br/>著名元搜索引擎<br/><br/>1、InfoGrid&nbsp;（&nbsp;<a href="http://www.infogrid.com/" target="_blank">http://www.infogrid.com/</a>）<br/>提供与主要搜索网站的直接连结和目录检索，具有强大的元搜索和新闻搜索功能。<br/><br/>2、Infonetware&nbsp;Realt&#101;rm&nbsp;Search&nbsp;（&nbsp;<a href="http://www.infonetware.com/" target="_blank">http://www.infonetware.com/</a>）<br/>原为检验网络分类技术而设计。它以元搜索引擎知名，但具有强大的对搜索结果进行主题分类的功能。与众不同的是，用户可选择不同的主题，并得到来自所有主题搜索结果，而不是仅仅把搜索结果限制在一个主题范围之内。<br/><br/>3、Ithaki&nbsp;（&nbsp;<a href="http://www.ithaki.net/dir.html" target="_blank">http://www.ithaki.net/dir.html</a>）<br/>支持包括中文在内的14种语言检索。<br/><br/>4、Ixquick&nbsp;（&nbsp;<a href="http://www.ixquick.com/" target="_blank">http://www.ixquick.com/</a>）<br/>可搜索网站、MP3、新闻、图象等多种网络资源。<br/><br/>5、ProFusion&nbsp;(&nbsp;<a href="http://www.profusion.com" target="_blank">http://www.profusion.com</a>)<br/>拥有智能化的搜索方案，提供诸如搜索引擎选择、检索类型、结果显示、摘要选项、链接检查等较多的检索选项，支持个性化设置，可以选择三个最好的搜索引擎、或三个最快的搜索引擎、或全部搜索引擎、或手工选择任意几个搜索引擎来进行搜索。自动实现符合特殊检索语法要求的转换，如在调用Excite、InfoSeek、WebCrawler时将“NEAR”转换成“AND”，在调用GoTo、Yahoo时将“NOT”删除等。原为堪萨斯州大学所有，2000年四月被Intelliseek&nbsp;搜索公司购买。<br/><br/>6、Mamma&nbsp;（&nbsp;<a href="http://www.mamma.com" target="_blank">http://www.mamma.com</a>）<br/>1996年面世，自称为“搜索引擎之母”的并行元搜索引擎，可同时调用7个最常用的独立搜索引擎，并且可查询网上商店、新闻、股票指数、图像和声音文件等资源。其特点是检索界面友好，检索选项丰富，主要包括：可控制调用的独立搜索引擎、选择使用短语检索功能、设定检索时间、设定每页可显示记录数等。另外，Mamma支持常用检索语法在不同搜索引擎中的转换，还提供了专门检索页面文件标题的特殊检索服务，以及通过E－mail传输检索结果的特色功能。检索结果以相关性排序，内容包括网页名称、URL、文摘、源搜索引擎。　　<br/><br/>7、MetaCrawler&nbsp;（&nbsp;<a href="http://www.metacrawler.com" target="_blank">http://www.metacrawler.com</a>）<br/>1995年由华盛顿大学推出，1997年被InfoSpace购买。支持调用12个独立搜索引擎，提供涵盖近20个主题的目录检索服务。其检索特性非常丰富，包括常规检索、高级检索、定制检索、国家或地区的资源检索等检索服务模式。其中，高级检索模式可实现：搜索引擎的选择调用，基于域名、地区或国家的检索结果过滤，最长检索时间设置，每页可显示的和允许每个搜索引擎返回的检索结果数量的设定，设定检索结果排序依据（包括相关度、域名、源搜索引擎）等。以上内容均可作为定制检索的个性化选项并予以保存。另外，检索结果中包括一个以1000为最大值的相关度指标。<br/><br/>8、ByteSearch&nbsp;（&nbsp;<a href="http://www.bytesearch.com" target="_blank">http://www.bytesearch.com</a>）<br/>搜索速度快，可检索资源丰富，搜索范围包括Web、城市信息、公司名录、域名、FTP网站、多媒体、新闻组、包裹跟踪等，并提供新闻浏览、URL提交、最新的20个检索浏览、联机商店等内容方面的服务。支持完全匹配（All）、部分匹配（Any）、短语检索（Phrase）等特性检索功能，没有搜索引擎列表，不能控制源搜索引擎的选择。<br/><br/>9、SavvySearch&nbsp;(&nbsp;<a href="http://savvy.cs.colostate.edu:2000/" target="_blank">http://savvy.cs.colostate.edu:2000/</a>)&nbsp;<br/>支持二十种语言(不包括中文)，可调用全部或任意几个搜索引擎，可选择每个搜索引擎返回结果的数目，可进行目录检索。　　<br/><br/>常用元搜索引擎<br/><br/>1、qbSearch&nbsp;<a href="http://www.qbsearch.com/" target="_blank">http://www.qbsearch.com/</a>）<br/>2、Query&nbsp;Server&nbsp;<a href="http://www.queryserver.com" target="_blank">http://www.queryserver.com</a>）<br/>3、Turbo10&nbsp;<a href="http://turbo10.com/" target="_blank">http://turbo10.com/</a>）<br/>4、Dogpile&nbsp;<a href="http://www.dogpile.com/" target="_blank">http://www.dogpile.com/</a>）<br/>5、Webcrawler&nbsp;<a href="http://www.webcrawler.com/" target="_blank">http://www.webcrawler.com/</a>）<br/>6、Search.com&nbsp;<a href="http://www.search.com/" target="_blank">http://www.search.com/</a>）<br/><br/>其它元搜索引擎<br/>1、1Blink&nbsp;<a href="http://www.1blink.com/" target="_blank">http://www.1blink.com/</a>）<br/>2、Gimenei&nbsp;<a href="http://gimenei.com/" target="_blank">http://gimenei.com/</a>）<br/>3、IcySpicy&nbsp;<a href="http://www.icyspicy.com/" target="_blank">http://www.icyspicy.com/</a>）<br/>4、MetaEureka&nbsp;<a href="http://www.metaeureka.com/" target="_blank">http://www.metaeureka.com/</a>）<br/>5、Moonmist&nbsp;<a href="http://www.moonmist.info/" target="_blank">http://www.moonmist.info/</a>）<br/>6、Widow&nbsp;Meta&nbsp;Search&nbsp;<a href="http://www.widow.com/" target="_blank">http://www.widow.com/</a>）<br/>7、Family&nbsp;Friendly&nbsp;Search&nbsp;<br/><a href="http://www.familFamily" target="_blank">http://www.familFamily</a>&nbsp;Friendly&nbsp;Searchyfriendlysearch.com/）<br/>8、Searchy.co.uk&nbsp;<a href="http://www.searchy.co.uk/" target="_blank">http://www.searchy.co.uk/</a>）<br/>9、TeRespondo&nbsp;<a href="http://sl.terespondo.com/home/" target="_blank">http://sl.terespondo.com/home/</a>）<br/>10、Watson&nbsp;for&nbsp;the&nbsp;Macintosh<br/><a href="http://www.apple.com/downloads/macosx/internet_utilities/watson.html" target="_blank">http://www.apple.com/downloads/macosx/internet_utilities/watson.html</a>）<br/>11、Chubba<a href="http://chubba.whatuseek.com/" target="_blank">http://chubba.whatuseek.com/</a>）&nbsp;<br/>12、Debriefing<a href="http://debriefing.ixquick.com/" target="_blank">http://debriefing.ixquick.com/</a>）&nbsp;<br/>13、C4&nbsp;<a href="http://www.c4.com/" target="_blank">http://www.c4.com/</a>&nbsp;）&nbsp;<br/>14、Infind<a href="http://www.infind.com/" target="_blank">http://www.infind.com/</a>）&nbsp;<br/>15、Infozoid<a href="http://www.infozoid.com/" target="_blank">http://www.infozoid.com/</a>）&nbsp;<br/>16、Ixquick<a href="http://www.ixquick.com" target="_blank">http://www.ixquick.com</a>）<br/>17、OneSeek<a href="http://www.oneseek.com/" target="_blank">http://www.oneseek.com/</a>）&nbsp;<br/>18、One2Seek<a href="http://one2seek.com/" target="_blank">http://one2seek.com/</a>）&nbsp;<br/>19、Query&nbsp;Server<a href="http://www.queryserver.com/general.htm" target="_blank">http://www.queryserver.com/general.htm</a>）&nbsp;<br/>20、Proteus<a href="http://www.thrall.org/proteus.html" target="_blank">http://www.thrall.org/proteus.html</a>）&nbsp;<br/>21、Searches<a href="http://www.searches.com" target="_blank">http://www.searches.com</a>）&nbsp;<br/>22、Searchbug&nbsp;<a href="http://www.searchbug.com/" target="_blank">http://www.searchbug.com/</a>）&nbsp;<br/>23、Skworm<a href="http://www.skworm.com/" target="_blank">http://www.skworm.com/</a>）&nbsp;<br/>24、Skworm<a href="http://www.skworm.com/" target="_blank">http://www.skworm.com/</a>）&nbsp;<br/>25、Sleuth<a href="http://www.isleuth.com" target="_blank">http://www.isleuth.com</a>）&nbsp;<br/>26、SurfWax<a href="http://www.surfwax.com/" target="_blank">http://www.surfwax.com/</a>）&nbsp;<br/>27、Supercrawler<a href="http://www.supercrawler.com/" target="_blank">http://www.supercrawler.com/</a>）&nbsp;<br/>28、Highway61&nbsp;<a href="http://www.highway61.com/" target="_blank">http://www.highway61.com/</a>）<br/>29、Cyber&nbsp;411&nbsp;<a href="http://www.cyber411.com/" target="_blank">http://www.cyber411.com/</a>　）　<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=52</link>
			<title><![CDATA[嵌入执行Javascript 脚本]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Thu,10 May 2007 10:17:21 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=52</guid>	
		<description><![CDATA[<p>Rhino 是一种使用 Java 语言编写的 JavaScript 的开源实现。与本系列的其他很多语言一样，Rhino 是一种动态类型的、基于对象的脚本语言，它可以简单地访问各种 Java 类库。Rhino 从 JavaScript 中借用了很多语法，让程序员可以快速编写功能强大的程序。最为明显的区别是，Rhino 不再使用语句结束符( <code>;</code> )，放宽了变量声明规则，并且极大地简化了修改和检索对象属性的语法（没有求助于调用存取方法）。 </p>
<p>由于 Rhino 是 JavaScript 的一种基于 Java 的实现，所以对于 Java 开发人员来说，它应该特别易于使用。JavaScript 的（以及 Rhino 的）语法非常类似于 Java 编程语言。这两种语言都采用了与 Java 编程语言相似的循环和条件结构，并且遵循类似的语法模式来表示这些结构。</p>
<p>虽然 Rhino 与本系列文章中介绍的其他编程语言具有很多共同点，但对于 Java 平台上的编程而言，它也有独特之处（可能有时有些不同的地方）。Rhino 是一种 <i>基于原型的（prototype-based）</i>语言，而不是一种 <i>基于类的（class-based）</i>语言。在 Rhino 中，您可以构建对象，而不是类。除了类的对象实例之外，这样做还可以让您避免构建和操作类的开发、部署和执行成本。正如您将在文中发现的那样，诸如 Rhino 这类基于原型的语言在开发和运行基于 GUI 的应用程序时尤其有效。 </p>
<p><a name="N10066"><span class="atitle">开始使用 Rhino</span></a></p>
<p>可以从 Mozilla 的 Web 站点（请参阅 <a href="http://www.ibm.com/developerworks/cn/java/j-alj11024/index.html#resources"><font color="#996699">参考资料</font></a>）上下载最新的 Rhino 引擎（在撰写本文时是 Rhino-1.5r5）。将软件包解压至选定的目录中。顶层目录 rhino1_5r5 是软件包的一部分。该目录中包含一些文档、例子、源代码和 js.jar 文件，而 js.jar 文件应该包含在 classpath 中。 </p>
<p>我将广泛地使用交互式 shell，它是在 <code>org.mozilla.javascript.tools.shell</code>包中实现的。可以调用这个 shell，以交互模式（在这种模式中，可以输入要计算的表达式或要执行的代码）或批处理模式运行它。在批处理模式中， <code>-e</code> 选项可以用来运行包含 JavaScript/Rhino 源代码的字符串， <code>-f</code> 选项可以用来执行包含脚本代码的文件。例如，输入下面的命令将以交互模式调用解释器： </p>
<table cellspacing="0" cellpadding="0" width="40%" align="right" border="0">
    <tbody>
        <tr>
            <td width="10"><img height="1" alt="" src="http://www.ibm.com/i/c.gif" width="10" /></td>
            <td>
            <table cellspacing="0" cellpadding="5" width="100%" border="1">
                <tbody>
                    <tr>
                        <td bgcolor="#eeeeee"><a name="N10084"><b>关于本系列文章</b></a><br />
                        <p>虽然 <a href="http://www.ibm.com/developerworks/views/java/articles.jsp?S_TACT=105AGX52&amp;expand&amp;sort_order=desc&amp;search_by=alt.lang.jre&amp;S_CMP=cn-a-j&amp;show_abstract=true&amp;sort_by=Date&amp;view_by=Search"><font color="#5c81a7"><i>alt.lang.jre</i> </font></a>系列文章的大部分读者都对 Java 语言以及它如何在跨平台的虚拟机上运行都非常熟悉，但是却很少有人知道，Java 运行时环境可以支持除 Java 语言之外的其他语言。本系列文章是对 JRE 可用语言的一个概括性介绍。这里介绍的大部分语言都是开源的，可以免费使用，不过也可以购买商业产品。JRE 可以支持本系列文章中介绍的所有语言，这些文章的作者都相信所介绍的语言增强了 Java 平台的动态特性和灵活性。 </p>
                        </td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
<table cellspacing="0" cellpadding="0" width="60%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">javaorg.mozilla.javascript.tools.shell.Main
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>然后您应该会看到解释器的版本号，后面跟着提示符 <code>js&gt;</code> 。按 <b>Ctrl+Z</b> （Windows 系统上）或 <b>Ctrl+D</b>（Unix 系统上），就可以退出这个 shell。 </p>
<br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /><br /><img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" /></td>
        </tr>
    </tbody>
</table>
<table cellspacing="0" cellpadding="0" align="right" class="no-print">
    <tbody>
        <tr align="right">
            <td><img height="4" alt="" src="http://www.ibm.com/i/c.gif" width="100%" /><br />
            <table cellspacing="0" cellpadding="0" border="0">
                <tbody>
                    <tr>
                        <td valign="middle"><img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" /><br /></td>
                        <td valign="top" align="right"><a class="fbox" href="http://www.ibm.com/developerworks/cn/java/j-alj11024/index.html#main"><b><font color="#996699">回页首</font></b></a></td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
<br /><br />
<p><a name="N100A7"><span class="atitle">历史简介</span></a></p>
<p>在开始学习 Rhino 基础知识之前，先了解一下有关 JavaScript 的起源和目的可能会非常有用，JavaScript 为 Rhino 提供了很多独特的特性。JavaScript 的历史与 Web 浏览器动态表示和操作 Web 页面内容的能力是相符合的。JavaScript 的第一个版本（最初称为 <i>LiveScript</i>）是由 Netscape Communications 公司于 1995 年发布的，它是 Netscape Navigator 2.0 Web 浏览器的一部分。JavaScript 打算为程序员提供一种简单而直观的方法，编写一些可以在 Web 页面上下文中执行任务的简单脚本。在随后的一年中，Microsoft 引入了 <i>JScript</i>，它自己的用于 Internet Explorer 的 JavaScript 端口。 </p>
<p>这两个版本的 JavaScript 都包括一个基于对象的 API，称为 <i>文档对象模型（Document Object Model）</i>或 DOM，用以访问和操作 Web 页面的内容。JavaScript 的第三个实现是一种新的脚本语言，称为 <i>EcmaScript</i>，其目的是对自己和 DOM 进行标准化。不幸的是，Microsoft 和 Netscape 都没有完全实现 EcmaScript 标准，因此到今天都还存在兼容方面的问题。 </p>
<p>随着 Java 语言在 20 世纪 90 年代末期取得的成功，Netscape 计划发布 <i>Javagator</i>，它是 Navigator 中一个 100% 的纯 Java 实现。虽然 Javagator 从来没能开花结果，但是 Netscape 对 JavaScript 的移植（称为 <i>Rhino</i>）已经经过时间的考验存活了下来。Rhino 是 JavaScript 1.5 脚本语言的一个 100% 的纯 Java 实现，不包含 DOM API。实际上，Rhino 有时仍然被当作 Netscape 的基于 Java 的 JavaScript。 </p>
<br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /><br /><img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" /></td>
        </tr>
    </tbody>
</table>
<table cellspacing="0" cellpadding="0" align="right" class="no-print">
    <tbody>
        <tr align="right">
            <td><img height="4" alt="" src="http://www.ibm.com/i/c.gif" width="100%" /><br />
            <table cellspacing="0" cellpadding="0" border="0">
                <tbody>
                    <tr>
                        <td valign="middle"><img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" /><br /></td>
                        <td valign="top" align="right"><a class="fbox" href="http://www.ibm.com/developerworks/cn/java/j-alj11024/index.html#main"><b><font color="#996699">回页首</font></b></a></td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
<br /><br />
<p><a name="N100C8"><span class="atitle">JavaScript 中的 &quot;Java&quot;</span></a></p>
<p>在 Rhino 的第一个发行版本中，Netscape 显然想利用 Java 编程语言所取得的成功。在该公司自己的脚本语言中，很明显地从 Java 语言中借用了一些基本的语法。这使得它特别适合 Java 开发人员学习和使用。例如，考虑一下清单 1 中给出的 Java 函数与 Rhino 函数之间的相似性，Rhino 函数测试了给定的数字是否为素数：</p>
<br /><br /><a name="code1"><b>清单 1. Rhino 函数：这个数字是素数吗？</b></a><br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">function isPrime (num)
            {
            if (num &lt;= 1) {
            print(&quot;Please enter a positive integer &gt;= 2.&quot;)
            return false
            }
            var prime = true
            var sqrRoot = Math.round(Math.sqrt(num))
            for (var n = 2; prime &amp; n &lt;= sqrRoot; ++n) {
            prime = (num % n != 0)
            }
            return prime
            }
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>除了几处例外，该程序与 Java 程序非常类似：</p>
<ul>
    <li>圆括号用来分隔代码块。 <br /><br /></li>
    <li><code>for</code> 和 <code>if</code> 结构的语法与 Java 语言的相同。 <br /><br /></li>
    <li>Rhino 与 Java 语言采用相同的算术和条件操作符（例如，对 <i>sqrRoot</i>变量的赋值），甚至可以支持类似的访问其他算术函数的方法。 <br /><br /></li>
    <li>Rhino 允许使用预先定义的布尔常量 <code>true</code> 和 <code>false</code> 。 </li>
</ul>
<p>虽然没有在这里显示，但您应该注意到，Rhino 的 <code>while</code> 和 <code>do...while</code> 循环的结构都与 Java 语言的相同。 </p>
<br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /><br /><img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" /></td>
        </tr>
    </tbody>
</table>
<table cellspacing="0" cellpadding="0" align="right" class="no-print">
    <tbody>
        <tr align="right">
            <td><img height="4" alt="" src="http://www.ibm.com/i/c.gif" width="100%" /><br />
            <table cellspacing="0" cellpadding="0" border="0">
                <tbody>
                    <tr>
                        <td valign="middle"><img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" /><br /></td>
                        <td valign="top" align="right"><a class="fbox" href="http://www.ibm.com/developerworks/cn/java/j-alj11024/index.html#main"><b><font color="#996699">回页首</font></b></a></td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
<br /><br />
<p><a name="N10117"><span class="atitle">具体区别</span></a></p>
<p>当然，Rhino 和 Java 语言之间有一些显著的区别。首先，由于 Rhino 是采用动态类型的语言，因此在函数和变量的声明中看不到类型。您可以使用 <code>function</code> 关键字开始函数的声明，使用 <code>var</code> 关键字来声明局部变量（这与全局变量不同），但是不用包括正在声明的变量的类型。Rhino 运行库将在执行过程中推断变量的类型。与 Java 语言不同，Rhino 没有语句结束符（在 Java 语言中是分号），不过它也可以支持语句结束符，这是可选的。 </p>
<p>Rhino 和 Java 语言另外一个主要区别是，您可以从解释器中运行如清单 1 所示的程序。如果假设函数的定义在某一个文件中，例如 isprime.js，那么就可以在解释器的提示符中输入下面的命令，其中 <code>path</code> 指向存储该文件的绝对路径： </p>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">load(&quot;&lt;path&gt;/isprime.js&quot;)
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>在返回提示符之前，需要在 Rhino 的解释器中输入下列命令，然后立即就会看到结果 <code>true</code> ： </p>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode"> isPrime(37)
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>采用这种方法，Rhino 解释器的功能类似于&ldquo;便签本&rdquo;，可以在其中输入简单的 Java 代码块进行测试和调试。由于这两种语言的语法是如此相似，因此通常可以从 Java 程序中剪切一些相关代码，将其粘贴到 .js 文件中，并在解释器中加载该文件，然后从 shell 中调用它。</p>
<p>当然，并不是 Rhino 语言与 Java 语言的所有区别都如此微小。在下一节中，您将看到 Rhino 用来区分自己的一些最有用的方法，我们将从大家比较熟悉的文本表示和经常使用的数据类型入手，其中包括数组、hash 表（或称为 <i>联合数组（associative arrays）</i>）、正则表达式、函数以及您可能碰到的对象等。 </p>
<br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /><br /><img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" /></td>
        </tr>
    </tbody>
</table>
<table cellspacing="0" cellpadding="0" align="right" class="no-print">
    <tbody>
        <tr align="right">
            <td><img height="4" alt="" src="http://www.ibm.com/i/c.gif" width="100%" /><br />
            <table cellspacing="0" cellpadding="0" border="0">
                <tbody>
                    <tr>
                        <td valign="middle"><img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" /><br /></td>
                        <td valign="top" align="right"><a class="fbox" href="http://www.ibm.com/developerworks/cn/java/j-alj11024/index.html#main"><b><font color="#996699">回页首</font></b></a></td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
<br /><br />
<p><a name="N10147"><span class="atitle">数组</span></a></p>
<p>Rhino 中的数组可以表示为放在方括号中的一串使用逗号分隔的数值列表。因此，下面就是 Rhino 中的数组：</p>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">
            numbers = [0, 1, 2, 3, 5, 24]
            names = [&quot;Mike&quot;, &quot;Joe&quot;, &quot;Betty&quot;, &quot;Therese&quot;, &quot;Lynn Marie&quot;]
            arrayOfArrays = [1, [2, 3], [3, 4, 5, [6, 7]], 8]
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>第三个例子说明数组中的元素不一定非得是简单类型。</p>
<p><a name="N10157"><span class="smalltitle"><strong><font size="3">联合数组</font></strong></span></a></p>
<p><i>联合数组（associative array）</i>是另外一种数据类型，它可以表示为一个字符串。联合数组在其他语言中有时称为 <i>词典（dictionary）</i>或 <i>hash 表</i>，它是一系列关键字-值对，关键字和值使用冒号（:）分隔开。Rhino 中的联合数组的作用与 Java 语言中的 <code>java.util.HashMap</code> 非常相似。下面是 Rhino 中的联合数组： </p>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">
            person = {name:&quot;Mike Squillace&quot;, age:37, position:&quot;software engineer&quot;}
            link = {text:&quot;IBM Home&quot;, url:&quot;http://www.ibm.com&quot;}
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>可以使用两种方法来引用该列表中的元素。要设置刚才定义的 <code>person</code> hash 表中的 <code>age</code> 属性，您可以这样使用： <code>person[&quot;age&quot;] = 39</code> ，或者使用 <code>person.age = 39</code> 。要读取该值并将其保存在变量 <i>myAge</i> 中，您可以这样使用： <code>myAge = person[&quot;age&quot;]</code> ，或者使用 <code>myAge = person.age</code> . </p>
<p>Rhino 将典型的有索引的数组作为一种特殊的联合数组来对待：它们只是一些关键字是正整数的联合数组。因此，下面这两行代码实际上定义的是完全相同的数组：</p>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">a1 = [&quot;fee&quot;, &quot;fi&quot;, &quot;fo&quot;]
            a2 = {0:&quot;fee&quot;, 1:&quot;fi&quot;, 2:&quot;fo&quot;}
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p><a name="N10196"><span class="smalltitle"><strong><font size="3">通过属性进行循环</font></strong></span></a></p>
<p>Rhino 提供了一种特殊的循环结构： <code>for...in</code> 结构，它可以通过联合数组中的属性进行循环。下列代码输出了刚才定义的 <code>person</code> 联合数组，以及这些属性的值： </p>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">for (prop in person) {
            print(&quot;person[&quot; + prop + &quot;] = &quot; + person[prop])
            }
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>当然，我是通过一个类 hash 表结构实现循环的，因此不能保证每个属性及其值都可以输出。</p>
<br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /><br /><img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" /></td>
        </tr>
    </tbody>
</table>
<table cellspacing="0" cellpadding="0" align="right" class="no-print">
    <tbody>
        <tr align="right">
            <td><img height="4" alt="" src="http://www.ibm.com/i/c.gif" width="100%" /><br />
            <table cellspacing="0" cellpadding="0" border="0">
                <tbody>
                    <tr>
                        <td valign="middle"><img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" /><br /></td>
                        <td valign="top" align="right"><a class="fbox" href="http://www.ibm.com/developerworks/cn/java/j-alj11024/index.html#main"><b><font color="#996699">回页首</font></b></a></td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
<br /><br />
<p><a name="N101AE"><span class="atitle">正则表达式</span></a></p>
<p>与数组类似，在 Rhino 中也可以使用 <i>正则表达式</i>来表示文本，使用 Perl 和其他脚本语言的用户应该非常熟悉其语法。在 Rhino 中，当表示为文字值时，正则表达式是通过正向斜线（/）来分隔的。 </p>
<p>在 Rhino 中，正则表达式被传递给字符串对象的方法，以便更简单地执行文本处理任务。例如，下面的第一行代码定义了一个正则表达式，它可以匹配算术表达式中的正整数和标准算术操作符。第二行代码通过调用 <code>match</code> 函数处理给定的表达式，如下所示： </p>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">tokenExpr = /\d+|[\+\-\*\/]/g
            &quot;38-4+98/5&quot;.match(tokenExpr)
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>结果是生成一个 Rhino 字符串数组，数组的元素包含以下内容：</p>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">&quot;38&quot;, &quot;-&quot;, &quot;4&quot;, &quot;+&quot;,&quot;98&quot;,  &quot;/&quot;, and &quot;5&quot;
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br /><br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /><br /><img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" /></td>
        </tr>
    </tbody>
</table>
<table cellspacing="0" cellpadding="0" align="right" class="no-print">
    <tbody>
        <tr align="right">
            <td><img height="4" alt="" src="http://www.ibm.com/i/c.gif" width="100%" /><br />
            <table cellspacing="0" cellpadding="0" border="0">
                <tbody>
                    <tr>
                        <td valign="middle"><img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" /><br /></td>
                        <td valign="top" align="right"><a class="fbox" href="http://www.ibm.com/developerworks/cn/java/j-alj11024/index.html#main"><b><font color="#996699">回页首</font></b></a></td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
<br /><br />
<p><a name="N101CC"><span class="atitle">函数显式声明</span></a></p>
<p>最后，Rhino 提供了 <i>函数</i>数据类型。正如前面介绍的那样，Rhino 作为第一类数据类型支持函数 &mdash;&mdash; 可以从函数中返回，也可以传递到函数中，还可以在变量声明中使用。因此，我可以在解释器提示符中编写下面的代码，并得到结果 9，这是定义平方函数的期望结果： </p>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">square = function (x) { return x * x }
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>按照这个平方函数的定义，我输入了以下内容：</p>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">square(3)
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>这样定义的函数不但可以用来处理文本，还可以用来处理其他数据。例如，我可以定义一个如下所示的联合数组函数：</p>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">fnList = {
            square:function (x) {return x * x},
            cube:function (x) {return x * x * x},
            sqrt:function (x) {return Math.sqrt(x)}
            }
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>然后我可以对数组中的列表循环调用该函数，输出每个函数的值，就像它是一个数字一样。例如，我可以编写下面的代码：</p>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">for (fnName in fnList) {
            print(&quot;The &quot; + fnName + &quot; of &quot; + 3 + &quot; is &quot; + fnList[fnName](3))
            }
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>将获得如下所示结果：</p>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">The square of 3 is 9
            the sqrt of 3 is 1.7320508075688772
            The cube of 3 is 27
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br /><br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /><br /><img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" /></td>
        </tr>
    </tbody>
</table>
<table cellspacing="0" cellpadding="0" align="right" class="no-print">
    <tbody>
        <tr align="right">
            <td><img height="4" alt="" src="http://www.ibm.com/i/c.gif" width="100%" /><br />
            <table cellspacing="0" cellpadding="0" border="0">
                <tbody>
                    <tr>
                        <td valign="middle"><img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" /><br /></td>
                        <td valign="top" align="right"><a class="fbox" href="http://www.ibm.com/developerworks/cn/java/j-alj11024/index.html#main"><b><font color="#996699">回页首</font></b></a></td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
<br /><br />
<p><a name="N101F8"><span class="atitle">Rhino 中的对象</span></a></p>
<p>在使用联合数组并且将函数表示为文本之后，就可以在 Rhino 中将任何对象表示为联合数组。实际上，对象的文本表示只不过是一个联合数组，它可能包含某些函数作为一些值。下面这个例子将展示在 Rhino 中使用对象是多么简单，Rhino 处理这些对象表现得多么强大。在开始这个例子之前，请再次考虑 <code>person</code> hash 表的例子： </p>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">person = {name:&quot;Mike Squillace&quot;, age:37, position:&quot;software engineer&quot;}
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>在 Rhino 中，这是一个联合数组的文本表示，不过更确切的说，它是一个对象的文本表示。这种表示在 Rhino 中也称为 <i>对象初始化</i>。刚才定义的值的类型是由解释器在输入上面的定义之后根据下面的代码进行判断的： </p>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">[object Object]
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br /><br />
<p>上面的代码说明了变量 <code>person</code> 中存放的值是 <i>Object</i>类型的。 </p>
<p><a name="N1021F"><span class="smalltitle"><strong><font size="3">添加方法</font></strong></span></a></p>
<p>然后，我将向您展示，在重新定义 <code>person</code> 对象，以包含检索该对象的第一个名称的函数时，会出现什么样的情况。我将通过编写下面的代码来展示这一点： </p>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">person = {
            name:&quot;Mike Squillace&quot;,
            age:37,
            position:&quot;software engineer&quot;,
            getFirstName:function () {return this.name.split(&quot; &quot;)[0]}
            }
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>该函数（更确切地说是方法） <code>getFirstName</code> 使用了 <code>this</code> 指针来引用当前的对象，并对 <i>name</i> 属性调用 <code>split</code> 方法。然后， <code>split</code> 方法返回一个数组，其中保存了根据空格字符将给定字符串分割成子字符串的结果。最后取得该数组的第一个值并返回。 </p>
<p>我们已经很熟悉调用新的 <code>getFirstName</code> 函数的方式，如下所示： </p>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">person.getFirstName()
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>圆括号告诉 Rhino 解释器我正在调用一个函数，而不是简单地引用一个对象的属性。然而要注意的是，该函数本身也只是另一个 <code>person</code> 对象的属性，如果没有圆括号，它将引用一个未定义的值。 </p>
<p><a name="N10258"><span class="smalltitle"><strong><font size="3">添加更多的方法</font></strong></span></a></p>
<p>Rhino 还可以允许动态地为对象添加属性和方法。例如，如果想添加一个检索通过 <code>person</code> 对象表示的某人名字的方法，那么只需简单输入下列代码即可： </p>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">person.getLastName = function () {return this.name.split(&quot; &quot;)[1]}
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>现在，当我输入下面的方法时，就可以得到想要的结果，在本例中，这个结果是 &quot;Squillace&quot;：</p>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">person.getLastName()
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>（注意，您可以使用 <code>delete</code> 操作符来删除任何属性，例如 <code>delete person.getLastName</code> 。） </p>
<br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /><br /><img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" /></td>
        </tr>
    </tbody>
</table>
<table cellspacing="0" cellpadding="0" align="right" class="no-print">
    <tbody>
        <tr align="right">
            <td><img height="4" alt="" src="http://www.ibm.com/i/c.gif" width="100%" /><br />
            <table cellspacing="0" cellpadding="0" border="0">
                <tbody>
                    <tr>
                        <td valign="middle"><img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" /><br /></td>
                        <td valign="top" align="right"><a class="fbox" href="http://www.ibm.com/developerworks/cn/java/j-alj11024/index.html#main"><b><font color="#996699">回页首</font></b></a></td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
<br /><br />
<p><a name="N1027B"><span class="atitle">使用原型</span></a></p>
<p>虽然上面这个例子非常有趣，但是您可能不希望一直使用对象初始化来定义个别某些人。幸运的是，Rhino 提供了另外一种创建对象的方法：使用 <i>构造函数（constructor function）</i>。例如，下面的函数可以作为一名 <code>Person</code> 对象的构造函数： </p>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">function Person (name, age, job) {
            this.name = name || &quot;&lt;unknown&gt;&quot;
            this.age = age
            this.job = job || &quot;&lt;unemployed&gt;&quot;
            this.getFirstName = function () {return this.name.split(&quot; &quot;)[0]}
            this.getLastName = function () {return this.name.split(&quot; &quot;)[1]}
            }
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>拥有构造函数之后，就可以使用 <code>new</code> 操作符来创建对象了，如下所示： </p>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">mike = new Person(&quot;Mike Squillace&quot;, 37, &quot;software engineer&quot;)
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>任何函数都可以用作构造函数，不过通常希望使用定义（使用 <code>this</code> 指针来引用正在定义的对象）对象属性的函数以及为这些属性赋值（或函数）的函数作为构造函数。 </p>
<p><a name="N102A1"><span class="smalltitle"><strong><font size="3">无类编码</font></strong></span></a></p>
<p>作为一个 Java 开发人员，您很可能会认为下一个步骤是在 Rhino 中定义 <code>Person</code> 类。实际上，Rhino 并不需要这样定义类 &mdash;&mdash; 因为它根本就不使用类！在 Rhino 中既没有类，也没有类的实例，只有特定的对象。当调用 <code>new</code> 操作符时，构造函数就为对象创建一个所谓的 <i>原型（prototype）</i>；也就是说，它创建了一个 <i>模板（template）</i>，从中构建给定类型的对象。 </p>
<table cellspacing="0" cellpadding="0" width="40%" align="right" border="0">
    <tbody>
        <tr>
            <td width="10"><img height="1" alt="" src="http://www.ibm.com/i/c.gif" width="10" /></td>
            <td>
            <table cellspacing="0" cellpadding="5" width="100%" border="1">
                <tbody>
                    <tr>
                        <td bgcolor="#eeeeee"><a name="N102BA"><b>基于类的语言与基于原型的语言的比较</b></a><br />
                        <p>诸如 C++ 和 Java 之类的 <i>基于类的语言</i>使用一个类定义来表示一组具有特定属性集的对象，包括用来表示类的实例和这些实例可以执行的任务类型的数据。一旦编写并编译了类定义，就不能在运行时再对其进行修改，该列的所有实例都包含该类中定义的数据和方法（也可能 <i>只有</i>这些数据或方法）。在这种情况下，所有的类都是 <code>Class</code> 类的实例。 </p>
                        <p><i>基于原型的语言</i>并不区分类和实例；它们只识别基于原型或模板的特殊对象。原型定义了对象初始化时使用的属性。基于原型的实例的属性以及原型本身在任何时间都可以修改。因此，不需要一个&ldquo;类&rdquo;对象或数据类型。从某种意义上来说，我们可以认为基于原型的语言是基于对象的差异性，而不是基于对象的共同性。 </p>
                        </td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
<p>在诸如 Rhino 之类的基于原型的语言中，您可以修改特定对象的属性，或者其原型的属性。例如，如果想为刚才定义的 <code>mike</code> 对象中添加一个特殊属性，可以使用下面的方法： </p>
<table cellspacing="0" cellpadding="0" width="600" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">mike.disability = &quot;blind&quot;
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>我还可以通过引用 <code>Person</code> 构造函数的原型属性来修改 <code>Person</code> 的属性。如果以后想为所有从这个构造函数中派生出来的对象都添加一个 <code>birthdate</code> 属性，可以使用下面的方法： </p>
<table cellspacing="0" cellpadding="0" width="600" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">Person.prototype.birthdate = null
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>然后使用：</p>
<table cellspacing="0" cellpadding="0" width="600" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">mike.birthDate = new Date(66, 10, 3)
            // months are zero-based: this is 11/3/66
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>还要注意基于 <code>Person</code> 原型创建的新对象都有 <code>birthdate</code> 属性，因此下面的代码是有效的： </p>
<table cellspacing="0" cellpadding="0" width="600" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">jami = new Person(&quot;Jami Bomer&quot;, 25, &quot;unemployed&quot;)
            jami.birthdate = new Date(79, 5, 28)
            </pre>
            </td>
        </tr>
    </tbody>
</table>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=51</link>
			<title><![CDATA[数据采集和抽取在预警系统中的重要作用]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Fri,04 May 2007 20:49:45 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=51</guid>	
		<description><![CDATA[<blockquote>当今各行各业都需要预警系统来降低风险，数据挖掘可以帮助预警系统来发现各种数据中的警告。</blockquote><!--START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters --><!--END RESERVED FOR FUTURE USE INCLUDE FILES-->
<p>&nbsp;</p>
<p>每天，企业都要面对产品质量、法人责任、竞争环境的风云变幻、品牌衰退等问题的威胁。如果没有一个系统收集和分析能够指出潜在威胁的数据，那么企业就只能祈祷运气降临到自己头上了。</p>
<p>世界最大的轮胎制造商在 2000 年 8 月付出了惨重的代价才深深体会到了这一点。当时该公司在一款流行的运动休闲车的轮胎外胎面突然脱落造成的一连串事故后召回了 650 万个轮胎。根据美国高速公路交通安全局（National Highway Traffic Safety Administration，NHTSA）的统计，单在美国境内，由于轮胎引起的交通事故就可能达到 750 起，造成 62 人死亡。汽车制造商声称早在 1998 年就已经对这些轮胎的质量产生了怀疑。尽管早已指出了这个问题，但汽车和轮胎制造商未能意识到问题的严重性，直到很久之后，这个问题给这些公司及其顾客带来了可怕的后果。</p>
<p>涉及国家防御的政府机构也遇到了类似的问题。智能服务中的信息日益泛滥。整理所有信息并将它们放到一起以精确地指出紧急威胁并及时做出反映不再是件容易的事情了。幸好，数据挖掘技术可以帮助发现各种数据中隐藏的警告。</p>
<p>预警系统提供了系统地收集和分析数据以识别出现的威胁或问题的能力。为了让这些系统有用，只要数据中累积了足够多的证据支持该问题，就必须马上识别威胁。该系统不能遗漏太多真正的威胁，也不能预测太多永远不发生的威胁。好的预警系统有助于识别潜在的问题、分析它们的特征和起因，并量化它们的严重性。在某个特定月份中在某种条件下检测故障率的突然上升只是其任务的一部分；系统还应该能够估计这个故障率会否继续上升，并预测如果不予理睬其影响又如何。</p>
<p>这些系统有许多用途。跟踪新闻稿、专利公布和合并与收购活动可以帮助确认由于竞争对手、供应商、顾客或合作伙伴的策略变化而导致的潜在威胁。监控和分析新闻组和邮件列表中顾客张贴的内容和对呼叫中心的投诉可以帮助发现市场动态和品牌观念的趋势。汽车制造商经常扫描大型的保修索赔数据库，以检测零部件故障率的趋势，从而可以指出质量或安全问题。在与经济诈骗、洗钱、贪污、有组织犯罪和恐怖份子融资的斗争中，一些全球金融机构最近联合了力量来收集并利用公共信息，以更好地确认与客户交易相关的法律、规章和信誉风险。</p>
<p>管理已确认的重要问题涉及到一个组织的方方面面。因此，完善的预警系统通常包含了工作流管理和协作能力，以支持与打开、调查、关闭重要问题以及调度和跟踪操作（以便管理重要问题）相关的业务过程。官僚主义、过时的策略和组织的划分范围都可以给信息共享和集成式分析造成障碍。但是，这是数据挖掘的专题，我们假设这些非技术问题都可以解决，所以把精力完全放在技术问题上。</p>
<p>虽然每个领域都不同，但这些预警系统都有许多相同的元素。我们将详细说明这些元素。</p>
<br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /><br /><img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" /></td>
        </tr>
    </tbody>
</table>
<table cellspacing="0" cellpadding="0" align="right" class="no-print">
    <tbody>
        <tr align="right">
            <td><img height="4" alt="" src="http://www.ibm.com/i/c.gif" width="100%" /><br /></td>
        </tr>
    </tbody>
</table>
<br /><br />
<p>&nbsp;</p>
<p>预警只是一种可能性，表示数据中隐含威胁的迹象。这些初期指标通常来自各种不同的来源。所收集的数据也许会来自现有的内部系统，该系统是为支持操作需要（如呼叫中心的保修索赔处理或顾客联系管理）而构建的。也可能来自外部数据库、新闻或专利服务器和 Web 的搜索结果。在确认所有相关来源之后，数据收集器会按常规计划或者甚至实时地搜索、选择、传送所有可能相关的数据，并供预警解决方案使用。在最近与汽车制造商一起进行的一项工作中，我们每天都从保修索赔系统、生产系统、呼叫中心、法律责任案例的资源库和 NHTSA 中收集数据。</p>
<br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /><br /><img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" /></td>
        </tr>
    </tbody>
</table>
<br /><br />
<p>&nbsp;</p>
<p>警告指标通常被无关数据掩藏。对无关的故障和事件的观察也许永远也不能对预测警报趋势有所贡献。允许趋势发展需要集成来自所有可用来源的信息的能力。当任何信息可用时，数据仓库就将该信息合并到公共数据体系结构中，从而为预警解决方案提供了坚实的数据基础。不管信息来源如何，它都可以捕捉到涉及同一实体的所有信息。数据仓库还使数据在长时间内可被快速访问，从而使趋势和重要问题浮现出来。趋势的发展需要多长时间可能取决于产品的预期寿命（用忙闲度或服务时间来衡量）、保修期、法律责任期等。</p>
<br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /><br /><img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" /></td>
        </tr>
    </tbody>
</table>
<table cellspacing="0" cellpadding="0" align="right" class="no-print">
    <tbody>
        <tr align="right">
            <td><br /></td>
        </tr>
    </tbody>
</table>
<br /><br />
<p><a name="4"><span class="atitle">信息抽取</span></a></p>
<p>在我们的实践中，我们发现一些最有价值的警告指标通常都包含在非结构化的数据中，尤其是文本。在汽车制造公司中，要处理取自六个来源（包括非结构化的文本字段）的数据，如关于故障的原因或症状的专家注释、对制造商的呼叫中心和 NHTSA 的客户投诉的副本以及诉讼案例的摘要。我们构建的解决方案每天会自动处理数以百计的记录，以寻找可以提高安全性或其它重要问题的指标。</p>
<p>进入预警解决方案的非结构化的数据使信息抽取成为必要。信息抽取是指将非结构化的数据转换成结构化的数据格式的过程，从而支持数据集成或数据分析。</p>
<p>信息抽取（只关注文本数据）的相关技术包括：</p>
<p><b>特性抽取。</b>文本挖掘工具可以定义和派生一组特性，这些特性会捕捉适合于正在被分析的文档集合的关键术语和概念。特性可以是多单词术语、人名、组织名和地名、缩写和关键的数字，如货币金额和日期。算法将&ldquo;信用透支（credit facility）&rdquo;、&ldquo;信用额度（credit line）&rdquo;、&ldquo;里昂信贷银行（Credit Lyonnais）&rdquo;和&ldquo;瑞士信贷银行（Credit Suisse）&rdquo;看成是四种独立的概念。每个特性都有可能成为一段结构化数据。 </p>
<p><b>文档群集和分类。</b>捕捉关键术语和概念的特性通常也描绘了文档内容的常规性质。根据特性，可以将文档分成一个或多个类（类别）。如果给定一组文档，群集技术就会构成一组组主题类似的文档。每个组都可以用该组中文档最突出的特性标记。当存在一组预先定义的类别和已经分配到这些类别的文档的示例时，文档分类技术就可以归纳出区别这些类别的模型。这些模型可以让您根据任何文档的特性，自动将其分类到一个或多个预先定义的类别。已分配的类表示结构化数据的有价值部分，不管该分配是由群集技术还是由分类技术执行的。 </p>
<p><b>信息抽取的自然语言处理。</b>信息抽取通常要求在语句级别对文本进行更详细的分析。通常，特定种类的实体、事件、操作和它们之间的关系是潜在威胁域中的重要部分。例如，在汽车的示例中，我们创建的解决方案必须在每个文本块中标识所引用的汽车特定的零部件、对这些零部件所做的故障或症状报告，以及任何严重事件的发生（如翻车或死亡事故）。在金融服务中，将人名或业务实体名与特定的犯罪行为的定罪和所记载的辩解相关联是很重要的。线点科技的垂直搜索系统产品（VSE）使用可伸缩自然语言处理技术来分析大文档集合的内容，从而抽取信息并生成反映这些文档的词法和概念内容的助诊文件。所抽取的信息用于查询改进、导航文档数据库中的重要概念和准备并提供文档摘要。 </p>
<p>VSE包括用于词法和形态分析、语音部分标记、语法和句法分析以及解析的组件。输入中的文档被当作单词流提供给VSE。在输出中，VSE通过在被称为解析树的多级别层次结构中捕捉单词及其用法的特征之间的关系，来显示文档的结构。图 2 显示了在处理包含语句&ldquo;Side air bag didn't deploy when vehicle was involved in accident.&rdquo;的文档之后生成的解析树的简化版本。请注意，树上描述的关系确定了&ldquo;vehicle&rdquo;是动词组&ldquo;was involved&rdquo;的被动语态主语，并且有一个谓语介词短语&ldquo;in accident&rdquo;。解析树还确定了侧气囊没有弹出，而且用&ldquo;when&rdquo;从句进一步限定了该语句。如果没有这种文本分析，那么句子中每个单词的角色就会不能识别。如果没有那些资料，您就不能确定，例如，是气囊还是汽车没有弹出。<br /><img alt="图 2" src="http://www.ibm.com/developerworks/cn/db2/library/techarticles/mag_0211miner/images/miner_fig2.gif" border="1" /> <br /></p>
<p>准备解析树是信息抽取的第一步。下一步是检查所关心的模式的树。主题专家为信息抽取准备了特定于领域的业务规则。每个规则都包含了与解析树的各组成部分相匹配的模式，以及用于只要发现匹配就以结构化数据格式从树中抽取信息块的指令。</p>
<p>以下是一个业务规则的示例，它将抽取一个实例，在该实例中，某个汽车零部件（如气囊）显示了&ldquo;no deployment&rdquo;故障。该规则的模式将指定一个主动语态句子，其中：</p>
<p>1. 主语短语匹配汽车零部件。</p>
<p>2. 动词组包含了任何时态的动词&ldquo;to deploy&rdquo;，但却是以否定形式。</p>
<p>规则的信息抽取操作将指定&ldquo;no deployment&rdquo;作为故障代码，将主语短语中所匹配的汽车零部件的代码指定为故障零部件。在一个领域中有几百个信息抽取规则并不罕见。通常，每个规则都要对每个文档进行处理，因此拥有一个非常有效的规则处理引擎很重要。例如，在汽车的示例中，我们设计了一个可以一整夜处理接近 10 万个文档的规则引擎。</p>
<p>Talent 中的自然语言处理组件和规则处理引擎的体系结构都是与语言无关的，但所实现的许多分析函数都主要适用于英语。多语言领域需要特定于语言的分析组件或在信息抽取之前将文档翻译成英文的机器翻译技术</p>
<p>准备好数据基础之后，即已经有了正确集成的来自所有相关来源的数据和从任何非结构化的数据中抽取的信息，就可能查找预警指标、监控趋势和深入地分析数据。</p>
<p>查询、报告和在线分析处理（OLAP）工具是任何预警系统的必备部件。可以编制标准报告来按常规调度表生成和发布报告。在汽车公司里，我们编制了许多报告以满足新的管理报告需求。这些工具还提供了对用于特别分析以及分析预警系统识别的潜在问题的数据的访问。所关心的一些问题是：重要问题后面的事件是什么？随着时间的流逝，它们的频率趋势是什么？这些事件在什么条件下会发生？随着时间的流逝，是否会出现模式？这些工具有助于证实、反驳和改进搜索这些和其它问题的答案时的假设有效的预警系统应该在数据可用时主动分析数据。通常，预警信号首先作为数据中的异常出现：偏离所建立的标准和预期的行为。如果在搜索异常之前没有假设预期有什么行为，那么搜索异常是最复杂的。搜索应该尽可能公正并且是数据驱动的。可以从历史数据归纳出各种情况的预期行为的模型。这样的模型让分析员可以将实际观察到的行为与预期行为进行比较，并确定任何偏差是否可能很重要。</p>
<p>出于某些原因，异常检测是一项很困难的任务。首先，通常很难开发精确的预期行为模型。其次，通常可能发生异常的潜在情况的数量非常大；因此搜索空间通常也很大。考虑观察汽车引擎着火事故。通常都会从许多角度来描述每个事故，包括汽车的品牌和型号、里程表上的里程数和事故的地理位置。要确定着火事故发生率是否有异常涉及独立地分析多维数据立方体中所有聚合级别的所有单元。单元的每个聚合相当于一组不同的条件（在这组条件下，可能在着火率中出现异常）：例如，某个特定品牌和型号的汽车或在某个特定地理位置发生的异常。</p>
<p>预警数据仓库会经常用新数据进行更新。可以借助查询、报告和 OLAP 工具来访问这些数据。同时，发现驱动的数据挖掘操作会经常查找异常并帮助发现模式和异常的趋势。在任何时候都会有一组重要问题正在进行处理。其中一些刚被确认为潜在重要问题，而且其它的可能处于调查和管理的各个阶段。整个系统的事件状态通常以数据和过程的形式通过仪表板（dashboard）（可以定制以满足每个用户的需要）提供给分析员和管理层。</p>
<p>仪表板提供了一个新的数据访问和表示层，它可以： <br /></p>
<ul>
    <li>围绕业务活动（如打开一个用于调查的新的重要问题）组织仓库中的事故、事件和相关数据 </li>
    <li>定义与这些活动相关的业务度量，管理它们的工作流 </li>
    <li>提供交互式导航或探索的功能 </li>
    <li>通过动态链接的记分卡、报告、图表以及突出显示重要信息的地图来提供数据的集成视图 </li>
    <li>将对决策支持工具的访问集成到工作流管理系统中，并为分析员提供一个协作环境。 </li>
</ul>
<p>&nbsp;</p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=50</link>
			<title><![CDATA[垂直搜索引擎深度分析]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Wed,02 May 2007 22:44:06 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=50</guid>	
		<description><![CDATA[1． 何为垂直搜索引擎<br />　　<br />　　所谓垂直搜索引擎（Vertical Search Engine），是针对某一特定领域、某一特定人群或某一特定需求提供的有一定价值的信息和相关服务。其特点就是&ldquo;专、精、深&rdquo;，且具有行业色彩。它是与通用搜索引擎截然不同的引擎类型。垂直搜索引擎专注具体、深入的纵向服务，致力于某一特定领域内信息的全面和内容的深入，这个领域外的闲杂信息不收录。<br />　　从竞争的角度来讲，垂直搜索引擎要做通用搜索引擎无法做到的事情，或者说，要做得更胜一筹。通用搜索引擎像一堵大墙，而墙上有很多裂纹，垂直搜索引擎就是要去补这些墙上的裂纹。<br />　　<br />　　2． 为什么要垂直搜索引擎<br />　　<br />　　从2005以来，越来越多的人在谈论垂直搜索引擎，在关注它。为什么？焦点来自与需求。大家不约而同的看到了互联网一块新的领地，而这块领地中正是群雄割据，大家在等待下一个王者的到来。<br />　　这里为什么只谈垂直搜索，而不是通用搜索引擎，原因有三：（1）搜索引擎的技术门槛很高。Google的创始人是超级名校Stanford计算机系的PHD，Baidu的Robin Li也是领了多项搜索技术专利才敢切入搜索领域。可以说，没有3年以上的搜索技术积累，请不要涉及搜索领域。（2）搜索引擎的资金投入非常大，Google光是爬虫服务器就数万之巨，再加上网络带宽的购买，相信这些投入非一般人可以承受。可以说，没有千万级别的资金在手，请不要进入搜索引擎领域。（3）通用搜索引擎经过多年的发展已经非常成熟，各个巨头都已经占山为王， 在快鱼吃慢鱼的互联网里，落后就意味着无法生存。<br />　　因此，垂直代表含义是，第一，门槛低，第二，做得更专更深，第三，信息展现力更强。<br />　　<br />　　3． 垂直搜索引擎的突破与创新<br />　　<br />　　垂直搜索引擎的优势，将决定它在互联网的一席之地。那么垂直搜索的突破点和创新的东西在哪里？<br />　　<br />　　3.1 实时性<br />　　<br />　　垂直搜索引擎需要获取的信息来自于某一特定领域的，这比起通用搜索引擎漫无边际的信息抓取，有一个非常大的优势，那就是信息的实时性。由于互联网上的信息量非常巨大，通用搜索引擎的数据更新周期短则十几天，长则几个月，而垂直搜索引擎的数据更新完全可以以秒为单位。酷讯（kooxoo.com）的火车票搜索就是典型的实时性垂直搜索。<br />　　<br />　　3.2数据挖掘分析，BI，报表<br />　　<br />　　行业的历史发展、最新动向、趋势都是行业从业人员非常关注的话题。垂直搜索引擎集中了行业海量的信息和数据，基于这些信息和数据的商务智能分析，将为行业创造非常有价值的信息增值服务。<br />　　目前，各个垂直搜索引擎开始加强数据分析功能，分析的结果尚未向公众免费开放，毕竟，这也是一个非常好的盈利点。<br />　　<br />　　3.3 个性化，社会化<br />　　<br />　　查询服务只是垂直搜索引擎的一部分，垂直搜索引擎在用户的个性化方向的发展非常重要。垂直搜索引擎不能只提供一个窗口，它应该是一个用户高度参与交互的社会化平台。这不光是用户粘度，忠诚度的问题，更为重要的是，垂直搜索引擎需要能够获取并且分析用户的偏好信息，从而提供更加完善而且准确的数据服务。<br />　　　　<br />　　3.4智能化语义网<br />　　<br />　　语义网（Semantic Web）将有可能成为下一代互联网，这样网络上的数据和信息将被计算机程序所理解。这将为垂直搜索引擎提供一个巨大的机会，爬虫程序如果能理解网络上的数据，将对信息的收集和整理更加准确和专业，搜索服务的查全率和查准率将更高。国外的Pluggd（www.Pluggd.com）正在向这个方向努力。<br />　　<br />　　3.5多元化查询<br />　　目前的搜索引擎，都只局限于关键字搜索，其中主要的原因是，对用户的查询需求无法建模，无法模式化。而关键字搜索带来的问题是，搜索结果过多，并且不准确。互联网信息量越大，这种情况越严重，可以说是灾难。多元化查询服务的提供，将会成为对竞争对手的杀手锏。Riya（www.riya.com）正在这方面尝试，它提出了可视化查询（Visual Search）的概念。<br />]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=49</link>
			<title><![CDATA[垂直搜索引擎的定义]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Wed,02 May 2007 22:35:47 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=49</guid>	
		<description><![CDATA[<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">什么是垂直搜索引擎</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 14pt"> </span></b>
<p>&nbsp;</p>
<b style="mso-bidi-font-weight: normal"><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">垂直搜索引擎的定义</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"> </span></b>
<p>&nbsp;</p>
<span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">搜索引擎的出现，整合了互联网上众多的网页资源，并提供信息导航和信息查询服务，使信息的价值得到了网民和厂商的普遍认可。但是，搜索引擎的发展格局是多方面的，市场需求的多元化也导致了搜索引擎的行业化和细分化，从而&ldquo;垂直搜索引擎&rdquo;成为了搜索引擎发展的必然趋势之一。</span><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"> </span>
<p>&nbsp;</p>
<span lang="EN-US" style="COLOR: black; LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><font face="Times New Roman">线点科技</font></span><span style="COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">认为：垂直搜索引擎是针对某一个行业或组织，满足行业专业需求、或者组织某项业务需求的</span><span lang="EN-US" style="COLOR: black; LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><a href="http://www.xd-tech.com.cn"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><span lang="EN-US">垂直搜索引擎</span></span></a></span><span style="COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">，是搜索引擎的细分和延伸，是对某类网页资源和结构化资源的深度整合，并为用户提供符合专业用户操作行为的信息服务方式。</span><span lang="EN-US" style="COLOR: black; LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">&nbsp;</span><span lang="EN-US" style="COLOR: black; LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><font face="Times New Roman">&nbsp;</font></span></p>
<p>&nbsp;</p>
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 150%; mso-para-margin-left: 1.0gd"><b style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">政府相关的垂直搜索引擎</span><span lang="EN-US">&nbsp;&nbsp;</span></b></p>
<p>&nbsp;</p>
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 10.5pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 150%; mso-para-margin-left: 1.0gd; mso-char-indent-count: 2.0"><span style="COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">主要表现为面向内部的垂直搜索和面向外部的垂直搜索，面向内部的垂直搜索主要是指政府内部专网网站群的搜索，同时集成数据库搜索功能，为政府工作人员和领导提供快速定位信息的方式，为日常工作和领导决策提供支持；面向外部的垂直搜索主要是指政府门户网站群搜索，同时集成法律法规等数据库搜索功能，整合政务服务资源，为民众和企业提供更好的服务，最大的发挥政务资源的效用。</span><span lang="EN-US" style="COLOR: black; LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">&nbsp;&nbsp;</span></p>
<p>&nbsp;</p>
<h1 style="MARGIN: 17pt 0cm 16.5pt"><span style="FONT-SIZE: 10.5pt; LINE-HEIGHT: 240%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">垂直搜索、企业搜索、互联网搜索的区别</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; LINE-HEIGHT: 240%"> </span></h1>
<table class="MSOTABLEGRID" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; WIDTH: 464.4pt; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" cellspacing="0" cellpadding="0" width="619" border="1">
    <tbody>
        <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes">
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e0e0e0; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 59.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt" valign="top" width="79" background="">
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US">
            <p><font face="Times New Roman">&nbsp;</font></p>
            </span></p>
            <p>&nbsp;</p>
            </td>
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; BORDER-LEFT-COLOR: #f0f3f8; BACKGROUND: #e0e0e0; PADDING-BOTTOM: 0cm; WIDTH: 117pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" valign="top" width="156" background="">
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">互联网搜索</span><span lang="EN-US">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            </td>
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; BORDER-LEFT-COLOR: #f0f3f8; BACKGROUND: #e0e0e0; PADDING-BOTTOM: 0cm; WIDTH: 144pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" valign="top" width="192" background="">
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">企业搜索</span><span lang="EN-US">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            </td>
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; BORDER-LEFT-COLOR: #f0f3f8; BACKGROUND: #e0e0e0; PADDING-BOTTOM: 0cm; WIDTH: 144pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" valign="top" width="192" background="">
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">垂直搜索</span><span lang="EN-US">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            </td>
        </tr>
        <tr style="mso-yfti-irow: 1">
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; BACKGROUND: #cccccc; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 59.4pt; BORDER-TOP-COLOR: #f0f3f8; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="79" background="">
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">信息采集</span><span lang="EN-US">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            </td>
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; BORDER-LEFT-COLOR: #f0f3f8; PADDING-BOTTOM: 0cm; WIDTH: 117pt; BORDER-TOP-COLOR: #f0f3f8; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="156" background="">
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">采集方式：被动方式为主</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">采集深度：要求不高</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">动态网页采集的优先级：低</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">结构化数据库信息采集：要求不高</span><span lang="EN-US">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            </td>
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; BORDER-LEFT-COLOR: #f0f3f8; PADDING-BOTTOM: 0cm; WIDTH: 144pt; BORDER-TOP-COLOR: #f0f3f8; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="192" background="">
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">采集方式：主动方式为主</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">采集深度：要求较高</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">动态网页采集的优先级：较高</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">结构化数据库信息采集：要求高</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p><font face="Times New Roman">&nbsp;</font></p>
            </span></p>
            <p>&nbsp;</p>
            </td>
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; BORDER-LEFT-COLOR: #f0f3f8; PADDING-BOTTOM: 0cm; WIDTH: 144pt; BORDER-TOP-COLOR: #f0f3f8; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="192" background="">
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 45pt; TEXT-INDENT: -45pt; mso-char-indent-count: -5.0"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">采集方式：被动方式和主动方式相</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 45pt; TEXT-INDENT: -45pt; mso-char-indent-count: -5.0"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">结合</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">采集深度：要求高</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">动态网页采集的优先级别：高</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">结构化数据库信息采集：要求高</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            </td>
        </tr>
        <tr style="mso-yfti-irow: 2">
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; BACKGROUND: #cccccc; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 59.4pt; BORDER-TOP-COLOR: #f0f3f8; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="79" background="">
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">信息加工</span><span lang="EN-US">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            </td>
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; BORDER-LEFT-COLOR: #f0f3f8; PADDING-BOTTOM: 0cm; WIDTH: 117pt; BORDER-TOP-COLOR: #f0f3f8; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="156" background="">
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">网页元数据提取：要求不高</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">结构化信息提取：要求不高</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">排重、分类：要求不高</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            </td>
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; BORDER-LEFT-COLOR: #f0f3f8; PADDING-BOTTOM: 0cm; WIDTH: 144pt; BORDER-TOP-COLOR: #f0f3f8; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="192" background="">
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">网页元数据提取：要求较高</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">结构化信息提取：要求不高</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">排重、分类：要求高</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            </td>
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; BORDER-LEFT-COLOR: #f0f3f8; PADDING-BOTTOM: 0cm; WIDTH: 144pt; BORDER-TOP-COLOR: #f0f3f8; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="192" background="">
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">网页元数据提取：要求高</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">结构化信息提取：要求高</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">排重、分类：要求高</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            </td>
        </tr>
        <tr style="mso-yfti-irow: 3; mso-yfti-lastrow: yes">
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; BACKGROUND: #cccccc; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 59.4pt; BORDER-TOP-COLOR: #f0f3f8; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="79" background="">
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">信息检索</span><span lang="EN-US">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            </td>
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; BORDER-LEFT-COLOR: #f0f3f8; PADDING-BOTTOM: 0cm; WIDTH: 117pt; BORDER-TOP-COLOR: #f0f3f8; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="156" background="">
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">检索方式：非结构化信息为主</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">结果排序：</span><span lang="EN-US" style="FONT-SIZE: 9pt"><font face="Times New Roman">PageRank</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">算法</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p><font face="Times New Roman">&nbsp;</font></p>
            </span></p>
            <p>&nbsp;</p>
            </td>
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; BORDER-LEFT-COLOR: #f0f3f8; PADDING-BOTTOM: 0cm; WIDTH: 144pt; BORDER-TOP-COLOR: #f0f3f8; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="192" background="">
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">检索方式：结构化信息和非结构化信息相结合</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">结果排序：相关度排序为主</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p><font face="Times New Roman">&nbsp;</font></p>
            </span></p>
            <p>&nbsp;</p>
            </td>
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; BORDER-LEFT-COLOR: #f0f3f8; PADDING-BOTTOM: 0cm; WIDTH: 144pt; BORDER-TOP-COLOR: #f0f3f8; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="192" background="">
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">检索方式：结构化信息和非结构化信息相结合</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">结果排序：需求多样化</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            </td>
        </tr>
    </tbody>
</table>
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US">
<p><font face="Times New Roman">&nbsp;</font></p>
</span></p>
<p>&nbsp;</p>
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US">
<p><font face="Times New Roman">&nbsp;</font></p>
</span></p>
<p>&nbsp;</p>
<h2 style="MARGIN: 13pt 0cm 13pt 10.5pt"><span style="FONT-SIZE: 10.5pt; LINE-HEIGHT: 173%; FONT-FAMILY: 宋体">信息采集：融合了互联网搜索和企业搜索的特点<span lang="EN-US">&nbsp;&nbsp;</span></span></h2>
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 150%; mso-para-margin-left: 1.0gd"><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><span style="mso-spacerun: yes"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">从采集方式看，互联网搜索以被动方式为主，搜索引擎和被采集的网页没有约定的、标准的格式；企业搜索以主动方式为主，被采集的办公文档、</span><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><font face="Times New Roman">CRM</font></span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">和</span><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><font face="Times New Roman">ERP</font></span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">中的数据等都和企业搜索引擎有着约定好的采集接口和安全接口；垂直搜索则采用被动和主动想结合的方式，通过主动方式，有效采集网页中标引的元数据，整合上下游网页资源或者商业数据库，提供更加准确的搜索服务。如：中华人民共和国中央人民政府网站垂直搜索引擎，它通过规范副省级政府门户网站网页的表达方式，达到有效采集网页元数据的目的，为企业和个人提供更精准的政务信息搜索服务。</span><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">&nbsp;&nbsp;</span></p>
<p>&nbsp;</p>
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 10.5pt; TEXT-INDENT: 21.75pt; LINE-HEIGHT: 150%; mso-para-margin-left: 1.0gd"><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">从对采集深度、动态网页采集的优先级、结构化数据库信息采集来看，互联网搜索采用广度为先的策略，所以对采集深度要求不高，而垂直搜索和企业搜索需要挖掘出行业内所有相关的网页信息，所以往往采用深度为先的策略，同时由于行业内的一些有商业价值的信息采用动态发布的方式，如：企业数据库、供求信息等，所以垂直搜索对动态网页的采集优先级别较高。另外，在实际应用中，垂直搜索和企业搜索都需要集成和采集关系数据库中的结构化信息，如：垂直搜索中政府需要集成法律法规库、企业搜索中需要采集</span><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><font face="Times New Roman">ERP</font></span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">、</span><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><font face="Times New Roman">CRM</font></span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">中的信息等。</span><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">&nbsp;&nbsp;</span></p>
<p>&nbsp;</p>
<h2 style="MARGIN: 13pt 0cm 13pt 10.5pt"><span style="FONT-SIZE: 10.5pt; LINE-HEIGHT: 173%; FONT-FAMILY: 宋体">信息加工：非结构化信息和结构化信息是垂直搜索的特色&nbsp;<span lang="EN-US">&nbsp;</span></span></h2>
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 10.5pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 150%; mso-para-margin-left: 1.0gd; mso-char-indent-count: 2.0"><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><a href="http://www.xd-tech.com.cn"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><span lang="EN-US">垂直搜索引擎</span></span></a></span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">和普通的网页搜索引擎的最大区别是对网页信息进行了结构化信息抽取加工，也就是将网页的非结构化数据抽取成特定的结构化信息数据，好比网页搜索是以网页为最小单位，而垂直搜索是以结构化数据为最小单位。</span><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">&nbsp;&nbsp;</span></p>
<p>&nbsp;</p>
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 10.5pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 150%; mso-para-margin-left: 1.0gd; mso-char-indent-count: 2.0"><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">垂直搜索的结构化信息提取和加工主要包括两种：网页元数据的提取，标题、作者、发表时间、版权所有等等；内容中结构化实体信息的提取，人名、地名、组织机构名、电话号码等等。同时，这些数据存储到数据库，进行进一步的加工处理，如：去重、分类等，最后分词、索引再以搜索的方式满足用户的需求。</span><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">&nbsp;&nbsp;</span></p>
<p>&nbsp;</p>
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 10.5pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 150%; mso-para-margin-left: 1.0gd; mso-char-indent-count: 2.0"><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">目前，从垂直搜索的应用情况看，大部分垂直搜索的结构化信息提取都是依靠手工、半手工的方式来完成，面对互联网的海量信息，很难保证信息的实时性和有效性，因此对智能化的，结构化信息提取技术的需求非常迫切。同时国内非结构化信息的智能提取技术目前也取得重大进展，在一些领域得到有效应用，智能化是垂直搜索引擎的发展趋势。</span><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">&nbsp;&nbsp;</span></p>
<p>&nbsp;</p>
<h2 style="MARGIN: 13pt 0cm 13pt 10.5pt"><span style="FONT-SIZE: 10.5pt; LINE-HEIGHT: 173%; FONT-FAMILY: 宋体">信息检索：结构化和非结构化相结合的检索方式<span lang="EN-US">&nbsp;&nbsp;</span></span></h2>
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 150%; mso-para-margin-left: 1.0gd"><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><span style="mso-spacerun: yes"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">从信息检索看，</span><span style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><font face="Times New Roman"> </font></span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">垂直搜索不但能够对网页信息中的结构化信息进行检索，而且能够提供结构化和非结构化信息相结合的检索方式。比如我们找工作关注的：职位信息：</span><span style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><font face="Times New Roman"> </font></span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">软件工程师；公司名称：软件公司；地点：北京海淀。</span><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">&nbsp;&nbsp;</span></p>
<p>&nbsp;</p>
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 150%; mso-para-margin-left: 1.0gd"><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><span style="mso-spacerun: yes"><font face="Times New Roman">&nbsp;&nbsp;&nbsp; </font></span></span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">从检索结果的排序方式看，互联网搜索通过</span><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><font face="Times New Roman">PageRank</font></span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">算法来实现，企业搜索大多采用检索内容和检索词的相关度进行排序，相对于互联网搜索和企业搜索，垂直搜索的排序需求更加多样化，如：按时间排序、按相关度排序、按某个结构化字段排序（如：购物搜索中的按价格排序等等）。</span><span lang="EN-US" style="COLOR: black; LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><font face="Times New Roman">&nbsp;</font></span></p>
<p>&nbsp;</p>
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">垂直搜索引擎在政府门户中的应用价值</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 14pt">&nbsp;</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 12pt"><font face="Times New Roman">&nbsp;</font></span></b></p>
<p>&nbsp;</p>
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 150%; mso-para-margin-left: 1.0gd"><b style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">整合政务资源，有效提升政务资源价值</span><span lang="EN-US">&nbsp;&nbsp;</span></b></p>
<p>&nbsp;</p>
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 150%; mso-para-margin-left: 1.0gd"><b style="mso-bidi-font-weight: normal"><span lang="EN-US"><span style="mso-spacerun: yes"><font face="Times New Roman">&nbsp;&nbsp;&nbsp; </font></span></span></b><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">门户技术中的&ldquo;网站群技术&rdquo;和&ldquo;全文检索技术&ldquo;有效的整合了行政领导关系比较紧密地部门内部的信息资源，垂直搜索技术则有效整合了行政领导关系比较松散地机构间的信息资源，使得政务信息资源的聚拢和整合得以最大化，政务资源的可挖掘能力得到提高，从而有效地提升了政务资源的价值。</span><span lang="EN-US">&nbsp;</span><b style="mso-bidi-font-weight: normal"><span lang="EN-US"><font face="Times New Roman">&nbsp;</font></span></b></p>
<p>&nbsp;</p>
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 150%; mso-para-margin-left: 1.0gd"><b style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一站式检索和导航服务，提高政府门户的公众服务水平</span><span lang="EN-US">&nbsp;&nbsp;</span></b></p>
<p>&nbsp;</p>
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 150%; mso-para-margin-left: 1.0gd"><b style="mso-bidi-font-weight: normal"><span lang="EN-US"><span style="mso-spacerun: yes"><font face="Times New Roman">&nbsp;&nbsp; </font></span></span></b><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">面对多如繁星的政府门户网站，用户查询信息和网上办事时往往无所适从，政务垂直搜索引擎的建设恰恰解决了这个问题，用户可以通过搜索引擎的各种检索方式，方便的获取过去需要访问多个网站才能查全的信息，同时也可以通过检索获取网上办事的入口，例如：在央网搜索引擎的规划中将继续开发服务搜索这个模块，通过检索您就可以轻松获取副部级网站上的办事链接网址。一站式检索和导航服务，大大方便了市民和企业，提高了政府门户网站的服务水平。</span><span lang="EN-US">&nbsp;</span><span lang="EN-US"><font face="Times New Roman">&nbsp;</font></span></p>
<p>&nbsp;</p>
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 150%; mso-para-margin-left: 1.0gd"><b style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">政治体制改革环境下，&ldquo;凝聚&rdquo;组织机构的有效手段</span><span lang="EN-US">&nbsp;&nbsp;</span></b></p>
<p>&nbsp;</p>
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 150%; mso-para-margin-left: 1.0gd"><font face="Times New Roman"><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp; </span></span><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><span style="mso-spacerun: yes">&nbsp;</span></span></font><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">市场格局的变化，按照&ldquo;大社会、小政府&rdquo;的思维模式，政府介入微观经济领域越来越少，国家各个行业的部分机构由事业型机构转为企业。</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">部委和下面的机构之间已经没有了行政领导职能，但是业务上还是存在千丝万缕的联系，两者还存在业务指导关系。垂直搜索引擎将两者有效的&ldquo;凝聚在一起&rdquo;，通过&ldquo;信息的关联&rdquo;把大家联系在一起，有利于行业内的交流和协作。</span>&nbsp;</p>
<p>&nbsp;</p>
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">垂直搜索引擎在政府门户中的应用展望</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 14pt">&nbsp;</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 12pt"></span></b></p>
<p>&nbsp;</p>
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 11.9pt; LINE-HEIGHT: 150%"><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><font face="Times New Roman">&ldquo;</font></span></b><b style="mso-bidi-font-weight: normal"><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">门户</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><font face="Times New Roman">+</font></span></b><b style="mso-bidi-font-weight: normal"><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">搜索&rdquo;将会成为政府门户网站建设的新模式</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">&nbsp;&nbsp;</span></b></p>
<p>&nbsp;</p>
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 10.5pt; TEXT-INDENT: 11.9pt; LINE-HEIGHT: 150%; mso-para-margin-left: 1.0gd"><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;</span><span style="mso-spacerun: yes">&nbsp;</span></font></span></b><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">正如上面所述，门户技术（网站群和内容管理技术）只是解决了行政领导关系比较紧密的政府机构的信息资源整合，对于行政领导关系比较松散的政府机构的信息资源整合，则必须采用被动搜索的方式。随着地市级、县级政务门户的普及，省级门户首先考虑采用搜索技术整合下属门户网上资源，为民众、企业提供便捷的信息获取手段和导航服务。实践证明很多省级、部委门户已经展开了政府门户垂直搜索引擎的建设，并取得了很好的效果，&ldquo;门户</span><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><font face="Times New Roman">+</font></span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">搜索&rdquo;正在成为政府门户网站建设的新模式。</span><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">&nbsp;&nbsp;</span></p>
<p>&nbsp;</p>
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><b style="mso-bidi-font-weight: normal"><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">联合搜索将会成为政府门户垂直搜索的特色</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">&nbsp;&nbsp;</span></b></p>
<p>&nbsp;</p>
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 10.5pt; TEXT-INDENT: 11.9pt; LINE-HEIGHT: 150%; mso-para-margin-left: 1.0gd"><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><span style="mso-spacerun: yes"><font face="Times New Roman">&nbsp;&nbsp; </font></span></span></b><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">随着政府门户中垂直搜索引擎的建设，当下级政府部门已经建立了自身职责范围内的信息资源的整合和搜索以后，上级部门则可不采用被动抓取的方式来整合这部分资源，可以通过联合搜索的方式搜索这部分资源，即：将用户的关键词发送到下级政府部门的搜索引擎，对结果集合并后返回给用户。联合搜索的方式具有下面两个优点：第一，省时省力，节约资金，防止重复建设；第二，和被动的抓取方式相比，获取的信息比较全面和及时。</span><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">&nbsp;</span></p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=48</link>
			<title><![CDATA[应用技巧：Google搜索引擎的使用]]></title>
			<author>webmaster@xd-tech.com(christian)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Thu,26 Apr 2007 14:12:29 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=48</guid>	
		<description><![CDATA[1、汉语拼音输入检索&nbsp;<br/>　　为了方便使用中文的用户在网上搜索，Google允许用户直接在键盘上输入汉语拼音来检索相关事物，例如：&nbsp;<br/>　　输入　shanghaishikebiao&nbsp;<br/>　　检索结果提示：您是不是要找：上海时刻表　&nbsp;<br/>　　这正是我们需要查找的关键词，用户可以据此浏览相关结果，这包括上海地区的各种交通工具的时刻表。如果需要查找更详细的资料“上海飞机航班时刻表”，则只要在原来的检索结果“上海时刻表”中间输入feijihangban，例如：&nbsp;<br/>　　上海feijihangban时刻表&nbsp;<br/>　　Google的这项新功能，可以免除用户在中文和拼音输入方面的互相转换。用户在输入拼音时，不要留有空格，否则Google会误认为英文。Google把拼音与常用的字或者词组一一对应，因此，过于生僻的字或词组不适合于用这个方法查找。&nbsp;<br/><br/><br/>&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;2、中英文字典&nbsp;<br/>　　经常使用计算机的用户手头上自然会有一、两个字典软件，用于查找和翻译中英文的词义。作为一种使用频率较高的工具，Google也提供了一个中英文字典，很方便使用。用户可以按照下列方法查找词义查找英文的中文词义则输入fy　computer查找中文的英文词义则输入　翻译　计算机&nbsp;<br/><br/>　　3、天气查询&nbsp;<br/>　　天气情况也是人们经常要查询的信息之一，Google　提供的天气查询来自于一个更新及时的中文气象网站，适合中国人使用。用户输入中文和英文都可以查询，例如要了解奥运会期间雅典的天气情况，可以按照下列方法输入：&nbsp;<br/>　　雅典　天气　　athens&nbsp;tq　返回的查询结果中会在第一条出现一个　“雅典天气预报”，用户点击后就可以看到当天雅典的天气情况。如果地名相同者，用户还需要进行一次选择。&nbsp;<br/><br/>　　4、股票查询&nbsp;<br/>　　查询股票的网站已经很多了，Google提供的股票查询只是更方便一些而已，用户可以按照股票名称、股票代码或者股票名称的声母字母查询，下列为查询“中国联通”股票行情的举例。&nbsp;<br/>　　中国联通　股票　zglt&nbsp;gp&nbsp;<br/>　　gp&nbsp;600050&nbsp;<br/><br/>　　5、邮政编码和区号查询&nbsp;<br/>　　人们时常需要查询邮政编码和电话区号，Google提供了这样一个实用的功能，用户据此能够获得所要查询的省市名称，邮政编码及长途电话区号，下面为查询举例：&nbsp;<br/>　　邮编　杭州　　　　　　　&nbsp;<br/>　　区号　绍兴　　　　　　　&nbsp;<br/>　　yb　　杭州　&nbsp;<br/>　　qh　　绍兴&nbsp;<br/>　　需要注意的是用户只能查询到城市级别的邮政编码和区号，而无法进一步查询区县的具体信息。&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;6、手机归属地查询&nbsp;<br/>　　用户在输入手机号码后可以获得号码段、归属地、卡类型、邮政编码和电话区号的信息，但是从实用的角度看，其中只有手机归属地的信息较为有用。&nbsp;<br/><br/>　　7、计算器使用&nbsp;<br/>　　Google有计算器的功能，例如在google检索框中输入45*86+35/7，就会得到结果：&nbsp;<br/>　　(45*86)+(35/7)=3875<br/><br/>　　8、购物检索&nbsp;<br/>　　Google新开设的购物检索称之为Froogle，网址为http：//froogle.google.com/&nbsp;<br/>　　用户只要输入商品的名称，就可以看到该商品的图片和价格，用户还可以限定一种商品的价格进行检索，并且将检索结果按需要从高价到低价排序列出，许多商品可以直接在网上订购，这种图文并茂的检索购物方式较受用户青睐。&nbsp;<br/><br/>　　9、美国实用生活信息查询&nbsp;<br/>　　如果用户生活在美国或者短期去美国出差和学习，下面的查询功能或许能对他们又帮助，因为这些检索服务目前仅限于美国。&nbsp;<br/>　　9.1　地区代码查询&nbsp;<br/>　　用户输入美国的地区代码，在返回的检索结果中的第一项就是该地区的地图，用户可以通过不断的点击来找到一条具体的大街。&nbsp;<br/>　　9.2　条形码查询&nbsp;<br/>　　用户输入一个商品的条形码就可以找到有关该产品的说明。&nbsp;<br/>　　9.3　飞机航班查询&nbsp;<br/>　　用户输入一家航空公司的名称和航班号，即可获得该航班的出发地和目的地，起飞和到达时间，以及实际航行情况，目前是否开始检票，抵达目的地候机大楼的舱门号。&nbsp;<br/>　　9.4　车牌号查询&nbsp;<br/>　　用户输入车牌号，可以获得一辆车的名称、型号、出厂年份，车身和发动机情况。&nbsp;<br/>　　9.5　邮件查询&nbsp;<br/>　　用户输入一个邮件的号码，可以获悉该邮件目前的状况，譬如邮件已经抵达或者正在路途上等。&nbsp;<br/><br/>　　10、检索工具栏&nbsp;<br/>　　Google的检索工具栏功能强大，有拖放和右击检索功能，新闻阅读，广告拦截，网站排名显示和搜索字词标明等，工具栏可以附在浏览器下，使用更加方便。用户可以首先在Google网站下载并安装一个检索工具栏，然后根据需要在工具栏的选项中进行设置，我们推荐用户使用这个检索工具栏，它将给用户带来许多意想不到的方便。&nbsp;<br/>　　10.1&nbsp;Google　新闻&nbsp;<br/>　　Google　的新闻来源于4500家报刊杂志和通讯社，在精选以后持续播出世界各国的新闻，每条新闻都有更新的时间，并联接相关的新闻。用户可以使用免费的新闻通知服务，通过电子邮件收到自己感兴趣的新闻。&nbsp;<br/>　　10.2　网站排名&nbsp;<br/>　　Google　通过对Web链接结构和许多其它变量自动计算，对网页的重要程度进行评定。网站排名根据这个评定能够显示用户正在访问的网站的重要程度，用一根绿色线条显示，直观而明确。&nbsp;<br/>　　10.3　搜索字词标明&nbsp;<br/>　　搜索字词标明通过鲜艳的色彩标明用户所检索的字词在每个网页上的位置，便于用户查阅，单击“搜索字词标明”按钮可以打开和关闭标明状态。&nbsp;<br/>　　10.4　拖放和右击检索&nbsp;<br/>　　拖放检索功能使检索更为方便，用户可以把在网页上所选取的字词直接拖放到检索框中，Google会自动进行检索。对于与　Web浏览器同时运行的许多文字处理应用程序中的文字，也可以使用此功能。右击检索是指用户可以在网页上选取文字后，右击鼠标，然后从弹出式菜单中选择“Google　搜索”便可以自动检索。<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=47</link>
			<title><![CDATA[又一个新的Lucene分词程序，和Nutch一起使用，速度超快，代码超少，准确率不高]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Mon,23 Apr 2007 16:40:25 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=47</guid>	
		<description><![CDATA[速度：17600左右个汉字&nbsp;，&nbsp;分&nbsp;1000词&nbsp;，时间大约是&nbsp;12.5秒左右&nbsp;，&nbsp;差不多每秒&nbsp;100万字&nbsp;，&nbsp;比海量分词的速度还快4倍&nbsp;，&nbsp;提供扩展到&nbsp;词性标注的接口&nbsp;，&nbsp;估计准确率应该还可以接受吧。词库文件邮件发<br/><br/><br/>package&nbsp;com.xdtech;<br/>import&nbsp;java.util.*;<br/>import&nbsp;java.io.*;<br/><br/>/**<br/>&nbsp;*&nbsp;&lt;p&gt;Title:&nbsp;&lt;/p&gt;<br/>&nbsp;*<br/>&nbsp;*&nbsp;&lt;p&gt;Description:&nbsp;&lt;/p&gt;<br/>&nbsp;*<br/>&nbsp;*&nbsp;&lt;p&gt;Copyright:&nbsp;Copyright&nbsp;(c)&nbsp;2007&lt;/p&gt;<br/>&nbsp;*<br/>&nbsp;*&nbsp;&lt;p&gt;Company:&nbsp;&lt;/p&gt;<br/>&nbsp;*<br/>&nbsp;*&nbsp;@author&nbsp;not&nbsp;attributable&nbsp;北京线点科技有限公司&nbsp;jaddy0302<br/>&nbsp;*&nbsp;@version&nbsp;1.0<br/>&nbsp;*/<br/>public&nbsp;class&nbsp;FileBT&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;long&nbsp;time;<br/>&nbsp;&nbsp;&nbsp;&nbsp;/**<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;词库&nbsp;Map&nbsp;，&nbsp;扩展支持词性标注和词频<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br/>&nbsp;&nbsp;&nbsp;&nbsp;Map&lt;java.lang.Character,&nbsp;Map&gt;&nbsp;stackMap&nbsp;=&nbsp;new&nbsp;VHashMap(1,&nbsp;1);<br/>&nbsp;&nbsp;&nbsp;&nbsp;/**<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;临时&nbsp;Map&nbsp;，初始化词库和分词使用<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br/>&nbsp;&nbsp;&nbsp;&nbsp;Map&lt;java.lang.Character,&nbsp;Map&gt;&nbsp;pointMap&nbsp;=&nbsp;null;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;List&lt;Serializable&gt;&nbsp;tokenList;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;BufferString&nbsp;strb;<br/>&nbsp;&nbsp;&nbsp;&nbsp;/**<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;初始化词库<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;keyword&nbsp;String<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;init(String&nbsp;keyword)&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pointMap&nbsp;=&nbsp;stackMap;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;keyword.length();&nbsp;i++)&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;key&nbsp;=&nbsp;keyword.charAt(i);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(pointMap.containsKey(key))&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//找到了&nbsp;，下个字符检索<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pointMap&nbsp;=&nbsp;pointMap.get(key);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;continue;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pointMap&nbsp;=&nbsp;pointMap.put(key,&nbsp;new&nbsp;VHashMap(1,&nbsp;1));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//未收录新词&nbsp;或&nbsp;词结束<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;/**<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;分词代码<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;input&nbsp;String<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;List<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br/>&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;List&nbsp;token(String&nbsp;input)&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(input&nbsp;==&nbsp;null&nbsp;||&nbsp;input.length()&nbsp;==&nbsp;0)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;null;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;currentchar;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tokenList&nbsp;=&nbsp;new&nbsp;ArrayList();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strb&nbsp;=&nbsp;new&nbsp;BufferString(20);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pointMap&nbsp;=&nbsp;stackMap;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;input.length();&nbsp;i++)&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentchar&nbsp;=&nbsp;input.charAt(i);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;//中英文和标点符号<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((int)&nbsp;currentchar&nbsp;&lt;=&nbsp;255)&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//英文字符、数字、标点符号<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(java.lang.Character.isLetterOrDigit(currentchar)&nbsp;||<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentchar&nbsp;==&nbsp;&#39;\&#39;&#39;&nbsp;||&nbsp;currentchar&nbsp;==&nbsp;&#39;_&#39;&nbsp;||<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentchar&nbsp;==&nbsp;&#39;-&#39;)&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strb.append(currentchar);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tokenList.add(strb.toString());<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tokenList.add(String.valueOf(currentchar));&nbsp;//英文标点符号&nbsp;或者空格<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strb.setLength(0);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pointMap&nbsp;=&nbsp;find(currentchar,<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strb.length()&nbsp;==&nbsp;0&nbsp;?&nbsp;stackMap&nbsp;:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pointMap);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;subcondition&nbsp;=&nbsp;subcondition&nbsp;=&nbsp;(pointMap&nbsp;==&nbsp;null)&nbsp;?&nbsp;-1&nbsp;:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pointMap.size();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;condition&nbsp;=&nbsp;(subcondition&nbsp;&gt;=&nbsp;1)&nbsp;?&nbsp;1&nbsp;:&nbsp;subcondition;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch&nbsp;(condition)&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;-1:&nbsp;{&nbsp;//标点符号&nbsp;或者也可能是&nbsp;副词介词等其他未识别的词<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(strb.length()&nbsp;&gt;&nbsp;0)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tokenList.add(strb.toString());<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strb.setLength(0);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pointMap&nbsp;=&nbsp;find(currentchar,stackMap);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boolean&nbsp;test&nbsp;=&nbsp;pointMap&nbsp;==&nbsp;null?tokenList.add(String.valueOf(currentchar)):strb.append(currentchar)!=null;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;0:&nbsp;{&nbsp;//已找到字符，&nbsp;但该字符无下级字符，即&nbsp;该字为词的最后一个字符<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strb.append(currentchar);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tokenList.add(strb.toString());<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strb.setLength(0);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;1:&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strb.append(currentchar);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;tokenList;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Map&nbsp;find(char&nbsp;input,&nbsp;Map&nbsp;point)&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pointMap&nbsp;=&nbsp;point&nbsp;==&nbsp;null&nbsp;?&nbsp;stackMap&nbsp;:&nbsp;point;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((pointMap&nbsp;=&nbsp;pointMap.get(input))&nbsp;!=&nbsp;null)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;pointMap;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;null;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;/**<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&lt;p&gt;Title:&nbsp;HashMap&lt;/p&gt;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&lt;p&gt;Description:&nbsp;重载&nbsp;HashMap&nbsp;put&nbsp;方法&lt;/p&gt;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&lt;p&gt;Copyright:&nbsp;Copyright&nbsp;(c)&nbsp;2007&lt;/p&gt;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&lt;p&gt;Company:&nbsp;&lt;/p&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@author&nbsp;not&nbsp;attributable&nbsp;北京线点科技有限公司<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@version&nbsp;1.0<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br/>&nbsp;&nbsp;&nbsp;&nbsp;final&nbsp;class&nbsp;VHashMap&lt;K,&nbsp;V&gt;&nbsp;extends&nbsp;HashMap&lt;K,&nbsp;V&gt;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;VHashMap(int&nbsp;initialCapacity,&nbsp;float&nbsp;loadFactor)&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;super(initialCapacity,&nbsp;loadFactor);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;V&nbsp;put(K&nbsp;key,&nbsp;V&nbsp;value)&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;super.put(key,&nbsp;value);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;value;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;BufferString<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char[]&nbsp;buffer&nbsp;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;length&nbsp;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;hasUsed&nbsp;=0&nbsp;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;BufferString(int&nbsp;length)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buffer&nbsp;=&nbsp;new&nbsp;char[this.length&nbsp;=&nbsp;length&nbsp;]&nbsp;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;BufferString&nbsp;append(char&nbsp;character)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buffer[hasUsed++]&nbsp;=&nbsp;character&nbsp;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;this&nbsp;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;setLength(int&nbsp;length)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;java.util.Arrays.fill(buffer,hasUsed&nbsp;=&nbsp;length&nbsp;,&nbsp;this.length&nbsp;,&nbsp;(char)0);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;long&nbsp;length()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;hasUsed;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;toString()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;String(buffer,&nbsp;0,&nbsp;hasUsed);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args)&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileBT&nbsp;bree&nbsp;=&nbsp;new&nbsp;FileBT();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InputStream&nbsp;worddata&nbsp;=&nbsp;new&nbsp;FileInputStream(new&nbsp;File(<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#34;d:/Test.txt&#34;));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;newword&nbsp;=&nbsp;null;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BufferedReader&nbsp;in&nbsp;=&nbsp;new&nbsp;BufferedReader(new&nbsp;InputStreamReader(<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;worddata,&nbsp;&#34;UTF8&#34;));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;((newword&nbsp;=&nbsp;in.readLine())&nbsp;!=&nbsp;null)&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(newword.length()&nbsp;==&nbsp;1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;continue;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bree.init(newword);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in.close();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mem();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&lt;String&gt;&nbsp;tokenList&nbsp;=&nbsp;null;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long&nbsp;start&nbsp;=&nbsp;System.nanoTime();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;test&nbsp;=&nbsp;&#34;中国是一个人口大国,made&nbsp;in&nbsp;china,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论&#34;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;jk&nbsp;=&nbsp;0;&nbsp;jk&nbsp;&lt;&nbsp;1000;&nbsp;jk++)&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tokenList&nbsp;=&nbsp;bree.token(test);<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(String&nbsp;token&nbsp;:tokenList)<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(token);<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long&nbsp;end&nbsp;=&nbsp;System.nanoTime();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&#34;字数:&#34;&nbsp;+&nbsp;test.length()&nbsp;*&nbsp;1000&nbsp;+&nbsp;&#34;&nbsp;分词结果：&#34;&nbsp;+<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tokenList.size()&nbsp;*&nbsp;1000&nbsp;+&nbsp;&#34;&nbsp;时间：&#34;&nbsp;+&nbsp;((long)(end&nbsp;-&nbsp;start))/(1000*1000)+&#34;ms&nbsp;&#34;&nbsp;+&nbsp;((long)(end&nbsp;-&nbsp;start))&nbsp;+&#34;ns&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(Exception&nbsp;ex)&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ex.printStackTrace();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;/**<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Displays&nbsp;some&nbsp;timing&nbsp;and&nbsp;approximate&nbsp;memory&nbsp;info.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;mem()&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Runtime&nbsp;r&nbsp;=&nbsp;Runtime.getRuntime();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long&nbsp;a&nbsp;=&nbsp;r.totalMemory()&nbsp;-&nbsp;r.freeMemory();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boolean&nbsp;b&nbsp;=&nbsp;a&nbsp;&gt;&nbsp;1&nbsp;&lt;&lt;&nbsp;20;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long&nbsp;f&nbsp;=&nbsp;b&nbsp;?&nbsp;20&nbsp;:&nbsp;10;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out(&#34;内存占用:(&#34;&nbsp;+&nbsp;(a&nbsp;+&nbsp;(1&nbsp;&lt;&lt;&nbsp;f&nbsp;-&nbsp;1)&nbsp;&gt;&gt;&nbsp;f)&nbsp;+&nbsp;(b&nbsp;?&nbsp;&#34;&nbsp;mb&#34;&nbsp;:&nbsp;&#34;&nbsp;kb&#34;)&nbsp;+&nbsp;&#34;)\n&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;void&nbsp;out(String&nbsp;text)&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(text);<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/><br/>}<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=46</link>
			<title><![CDATA[信息指纹与消重算法]]></title>
			<author>webmaster@xd-tech.com(christian)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Tue,17 Apr 2007 00:33:36 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=46</guid>	
		<description><![CDATA[信息指纹：就是提取一个信息的特征，通常是一组词或者一组词＋权重，然后根据这组词调用特别的算法，例如MD5，将之转化为一组代码，这组代码就成为标识这个信息的指纹。<br/><br/>从理论上讲，每两个不同文本的特征信息是不同的，那么得到的代码也应该是不一样的，就象人的指纹。<br/><br/>搜索引擎在建立索引的时候需要对重复内容的网页进行识别和消重，这就要用到信息指纹。<br/><br/>例如，通常搜索引擎要先对网页进行消噪，就是净化网页，将一些模版类的，无用的广告等剔除调。然后得到预处理后的网页，然后对网页进行向量化处理，简单的讲就是分词，统计，并按照词频生成一个列表。<br/><br/>例如：<br/>网页12<br/>搜索10<br/>引擎7<br/>...<br/>...<br/>然后取前N个关键词作为信息的矢量，例如：[网页12搜索10引擎7]&nbsp;这是可以直接进行MD5哈系，或者按照其它规则进行重拍后进行MD5哈系。例如本例，取前３个关键词，在进行哈系，得到的信息指纹就是：a7eb9d92a83cf438881915e0bc2df70b<br/><br/>这样a7eb9d92a83cf438881915e0bc2df70b&nbsp;就作为本文档的指纹和以往的文档进行比较，如果有相同的，就说明指纹上看是一样的，就可以进入消重处理。<br/><br/>至于关键词的权重，因为有众多的提取算法，比较常用的是nf/df，这里不在赘述。另外高频词和停止词的消除也是必要的，这点可以参考基于信息噪音模型的分类算法，那个ppt里我细数了如何定义“噪音”，如何进行消噪。<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=45</link>
			<title><![CDATA[数学之美 系列十三 信息指纹及其应用]]></title>
			<author>webmaster@xd-tech.com(christian)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Tue,17 Apr 2007 00:14:24 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=45</guid>	
		<description><![CDATA[数学之美&nbsp;系列十三&nbsp;信息指纹及其应用<br/>2006年8月3日&nbsp;上午&nbsp;11:17:00<br/><br/>发表者：吴军，Google&nbsp;研究员&nbsp;<br/><br/>任何一段信息文字，都可以对应一个不太长的随机数，作为区别它和其它信息的指纹（Fingerprint)。只要算法设计的好，任何两段信息的指纹都很难重复，就如同人类的指纹一样。信息指纹在加密、信息压缩和处理中有着广泛的应用。<br/><br/>我们在图论和网络爬虫一文中提到，为了防止重复下载同一个网页，我们需要在哈希表中纪录已经访问过的网址（URL)。但是在哈希表中以字符串的形式直接存储网址，既费内存空间，又浪费查找时间。现在的网址一般都较长，比如，如果在&nbsp;Google&nbsp;或者百度在查找数学之美，对应的网址长度在一百个字符以上。下面是百度的链接<br/><br/><a href="http://www.baidu.com/s?ie=gb2312" target="_blank">http://www.baidu.com/s?ie=gb2312</a>&amp;bs=%CA%FD%D1%A7%D6%AE%C3%C0&amp;sr=&amp;amp;z=&amp;cl=3&amp;f=8<br/>&amp;wd=%CE%E2%BE%FC+%CA%FD%D1%A7%D6%AE%C3%C0&amp;ct=0<br/><br/>假定网址的平均长度为一百个字符，那么存贮&nbsp;200&nbsp;亿个网址本身至少需要&nbsp;2&nbsp;TB，即两千&nbsp;GB&nbsp;的容量，考虑到哈希表的存储效率一般只有&nbsp;50%，实际需要的内存在&nbsp;4&nbsp;TB以上。即使把这些网址放到了计算机的内存中，由于网址长度不固定，以字符串的形式查找的效率会很低。因此，我们如果能够找到一个函数，将这&nbsp;200&nbsp;亿个网址随机地映射到128&nbsp;二进位即&nbsp;16&nbsp;个字节的整数空间，比如将上面那个很长的字符串对应成一个如下的随机数:<br/><br/>893249432984398432980545454543<br/><br/>这样每个网址只需要占用&nbsp;16&nbsp;个字节而不是原来的一百个。这就能把存储网址的内存需求量降低到原来的&nbsp;1/6。这个16&nbsp;个字节的随机数，就称做该网址的信息指纹（Fingerprint)。可以证明，只要产生随机数的算法足够好，可以保证几乎不可能有两个字符串的指纹相同，就如同不可能有两个人的指纹相同一样。由于指纹是固定的&nbsp;128&nbsp;位整数，因此查找的计算量比字符串比较小得多。网络爬虫在下载网页时，它将访问过的网页的网址都变成一个个信息指纹，存到哈希表中，每当遇到一个新网址时，计算机就计算出它的指纹，然后比较该指纹是否已经在哈希表中，来决定是否下载这个网页。这种整数的查找比原来字符串查找,可以快几倍到几十倍。<br/><br/>产生信息指纹的关键算法是伪随机数产生器算法（prng)。最早的&nbsp;prng&nbsp;算法是由计算机之父冯诺伊曼提出来的。他的办法非常简单，就是将一个数的平方掐头去尾，取中间的几位数。比如一个四位的二进制数&nbsp;1001（相当于十进制的9），其平方为&nbsp;01010001&nbsp;(十进制的&nbsp;81）掐头去尾剩下中间的四位&nbsp;0100。当然这种方法产生的数字并不很随机，也就是说两个不同信息很有可能有同一指纹。现在常用的&nbsp;MersenneTwister&nbsp;算法要好得多。<br/><br/>信息指纹的用途远不止网址的消重，信息指纹的的孪生兄弟是密码。信息指纹的一个特征是其不可逆性,&nbsp;也就是说,<br/>无法根据信息指纹推出原有信息，这种性质，&nbsp;正是网络加密传输所需要的。比如说，一个网站可以根据用户的Cookie&nbsp;识别不同用户，这个&nbsp;cookie&nbsp;就是信息指纹。但是网站无法根据信息指纹了解用户的身份，这样就可以保护用户的隐私。在互联网上，加密的可靠性，取决于是否很难人为地找到拥有同一指纹的信息，&nbsp;比如一个黑客是否能随意产生用户的&nbsp;cookie。从加密的角度讲&nbsp;MersenneTwister，算法并不好，因为它产生的随机数有相关性。<br/><br/>互联网上加密要用基于加密伪随机数产生器（csprng)。常用的算法有&nbsp;MD5&nbsp;或者&nbsp;SHA1&nbsp;等标准，它们可以将不定长的信息变成定长的&nbsp;128&nbsp;二进位或者&nbsp;160&nbsp;二进位随机数。值得一提的事，SHA1&nbsp;以前被认为是没有漏洞的，现在已经被中国的王小云教授证明存在漏洞。但是大家不必恐慌，&nbsp;因为这和黑客能真正攻破你的注册信息是还两回事。<br/><br/>信息指纹的虽然历史很悠久，但真正的广泛应用是在有了互联网以后，这几年才渐渐热门起来。]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=44</link>
			<title><![CDATA[北京线点科技有限公司助力WEB2.0垂直搜索]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Fri,13 Apr 2007 11:11:32 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=44</guid>	
		<description><![CDATA[<p><img alt="" src="http://www.xd-tech.com.cn/blog/attachments/month_0704/6200741312359.png" border="0" />&nbsp;&nbsp;&nbsp; <font size="5"></font></p>
<p><a href="http://www.xd-tech.com.cn/product.html"><font size="5">北京线点科技有限公司助力WEB2.0垂直搜</font></a></p>
<p><a href="http://www.xd-tech.com.cn/product.html"><font size="5">&nbsp;线点垂直搜索产品，专为WEB2.0设计<br />安装简单,维护方便，完备的后台管理功能<br />分布式搜索,海量数据瞬间展现<br />集群,超线程技术，信息采集准确高效<br />SOA发布，RSS支持，二次开发方便快速<br />博客搜索、职位搜索、象酷讯、奇虎一样搜索</font></a><br /></p>
<p>&nbsp;</p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=43</link>
			<title><![CDATA[中文搜索引擎技术揭密：排序技术(转）]]></title>
			<author>webmaster@xd-tech.com(christian)</author>
			<category><![CDATA[排序算法]]></category>
			<pubDate>Wed,04 Apr 2007 16:08:44 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=43</guid>	
		<description><![CDATA[【e800.com.cn 编者按】随着&ldquo;眼球经济&rdquo;席卷互联 网，成千上万的资金迅速流向最能吸引浏览着眼球的搜索引擎市场。有大量调查显示搜索引擎市场正处在高速发展时期，成为了未来几年内最具发展潜力的产业之 一。随着Google、百度、中国搜索等各具特色的搜索引擎逐渐成为人们最常用的网络工具，企业对搜索引擎的注意力也从&ldquo;观察&rdquo;升级为&ldquo;动武&rdquo;。
<p>随着市场容量和使用者人数的不断激增，如何完善搜索功能使之更加公平、公开、标准和人性化也就随之成为了一个备受关注的话题。但是有一个矛盾体在这其中不 断的显现出来：收费可以为搜索引擎公司带来利润，但同时会降低访问者的体验满意度。如何权衡金钱和用户需求之间的天平呢？ </p>
<p>&nbsp;</p>
<h3><a name="Google成功的秘密"></a>Google成功的秘密 </h3>
<hr />到2004年为止，Google（http://www.google.com） 已经连续两年被评为全球第一品牌，Google成立仅五年时间，最初只是两个斯坦福大学学生的研究项目。这不能不说是一个奇迹，就像比尔&bull;盖茨创制奇迹一 样。比尔&bull;盖茨能创造奇迹，是因为他看准了个人计算机软件市场的趋势，所以创建的公司叫Microsoft（微软）：Micro（小）Soft（软件）。 那么Google呢？在Google出来之前已经有一些很有成就的搜索引擎公司，其实力也很强，看来不只是Google看见了搜索的趋势。Google究 竟成功的秘密在哪儿？
<p>Google的成功有许多因素，最重要的是Google对搜索结果的排序比其它搜索引擎都要好。Google保证让绝大部分用搜索的人，都能在搜索结果的 第一页找到他想要的结果。客户得到了满足，下一次还过来，而且会向其他人介绍，这一来一往，使用的人就多了。所以Google在没有做任何广告的前提下， 让自己成为了全球最大的品牌。Google究竟采用了哪种排序技术？PageRank，即网页级别。 </p>
<p>Google有一个创始人叫Larry Page，据说PageRank的专利是他申请的，于是依据他的名字就有了Page Rank。国内也有一家很成功的搜索引擎公司，叫百度（http://www.baidu.com）。 百度的创始人李彦宏说，早在1996年他就申请了名为超链分析的专利，PageRank的原理和超链分析的原理是一样的，而且PageRank目前还在 Paten-pending（专利申请中）。言下之意是这里面存在专利所有权的问题。这里不讨论专利所有权，只是从中可看出，成功搜索引擎的排序技术，就 其原理上来说都差不多，那就是链接分析。超链分析和PageRank都属于链接分析。 </p>
<p>链接分析到底为何物？由于李彦宏的超链分析没有具体的介绍，笔者唯一看过的就是在美国专利局网站上关于李彦宏的专利介绍。PageRank的介绍倒是不少，而且目前Google毕竟是全球最大的搜索引擎，这里以PageRank为代表，详细介绍链接分析的原理。 </p>
<h3><a name="PageRank揭密"></a><span class="twikiNewLink">PageRank<a title="Create this topic" href="http://www.stlchina.org/twiki/bin/edit.pl/Main/PageRank?topicparent=Main.SESortTech" rel="nofollow"><sup><font color="#666666">?</font></sup></a></span>揭密 </h3>
<hr /><span class="twikiNewLink">PageRank<a title="Create this topic" href="http://www.stlchina.org/twiki/bin/edit.pl/Main/PageRank?topicparent=Main.SESortTech" rel="nofollow"><sup><font color="#666666">?</font></sup></a></span>的原理类似于科技论文中的引用机制：谁的论文被引用次数多，谁就是权威。说的更白话一点：张三在谈话中提到了张曼玉，李四在谈话中也提到 张曼玉，王五在谈话中还提到张曼玉，这就说明张曼玉一定是很有名的人。在互联网上，链接就相当于&ldquo;引用&rdquo;，在B网页中链接了A，相当于B在谈话时提到了 A，如果在C、D、E、F中都链接了A，那么说明A网页是最重要的，A网页的PageRank值也就最高。
<p>如何计算PageRank值有一个简单的公式: </p>
<p><img height="26" alt="PageRank1" src="http://www.stlchina.org/twiki/pub/Main/SESortTech/10829525975223022424072404993130.jpg" width="480" /> </p>
<p>其中：系数为一个大于0，小于1的数。一般设置为0.85。网页1、网页2至网页N表示所有链接指向A的网页。 </p>
<p>由以上公式可以看出三点： </p>
<ol>
    <li>、链接指向A的网页越多，A的级别越高。即A的级别和指向A的网页个数成正比，在公式中表示，N越大， A的级别越高； </li>
    <li>、链接指向A的网页，其网页级别越高， A的级别也越高。即A的级别和指向A的网页自己的网页级别成正比，在公式中表示，网页N级别越高， A的级别也越高； </li>
    <li>、链接指向A的网页，其链出的个数越多，A的级别越低。即A的级别和指向A的网页自己的网页链出个数成反比，在公式中现实，网页N链出个数越多，A的级别越低。 </li>
</ol>
<p>每个网页有一个PageRank值，这样形成一个巨大的方程组，对这个方程组求解，就能得到每个网页的PageRank值。互联网上有上百亿个网页，那么 这个方程组就有上百亿个未知数，这个方程虽然是有解，但计算毕竟太复杂了，不可能把这所有的页面放在一起去求解的。对具体的计算方法有兴趣的朋友可以去参 考一些数值计算方面的书。 </p>
<p>总之，PageRank有效地利用了互联网所拥有的庞大链接构造的特性。 从网页A导向网页B的链接，用Google创始人的话讲，是页面A对页面B的支持投票，Google根据这个投票数来判断页面的重要性，但Google除 了看投票数（链接数）以外，对投票者（链接的页面）也进行分析。「重要性」高的页面所投的票的评价会更高，因为接受这个投票页面会被理解为「重要的物 品」。从新浪、雅虎、微软的首页都有我网页的三个链接的话，可能比我在其他网站找三十个链接还强。如果还有人不理解这个原理，就去想想有句成语叫：三人成 虎。如果有三个人都说北京大街上有老虎，那么许多人会认为有老虎，如果这三个人都是国家领导人的话，那么所有人都会认为北京大街上有老虎。 </p>
<p>每个网页都会有PageRank值，如果大家想知道自己网站的网页PageRank值是多少，最简单的办法就是下载一个Google的免费工具栏（http://toolbar.google.com/）: </p>
<p><img height="33" alt="PageRank" src="http://www.stlchina.org/twiki/pub/Main/SESortTech/10829526260801206600307017323479.jpg" width="480" /> </p>
<p>每当你打开一个网页，都可以很清楚的看见此网页的PageRank值。当然这个值是一个大概数字。 </p>
<p>据Google技术负责人介绍，Google除了用PageRank衡量网页的重要程度以外，还有其它上百种因素来参与排序。其它搜索引擎也是如此，不可能按照某一种规则来进行搜索结果的排序。 </p>
<h3><a name="其他方法"></a>其他方法 </h3>
<hr /><strong>HillTop算法</strong> ：
<p><span class="twikiNewLink">HillTop<a title="Create this topic" href="http://www.stlchina.org/twiki/bin/edit.pl/Main/HillTop?topicparent=Main.SESortTech" rel="nofollow"><sup><font color="#666666">?</font></sup></a></span>同样是一项搜索引擎结果排序的专利，是Google的一个工程师Bharat在2001年获得的专利。Google的排序规则经常在变化， 但变化最大的一次也就是基于HillTop算法进行了优化。HillTop究竟原理如何，值得Google如此青睐？ </p>
<p>其实HillTop算法的指导思想和PageRank的是一致的，都是通过网页被链接的数量和质量来确定搜索结果的排序权重。但HillTop认为只计算 来自具有相同主题的相关文档链接对于搜索者的价值会更大：即主题相关网页之间的链接对于权重计算的贡献比主题不相关的链接价值要更高。如果网站是介绍&ldquo;服 装&rdquo;的，有10个链接都是从&ldquo;服装&rdquo;相关的网站链接过来，那这10个链接比另外10个从&ldquo;电器&rdquo;相关网站链接过来的贡献要大。Bharat称这种对主题有 影响的文档为&ldquo;专家&rdquo;文档，从这些专家文档页面到目标文档的链接决定了被链接网页&ldquo;权重得分&rdquo;的主要部分。 </p>
<p>与PageRank结合HillTop算法确定网页与搜索关键词的匹配程度的基本排序过程取代了过份依靠PageRank的值去寻找那些权威页面的方法。 这对于两个具有同样主题而且PR相近的网页排序过程中，HillTop算法就显得非常的重要了。HillTop同时也避免了许多想通过增加许多无效链接来 提高网页PageRank值的做弊方法。 </p>
<p><strong>锚文本（Anchor Text）</strong> </p>
<p>锚文本名字听起来难以理解，实际上锚文本就是链接文本。例如，在个人网站上把中央电视台（www.cctv.com）做为新闻频道的链接，访问者通过点击网站上的&ldquo;新闻频道&rdquo;就能进入http://www.cctv.com网站，那么&ldquo;新闻频道&rdquo;就是中央电视台网站首页的锚文本。 </p>
<p>锚文本可以做为锚文本所在的页面的内容的评估。正常来讲，页面中增加的链接都会和页面本身的内容有一定的关系。服装的行业网站上会增加一些同行网站的链接 或者一些做服装的知名企业的链接；另一方面，锚文本能做为对所指向页面的评估。锚文本能精确的描述所指向页面的内容，个人网站上增加Google的链接， 锚文本为&ldquo;搜索引擎&rdquo;。这样通过锚文本本身就能知道，Google是搜索引擎。 </p>
<p>锚文本对搜索引擎起的作用还表现为可以收集一些搜索引擎不能索引的文件。例如，网站上增加了一张张曼玉的照片，格式为jpg文件，搜索引擎目前很难索引 （一般只处理文本）。若这张照片链接的锚文本为&ldquo;张曼玉的照片&rdquo;，那么搜索引擎就能识别这张图片是张曼玉的照片，以后访问者搜索&ldquo;张曼玉&rdquo;的时候，这张图 片就能被搜索到。 </p>
<p>由此可见，在网页设计中选择合适的锚文本，会让所在网页和所指向网页的重要程度有所提升。 </p>
<p><strong>页面版式</strong> </p>
<p>每个网页都有版式，包括标题、字体、标签等等。搜索引擎也会利用这些版式来识别搜索词与页面内容的相关程度。以静态的html格式的网页为例，搜索引擎通 过网络蜘蛛把网页抓取下来后，需要提取里面的正文内容，过滤其他html代码。在提取内容的时候，搜索引擎就可以记录所有版式信息，包括：哪些词是在标题 中出现，哪些词是在正文中出现，哪些词的字体比其他的字体大，哪些词是加粗过，哪些词是用KeyWord标识过的等等。这样在搜索结果中就可以根据这些信 息来确定所搜索的结果和搜索词的相关程度。例如搜索&ldquo;毛泽东&rdquo;，假如有两个结果，一篇文章标题是《毛泽东的一生》，另一篇文章的标题是《江青的一生》但内 容有提到毛泽东，这时搜索引擎会认为前者比较重要，因为&ldquo;毛泽东&rdquo;在标题里出现了。 </p>
<p>因此，合理的利用网页的页面版式，会提升网页在搜索结果页的排序位置。 </p>
<p><strong>收费排名</strong> </p>
<p>应该说收费排名并不属于排序技术（这里指的收费排名也包括竞价排名），而是一种搜索引擎的赢利模式。但收费排名已经最直接的影响到了搜索引擎的排序，在此也略做说明。 </p>
<p>用户可以购买某个关键词的排名，只要向搜索引擎公司交纳一定的费用，就可以让用户的网站排在搜索结果的前几位，按照不同关键词、不同位置、时间长短来定义价格。价格从几千元到几十万元不等（像&ldquo;六合彩&rdquo;在3721上的排名费用大多是几十万）。 </p>
<p>收费排名一方面给搜索引擎公司带来收益，一方面给企业带来访问量，另外对访问者也有一定好处。因为访问者想找&ldquo;西服&rdquo;，企业想卖&ldquo;西服&rdquo;，于是出钱让访问 者能找到他，这样，买家和卖家能马上见面。但收费排名给访问者带来更多的却是不真实，结果排序已经失去了公正性，有时候还带来大量垃圾。在百度搜索引擎上 搜索&ldquo;星球&rdquo;，排在第一位的是一家做石墨的公司，排在第二位的居然是&ldquo;想找星球？上易趣吧！&rdquo;（见下图）。真有些让访问者哭笑不得。 <img height="330" alt="PageRank" src="http://www.stlchina.org/twiki/pub/Main/SESortTech/10829526487192028876537154433773.jpg" width="480" /> </p>
<p>当然，对于企业来说，收费排名是提升网站在搜索引擎中排名的最直接和最简单的办法。如今，如何提升网页在搜索引擎中的排序，已经形成了一门职业，叫SEO （Search Engine Optimization），即搜索引擎优化。SEO是针对搜索引擎排序的技术，通过修改网页（或者网站）结构和主动增加网站链接等方法来让搜索引擎认为 这些网页是很重要的，从而提升网页在搜索引擎结果中的排序。 </p>
<p>&nbsp;</p>
<h3><a name="排序技术的发展趋势"></a>排序技术的发展趋势 </h3>
<hr />各种搜索引擎的技术改进和优化，都直接反应到搜索结果的排序上。许多搜索引擎都在进一步研究新的排序方法，来提升客户的满意度。专业人士认为，目前的搜索引擎排序算法上还存在两大不足。
<ol>
    <li>没有真正解决相关性。相 关性是指搜索词和页面的相关程度。仅仅通过链接、字体、位置等表面特征，不能真正判断搜索词和文章的相关性，更何况许多时候这些特征不会都同时存在。这也 是许多对搜索引擎做弊方法能有效的原因。另外，有些文章中没有出现搜索词，但说的就是和搜索词十分相关的内容，例如搜索&ldquo;恐怖分子&rdquo;，但有网页是介绍本拉 登的一些破坏行动，文中没有出现&ldquo;恐怖分子&rdquo;的子眼，搜索引擎就无法搜索到该网页。表面特征只能治标，不能治本。治本的方法应该是增加语意理解，例如主题 词和关键词的提取，从语意上分析，得出搜索词和网页的相关程度，分析的越准，效果就会越好。 </li>
    <li>搜索结果的单一化。在 搜索引擎上，任何人搜索同一个词的结果都是一样。这样明显不能满足访问者。科学家搜索&ldquo;星球&rdquo;，可能是希望了解星球的知识，但普通人可能是想找&ldquo;星球大 战&rdquo;电影，但搜索引擎所给的都是一样的结果。如何满足这些不同类型的访问者，需要对搜索结果的个性化。国外vivisimo公司（http://www.vivisimo.com） 就是想解决这个问题，他们采用对搜索结果自动聚类的办法来满足不同类型客户的需要。搜索结果排序如果要实现从单一化到个性化，vivisimo已经迈出了 一步，但最理想的结果应该是针对每个访问者，排序结果直接和他们的搜索习惯和意愿有关。搜索&ldquo;体育&rdquo;，对喜欢足球的人应该把足球的相关结果排在前面，对喜 欢篮球的人应该把篮球的相关结果排在前面。 </li>
</ol>
<p>搜索引擎的排序技术应该也会朝着解决这两个不足的方向发展：语意相关性和排序个性化。前者需要完善的自然语言处理技术，后者需要记录庞大访问者信息和复杂 的计算，要达到其中任何一个的要求均非易事，如何解决这些难题，任务落在了科学家和工程师们的肩上，哪个搜索引擎解决了这些问题，她可能会称为下一个搜索 世界的霸主。 </p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=42</link>
			<title><![CDATA[中文搜索引擎技术揭密：系统架构 （转）]]></title>
			<author>webmaster@xd-tech.com(christian)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Wed,04 Apr 2007 16:03:31 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=42</guid>	
		<description><![CDATA[【e800.com.cn 编者按】互联网发展的今天，一方面离 不开其开放、共享的特性带给人们的全新体验，另一方面也离不开数以亿计的为其提供各类丰富内容的网络节点。互联网被普及前，人们查阅资料第一想到的便是拥 有大量书籍资料的图书馆，到了今天你怎么想？或许今天的很多人都会选择一种更方便、快捷、全面、准确的方式&mdash;&mdash;互联网。你可以坐在家里轻点几下鼠标就查到 想要的各类信息，这在互联网没有被普及之前，还都仅是一个梦而已，但如今这一切已成为了可能。
<p>而帮助你通过整个互联网快速查找到目标信息的就是越来越被重视的搜索引擎。有关搜索引擎的技术资料网络上已经很多，关于搜索引擎经济的多方面报道各大媒体 也都已经铺天盖地，因此在这里小编并不想过多的谈论这些方面的感受，只想在本次&ldquo;中文搜索引擎技术揭密&rdquo;系列文章全部完成之际来聊一下搜索引擎对小编的深 远影响。 </p>
<p>记得2000年左右网络上开始大量出现免费个人主页空间，当时的小编还只是一个刚刚进入IT圈的小朋友，看着这些空间那叫一个口水横流，于是乎立刻申请了 一个。又经过了一个多月的刻苦修炼和先后三次的改版，自己有生以来的第一个个人主页诞生了。可看着每天寥寥无几的访问量，心里那叫一个难受，可一时间也想 不到好办法解决问题。突然有天发现一篇介绍如何在搜索引擎注册自己个人网站的文章，于是小编就照着文章所讲的分别在SOHU、网易等搜索引擎的相关分类目 录下注册了自己的个人主页。直至今日，小编才确切的知道了当时盛行的搜索引擎都属&ldquo;目录搜索引擎&rdquo;。这实际上是小编第一次使用、认识搜索引擎，再后来通过 每天个人主页不断上升的数字小编感觉到了搜索引擎的神奇。 </p>
<p>其实正是由于搜索引擎，才使小编的个人主页被更多的人所熟识，以至于后来有多份工作都是因为这个个人主页所带来的机会。其实这些经历或许很多人都有切身的 体会，同样也有很多人因此去全身投入到互联网工作中。这正像那句话讲的&ldquo;世界真奇妙，不看不知道&rdquo;，小编在此多加一句&ldquo;到底怎么看，搜索引擎帮你忙！&rdquo; </p>
<p>&nbsp;</p>
<h3><a name="前言"></a>前言 </h3>
<hr />互 联网在近10年的得到飞速发展，互联网正在逐渐深入人们的生活，改变人们的生活。互联网经济也经历了风风雨雨，从缓慢起步到急速膨胀，从泡沫破灭到逐步回 暖；从&ldquo;网络广告&rdquo;到&ldquo;拇指经济&rdquo;，从&ldquo;网络游戏&rdquo;到&ldquo;搜索力经济&rdquo;。目前，搜索引擎成为最受人们关注的焦点之一，也成为亿万富翁的制造摇篮。越来越多的 公司都希望在搜索引擎这座金矿中挖到筐金子，其中许多人会选择拥有自己的搜索引擎。国内著名搜索引擎公司百度（http://www.baidu.com）总裁李彦宏说：搜索引擎不是人人都能做的领域，进入的门槛比较高。
<p>搜索引擎的门槛到底有多高？搜索引擎的门槛主要是技术门槛，包括网页数据的快速采集、海量数据的索引和存储、搜索结果的相关性排序、搜索效率的毫秒级要 求、分布式处理和负载均衡、自然语言的理解技术等等，这些都是搜索引擎的门槛。对于一个复杂的系统来说，各方面的技术固然重要，但整个系统的架构设计也同 样不可忽视，搜索引擎也不例外。 </p>
<p>&nbsp;</p>
<h3><a name="搜索引擎技术和分类"></a>搜索引擎技术和分类 </h3>
<p>搜索引擎的技术基础是全文检索技术，从20世纪60年代，国外对全文检索技术就开始有研究。全文检索通常指文本全文检索，包括信息的存储、组织、表现、查 询、存取等各个方面，其核心为文本信息的索引和检索，一般用于企事业单位。随着互联网信息的发展，搜索引擎在全文检索技术上逐渐发展起来，并得到广泛的应 用，但搜索引擎还是不同于全文检索。搜索引擎和常规意义上的全文检索主要区别有以下几点： </p>
<p>&nbsp;</p>
<ol>
    <li><strong>数据量</strong> 传统全文检索系统面向的是企业本身的数据或者和企业相关的数据，一般索引库规模多在GB级，数据量大的也只有几百万条；但互联网网页搜索需要处理几十亿的网页，搜索引擎的策略都是采用服务器群集和分布式计算技术。 </li>
    <li><strong>内容相关性</strong> , 信息太多，查准和排序就特别重要，Google等搜索引擎采用网页链接分析技术，根据互联网上网页被链接次数作为重要性评判的依据；但全文检索的数据源中相互链接的程度并不高，不能作为判别重要性的依据，只能基于内容的相关性排序。 </li>
    <li><strong>安全性</strong>. 互联网搜索引擎的数据来源都是互联网上公开的信息，而且除了文本正文以外，其它信息都不太重要；但企业全文检索的数据源都是企业内部的信息，有等级、权限 等限制，对查询方式也有更严格的要求，因此其数据一般会安全和集中地存放在数据仓库中以保证数据安全和管理的要求。 </li>
    <li><strong>个性化和智能化</strong>. 搜索引擎面向的是互联网访问者，由于其数据量和客户数量的限制，自然语言处理技术、知识检索、知识挖掘等计算密集的智能计算技术很难应用，这也是目前搜索引擎技术努力的方向；而全文检索数据量小，检索需求明确，客户量少，在智能化和个性可走得更远。 </li>
</ol>
<p>搜索引擎与全文检索除了以上的区别外，还结合互联网信息的特点形成了三个不同的类型： </p>
<p>&nbsp;</p>
<ul>
    <li><strong>全文检索搜索引擎</strong> ：全文搜索引擎是名副其实的搜索引擎，国外具代表性的有Google (<a href="http://www.google.com/" target="_top" rel="nofollow"><font color="#666666">http://www.google.com</font></a>) 、yahoo(<a href="http://search.yahoo.com/" target="_top" rel="nofollow"><font color="#0066cc">http://search.yahoo.com</font></a>) 、AllTheWeb (<a href="http://www.alltheweb.com/" target="_top" rel="nofollow"><font color="#0066cc">http://www.alltheweb.com</font></a> ) 等，国内著名的有百度（http://www.Baidu.com）、中搜（http://www.zhongsou.com）。它们都是通过从互联网上提取的各个网站的信息（以网页文字为主）而建立的数据库，检索与用户查询条件匹配的相关记录，然后按一定的排列顺序将结果返回给用户，也是目前常规意义上的搜索引擎。 </li>
    <li><strong>目录搜索引擎</strong> ：目录索引虽然有搜索功能，但在严格意义上算不上是真正的搜索引擎，仅仅是按目录分类的网站链接列表而已。用户完全可以不用进行关键词查询，仅靠分类目录也可找到需要的信息。国外比较著名的目录索引搜索引擎有yahoo（http://www.yahoo.com）Open Directory Project（DMOZ）（http://www.dmoz.com/）、LookSmart（http://www.looksmart.com）等。国内的搜狐（http://www.sohu.com）、新浪（http://www.sina.com）、网易（http://www.163.com）搜索也都具有这一类功能。 </li>
    <li><strong>元搜索引擎</strong> ：元搜索引擎在接受用户查询请求时，同时在其它多个引擎上进行搜索，并将结果返回给用户。著名的元搜索引擎有Dogpile（http://www.dogpile.com）、Vivisimo（http://www.vivisimo.com）等，国内元搜索引擎中具代表性的有搜星搜索引擎（http://www.soseen.com/），优客搜索（http://www.yok.com）。在搜索结果排列方面，有的直接按来源引擎排列搜索结果，如Dogpile，有的则按自定的规则将结果重新排列组合，如Vivisimo。 </li>
    <li>其他的像新浪(<a href="http://search.sina.com.cn/" target="_top" rel="nofollow"><font color="#0066cc">http://search.sina.com.cn</font></a>) 、网易(<a href="http://search.163.com)、/" target="_top" rel="nofollow"><font color="#0066cc">http://search.163.com)、</font></a> A9（http://www.A9.com） 等搜索引擎都是调用其它全文检索搜索引擎，或者在其搜索结果的基础上做了二次开发。 </li>
</ul>
<p>&nbsp;</p>
<h3><a name="搜索引擎的系统架构"></a>搜索引擎的系统架构 </h3>
<hr />这里主要针对全文检索搜索引擎的系统架构进行说明，下文中提到的搜索引擎如果没有特殊说明也是指全文检索搜索引擎。搜索引擎的实现原理，可以看作四步：从互联网上抓取网页&rarr;建立索引数据库&rarr;在索引数据库中搜索&rarr;对搜索结果进行处理和排序。
<ol>
    <li><strong>从互联网上抓取网页</strong>. 利用能够从互联网上自动收集网页的网络蜘蛛程序，自动访问互联网，并沿着任何网页中的所有URL爬到其它网页，重复这过程，并把爬过的所有网页收集到服务器中。 </li>
    <li><strong>建立索引数据库</strong> . 由索引系统程序对收集回来的网页进行分析，提取相关网页信息（包括网页所在URL、编码类型、页面内容包含的关键词、关键词位置、生成时间、大小、与其它 网页的链接关系等），根据一定的相关度算法进行大量复杂计算，得到每一个网页针对页面内容中及超链中每一个关键词的相关度（或重要性），然后用这些相关信 息建立网页索引数据库。 </li>
    <li><strong>在索引数据库中搜索</strong> . 当用户输入关键词搜索后，分解搜索请求，由搜索系统程序从网页索引数据库中找到符合该关键词的所有相关网页。 </li>
    <li><strong>对搜索结果进行处理排序</strong> . 所有相关网页针对该关键词的相关信息在索引库中都有记录，只需综合相关信息和网页级别形成相关度数值，然后进行排序，相关度越高，排名越靠前。最后由页面生成系统将搜索结果的链接地址和页面内容摘要等内容组织起来返回给用户。 下图是一个典型的搜索引擎系统架构图，搜索引擎的各部分都会相互交错相互依赖。其处理流程按照如下描述： </li>
</ol>
<p><img height="349" alt="Search Engine Frame" src="http://www.stlchina.org/twiki/pub/Main/SEStructSys/10855410545646168397286830154600.jpg" width="480" /> </p>
<p>&nbsp;</p>
<p>&ldquo;网络蜘蛛&rdquo;从互联网上抓取网页，把网页送入&ldquo;网页数据库&rdquo;，从网页中&ldquo;提取URL&rdquo;，把URL送入&ldquo;URL数据库&rdquo;，&ldquo;蜘蛛控制&rdquo;得到网页的URL，控制&ldquo;网络蜘蛛&rdquo;抓取其它网页，反复循环直到把所有的网页抓取完成。 系统从&ldquo;网页数据库&rdquo;中得到文本信息，送入&ldquo;文本索引&rdquo;模块建立索引，形成&ldquo;索引数据库&rdquo;。同时进行&ldquo;链接信息提取&rdquo;，把链接信息（包括锚文本、链接本身等信息）送入&ldquo;链接数据库&rdquo;，为&ldquo;网页评级&rdquo;提供依据。 &ldquo;用户&rdquo;通过提交查询请求给&ldquo;查询服务器&rdquo;，服务器在&ldquo;索引数据库&rdquo;中进行相关网页的查找，同时&ldquo;网页评级&rdquo;把查询请求和链接信息结合起来对搜索结果进行相关度的评价，通过&ldquo;查询服务器&rdquo;按照相关度进行排序，并提取关键词的内容摘要，组织最后的页面返回给&ldquo;用户&rdquo;。 </p>
<p>&nbsp;</p>
<h3><a name="搜索引擎的索引和搜索"></a>搜索引擎的索引和搜索 </h3>
<hr />对于网络蜘蛛技术和排序技术请参考作者其它文章[1][2]，这里以Google搜索引擎为例主要介绍搜索引擎的数据索引和搜索过程。
<p>数据的索引分为三个步骤：网页内容的提取、词的识别、标引库的建立。 </p>
<p>互联网上大部分信息都是以HTML格式存在，对于索引来说，只处理文本信息。因此需要把网页中文本内容提取出来，过滤掉一些脚本标示符和一些无用的广告信 息，同时记录文本的版面格式信息[1]。词的识别是搜索引擎中非常关键的一部分，通过字典文件对网页内的词进行识别。对于西文信息来说，需要识别词的不同 形式，例如：单复数、过去式、组合词、词根等，对于一些亚洲语言（中文、日文、韩文等）需要进行分词处理[3]。识别出网页中的每个词，并分配唯一的wordID号，用于为数据索引中的标引模块服务。 </p>
<p>标引库的建立是数据索引中结构最复杂的一部分。一般需要建立两种标引：文档标引和关键词标引。 文档标引分配每个网页一个唯一的docID号，根据docID标引出在这个网页中出现过多少过wordID，每个wordID出现的次数、位置、大小写格 式等，形成docID对应wordID的数据列表；关键词标引其实是对文档标引的逆标引，根据wordID标引出这个词出现在那些网页（用wordID表 示），出现在每个网页的次数、位置、大小写格式等，形成wordID对应docID的列表。 </p>
<p>关于索引数据的详细数据结构，有兴趣的朋友可以参看文献[4]。 </p>
<p>搜索的处理过程是对用户的搜索请求进行满足的过程，通过用户输入搜索关键字，搜索服务器对应关键词字典，把搜索关键词转化为wordID，然后在标引库中 得到docID列表，对docID列表进行扫描和wordID的匹配，提取满足条件的网页，然后计算网页和关键词的相关度，根据相关度的数值返回前K篇结 果（不同的搜索引擎每页的搜索结果数不同）返回给用户。如果用户查看的第二页或者第多少页，重新进行搜索，把排序结果中在第K+1到2*K的网页组织返回 给用户。其处理流程如下图所示： </p>
<p><img height="435" alt="Frame2" src="http://www.stlchina.org/twiki/pub/Main/SEStructSys/10855411914830158211573717999961.jpg" width="255" /> </p>
<p>&nbsp;</p>
<h3><a name="搜索引擎细化趋势"></a>搜索引擎细化趋势 </h3>
<hr />随着搜索引擎市场空间越来越大，搜索引擎也分得越来越细。互联网没有国界，百度总裁李彦宏所讲：搜索引擎市场是赢家通吃的市场。如果一个搜索引擎要想在搜 索市场上有自己的一席之地，必须拥有自己的特色。而且，数以亿计的网民，搜索需求不可能都一样，不同类型的用户需要不同类型的搜索引擎，网页搜索只是搜索 需求中的一种，这就决定了搜索引擎会不断细化，各具特色的搜索引擎也陆续出现。
<p>从技术上讲，各种搜索引擎都具有类似的系统架构，其不同在于搜索的数据源的不同。除了上面提到的网页搜索引擎以外，下面列举几个典型的搜索引擎： </p>
<p>&nbsp;</p>
<ul>
    <li><strong>新闻搜索引擎</strong> . 看新闻是许多网民上网的主要目的，新闻搜索也就成了查看新闻的重要工具。新闻搜索引擎实现的过程比较简单，一般是扫描国内外有名的新闻网站，抓取新闻网 页，建立自己的新闻数据库，然后提供搜索，只是对新闻网页抓取的频率要求很高，有的需要做到几分钟扫描一次。现在许多大型的网页搜索引擎都提供相应的新闻 搜索功能，如：Google新闻搜索（http://news.google.com），中搜新闻搜索（http://news.zhongsou.com），百度新闻搜索（http://news.baidu.com）等。 </li>
    <li><strong>音乐搜索引擎</strong> . 有了互联网以后，音乐得到了广泛的传播，对于喜欢音乐的网民来说，音乐搜索引擎成了最钟爱的工具。音乐搜索引擎需要监控互联网上大型的音乐网站，抓取其音乐数据的描述信息，形成自己的数据库，音乐的下载和试听都会在其原来的音乐网站上进行。目前有：搜刮网（http://www.sougua.com），百度mp3搜索（http://mp3.baidu.com），1234567搜索（http://www.1234567.com）等。 </li>
    <li><strong>图像搜索引擎</strong> . 通过图像搜索引擎可以找到自己感兴趣的图片链接，各大搜索引擎也提供了图像搜索功能。图像文件本身不能够被搜索引擎索引，但搜索引擎可以通过链接文本分析和图片注解等得到图片的信息。目前有：Google图像搜索（http://images.google.com/），VisionNext搜索（http://www.eefind.com），百度图像搜索（http://images.baidu.com）等。 </li>
    <li><strong>商机搜索引擎</strong> . 电子商务一直是互联网的热点，商机搜索对电子商务的发展也起到了巨大的推动作用，商机搜索让互联网经济和传统经营紧密结合在一起，给传统的企业提供了一个 新的销售模式。商机搜索引擎，通过抓取电子商务网站的商品信息和其他商业信息，给访问者提供统一的搜索平台。目前有：soaso价格搜索引擎（http://www.soaso.com），8848购物搜索（http://www.8848.com），阿里巴巴商机搜索（http://www.alibaba.com）等。 </li>
</ul>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=41</link>
			<title><![CDATA[中文搜索引擎技术揭密：网络蜘蛛（转）]]></title>
			<author>webmaster@xd-tech.com(christian)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Wed,04 Apr 2007 16:01:34 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=41</guid>	
		<description><![CDATA[【e800.com.cn 编者按】随着搜索经济的崛起，人 们开始越加关注全球各大搜索引擎的性能、技术和日流量。作为企业，会根据搜索引擎的知名度以及日流量来选择是否要投放广告等；作为普通网民，会根据搜索引 擎的性能和技术来选择自己喜欢的引擎查找资料；作为学者，会把有代表性的搜索引擎作为研究对象&hellip;&hellip;
<p>而作为一个网站的经营者，其更关心的或许是如何通过网络载体让更多的网民知道自己的网站，进而获得更高的流量和知名度。这其中，搜索引擎已经成了一个重要 的且是免费的宣传途径。一方面，搜索引擎会主动出击，寻找网络上的各种网页数据，并在后台按相关条件进行索引；另一方面，各大网站为了能让自己的内容更多 的通过搜索引擎向网民展示，都开始对网站结构进行重大调整，其中包括扁平化结构设计、动态（网页）转静态（网页）、Sitemap等。 </p>
<p>这些看来不经意的举动都让我们切身感受到搜索引擎对我们网络使用方式的改变起到了重要作用。并且，正因为搜索引擎的兴起以及社会各界对其重视程度日渐高 涨，还由此创造了一个全新的职位&mdash;&mdash;SEO。实际上，搜索引擎经济的崛起，又一次向人们证明了网络所蕴藏的巨大商机。网络离开了搜索将只剩下空洞杂乱的数 据，以及大量等待去费力挖掘的金矿。 </p>
<p>&nbsp;</p>
<h3><a name="前言"></a>前言 </h3>
<hr />搜索引擎一直专注于提升用户的体验度，其用户体验度则反映在三个方面：准、全、快。 用专业术语讲是：查准率、查全率和搜索速度（即搜索耗时）。其中最易达到的是搜索速度，因为对于搜索耗时在1秒以下的系统来说，访问者很难辨别其快慢了， 更何况还有网络速度的影响。因此，对搜索引擎的评价就集中在了前两者：准、全。中文搜索引擎的&ldquo;准&rdquo;，需要保证搜索的前几十条结果都和搜索词十分相关，这 需由&ldquo;分词技术&rdquo;和&ldquo;排序技术&rdquo;来决定（参考作者相关文章[1][2]）；中文搜索引擎的&ldquo;全&rdquo;则需保证不遗漏某些重要的结果，而且能找到最新的网页，这需要搜索引擎有一个强大的网页收集器，一般称为&ldquo;网络蜘蛛&rdquo;，也有叫&ldquo;网页机器人&rdquo;。
<p>研究搜索引擎技术的文章不少，但大部分讨论的是如何评价网页的重要性，对于网络蜘蛛研究的文章不多。网络蜘蛛技术并不是一项十分高深的技术，但要做一个强 大的网络蜘蛛，却非易事。在目前磁盘容量已经不是瓶颈的时候，搜索引擎一直在扩大自己的网页数量。最大的搜索引擎Google（http://www.google.com）从2002年的10亿网页增加到现在近40亿网页；最近雅虎搜索引擎（http://search.yahoo.com/）号称收录了45亿个网页；国内的中文搜索引擎百度（http://www.baidu.com）的中文页面从两年前的七千万页增加到了现在的两亿多。据估计，整个互联网的网页数达到100多亿，而且每年还在快速增长。因此一个优秀的搜索引擎，需要不断的优化网络蜘蛛的算法，提升其性能。 </p>
<p>或许有些人有疑问，为何搜索引擎需要用网络蜘蛛抓取网站所有的网页，为什么不在搜索者输入关键词后只把那些需要的结果抓取过来？这实际上是效率问题，搜索 引擎不可能在搜索时实时去检查每个网页，而是需要把网页先抓取下来，按照关键词建立好索引，每次搜索的结果都会直接从搜索引擎建立好索引的数据库中查找， 然后把结果返回给访问者。关于搜索引擎系统架构方面的知识，参考文献[3]，本文主要介绍网络蜘蛛的相关技术。 </p>
<p>&nbsp;</p>
<h3><a name="网络蜘蛛基本原理"></a>网络蜘蛛基本原理 </h3>
<hr />网络蜘蛛即Web Spider，是一个很形象的名字。把互联网比喻成一个蜘蛛网，那么Spider就是在网上爬来爬去的蜘蛛。网络蜘蛛是通过网页的链接地址来寻找网页，从 网站某一个页面（通常是首页）开始，读取网页的内容，找到在网页中的其它链接地址，然后通过这些链接地址寻找下一个网页，这样一直循环下去，直到把这个网 站所有的网页都抓取完为止。如果把整个互联网当成一个网站，那么网络蜘蛛就可以用这个原理把互联网上所有的网页都抓取下来。
<p>对于搜索引擎来说，要抓取互联网上所有的网页几乎是不可能的，从目前公布的数据来看，容量最大的搜索引擎也不过是抓取了整个网页数量的百分之四十左右。这 其中的原因一方面是抓取技术的瓶颈，无法遍历所有的网页，有许多网页无法从其它网页的链接中找到；另一个原因是存储技术和处理技术的问题，如果按照每个页 面的平均大小为20K计算（包含图片），100亿网页的容量是100&times;2000G字节，即使能够存储，下载也存在问题（按照一台机器每秒下载20K计算， 需要340台机器不停的下载一年时间，才能把所有网页下载完毕）。同时，由于数据量太大，在提供搜索时也会有效率方面的影响。因此，许多搜索引擎的网络蜘 蛛只是抓取那些重要的网页，而在抓取的时候评价重要性主要的依据是某个网页的链接深度。 </p>
<p>在抓取网页的时候，网络蜘蛛一般有两种策略：广度优先和深度优先（如下图所示）。广度优先是指网络蜘蛛会先抓取起始网页中链接的所有网页，然后再选择其中 的一个链接网页，继续抓取在此网页中链接的所有网页。这是最常用的方式，因为这个方法可以让网络蜘蛛并行处理，提高其抓取速度。深度优先是指网络蜘蛛会从 起始页开始，一个链接一个链接跟踪下去，处理完这条线路之后再转入下一个起始页，继续跟踪链接。这个方法有个优点是网络蜘蛛在设计的时候比较容易。两种策 略的区别，下图的说明会更加明确。 </p>
<p><img height="381" alt="Spider1" src="http://www.stlchina.org/twiki/pub/Main/SECrawlerWeb/10847637283751560941261360672293.jpg" width="482" /> </p>
<p>由于不可能抓取所有的网页，有些网络蜘蛛对一些不太重要的网站，设置了访问的层数。例如，在上图中，A为起始网页，属于0层，B、C、D、E、F属于第1 层，G、H属于第2层，I属于第3层。如果网络蜘蛛设置的访问层数为2的话，网页I是不会被访问到的。这也让有些网站上一部分网页能够在搜索引擎上搜索 到，另外一部分不能被搜索到。对于网站设计者来说，扁平化的网站结构设计有助于搜索引擎抓取其更多的网页。 </p>
<p>网络蜘蛛在访问网站网页的时候，经常会遇到加密数据和网页权限的问题，有些网页是需要会员权限才能访问。当然，网站的所有者可以通过协议让网络蜘蛛不去抓 取（下小节会介绍），但对于一些出售报告的网站，他们希望搜索引擎能搜索到他们的报告，但又不能完全免费的让搜索者查看，这样就需要给网络蜘蛛提供相应的 用户名和密码。网络蜘蛛可以通过所给的权限对这些网页进行网页抓取，从而提供搜索。而当搜索者点击查看该网页的时候，同样需要搜索者提供相应的权限验证。 </p>
<p>&nbsp;</p>
<h3><a name="网站与网络蜘蛛"></a>网站与网络蜘蛛 </h3>
<hr />网络蜘蛛需要抓取网页，不同于一般的访问，如果控制不好，则会引起网站服务器负担过重。今年4月，淘宝网（http://www.taobao.com） 就因为雅虎搜索引擎的网络蜘蛛抓取其数据引起淘宝网服务器的不稳定。网站是否就无法和网络蜘蛛交流呢？其实不然，有多种方法可以让网站和网络蜘蛛进行交 流。一方面让网站管理员了解网络蜘蛛都来自哪儿，做了些什么，另一方面也告诉网络蜘蛛哪些网页不应该抓取，哪些网页应该更新。
<p>每个网络蜘蛛都有自己的名字，在抓取网页的时候，都会向网站标明自己的身份。网络蜘蛛在抓取网页的时候会发送一个请求，这个请求中就有一个字段为User －agent，用于标识此网络蜘蛛的身份。例如Google网络蜘蛛的标识为GoogleBot，Baidu网络蜘蛛的标识为BaiDuSpider， Yahoo网络蜘蛛的标识为Inktomi Slurp。如果在网站上有访问日志记录，网站管理员就能知道，哪些搜索引擎的网络蜘蛛过来过，什么时候过来的，以及读了多少数据等等。如果网站管理员发 现某个蜘蛛有问题，就通过其标识来和其所有者联系。下面是博客中国（http://www.blogchina.com）2004年5月15日的搜索引擎访问日志： </p>
<p><img height="288" alt="Spider2" src="http://www.stlchina.org/twiki/pub/Main/SECrawlerWeb/10847637681917039100031729224170.jpg" width="558" /> <em>感谢<a href="http://www.chedong.com/" target="_top" rel="nofollow"><font color="#0066cc">车东</font></a>提供相应数据</em> </p>
<p>网络蜘蛛进入一个网站，一般会访问一个特殊的文本文件Robots.txt，这个文件一般放在网站服务器的根目录下，如：http://www.blogchina.com/robots.txt。 网站管理员可以通过robots.txt来定义哪些目录网络蜘蛛不能访问，或者哪些目录对于某些特定的网络蜘蛛不能访问。例如有些网站的可执行文件目录和 临时文件目录不希望被搜索引擎搜索到，那么网站管理员就可以把这些目录定义为拒绝访问目录。Robots.txt语法很简单，例如如果对目录没有任何限 制，可以用以下两行来描述： </p>
<p>User-agent: * </p>
<p>Disallow: </p>
<p>当然，Robots.txt只是一个协议，如果网络蜘蛛的设计者不遵循这个协议，网站管理员也无法阻止网络蜘蛛对于某些页面的访问，但一般的网络蜘蛛都会遵循这些协议，而且网站管理员还可以通过其它方式来拒绝网络蜘蛛对某些网页的抓取。 </p>
<p>网络蜘蛛在下载网页的时候，会去识别网页的HTML代码，在其代码的部分，会有META标识。通过这些标识，可以告诉网络蜘蛛本网页是否需要被抓取，还可 以告诉网络蜘蛛本网页中的链接是否需要被继续跟踪。例如：表示本网页不需要被抓取，但是网页内的链接需要被跟踪。 </p>
<p>关于Robots.txt的语法和META Tag语法，有兴趣的读者查看文献[4] </p>
<p>现在一般的网站都希望搜索引擎能更全面的抓取自己网站的网页，因为这样可以让更多的访问者能通过搜索引擎找到此网站。为了让本网站的网页更全面被抓取到， 网站管理员可以建立一个网站地图，即Site Map。许多网络蜘蛛会把sitemap.htm文件作为一个网站网页爬取的入口，网站管理员可以把网站内部所有网页的链接放在这个文件里面，那么网络蜘 蛛可以很方便的把整个网站抓取下来，避免遗漏某些网页，也会减小对网站服务器的负担。 </p>
<p>&nbsp;</p>
<h3><a name="内容提取"></a>内容提取 </h3>
<hr />搜索引擎建立网页索引，处理的对象是文本文件。对于网络蜘蛛来说，抓取下来网页包括各种格式，包括html、图片、doc、pdf、多媒体、动态网页及其 它格式等。这些文件抓取下来后，需要把这些文件中的文本信息提取出来。准确提取这些文档的信息，一方面对搜索引擎的搜索准确性有重要作用，另一方面对于网 络蜘蛛正确跟踪其它链接有一定影响。
<p>对于doc、pdf等文档，这种由专业厂商提供的软件生成的文档，厂商都会提供相应的文本提取接口。网络蜘蛛只需要调用这些插件的接口，就可以轻松的提取文档中的文本信息和文件其它相关的信息。 </p>
<p>HTML等文档不一样，HTML有一套自己的语法，通过不同的命令标识符来表示不同的字体、颜色、位置等版式，如：、、等， 提取文本信息时需要把这些标识符都过滤掉。过滤标识符并非难事，因为这些标识符都有一定的规则，只要按照不同的标识符取得相应的信息即可。但在识别这些信 息的时候，需要同步记录许多版式信息，例如文字的字体大小、是否是标题、是否是加粗显示、是否是页面的关键词等，这些信息有助于计算单词在网页中的重要程 度。同时，对于HTML网页来说，除了标题和正文以外，会有许多广告链接以及公共的频道链接，这些链接和文本正文一点关系也没有，在提取网页内容的时候， 也需要过滤这些无用的链接。例如某个网站有&ldquo;产品介绍&rdquo;频道，因为导航条在网站内每个网页都有，若不过滤导航条链接，在搜索&ldquo;产品介绍&rdquo;的时候，则网站内 每个网页都会搜索到，无疑会带来大量垃圾信息。过滤这些无效链接需要统计大量的网页结构规律，抽取一些共性，统一过滤；对于一些重要而结果特殊的网站，还 需要个别处理。这就需要网络蜘蛛的设计有一定的扩展性。 </p>
<p>对于多媒体、图片等文件，一般是通过链接的锚文本（即，链接文本）和相关的文件注释来判断这些文件的内容。例如有一个链接文字为&ldquo;张曼玉照片&rdquo;，其链接指 向一张bmp格式的图片，那么网络蜘蛛就知道这张图片的内容是&ldquo;张曼玉的照片&rdquo;。这样，在搜索&ldquo;张曼玉&rdquo;和&ldquo;照片&rdquo;的时候都能让搜索引擎找到这张图片。另 外，许多多媒体文件中有文件属性，考虑这些属性也可以更好的了解文件的内容。 </p>
<p>动态网页一直是网络蜘蛛面临的难题。所谓动态网页，是相对于静态网页而言，是由程序自动生成的页面，这样的好处是可以快速统一更改网页风格，也可以减少网 页所占服务器的空间，但同样给网络蜘蛛的抓取带来一些麻烦。由于开发语言不断的增多，动态网页的类型也越来越多，如：asp、jsp、php等。这些类型 的网页对于网络蜘蛛来说，可能还稍微容易一些。网络蜘蛛比较难于处理的是一些脚本语言（如VBScript和JavaScript）生成的网页，如果要完 善的处理好这些网页，网络蜘蛛需要有自己的脚本解释程序。对于许多数据是放在数据库的网站，需要通过本网站的数据库搜索才能获得信息，这些给网络蜘蛛的抓 取带来很大的困难。对于这类网站，如果网站设计者希望这些数据能被搜索引擎搜索，则需要提供一种可以遍历整个数据库内容的方法。 </p>
<p>对于网页内容的提取，一直是网络蜘蛛中重要的技术。整个系统一般采用插件的形式，通过一个插件管理服务程序，遇到不同格式的网页采用不同的插件处理。这种 方式的好处在于扩充性好，以后每发现一种新的类型，就可以把其处理方式做成一个插件补充到插件管理服务程序之中。 </p>
<p>&nbsp;</p>
<h3><a name="更新周期"></a>更新周期 </h3>
<hr />由于网站的内容经常在变化，因此网络蜘蛛也需不断的更新其抓取网页的内容，这就需要网络蜘蛛按照一定的周期去扫描网站，查看哪些页面是需要更新的页面，哪些页面是新增页面，哪些页面是已经过期的死链接。
<p>搜索引擎的更新周期对搜索引擎搜索的查全率有很大影响。如果更新周期太长，则总会有一部分新生成的网页搜索不到；周期过短，技术实现会有一定难度，而且会 对带宽、服务器的资源都有浪费。搜索引擎的网络蜘蛛并不是所有的网站都采用同一个周期进行更新，对于一些重要的更新量大的网站，更新的周期短，如有些新闻 网站，几个小时就更新一次；相反对于一些不重要的网站，更新的周期就长，可能一两个月才更新一次。 </p>
<p>一般来说，网络蜘蛛在更新网站内容的时候，不用把网站网页重新抓取一遍，对于大部分的网页，只需要判断网页的属性（主要是日期），把得到的属性和上次抓取的属性相比较，如果一样则不用更新。 </p>
<p>&nbsp;</p>
<h3><a name="结论"></a>结论 </h3>
<hr />
<p>本文主要讨论了网络蜘蛛相关的技术要点，如果要设计好的网络蜘蛛，需要了解更多的技术细节，可以参考文献[5]。 </p>
<p>网络蜘蛛在搜索引擎中占有重要位置，对搜索引擎的查全、查准都有影响，决定了搜索引擎数据容量的大小，而且网络蜘蛛的好坏直接影响搜索结果页中的死链接 （即链接所指向的网页已经不存在）的个数。目前如何发现更多的网页、如何正确提取网页内容、如果下载动态网页、如何提供抓取速度、如何识别网站内内容相同 的网页等都是网络蜘蛛需要进一步改进的问题。 </p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=40</link>
			<title><![CDATA[中文搜索引擎技术揭密：中文分词(转）]]></title>
			<author>webmaster@xd-tech.com(christian)</author>
			<category><![CDATA[分词]]></category>
			<pubDate>Wed,04 Apr 2007 15:46:11 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=40</guid>	
		<description><![CDATA[<h3><a name="前言"></a>前言 </h3>
<hr />信息的飞速增长，使搜索引擎成为人们查找信息的首选工具，Google、百度、yisou、中搜等大型搜索引擎一直人们讨论的话题。随着搜索市场价值的不断增加，越来越多的公司开发出自己的搜索引擎，阿里巴巴的商机搜索、8848的购物搜索等也陆续面世，自然，搜索引擎技术也成为技术人员关注的热点。
<p>搜索引擎技术的研究，国外比中国要早近十年，从最早的Archie，到后来的Excite，以及altvista、overture、google等搜索引擎面世，搜索引擎发展至今，已经有十几年的历史，而国内开始研究搜索引擎是在上个世纪末本世纪初。在许多领域，都是国外的产品和技术一统天下，特别是当某种技术在国外研究多年而国内才开始的情况下。例如操作系统、字处理软件、浏览器等等，但搜索引擎却是个例外。虽然在国外搜索引擎技术早就开始研究，但在国内还是陆续涌现出优秀的搜索引擎，像百度、中搜等。目前在中文搜索引擎领域，国内的搜索引擎已经和国外的搜索引擎效果上相差不远。之所以能形成这样的局面，有一个重要的原因就在于中文和英文两种语言自身的书写方式不同，这其中对于计算机涉及的技术就是中文分词。 </p>
<h3><a name="什么是中文分词"></a>什么是中文分词 </h3>
<hr />众所周知，英文是以词为单位的，词和词之间是靠空格隔开，而中文是以字为单位，句子中所有的字连起来才能描述一个意思。例如，英文句子I am a student，用中文则为：&ldquo;我是一个学生&rdquo;。计算机可以很简单通过空格知道student是一个单词，但是不能很容易明白「学」、「生」两个字合起来才表示一个词。把中文的汉字序列切分成有意义的词，就是中文分词，有些人也称为切词。我是一个学生，分词的结果是：我 是 一个 学生。
<h3><a name="中文分词和搜索引擎"></a>中文分词和搜索引擎 </h3>
<hr />中文分词到底对搜索引擎有多大影响？对于搜索引擎来说，最重要的并不是找到所有结果，因为在上百亿的网页中找到所有结果没有太多的意义，没有人能看得完，最重要的是把最相关的结果排在最前面，这也称为相关度排序。中文分词的准确与否，常常直接影响到对搜索结果的相关度排序。笔者最近替朋友找一些关于日本和服的资料，在搜索引擎上输入「和服」，得到的结果就发现了很多问题。下面就以这个例子来说明分词对搜索结果的影响，在目前最有三个中文搜索引擎上做测试。测试方法是直接在<a href="http://www.google.com/" target="_top" rel="nofollow">Google</a>、<a href="http://www.baidu.com/" target="_top" rel="nofollow">百度</a>、<a href="http://www.zhongsou.com/" target="_top" rel="nofollow">中搜</a>上以「和服」为关键词进行搜索：
<p>在Google上输入「和服」搜索所有中文简体网页，总共结果507,000条，前20条结果中有14条与和服一点关系都没有。在第一页就有以下错误： </p>
<p>&ldquo;通信信息报：瑞星以技术和服务开拓网络安全市场&rdquo; </p>
<p>&ldquo;使用纯HTML的通用数据管理和服务- 开发者- ZDNet ...&rdquo; </p>
<p>&ldquo;陈慧琳《心口不一》 化妆和服装自己包办&rdquo; </p>
<p>&ldquo;::外交部：中国境外领事保护和服务指南(2003年版) ...&rdquo; </p>
<p>&ldquo;产品和服务&rdquo; </p>
<p>等等。第一页只有三篇是真正在讲「和服」的结果。 </p>
<p>在百度上输入「和服」搜索网页，总共结果为287,000条，前20条结果中有6条与和服一点关系都没有。在第一页有以下错误： </p>
<p>&ldquo;福建省晋江市恒和服装有限公司系独资企业&rdquo; </p>
<p>&ldquo;关于商品和服务实行明码标价的规定&rdquo; </p>
<p>&ldquo;青岛东和服装设备&rdquo; </p>
<p>在中搜山输入「和服」搜索网页，总共结果为26,917条，前20条结果都是与和服相关的网页。 </p>
<p>这次搜索引擎结果中的错误，就是由于分词的不准确所造成的。通过笔者的了解，Google的中文分词技术采用的是美国一家名叫Basis Technology（http://www.basistech.com）的公司提供的中文分词技术，百度使用的是自己公司开发的分词技术，中搜使用的是国内海量科技（http://www.hylanda.com）提供的分词技术。业界评论海量科技的分词技术目前被认为是国内最好的中文分词技术，其分词准确度超过99%，由此也使得中搜在搜索结果中搜索结果的错误率很低。由此可见，中文分词的准确度，对搜索引擎结果相关性和准确性有相当大的关系。 </p>
<h3><a name="中文分词技术"></a>中文分词技术 </h3>
<hr />中文分词技术属于自然语言处理技术范畴，对于一句话，人可以通过自己的知识来明白哪些是词，哪些不是词，但如何让计算机也能理解？其处理过程就是分词算法。
<p>现有的分词算法可分为三大类：基于字符串匹配的分词方法、基于理解的分词方法和基于统计的分词方法。 </p>
<p><strong>基于字符串匹配的分词方法</strong> </p>
<p>这种方法又叫做机械分词方法，它是按照一定的策略将待分析的汉字串与一个「充分大的」机器词典中的词条进行配，若在词典中找到某个字符串，则匹配成功（识别出一个词）。按照扫描方向的不同，串匹配分词方法可以分为正向匹配和逆向匹配；按照不同长度优先匹配的情况，可以分为最大（最长）匹配和最小（最短）匹配；按照是否与词性标注过程相结合，又可以分为单纯分词方法和分词与标注相结合的一体化方法。常用的几种机械分词方法如下： </p>
<ol>
    <li>正向最大匹配法（由左到右的方向）； </li>
    <li>逆向最大匹配法（由右到左的方向）； </li>
    <li>最少切分（使每一句中切出的词数最小）。 </li>
</ol>
还可以将上述各种方法相互组合，例如，可以将正向最大匹配方法和逆向最大匹配方法结合起来构成双向匹配法。由于汉语单字成词的特点，正向最小匹配和逆向最小匹配一般很少使用。一般说来，逆向匹配的切分精度略高于正向匹配，遇到的歧义现象也较少。统计结果表明，单纯使用正向最大匹配的错误率为1/169，单纯使用逆向最大匹配的错误率为1/245。但这种精度还远远不能满足实际的需要。实际使用的分词系统，都是把机械分词作为一种初分手段，还需通过利用各种其它的语言信息来进一步提高切分的准确率。
<p>一种方法是改进扫描方式，称为特征扫描或标志切分，优先在待分析字符串中识别和切分出一些带有明显特征的词，以这些词作为断点，可将原字符串分为较小的串再来进机械分词，从而减少匹配的错误率。另一种方法是将分词和词类标注结合起来，利用丰富的词类信息对分词决策提供帮助，并且在标注过程中又反过来对分词结果进行检验、调整，从而极大地提高切分的准确率。 </p>
<p>对于机械分词方法，可以建立一个一般的模型，在这方面有专业的学术论文，这里不做详细论述。 </p>
<p><strong>基于理解的分词方法</strong> </p>
<p>这种分词方法是通过让计算机模拟人对句子的理解，达到识别词的效果。其基本思想就是在分词的同时进行句法、语义分析，利用句法信息和语义信息来处理歧义现象。它通常包括三个部分：分词子系统、句法语义子系统、总控部分。在总控部分的协调下，分词子系统可以获得有关词、句子等的句法和语义信息来对分词歧义进行判断，即它模拟了人对句子的理解过程。这种分词方法需要使用大量的语言知识和信息。由于汉语语言知识的笼统、复杂性，难以将各种语言信息组织成机器可直接读取的形式，因此目前基于理解的分词系统还处在试验阶段。 </p>
<p><strong>基于统计的分词方法</strong> </p>
<p>从形式上看，词是稳定的字的组合，因此在上下文中，相邻的字同时出现的次数越多，就越有可能构成一个词。因此字与字相邻共现的频率或概率能够较好的反映成词的可信度。可以对语料中相邻共现的各个字的组合的频度进行统计，计算它们的互现信息。定义两个字的互现信息，计算两个汉字X、Y的相邻共现概率。互现信息体现了汉字之间结合关系的紧密程度。当紧密程度高于某一个阈值时，便可认为此字组可能构成了一个词。这种方法只需对语料中的字组频度进行统计，不需要切分词典，因而又叫做无词典分词法或统计取词方法。但这种方法也有一定的局限性，会经常抽出一些共现频度高、但并不是词的常用字组，例如「这一」、「之一」、「有的」、「我的」、「许多的」等，并且对常用词的识别精度差，时空开销大。实际应用的统计分词系统都要使用一部基本的分词词典（常用词词典）进行串匹配分词，同时使用统计方法识别一些新的词，即将串频统计和串匹配结合起来，既发挥匹配分词切分速度快、效率高的特点，又利用了无词典分词结合上下文识别生词、自动消除歧义的优点。 </p>
<p>到底哪种分词算法的准确度更高，目前并无定论。对于任何一个成熟的分词系统来说，不可能单独依靠某一种算法来实现，都需要综合不同的算法。笔者了解，海量科技的分词算法就采用「复方分词法」，所谓复方，相当于用中药中的复方概念，即用不同的药才综合起来去医治疾病，同样，对于中文词的识别，需要多种算法来处理不同的问题。 </p>
<p>&nbsp;</p>
<h3><a name="分词中的难题。"></a>分词中的难题。 </h3>
<hr />有了成熟的分词算法，是否就能容易的解决中文分词的问题呢？事实远非如此。中文是一种十分复杂的语言，让计算机理解中文语言更是困难。在中文分词过程中，有两大难题一直没有完全突破。
<ul>
    <li>歧义识别。 </li>
</ul>
歧义是指同样的一句话，可能有两种或者更多的切分方法。例如：表面的，因为「表面」和「面的」都是词，那么这个短语就可以分成「表面 的」和「表 面的」。这种称为交叉歧义。像这种交叉歧义十分常见，前面举的「和服」的例子，其实就是因为交叉歧义引起的错误。「化妆和服装」可以分成「化妆 和 服装」或者「化妆 和服 装」。由于没有人的知识去理解，计算机很难知道到底哪个方案正确。
<p>交叉歧义相对组合歧义来说是还算比较容易处理，组合歧义就必需根据整个句子来判断了。例如，在句子「这个门把手坏了」中，「把手」是个词，但在句子「请把手拿开」中，「把手」就不是一个词；在句子「将军任命了一名中将」中，「中将」是个词，但在句子「产量三年中将增长两倍」中，「中将」就不再是词。这些词计算机又如何去识别? </p>
<p>如果交叉歧义和组合歧义计算机都能解决的话，在歧义中还有一个难题，是真歧义。真歧义意思是给出一句话，由人去判断也不知道哪个应该是词，哪个应该不是词。例如：「乒乓球拍卖完了」，可以切分成「乒乓 球拍 卖 完 了」、也可切分成「乒乓球 拍卖 完 了」，如果没有上下文其他的句子，恐怕谁也不知道「拍卖」在这里算不算一个词。 </p>
<ul>
    <li>新词识别。 </li>
</ul>
新词，专业术语称为未登录词。也就是那些在字典中都没有收录过，但又确实能称为词的那些词。最典型的是人名，人可以很容易理解句子「王军虎去广州了」中，「王军虎」是个词，因为是一个人的名字，但要是让计算机去识别就困难了。如果把「王军虎」做为一个词收录到字典中去，全世界有那么多名字，而且每时每刻都有新增的人名，收录这些人名本身就是一项巨大的工程。即使这项工作可以完成，还是会存在问题，例如：在句子「王军虎头虎脑的」中，「王军虎」还能不能算词？
<p>新词中除了人名以外，还有机构名、地名、产品名、商标名、简称、省略语等都是很难处理的问题，而且这些又正好是人们经常使用的词，因此对于搜索引擎来说，分词系统中的新词识别十分重要。目前新词识别准确率已经成为评价一个分词系统好坏的重要标志之一。 </p>
<h3><a name="中文分词的应用"></a>中文分词的应用 </h3>
<hr />目前在自然语言处理技术中，中文处理技术比西文处理技术要落后很大一段距离，许多西文的处理方法中文不能直接采用，就是因为中文必需有分词这道工序。中文分词是其他中文信息处理的基础，搜索引擎只是中文分词的一个应用。其他的比如机器翻译（MT）、语音合成、自动分类、自动摘要、自动校对等等，都需要用到分词。因为中文需要分词，可能会影响一些研究，但同时也为一些企业带来机会，因为国外的计算机处理技术要想进入中国市场，首先也是要解决中文分词问题。在中文研究方面，相比外国人来说，中国人有十分明显的优势。
<p>分词准确性对搜索引擎来说十分重要，但如果分词速度太慢，即使准确性再高，对于搜索引擎来说也是不可用的，因为搜索引擎需要处理数以亿计的网页，如果分词耗用的时间过长，会严重影响搜索引擎内容更新的速度。因此对于搜索引擎来说，分词的准确性和速度，二者都需要达到很高的要求。目前研究中文分词的大多是科研院校，清华、北大、中科院、北京语言学院、东北大学、IBM研究院、微软中国研究院等都有自己的研究队伍，而真正专业研究中文分词的商业公司除了海量科技以外，几乎没有了。科研院校研究的技术，大部分不能很快产品化，而一个专业公司的力量毕竟有限，看来中文分词技术要想更好的服务于更多的产品，还有很长一段路。 </p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=39</link>
			<title><![CDATA[Apache安装及jboss部署说明文档]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Wed,28 Mar 2007 19:33:55 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=39</guid>	
		<description><![CDATA[<span lang="EN-US">Apache安装及jboss部署说明文档</span>
<p class="MsoNormal" style="TEXT-ALIGN: center" align="center"><span lang="EN-US">&nbsp;
<p>&nbsp;</p>
</span></p>
<table style="MARGIN-LEFT: 82.1pt; BORDER-COLLAPSE: collapse; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt" cellspacing="0" cellpadding="0" border="0">
    <tbody>
        <tr>
            <td style="BORDER-RIGHT: windowtext 0.75pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.75pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.75pt solid; WIDTH: 66.2pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.75pt solid" valign="top" width="88">
            <p class="MsoNormal" style="TEXT-JUSTIFY: distribute-all-lines; TEXT-ALIGN: justify"><b style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">编写者：</span><span lang="EN-US">
            <p>&nbsp;</p>
            </span></b></p>
            </td>
            <td style="BORDER-RIGHT: windowtext 0.75pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.75pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 66.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.75pt solid; mso-border-left-alt: solid windowtext .75pt" valign="top" width="88" colspan="2">
            <p class="MsoNormal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">周怀进</span></p>
            </td>
            <td style="BORDER-RIGHT: windowtext 0.75pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.75pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 66.2pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.75pt solid; mso-border-left-alt: solid windowtext .75pt" valign="top" width="88" colspan="3">
            <p class="MsoNormal" style="TEXT-JUSTIFY: distribute-all-lines; TEXT-ALIGN: justify"><b style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">创建时间：</span><span lang="EN-US">
            <p>&nbsp;</p>
            </span></b></p>
            </td>
            <td style="BORDER-RIGHT: windowtext 0.75pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.75pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 66.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.75pt solid; mso-border-left-alt: solid windowtext .75pt" valign="top" width="88">
            <p class="MsoNormal"><span lang="EN-US">2005-11-02</span></p>
            </td>
        </tr>
        <tr>
            <td style="BORDER-RIGHT: windowtext 0.75pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.75pt solid; WIDTH: 66.2pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.75pt solid; mso-border-top-alt: solid windowtext .75pt" valign="top" width="88">
            <p class="MsoNormal" style="TEXT-JUSTIFY: distribute-all-lines; TEXT-ALIGN: justify"><b style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">审核人：</span><span lang="EN-US">
            <p>&nbsp;</p>
            </span></b></p>
            </td>
            <td style="BORDER-RIGHT: windowtext 0.75pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 66.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.75pt solid; mso-border-left-alt: solid windowtext .75pt; mso-border-top-alt: solid windowtext .75pt" valign="top" width="88" colspan="2">
            <p class="MsoNormal">&nbsp;<span lang="EN-US">
            <p>&nbsp;</p>
            </span></p>
            </td>
            <td style="BORDER-RIGHT: windowtext 0.75pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 66.2pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.75pt solid; mso-border-left-alt: solid windowtext .75pt; mso-border-top-alt: solid windowtext .75pt" valign="top" width="88" colspan="3">
            <p class="MsoNormal" style="TEXT-JUSTIFY: distribute-all-lines; TEXT-ALIGN: justify"><b style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">审核时间：</span><span lang="EN-US">
            <p>&nbsp;</p>
            </span></b></p>
            </td>
            <td style="BORDER-RIGHT: windowtext 0.75pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 66.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.75pt solid; mso-border-left-alt: solid windowtext .75pt; mso-border-top-alt: solid windowtext .75pt" valign="top" width="88">
            <p class="MsoNormal">&nbsp;<span lang="EN-US">
            <p>&nbsp;</p>
            </span></p>
            </td>
        </tr>
        <tr>
            <td style="BORDER-RIGHT: windowtext 0.75pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.75pt solid; WIDTH: 66.2pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.75pt solid; mso-border-top-alt: solid windowtext .75pt" valign="top" width="88">
            <p class="MsoNormal" style="TEXT-JUSTIFY: distribute-all-lines; TEXT-ALIGN: justify"><b style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文档状态：</span><span lang="EN-US">
            <p>&nbsp;</p>
            </span></b></p>
            </td>
            <td style="BORDER-RIGHT: windowtext 0.75pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 49.65pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.75pt solid; mso-border-left-alt: solid windowtext .75pt; mso-border-top-alt: solid windowtext .75pt" valign="top" width="66">
            <p class="MsoNormal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">草稿</span></p>
            </td>
            <td style="BORDER-RIGHT: windowtext 0.75pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 42.8pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.75pt solid; mso-border-left-alt: solid windowtext .75pt; mso-border-top-alt: solid windowtext .75pt" valign="top" width="57" colspan="2">
            <p class="MsoNormal"><span lang="EN-US" style="FONT-FAMILY: Wingdings; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-char-type: symbol; mso-symbol-font-family: Wingdings"><span style="mso-char-type: symbol; mso-symbol-font-family: Wingdings">&yacute;</span></span></p>
            </td>
            <td style="BORDER-RIGHT: windowtext 0.75pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 36pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.75pt solid; mso-border-left-alt: solid windowtext .75pt; mso-border-top-alt: solid windowtext .75pt" valign="top" width="48">
            <p class="MsoNormal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">受控</span></p>
            </td>
            <td style="BORDER-RIGHT: windowtext 0.75pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 70.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.75pt solid; mso-border-left-alt: solid windowtext .75pt; mso-border-top-alt: solid windowtext .75pt" valign="top" width="94" colspan="2">
            <p class="MsoNormal"><b><span style="COLOR: red; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">自由共享</span><span lang="EN-US" style="COLOR: red">
            <p>&nbsp;</p>
            </span></b></p>
            </td>
        </tr>
        <tr>
            <td style="BORDER-RIGHT: windowtext 0.75pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.75pt solid; WIDTH: 66.2pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.75pt solid; mso-border-top-alt: solid windowtext .75pt" valign="top" width="88">
            <p class="MsoNormal" style="TEXT-JUSTIFY: distribute-all-lines; TEXT-ALIGN: justify"><b style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文档编号：</span><span lang="EN-US">
            <p>&nbsp;</p>
            </span></b></p>
            </td>
            <td style="BORDER-RIGHT: windowtext 0.75pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 198.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.75pt solid; mso-border-left-alt: solid windowtext .75pt; mso-border-top-alt: solid windowtext .75pt" valign="top" width="265" colspan="6">
            <p class="MsoNormal">&nbsp;<span lang="EN-US">
            <p>&nbsp;</p>
            </span></p>
            </td>
        </tr>
        <tr>
            <td style="BORDER-RIGHT: windowtext 0.75pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.75pt solid; WIDTH: 66.2pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.75pt solid; mso-border-top-alt: solid windowtext .75pt" valign="top" width="88">
            <p class="MsoNormal" style="TEXT-JUSTIFY: distribute-all-lines; TEXT-ALIGN: justify"><b style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">版本号：</span><span lang="EN-US">
            <p>&nbsp;</p>
            </span></b></p>
            </td>
            <td style="BORDER-RIGHT: windowtext 0.75pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 198.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.75pt solid; mso-border-left-alt: solid windowtext .75pt; mso-border-top-alt: solid windowtext .75pt" valign="top" width="265" colspan="6">
            <p class="MsoNormal"><span lang="EN-US">2006-01-12</span></p>
            </td>
        </tr>
        <tr>
            <td style="BORDER-RIGHT: windowtext 0.75pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.75pt solid; WIDTH: 66.2pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.75pt solid; mso-border-top-alt: solid windowtext .75pt" valign="top" width="88">
            <p class="MsoNormal" style="TEXT-JUSTIFY: distribute-all-lines; TEXT-ALIGN: justify"><b style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">面向人员：</span><span lang="EN-US">
            <p>&nbsp;</p>
            </span></b></p>
            </td>
            <td style="BORDER-RIGHT: windowtext 0.75pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 198.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.75pt solid; mso-border-left-alt: solid windowtext .75pt; mso-border-top-alt: solid windowtext .75pt" valign="top" width="265" colspan="6">
            <p class="MsoNormal"><span lang="EN-US">JBOSS</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">服务器使用者</span></p>
            </td>
        </tr>
        <tr>
            <td style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none" width="88">&nbsp;</td>
            <td style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none" width="66">&nbsp;</td>
            <td style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none" width="22">&nbsp;</td>
            <td style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none" width="35">&nbsp;</td>
            <td style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none" width="48">&nbsp;</td>
            <td style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none" width="5">&nbsp;</td>
            <td style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none" width="88">&nbsp;</td>
        </tr>
    </tbody>
</table>
<p class="MsoNormal"><span lang="EN-US">&nbsp;
<p>&nbsp;</p>
</span></p>
<table style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-alt: solid windowtext 1.0pt" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid" valign="top" width="568">
            <p class="MsoNormal" style="TEXT-ALIGN: center" align="center"><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">序</span></b><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 12pt"> </span></b><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文</span></b><span lang="EN-US" style="FONT-SIZE: 12pt">
            <p>&nbsp;</p>
            </span></p>
            </td>
        </tr>
        <tr>
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-top-alt: solid windowtext 1.0pt" valign="top" width="568">
            <p class="MsoNormal" style="TEXT-INDENT: 21pt; mso-char-indent-count: 2.0; mso-char-indent-size: 10.5pt"><span lang="EN-US">&nbsp;
            <p>&nbsp;</p>
            </span></p>
            <p class="MsoNormal" style="TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">本文档描述了</span><span lang="EN-US" style="FONT-SIZE: 12pt">apache web</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">服务器安装以及常用的编译模式；描述了</span><span lang="EN-US" style="FONT-SIZE: 12pt">apache+jboss3.2.6</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">做负载均衡</span><span lang="EN-US" style="FONT-SIZE: 12pt">(load balance)</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的部署细节以及一些常见错误说明；描述了部署</span><span lang="EN-US" style="FONT-SIZE: 12pt">jboss3.2.3/3.2.6</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">时一些心得、常用配置项。</span><span lang="EN-US" style="FONT-SIZE: 12pt">
            <p>&nbsp;</p>
            </span></p>
            <p class="MsoBodyTextIndent2" style="TEXT-INDENT: 21.85pt; LINE-HEIGHT: 150%"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">由于该文档是工作中的经验积累，文档整理的大部分时间也是工作时间，因此有必要替公司做一下广告。</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 宋体">
            <p>&nbsp;</p>
            </span></p>
            <p class="MsoNormal" style="TEXT-INDENT: 12pt; LINE-HEIGHT: 150%; mso-char-indent-count: 1.0; mso-char-indent-size: 12.0pt"><span style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 宋体">&ldquo;<b>沟通无极限，尽在<span lang="EN-US">263，二六三满足你所想!</span></b>&rdquo;<span lang="EN-US">,</span></span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">欢迎访问</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 宋体"><a href="http://www.263.net/">http://www.263.net</a>.
            <p>&nbsp;</p>
            </span></p>
            <p class="MsoNormal" style="TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><span style="FONT-SIZE: 12pt; COLOR: #003366; FONT-FAMILY: 仿宋_GB2312; mso-hansi-font-family: 华文细黑">很钦佩&ldquo;<span lang="EN-US">spring开源文档&rdquo;的作者夏昕朋友，他有毅力把那份文档整理出来，因为整理文档是很费时间的一件事，更可贵的是，还能共享出来，他的一句话是</span></span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #003366; FONT-FAMILY: 华文细黑; mso-fareast-font-family: 仿宋_GB2312; mso-ascii-font-family: 仿宋_GB2312">&ldquo;</span><i><span style="FONT-SIZE: 12pt; COLOR: blue; FONT-FAMILY: 仿宋_GB2312; mso-hansi-font-family: 华文细黑">取自于互联网，还于互联网</span></i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #003366; FONT-FAMILY: 华文细黑">&rdquo;</span><span style="FONT-SIZE: 12pt; COLOR: #003366; FONT-FAMILY: 仿宋_GB2312; mso-hansi-font-family: 华文细黑">，我赞赏！期望看到这份文档的朋友们多一些</span><i><span style="FONT-SIZE: 12pt; COLOR: blue; FONT-FAMILY: 仿宋_GB2312; mso-hansi-font-family: 华文细黑">共享精神</span></i><span style="FONT-SIZE: 12pt; COLOR: #003366; FONT-FAMILY: 仿宋_GB2312; mso-hansi-font-family: 华文细黑">，这样能节省很多人的时间，大家才有时间去探索、研究一些未知的问题。社会才会有进步！<span lang="EN-US">
            <p>&nbsp;</p>
            </span></span></p>
            <p class="MsoNormal" style="TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><span style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 仿宋_GB2312; mso-hansi-font-family: 华文细黑">大家一起来分享自己的经验吧，别人节约了时间，你获得了快乐！</span><span lang="EN-US" style="COLOR: red">
            <p>&nbsp;</p>
            </span></p>
            <p class="MsoNormal" style="TEXT-INDENT: 21.75pt; LINE-HEIGHT: 150%"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 仿宋_GB2312">套用一句俗话：</span><b><span style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 仿宋_GB2312">文档就是生产力<span lang="EN-US">!</span></span></b><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: blue; FONT-FAMILY: 仿宋_GB2312">
            <p>&nbsp;</p>
            </span></p>
            <p class="MsoToc1" style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 仿宋_GB2312">该篇文档将会以<span lang="EN-US">PDF格式发布到互联网上。
            <p>&nbsp;</p>
            </span></span></p>
            <p class="MsoNormal" style="MARGIN-TOP: 2.5pt; LINE-HEIGHT: 150%"><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span></span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 仿宋_GB2312">感谢曹庆德先生、张彩霞提供的一些技术指导，感谢冯波、侯斌提供的<span lang="EN-US">
            <p>&nbsp;</p>
            </span></span></p>
            <p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 仿宋_GB2312">apache2.0配置的一些参数。感谢李响、谭述纲。感谢互联网上的诸位朋友们！
            <p>&nbsp;</p>
            </span></p>
            <p class="MsoNormal">&nbsp;<span lang="EN-US">
            <p>&nbsp;</p>
            </span></p>
            </td>
        </tr>
    </tbody>
</table>
<p class="MsoNormal"><span lang="EN-US">&nbsp;
<p>&nbsp;</p>
</span></p>
<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><br style="PAGE-BREAK-BEFORE: always; mso-break-type: section-break" clear="all" /></span>
<div class="Section2" style="LAYOUT-GRID:  15.6pt none">
<p class="MsoNormal"><span class="a"><span lang="EN-US" style="FONT-SIZE: 16pt; FONT-FAMILY: 华文中宋; mso-bidi-font-size: 12.0pt"><strong>A．参考文献
<p>&nbsp;</p>
</strong></span></span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US"><a href="http://httpd.apache.org/docs/2.0/">http://httpd.apache.org/docs/2.0/</a></span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US"><a href="http://tomcat.apache.org/connectors-doc/">http://tomcat.apache.org/connectors-doc/</a></span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US"><a href="http://www.jboss.com/">http://www.jboss.com</a></span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US"><a href="http://www.sun.com/">http://www.sun.com</a></span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US"><a href="http://logging.apache.org/log4j/docs/">http://logging.apache.org/log4j/docs/</a></span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: 宋体"><a href="http://www.oreilly.com/">http://www.oreilly.com</a>
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US">&hellip;&hellip;</span></p>
<p class="MsoNormal"><span lang="EN-US">&hellip;&hellip;</span></p>
<p class="MsoNormal"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">互联网</span><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">写在前面的话：</span><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">由于本人也是</span><span lang="EN-US" style="FONT-SIZE: 12pt">JBOSS</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的初级用户，</span><span lang="EN-US" style="FONT-SIZE: 12pt">JBOSS</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">又很强大，在工作中也是摸索积累的过程，因此总结难免有所错误或纰漏，但已经是尽我的努力，力求正确，如有错误或纰漏，敬请指正。</span><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文档作者：周怀进</span><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">联系方式</span><span lang="EN-US" style="FONT-SIZE: 12pt">:
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">msn: <a href="http://www.xd-tech.com/blog/mailto:zhj_michael@hotmail.com">zhj_michael@hotmail.com</a>
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><span lang="EN-US" style="FONT-SIZE: 12pt"><a href="http://www.xd-tech.com/blog/mailto:zhjjava@126.com">zhjjava@126.com</a>
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">blog: <a href="http://spaces.msn.com/members/zhj-michael/">http://spaces.msn.com/members/zhj-michael/</a>
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><span lang="EN-US" style="FONT-SIZE: 12pt">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><span lang="EN-US" style="FONT-SIZE: 12pt">&nbsp;
<p>&nbsp;</p>
</span></p>
</div>
<span lang="EN-US" style="FONT-SIZE: 12pt; 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"><br style="PAGE-BREAK-BEFORE: always; mso-break-type: section-break" clear="all" /></span>
<div class="Section3" style="LAYOUT-GRID:  15.6pt none">
<p class="a1"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">目　录</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoToc1" style="tab-stops: right dotted 414.8pt"><span lang="EN-US"><span class="MsoHyperlink"><a href="http://man.chinaunix.net/newsoft/jboss.htm#_Toc124845774">1 .Apache2.0<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">及连接器</span>jk1.2<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的编译部署</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"><span style="mso-tab-count: 1 dotted">... </span></span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen">1</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"></span></a></span>
<p>&nbsp;</p>
</span></p>
<p class="MsoToc2" style="tab-stops: right dotted 414.8pt"><span class="MsoHyperlink"><span lang="EN-US"><a href="http://man.chinaunix.net/newsoft/jboss.htm#_Toc124845775">1.1<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下载相关软件包</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"><span style="mso-tab-count: 1 dotted">... </span></span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen">1</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"></span></a></span></span><span lang="EN-US">
<p>&nbsp;</p>
</span></p>
<p class="MsoToc2" style="tab-stops: right dotted 414.8pt"><span class="MsoHyperlink"><span lang="EN-US"><a href="http://man.chinaunix.net/newsoft/jboss.htm#_Toc124845776">1.2 apache2.0<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的编译安装</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"><span style="mso-tab-count: 1 dotted">... </span></span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen">2</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"></span></a></span></span><span lang="EN-US">
<p>&nbsp;</p>
</span></p>
<p class="MsoToc2" style="tab-stops: right dotted 414.8pt"><span class="MsoHyperlink"><span lang="EN-US"><a href="http://man.chinaunix.net/newsoft/jboss.htm#_Toc124845777">1.3 jk1.2.14<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的编译安装</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"><span style="mso-tab-count: 1 dotted">... </span></span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen">3</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"></span></a></span></span><span lang="EN-US">
<p>&nbsp;</p>
</span></p>
<p class="MsoToc2" style="tab-stops: right dotted 414.8pt"><span class="MsoHyperlink"><span lang="EN-US"><a href="http://man.chinaunix.net/newsoft/jboss.htm#_Toc124845778">1.4 apache<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">及</span>jk1.2<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的参数配置</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"><span style="mso-tab-count: 1 dotted">... </span></span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen">3</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"></span></a></span></span><span lang="EN-US">
<p>&nbsp;</p>
</span></p>
<p class="MsoToc3" style="tab-stops: right dotted 414.8pt"><span class="MsoHyperlink"><span lang="EN-US"><a href="http://man.chinaunix.net/newsoft/jboss.htm#_Toc124845779"><span style="mso-bidi-font-size: 15.0pt">1.4.1.httpd.conf</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 15.0pt">的修改</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"><span style="mso-tab-count: 1 dotted">... </span></span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen">3</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"></span></a></span></span><span lang="EN-US">
<p>&nbsp;</p>
</span></p>
<p class="MsoToc3" style="tab-stops: right dotted 414.8pt"><span class="MsoHyperlink"><span lang="EN-US"><a href="http://man.chinaunix.net/newsoft/jboss.htm#_Toc124845780"><span style="mso-bidi-font-size: 15.0pt">1.4.2.mod_jk2.conf</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 15.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的所有内容</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"><span style="mso-tab-count: 1 dotted">... </span></span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen">4</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"></span></a></span></span><span lang="EN-US">
<p>&nbsp;</p>
</span></p>
<p class="MsoToc3" style="tab-stops: right dotted 414.8pt"><span class="MsoHyperlink"><span lang="EN-US"><a href="http://man.chinaunix.net/newsoft/jboss.htm#_Toc124845781"><span style="mso-bidi-font-size: 15.0pt">1.4.3.workers2.properties</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 15.0pt">的所有内容</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"><span style="mso-tab-count: 1 dotted">... </span></span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen">4</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"></span></a></span></span><span lang="EN-US">
<p>&nbsp;</p>
</span></p>
<p class="MsoToc2" style="tab-stops: right dotted 414.8pt"><span class="MsoHyperlink"><span lang="EN-US"><a href="http://man.chinaunix.net/newsoft/jboss.htm#_Toc124845782">1.5 apache<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">服务的启动和停止</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"><span style="mso-tab-count: 1 dotted">... </span></span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen">5</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"></span></a></span></span><span lang="EN-US">
<p>&nbsp;</p>
</span></p>
<p class="MsoToc1" style="tab-stops: right dotted 414.8pt"><span class="MsoHyperlink"><span lang="EN-US"><a href="http://man.chinaunix.net/newsoft/jboss.htm#_Toc124845783">2.JBOSS3.2.3/3.2.6<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">部署及配置修改</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"><span style="mso-tab-count: 1 dotted">... </span></span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen">5</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"></span></a></span></span><span lang="EN-US">
<p>&nbsp;</p>
</span></p>
<p class="MsoToc2" style="tab-stops: right dotted 414.8pt"><span class="MsoHyperlink"><span lang="EN-US"><a href="http://man.chinaunix.net/newsoft/jboss.htm#_Toc124845784">2.0 FOR NEW USER<span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"><span style="mso-tab-count: 1 dotted">. </span></span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen">5</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"></span></a></span></span><span lang="EN-US">
<p>&nbsp;</p>
</span></p>
<p class="MsoToc3" style="tab-stops: right dotted 414.8pt"><span class="MsoHyperlink"><span lang="EN-US"><a href="http://man.chinaunix.net/newsoft/jboss.htm#_Toc124845785"><span style="mso-bidi-font-size: 15.0pt">2.0.1 JBOSS </span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 15.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的一点说明</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"><span style="mso-tab-count: 1 dotted">... </span></span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen">5</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"></span></a></span></span><span lang="EN-US">
<p>&nbsp;</p>
</span></p>
<p class="MsoToc3" style="tab-stops: right dotted 414.8pt"><span class="MsoHyperlink"><span lang="EN-US"><a href="http://man.chinaunix.net/newsoft/jboss.htm#_Toc124845786"><span style="mso-bidi-font-size: 15.0pt">2.0.1 JBOSS</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 15.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">常用配置文件的路径</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"><span style="mso-tab-count: 1 dotted">... </span></span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen">5</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"></span></a></span></span><span lang="EN-US">
<p>&nbsp;</p>
</span></p>
<p class="MsoToc2" style="tab-stops: 84.0pt right dotted 414.8pt"><span class="MsoHyperlink"><span lang="EN-US"><a href="http://man.chinaunix.net/newsoft/jboss.htm#_Toc124845787">2.1 JBOSS<span style="COLOR: windowtext; TEXT-DECORATION: none; text-underline: none"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">应用程序的下载及安装</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"><span style="mso-tab-count: 1 dotted">... </span></span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen">6</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"></span></a></span></span><span lang="EN-US">
<p>&nbsp;</p>
</span></p>
<p class="MsoToc2" style="tab-stops: 84.0pt right dotted 414.8pt"><span class="MsoHyperlink"><span lang="EN-US"><a href="http://man.chinaunix.net/newsoft/jboss.htm#_Toc124845788">2.2 JBOSS<span style="COLOR: windowtext; TEXT-DECORATION: none; text-underline: none"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">应用程序的配置调整</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"><span style="mso-tab-count: 1 dotted">... </span></span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen">6</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"></span></a></span></span><span lang="EN-US">
<p>&nbsp;</p>
</span></p>
<p class="MsoToc3" style="tab-stops: right dotted 414.8pt"><span class="MsoHyperlink"><span lang="EN-US"><a href="http://man.chinaunix.net/newsoft/jboss.htm#_Toc124845789"><span style="mso-bidi-font-size: 15.0pt">2.2.1</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 15.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">配置负载均衡，调整参数</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"><span style="mso-tab-count: 1 dotted">... </span></span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen">6</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"></span></a></span></span><span lang="EN-US">
<p>&nbsp;</p>
</span></p>
<p class="MsoToc3" style="tab-stops: right dotted 414.8pt"><span class="MsoHyperlink"><span lang="EN-US"><a href="http://man.chinaunix.net/newsoft/jboss.htm#_Toc124845790"><span style="mso-bidi-font-size: 15.0pt">2.2.2</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 15.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">配置集群</span><span style="mso-bidi-font-size: 15.0pt">(Clustering)</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 15.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，调整参数</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"><span style="mso-tab-count: 1 dotted">... </span></span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen">7</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"></span></a></span></span><span lang="EN-US">
<p>&nbsp;</p>
</span></p>
<p class="MsoToc3" style="tab-stops: right dotted 414.8pt"><span class="MsoHyperlink"><span lang="EN-US"><a href="http://man.chinaunix.net/newsoft/jboss.htm#_Toc124845791"><span style="mso-bidi-font-size: 15.0pt">2.2.3</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 15.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">配置数据源，调整参数</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"><span style="mso-tab-count: 1 dotted">... </span></span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen">7</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"></span></a></span></span><span lang="EN-US">
<p>&nbsp;</p>
</span></p>
<p class="MsoToc3" style="tab-stops: right dotted 414.8pt"><span class="MsoHyperlink"><span lang="EN-US"><a href="http://man.chinaunix.net/newsoft/jboss.htm#_Toc124845792"><span style="mso-bidi-font-size: 15.0pt">2.2.4</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 15.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">配置</span><span style="mso-bidi-font-size: 15.0pt">jboss Connector</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 15.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">参数</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"><span style="mso-tab-count: 1 dotted">... </span></span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen">8</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"></span></a></span></span><span lang="EN-US">
<p>&nbsp;</p>
</span></p>
<p class="MsoToc3" style="tab-stops: right dotted 414.8pt"><span class="MsoHyperlink"><span lang="EN-US"><a href="http://man.chinaunix.net/newsoft/jboss.htm#_Toc124845793"><span style="mso-bidi-font-size: 15.0pt">2.2.5</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 15.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">访问</span><span style="mso-bidi-font-size: 15.0pt">URL</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 15.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果是目录，不想显示该目录下文件</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"><span style="mso-tab-count: 1 dotted">... </span></span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen">9</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"></span></a></span></span><span lang="EN-US">
<p>&nbsp;</p>
</span></p>
<p class="MsoToc3" style="tab-stops: right dotted 414.8pt"><span class="MsoHyperlink"><span lang="EN-US"><a href="http://man.chinaunix.net/newsoft/jboss.htm#_Toc124845794"><span style="mso-bidi-font-size: 15.0pt">2.2.6</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 15.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">设置某个应用</span><span style="mso-bidi-font-size: 15.0pt">APP</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 15.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为默认应用</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"><span style="mso-tab-count: 1 dotted">... </span></span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen">9</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"></span></a></span></span><span lang="EN-US">
<p>&nbsp;</p>
</span></p>
<p class="MsoToc3" style="tab-stops: right dotted 414.8pt"><span class="MsoHyperlink"><span lang="EN-US"><a href="http://man.chinaunix.net/newsoft/jboss.htm#_Toc124845795"><span style="mso-bidi-font-size: 15.0pt">2.2.7</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 15.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">配置数据源在</span><span style="mso-bidi-font-size: 15.0pt">APP</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 15.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">应用加载前有效</span><span style="mso-bidi-font-size: 15.0pt">(</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 15.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">各相关服务加载完毕</span><span style="mso-bidi-font-size: 15.0pt">)</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"><span style="mso-tab-count: 1 dotted"> </span></span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen">10</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"></span></a></span></span><span lang="EN-US">
<p>&nbsp;</p>
</span></p>
<p class="MsoToc3" style="tab-stops: right dotted 414.8pt"><span class="MsoHyperlink"><span lang="EN-US"><a href="http://man.chinaunix.net/newsoft/jboss.htm#_Toc124845796"><span style="mso-bidi-font-size: 15.0pt">2.2.8</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 15.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">日志配置，配置</span><span style="mso-bidi-font-size: 15.0pt">log4j.xml</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"><span style="mso-tab-count: 1 dotted"> </span></span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen">11</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"></span></a></span></span><span lang="EN-US">
<p>&nbsp;</p>
</span></p>
<p class="MsoToc3" style="tab-stops: right dotted 414.8pt"><span class="MsoHyperlink"><span lang="EN-US"><a href="http://man.chinaunix.net/newsoft/jboss.htm#_Toc124845797"><span style="mso-bidi-font-size: 15.0pt">2.2.9</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 15.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">配置</span><span style="mso-bidi-font-size: 15.0pt">contentType</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 15.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">及</span><span style="mso-bidi-font-size: 15.0pt">charset</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 15.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span><span style="mso-bidi-font-size: 15.0pt">TOMCAT5.0</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 15.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下</span><span style="mso-bidi-font-size: 15.0pt">JSP</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 15.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">统一配置</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"><span style="mso-tab-count: 1 dotted">... </span></span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen">12</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"></span></a></span></span><span lang="EN-US">
<p>&nbsp;</p>
</span></p>
<p class="MsoToc2" style="tab-stops: right dotted 414.8pt"><span class="MsoHyperlink"><span lang="EN-US"><a href="http://man.chinaunix.net/newsoft/jboss.htm#_Toc124845798">2.3 JVM<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">最小、最大内存的设定</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"><span style="mso-tab-count: 1 dotted">... </span></span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen">13</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"></span></a></span></span><span lang="EN-US">
<p>&nbsp;</p>
</span></p>
<p class="MsoToc2" style="tab-stops: right dotted 414.8pt"><span class="MsoHyperlink"><span lang="EN-US"><a href="http://man.chinaunix.net/newsoft/jboss.htm#_Toc124845799">2.4 OS<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">字符集问题</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"><span style="mso-tab-count: 1 dotted">... </span></span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen">13</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"></span></a></span></span><span lang="EN-US">
<p>&nbsp;</p>
</span></p>
<p class="MsoToc2" style="tab-stops: right dotted 414.8pt"><span class="MsoHyperlink"><span lang="EN-US"><a href="http://man.chinaunix.net/newsoft/jboss.htm#_Toc124845800">2.5 JBOSS<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">服务的启动、停止</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"><span style="mso-tab-count: 1 dotted">... </span></span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen">13</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"></span></a></span></span><span lang="EN-US">
<p>&nbsp;</p>
</span></p>
<p class="MsoToc1" style="tab-stops: right dotted 414.8pt"><span class="MsoHyperlink"><span lang="EN-US"><a href="http://man.chinaunix.net/newsoft/jboss.htm#_Toc124845801"><span style="FONT-FAMILY: 华文中宋; mso-fareast-font-family: 宋体; mso-bidi-font-family: Arial">3.</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: 华文中宋; mso-hansi-font-family: 华文中宋">附</span><span style="FONT-FAMILY: 华文中宋; mso-fareast-font-family: 宋体; mso-bidi-font-family: Arial">apache https </span><span style="FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: 华文中宋; mso-hansi-font-family: 华文中宋">服务器的安装</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"><span style="mso-tab-count: 1 dotted">... </span></span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen">14</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"></span></a></span></span><span lang="EN-US">
<p>&nbsp;</p>
</span></p>
<h1><span lang="EN-US"><a name="_Toc124845774">1 .Apache2.0</a></span><span style="mso-bookmark: _Toc124845774"><span style="FONT-FAMILY: 华文中宋; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">及连接器</span><span lang="EN-US">jk1.2</span></span><span style="mso-bookmark: _Toc124845774"><span style="FONT-FAMILY: 华文中宋; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的编译部署</span></span></h1>
<h2><a name="_Toc124845775"><span lang="EN-US">1.1下载相关软件包</span></a></h2>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 16.0pt">我们需要软件及其版本说明<span lang="EN-US">:
<p>&nbsp;</p>
</span></span></p>
<p class="MsoNormal" style="MARGIN-LEFT: 39pt; TEXT-INDENT: -18pt; tab-stops: list 39.0pt; mso-list: l15 level2 lfo15"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">a)<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 16.0pt">apache服务器:</span><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">httpd-2.0.54
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">下载地址<span lang="EN-US">:</span></span><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 16.0pt"> <a href="http://httpd.apache.org/download.cgi">http://httpd.apache.org/download.cgi</a></span><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 16.0pt">b)apache/tomcat连接器:jk1.2.14,这里选用1.2.*版本,虽然有jk2.0,但据相关文档介绍,jk2.0已不再开发,而jk1.2.*版本使用范围很广,久经考验了,稳定性有保障.两个版本系列对应的配置也有很大的变化,故而这里选用jk1.2系列
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 16.0pt">下载地址<span lang="EN-US">:
<p>&nbsp;</p>
</span></span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 16.0pt"><a href="http://www.apache.org/dist/tomcat/tomcat-connectors/jk/source/jk-1.2.14/">http://www.apache.org/dist/tomcat/tomcat-connectors/jk/source/jk-1.2.14/</a>
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 16.0pt">安装<span lang="EN-US">apache本文档依据的版本是</span></span><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">httpd-2.0.54,下载Unix Source，下文介绍主要以linux OS为主，间或会介绍一点windows下安装的细节。
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">我们的目标是用<span lang="EN-US">apache来做前端的web服务器，后端用jboss3.2.6，实现负载均衡。
<p>&nbsp;</p>
</span></span></p>
<h2><a name="_Toc119827938"></a><a name="_Toc120010813"></a><a name="_Toc124845776"><span style="mso-bookmark: _Toc120010813"><span style="mso-bookmark: _Toc119827938"><span lang="EN-US">1.2 apache2.0的编译安装</span></span></span></a></h2>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">下载完源程序包之后，放到一个临时目录中，如<span lang="EN-US"> /home/software/:
<p>&nbsp;</p>
</span></span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="BACKGROUND: black"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: yellow; FONT-FAMILY: 宋体">#cd /home/software/
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="BACKGROUND: black"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: yellow; FONT-FAMILY: 宋体">#tar zxvf httpd-2.0.54.tar.gz
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="BACKGROUND: black"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: yellow; FONT-FAMILY: 宋体">#cd /home/software/httpd-2.0.54
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="BACKGROUND: black"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: yellow; FONT-FAMILY: 宋体">#./configure --enable-MODULE=shared<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>--enable-so --with-mpm=worker
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="BACKGROUND: black"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: yellow; FONT-FAMILY: 宋体">#make
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="BACKGROUND: black"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: yellow; FONT-FAMILY: 宋体">#make install</span><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">参数解释：</span><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><code><b><span lang="EN" style="FONT-SIZE: 12pt; COLOR: #003366; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-ansi-language: EN">--enable-</span></b></code><var><b><span lang="EN" style="FONT-SIZE: 12pt; COLOR: #003366; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 黑体; mso-ansi-language: EN">MODULE</span></b></var><code><b><span lang="EN" style="FONT-SIZE: 12pt; COLOR: #003366; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-ansi-language: EN">=shared</span></b></code><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"> :该参数是使得相关的模块编译为可动态加载模块(DSO模式)，如果不选用该选项，apache默认的选项是:</span><code><b><span lang="EN" style="FONT-SIZE: 12pt; COLOR: #003366; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-ansi-language: EN"> --enable-</span></b></code><var><b><span lang="EN" style="FONT-SIZE: 12pt; COLOR: #003366; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 黑体; mso-ansi-language: EN">MODULE</span></b></var><code><b><span lang="EN" style="FONT-SIZE: 12pt; COLOR: #003366; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-ansi-language: EN">=static,</span></b></code><code><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表示将相关的模块静态编译。</span></code><code><span lang="EN-US" style="FONT-SIZE: 12pt; mso-fareast-font-family: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
<p>&nbsp;</p>
</span></code></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><code><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">两者的区别是：前者使得可以需要更新、重编译某模块</span></code><code><span lang="EN-US" style="FONT-SIZE: 12pt; mso-fareast-font-family: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">(</span></code><code><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">核心模块不受限于这种模式，如</span></code><code><span lang="EN-US" style="FONT-SIZE: 12pt; mso-fareast-font-family: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">core</span></code><code><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span></code><code><span lang="EN-US" style="FONT-SIZE: 12pt; mso-fareast-font-family: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">mod_so)</span></code><code><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">时，只需单独编译该模块即可，而不需重新编译整个</span></code><code><span lang="EN-US" style="FONT-SIZE: 12pt; mso-fareast-font-family: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">apache source code</span></code><code><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，做到单独升级。前者弊端是导致</span></code><code><span lang="EN-US" style="FONT-SIZE: 12pt; mso-fareast-font-family: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">apache</span></code><code><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">启动时慢</span></code><code><span lang="EN-US" style="FONT-SIZE: 12pt; mso-fareast-font-family: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">20</span></code><code><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">％左右，在运行阶段慢</span></code><code><span lang="EN-US" style="FONT-SIZE: 12pt; mso-fareast-font-family: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">5</span></code><code><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">％左右</span></code><code><span lang="EN-US" style="FONT-SIZE: 12pt; mso-fareast-font-family: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">,</span></code><code><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">另外</span></code><code><span lang="EN-US" style="FONT-SIZE: 12pt; mso-fareast-font-family: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">DSO</span></code><code><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">模式不是所有</span></code><code><span lang="EN-US" style="FONT-SIZE: 12pt; mso-fareast-font-family: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">OS</span></code><code><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">都支持的，和软件环境有关系。</span></code><code><span lang="EN-US" style="FONT-SIZE: 12pt; mso-fareast-font-family: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
<p>&nbsp;</p>
</span></code></p>
<p class="MsoNormal"><code><b><span lang="EN" style="FONT-SIZE: 12pt; COLOR: #003366; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-ansi-language: EN">--enable-so</span></b></code><code><b><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #003366; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.5pt"><span style="mso-spacerun: yes">&nbsp; </span>:</span></b></code><code><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">该参数表示支持用</span></code><code><span lang="EN-US" style="FONT-SIZE: 12pt; mso-fareast-font-family: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">mod_so</span></code><code><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">模块提供的功能</span></code><code><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-ansi-language: EN">，</span></code><code><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">用</span></code><code><span lang="EN-US" style="FONT-SIZE: 12pt; mso-fareast-font-family: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">LoadModule</span></code><code><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在</span></code><code><span lang="EN-US" style="FONT-SIZE: 12pt; mso-fareast-font-family: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">httpd.conf</span></code><code><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件或包含的</span></code><code><span lang="EN-US" style="FONT-SIZE: 12pt; mso-fareast-font-family: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">conf</span></code><code><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件中动态加载某个模块。</span></code><code><span lang="EN-US" style="FONT-SIZE: 12pt; mso-fareast-font-family: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
<p>&nbsp;</p>
</span></code></p>
<p class="MsoNormal"><code><span lang="EN-US" style="FONT-SIZE: 12pt; mso-fareast-font-family: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&nbsp;
<p>&nbsp;</p>
</span></code></p>
<p class="MsoNormal"><code><b><span lang="EN" style="FONT-SIZE: 12pt; COLOR: #003366; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-ansi-language: EN">--with-mpm=worker</span></b></code><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>：该参数是配置apache将<span style="BACKGROUND: #d9d9d9; COLOR: red; mso-shading: white; mso-pattern: gray-15 auto">以何种模式编译的</span>。Apache网站文档指出不同操作系统下的不同的默认模式.
<p>&nbsp;</p>
</span></p>
<table style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; MARGIN-LEFT: 45pt; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-padding-alt: 1.5pt 1.5pt 1.5pt 1.5pt; mso-border-alt: solid #AAAAAA .75pt" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 2.4pt; BORDER-TOP: #aaaaaa 0.75pt solid; PADDING-LEFT: 2.4pt; PADDING-BOTTOM: 1.2pt; BORDER-LEFT: #aaaaaa 0.75pt solid; PADDING-TOP: 1.2pt; BORDER-BOTTOM: medium none" valign="top">
            <p class="MsoNormal" style="MARGIN-TOP: 6pt; LINE-HEIGHT: 15.6pt"><span lang="EN-US" style="COLOR: #003366; FONT-FAMILY: Arial">BeOS</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #003366; FONT-FAMILY: Arial">
            <p>&nbsp;</p>
            </span></p>
            </td>
            <td style="BORDER-RIGHT: #aaaaaa 0.75pt solid; PADDING-RIGHT: 2.4pt; BORDER-TOP: #aaaaaa 0.75pt solid; PADDING-LEFT: 2.4pt; PADDING-BOTTOM: 1.2pt; BORDER-LEFT: medium none; PADDING-TOP: 1.2pt; BORDER-BOTTOM: medium none" valign="top">
            <p class="MsoNormal" style="MARGIN-TOP: 6pt; LINE-HEIGHT: 15.6pt"><code><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: saddlebrown; FONT-FAMILY: 'Courier New'"><a href="http://httpd.apache.org/docs/2.0/mod/beos.html"><span style="FONT-SIZE: 10.5pt; mso-bidi-font-size: 12.0pt">beos</span></a></span></code><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #003366; FONT-FAMILY: Arial">
            <p>&nbsp;</p>
            </span></p>
            </td>
        </tr>
        <tr>
            <td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 2.4pt; BORDER-TOP: medium none; PADDING-LEFT: 2.4pt; PADDING-BOTTOM: 1.2pt; BORDER-LEFT: #aaaaaa 0.75pt solid; PADDING-TOP: 1.2pt; BORDER-BOTTOM: medium none" valign="top">
            <p class="MsoNormal" style="MARGIN-TOP: 6pt; LINE-HEIGHT: 15.6pt"><span lang="EN-US" style="COLOR: #003366; FONT-FAMILY: Arial">Netware</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #003366; FONT-FAMILY: Arial">
            <p>&nbsp;</p>
            </span></p>
            </td>
            <td style="BORDER-RIGHT: #aaaaaa 0.75pt solid; PADDING-RIGHT: 2.4pt; BORDER-TOP: medium none; PADDING-LEFT: 2.4pt; PADDING-BOTTOM: 1.2pt; BORDER-LEFT: medium none; PADDING-TOP: 1.2pt; BORDER-BOTTOM: medium none" valign="top">
            <p class="MsoNormal" style="MARGIN-TOP: 6pt; LINE-HEIGHT: 15.6pt"><code><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: saddlebrown; FONT-FAMILY: 'Courier New'"><a href="http://httpd.apache.org/docs/2.0/mod/mpm_netware.html"><span style="FONT-SIZE: 10.5pt; mso-bidi-font-size: 12.0pt">mpm_netware</span></a></span></code><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #003366; FONT-FAMILY: Arial">
            <p>&nbsp;</p>
            </span></p>
            </td>
        </tr>
        <tr>
            <td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 2.4pt; BORDER-TOP: medium none; PADDING-LEFT: 2.4pt; PADDING-BOTTOM: 1.2pt; BORDER-LEFT: #aaaaaa 0.75pt solid; PADDING-TOP: 1.2pt; BORDER-BOTTOM: medium none" valign="top">
            <p class="MsoNormal" style="MARGIN-TOP: 6pt; LINE-HEIGHT: 15.6pt"><span lang="EN-US" style="COLOR: #003366; FONT-FAMILY: Arial">OS/2</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #003366; FONT-FAMILY: Arial">
            <p>&nbsp;</p>
            </span></p>
            </td>
            <td style="BORDER-RIGHT: #aaaaaa 0.75pt solid; PADDING-RIGHT: 2.4pt; BORDER-TOP: medium none; PADDING-LEFT: 2.4pt; PADDING-BOTTOM: 1.2pt; BORDER-LEFT: medium none; PADDING-TOP: 1.2pt; BORDER-BOTTOM: medium none" valign="top">
            <p class="MsoNormal" style="MARGIN-TOP: 6pt; LINE-HEIGHT: 15.6pt"><code><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: saddlebrown; FONT-FAMILY: 'Courier New'"><a href="http://httpd.apache.org/docs/2.0/mod/mpmt_os2.html"><span style="FONT-SIZE: 10.5pt; mso-bidi-font-size: 12.0pt">mpmt_os2</span></a></span></code><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #003366; FONT-FAMILY: Arial">
            <p>&nbsp;</p>
            </span></p>
            </td>
        </tr>
        <tr>
            <td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 2.4pt; BORDER-TOP: medium none; PADDING-LEFT: 2.4pt; PADDING-BOTTOM: 1.2pt; BORDER-LEFT: #aaaaaa 0.75pt solid; PADDING-TOP: 1.2pt; BORDER-BOTTOM: medium none" valign="top">
            <p class="MsoNormal" style="MARGIN-TOP: 6pt; LINE-HEIGHT: 15.6pt"><span lang="EN-US" style="COLOR: #003366; FONT-FAMILY: Arial">Unix</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #003366; FONT-FAMILY: Arial">
            <p>&nbsp;</p>
            </span></p>
            </td>
            <td style="BORDER-RIGHT: #aaaaaa 0.75pt solid; PADDING-RIGHT: 2.4pt; BORDER-TOP: medium none; PADDING-LEFT: 2.4pt; PADDING-BOTTOM: 1.2pt; BORDER-LEFT: medium none; PADDING-TOP: 1.2pt; BORDER-BOTTOM: medium none" valign="top">
            <p class="MsoNormal" style="MARGIN-TOP: 6pt; LINE-HEIGHT: 15.6pt"><code><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: saddlebrown; FONT-FAMILY: 'Courier New'"><a href="http://httpd.apache.org/docs/2.0/mod/prefork.html"><span style="FONT-SIZE: 10.5pt; mso-bidi-font-size: 12.0pt">prefork</span></a></span></code><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #003366; FONT-FAMILY: Arial">
            <p>&nbsp;</p>
            </span></p>
            </td>
        </tr>
        <tr>
            <td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 2.4pt; BORDER-TOP: medium none; PADDING-LEFT: 2.4pt; PADDING-BOTTOM: 1.2pt; BORDER-LEFT: #aaaaaa 0.75pt solid; PADDING-TOP: 1.2pt; BORDER-BOTTOM: #aaaaaa 0.75pt solid" valign="top">
            <p class="MsoNormal" style="MARGIN-TOP: 6pt; LINE-HEIGHT: 15.6pt"><span lang="EN-US" style="COLOR: #003366; FONT-FAMILY: Arial">Windows</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #003366; FONT-FAMILY: Arial">
            <p>&nbsp;</p>
            </span></p>
            </td>
            <td style="BORDER-RIGHT: #aaaaaa 0.75pt solid; PADDING-RIGHT: 2.4pt; BORDER-TOP: medium none; PADDING-LEFT: 2.4pt; PADDING-BOTTOM: 1.2pt; BORDER-LEFT: medium none; PADDING-TOP: 1.2pt; BORDER-BOTTOM: #aaaaaa 0.75pt solid" valign="top">
            <p class="MsoNormal" style="MARGIN-TOP: 6pt; LINE-HEIGHT: 15.6pt"><code><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: saddlebrown; FONT-FAMILY: 'Courier New'"><a href="http://httpd.apache.org/docs/2.0/mod/mpm_winnt.html"><span style="FONT-SIZE: 10.5pt; mso-bidi-font-size: 12.0pt">mpm_winnt</span></a></span></code><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #003366; FONT-FAMILY: Arial">
            <p>&nbsp;</p>
            </span></p>
            </td>
        </tr>
    </tbody>
</table>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在安装完</span><span lang="EN-US" style="FONT-SIZE: 12pt">apache</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">后，在类</span><span lang="EN-US" style="FONT-SIZE: 12pt">unix OS</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下，可以在</span><span lang="EN-US" style="FONT-SIZE: 12pt">./bin</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">目录下用</span><span lang="EN-US" style="FONT-SIZE: 12pt">./httpd &ndash;l </span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来看到编译时指定的</span><span lang="EN-US" style="FONT-SIZE: 12pt">mpm</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">参数，他们对应着不同的</span><span lang="EN-US" style="FONT-SIZE: 12pt">.c</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">模块。</span><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在</span><span lang="EN-US" style="FONT-SIZE: 12pt">windows</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">环境下，可以用</span><span lang="EN-US" style="FONT-SIZE: 12pt">./bin/Apache &ndash;l </span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来查看相关被编译的模块。</span><span lang="EN-US" style="FONT-SIZE: 12pt">Win</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">环境下默认是</span><span lang="EN-US" style="FONT-SIZE: 12pt"> mpm_winnt,</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">则可以看到</span><span lang="EN-US" style="FONT-SIZE: 12pt">:
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="BACKGROUND: black"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: yellow; FONT-FAMILY: Verdana">C:\Apache Group\Apache2\bin&gt;apache -l
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="BACKGROUND: black"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: yellow; FONT-FAMILY: Verdana">Compiled in modules:
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="BACKGROUND: black"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: yellow; FONT-FAMILY: Verdana"><span style="mso-spacerun: yes">&nbsp; </span>core.c
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="BACKGROUND: black"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: yellow; FONT-FAMILY: Verdana"><span style="mso-spacerun: yes">&nbsp; </span>mod_win32.c
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="BACKGROUND: black"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: yellow; FONT-FAMILY: Verdana"><span style="mso-spacerun: yes">&nbsp; </span>mpm_winnt.c
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="BACKGROUND: black"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: yellow; FONT-FAMILY: Verdana"><span style="mso-spacerun: yes">&nbsp; </span>http_core.c
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="BACKGROUND: black"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: yellow; FONT-FAMILY: Verdana"><span style="mso-spacerun: yes">&nbsp; </span>mod_so.c</span><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">各模式的区别，更具体的描述请参见</span><span lang="EN-US" style="FONT-SIZE: 12pt"><a href="http://httpd.apache.org/docs/2.0/mpm.html">http://httpd.apache.org/docs/2.0/mpm.html</a></span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，下面只简单说明一下，</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: blue">worker</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">模式是以</span><span lang="EN-US" style="FONT-SIZE: 12pt">process/thread</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">混和模式运行的，如果</span><span lang="EN-US" style="FONT-SIZE: 12pt">WEB</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">服务器的期望负载较大的话，则推荐使用</span><span lang="EN-US" style="FONT-SIZE: 12pt">worker</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">模式，如果需要一个稳定性考虑为优先的服务器的话，推荐使用</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: blue">prefork</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">模式</span><span lang="EN-US" style="FONT-SIZE: 12pt">,</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">同样的负载条件下，</span><span lang="EN-US" style="FONT-SIZE: 12pt">prefork</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">模式的</span><span lang="EN-US" style="FONT-SIZE: 12pt">apache</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">占用的内存会大很多。</span><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">默认安装的路径为</span><span lang="EN-US" style="FONT-SIZE: 12pt">: /usr/local/apache2/,</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果要指定安装路径，则用参数</span><code><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #003366; FONT-FAMILY: 'Courier New'">./configure --prefix=</span></code><em><span lang="EN-US" style="COLOR: #003366; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 黑体">PREFIX</span></em><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来指定安装路径，</span><span lang="EN-US" style="FONT-SIZE: 12pt">PREFIX</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为指定的绝对路径。</span><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">可以用</span><em><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: navy; FONT-FAMILY: 宋体">PREFIX</span></em><code><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: navy; FONT-FAMILY: 宋体; mso-fareast-font-family: 黑体">/bin/apachectl start</span></code><code><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-fareast-font-family: 黑体"> </span></code><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来测试是否可以正常启动服务。</span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">可以用</span><em><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: navy; FONT-FAMILY: 宋体">PREFIX/bin/httpd &ndash;t</span></em><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来测试</span><span lang="EN-US" style="FONT-SIZE: 12pt">http.conf</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的语法是否合法。</span><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></p>
<p class="MsoToc1" style="LINE-HEIGHT: normal"><span lang="EN-US">&nbsp;
<p>&nbsp;</p>
</span></p>
<h2><a name="_Toc119827939"></a><a name="_Toc120010814"></a><a name="_Toc124845777"><span style="mso-bookmark: _Toc120010814"><span style="mso-bookmark: _Toc119827939"><span lang="EN-US">1.3 jk1.2.14的编译安装</span></span></span></a></h2>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">下载完源程序包之后，放到一个临时目录中，如<span lang="EN-US"> /home/software/:
<p>&nbsp;</p>
</span></span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="BACKGROUND: black"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: yellow; FONT-FAMILY: 宋体">1、#cd /home/software/
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="BACKGROUND: black"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: yellow; FONT-FAMILY: 宋体">2、#tar zxvf jakarta-tomcat-connectors-1.2.14.1-src.tar.gz
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="BACKGROUND: black"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: yellow; FONT-FAMILY: 宋体">3、#cd /home/software/jakarta-tomcat-connectors-1.2.14.1-src/jk/native
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="BACKGROUND: black"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: yellow; FONT-FAMILY: 宋体">4、# ./configure --with-apxs=/usr/local/apache2/bin/apxs
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="BACKGROUND: black"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: yellow; FONT-FAMILY: 宋体">5、#make
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="BACKGROUND: black"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: yellow; FONT-FAMILY: 宋体">6、# cp ./apache-2.0/mod_jk.so /usr/local/apache2/modules</span><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">查看<span lang="EN-US">&hellip;/native目录，会看到有<i><span style="COLOR: navy">apache-1.3</span></i>以及<i><span style="COLOR: navy">apache-2.0目录，</span></i><span style="COLOR: black">在第4步</span>，用<i><span style="COLOR: navy">--with-apxs</span></i>参数来指定扩展程序apxs的位置，make程序会根据提供的apxs的版本来辨别需要针对apache的哪个版本来生成mod_jk.so,如本文所示例，程序将知道需要为apache2.0生成mod_jk.so,因此编译工作将会在<i><span style="COLOR: #003366">...jk/native/apache-2.0</span></i>中进行，浏览编译日志信息会看到这些信息。
<p>&nbsp;</p>
</span></span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">第<span lang="EN-US">6步是将编译后的so拷贝至apache的安装路径的modules目录中,应该根据安装路径去调整上述脚本中的路径。
<p>&nbsp;</p>
</span></span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">另外可以将<span lang="EN-US">mod_jk.so静态连接到apache2.0中，然后再一次编译apache2.0，在上述脚本中加上参数:
<p>&nbsp;</p>
</span></span></p>
<p class="MsoNormal"><code><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #003366; FONT-FAMILY: 宋体; mso-fareast-font-family: 黑体">./configure --with-apache=/home/software/httpd-2.0.54
<p>&nbsp;</p>
</span></i></code></p>
<p class="MsoNormal"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">具体请参阅<span lang="EN-US">:
<p>&nbsp;</p>
</span></span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><a href="http://tomcat.apache.org/connectors-doc/howto/apache.html">http://tomcat.apache.org/connectors-doc/howto/apache.html</a>
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">以上工作就算结束了编译、安装工作，下面将进行参数调整，部署工作。</span><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">&nbsp;
<p>&nbsp;</p>
</span></p>
<h2><a name="OLE_LINK1"></a><a name="_Toc120010815"></a><a name="_Toc124845778"><span style="mso-bookmark: _Toc120010815"><span style="mso-bookmark: OLE_LINK1"><span lang="EN-US">1.4 apache及jk1.2的参数配置</span></span></span></a><span style="mso-bookmark: OLE_LINK1"></span></h2>
<span style="mso-bookmark: OLE_LINK1"></span>
<h3><a name="_Toc120010816"></a><a name="_Toc124845779"><span style="mso-bookmark: _Toc120010816"><span lang="EN-US">1.4.1.httpd.conf</span></span></a><span style="mso-bookmark: _Toc124845779"><span style="mso-bookmark: _Toc120010816"><span style="FONT-FAMILY: 宋体">的修改</span></span></span><span lang="EN-US" style="FONT-FAMILY: 宋体">
<p>&nbsp;</p>
</span></h3>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">该文件的路径位于</span><span lang="EN-US">$APACHE-HOME/conf</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">上述编译过程中我们选用的</span><span lang="EN-US" style="FONT-SIZE: 12pt">worker</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">模式，因此我们将修改</span><span lang="EN-US" style="FONT-SIZE: 12pt">worker</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">模块的配置</span><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US">&lt;IfModule worker.c&gt;</span></p>
<p class="MsoNormal"><span lang="EN-US">StartServers<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>4<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #003366">#</span></span><span style="FONT-SIZE: 12pt; COLOR: #003366; FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">最初建立进程的数量</span></p>
<p class="MsoNormal"><span lang="EN-US">ServerLimit<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>24<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>#</span><span style="FONT-SIZE: 12pt; COLOR: #003366; FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">进程建立的最大数量，硬限制</span></p>
<p class="MsoNormal"><span lang="EN-US">ThreadLimit<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>128<span style="mso-spacerun: yes">&nbsp; </span></span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #003366; mso-fareast-font-family: 楷体_GB2312">#</span><span style="FONT-SIZE: 12pt; COLOR: #003366; FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">每一进程能创建线程的最大数量，硬限制，该参数建议</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #003366; mso-fareast-font-family: 楷体_GB2312">#</span><span style="FONT-SIZE: 12pt; COLOR: #003366; FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">和</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #003366; mso-fareast-font-family: 楷体_GB2312">ThreadsPerChild</span><span style="FONT-SIZE: 12pt; COLOR: #003366; FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">一致，如果</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #003366; mso-fareast-font-family: 楷体_GB2312">ThreadLimit &gt; ThreadsPerChild</span><span style="FONT-SIZE: 12pt; COLOR: #003366; FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">的话，会造成不</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #003366; mso-fareast-font-family: 楷体_GB2312">##</span><span style="FONT-SIZE: 12pt; COLOR: #003366; FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">必要的内存消耗。</span><span lang="EN-US" style="COLOR: #003366">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US">MaxClients<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>3072<span style="mso-spacerun: yes">&nbsp; </span>#</span><span style="FONT-SIZE: 12pt; COLOR: #003366; FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">同时可以得到处理的客户端的最大数量</span></p>
<p class="MsoNormal"><span lang="EN-US">MinSpareThreads<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>100<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>#</span><span style="FONT-SIZE: 12pt; COLOR: #003366; FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">所有进程中空闲线程的总数最小数值</span></p>
<p class="MsoNormal"><span lang="EN-US">MaxSpareThreads<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>200 <span style="mso-spacerun: yes">&nbsp;&nbsp;</span></span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #003366; mso-fareast-font-family: 楷体_GB2312">#</span><span style="FONT-SIZE: 12pt; COLOR: #003366; FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">所有进程中空闲线程的总数最大数值</span></p>
<p class="MsoNormal"><span lang="EN-US">ThreadsPerChild<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </span>128<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>#</span><span style="FONT-SIZE: 12pt; COLOR: #003366; FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">每个子进程可以建立的固定数量的线程</span></p>
<p class="MsoNormal"><span lang="EN-US">MaxRequestsPerChild<span style="mso-spacerun: yes">&nbsp; </span>0<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #003366; mso-fareast-font-family: 楷体_GB2312">#</span><span style="FONT-SIZE: 12pt; COLOR: #003366; FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">用于控制服务器建立和结束进程的频率</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #003366; mso-fareast-font-family: 楷体_GB2312">,</span><span style="FONT-SIZE: 12pt; COLOR: #003366; FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">为</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #003366; mso-fareast-font-family: 楷体_GB2312">0</span><span style="FONT-SIZE: 12pt; COLOR: #003366; FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">表示没有</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #003366; mso-fareast-font-family: 楷体_GB2312">#</span><span style="FONT-SIZE: 12pt; COLOR: #003366; FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">限制，但在</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #003366; mso-fareast-font-family: 楷体_GB2312">solaris OS</span><span style="FONT-SIZE: 12pt; COLOR: #003366; FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">下该值可能会出错，可以设置为</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #003366; mso-fareast-font-family: 楷体_GB2312">1000</span><span style="FONT-SIZE: 12pt; COLOR: #003366; FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">或</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #003366; mso-fareast-font-family: 楷体_GB2312">2000</span><span style="FONT-SIZE: 12pt; COLOR: #003366; FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">。根据系统</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #003366; mso-fareast-font-family: 楷体_GB2312">#</span><span style="FONT-SIZE: 12pt; COLOR: #003366; FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">的并发负载吧。</span></p>
<p class="MsoNormal"><span lang="EN-US">&lt;/IfModule&gt;</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在</span><span lang="EN-US">httpd.conf</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件的最后一行加上：</span><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #003366">Include conf/mod_jk2.conf</span></i></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">另外还需修改</span><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: navy">#ServerName www.example.com:80</span></i><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为</span><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: navy">ServerName 127.0.0.1:80
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: navy">&nbsp;
<p>&nbsp;</p>
</span></i></p>
<h3><a name="_Toc120010817"></a><a name="_Toc124845780"><span style="mso-bookmark: _Toc120010817"><span lang="EN-US">1.4.2.mod_jk2.conf</span></span></a><span style="mso-bookmark: _Toc124845780"><span style="mso-bookmark: _Toc120010817"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的所有内容</span></span></span></h3>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">新建该文件，并将该文件置于</span><span lang="EN-US">$APACHE-HOME/conf</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: navy; FONT-FAMILY: Verdana">LoadModule jk_module modules/mod_jk.so
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: navy; FONT-FAMILY: Verdana">JkWorkersFile conf/workers2.properties
<p>&nbsp;</p>
</span></i></p>
<h4><span lang="EN-US">JkLogFile logs/mod_jk.log</span></h4>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Verdana"># Set the jk log level [debug/error/info]
<p>&nbsp;</p>
</span></p>
<h4><span lang="EN-US">JkLogLevel info </span></h4>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Verdana"># Select the log format
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Verdana">JkLogStampFormat &quot;[%a %b %d %H:%M:%S %Y] &quot;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Verdana"># JkOptions indicate to send SSL KEY SIZE,
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Verdana">JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Verdana"># JkRequestLogFormat set the request format
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Verdana">JkRequestLogFormat &quot;%w %V %T&quot;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: navy; FONT-FAMILY: Verdana">JkMount /* loadbalancer
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Verdana">#apache will serve the static picture.
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Verdana">#</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">以下命令意味着所有的图片将由</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Verdana">APACHE</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">解析</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Verdana">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: navy; FONT-FAMILY: Verdana">JkUnMount /*.jpg loadbalancer<span style="mso-spacerun: yes">&nbsp; </span>
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: navy; FONT-FAMILY: Verdana">JkUnMount /*.gif loadbalancer
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: navy; FONT-FAMILY: Verdana">JkUnMount /*.swf loadbalancer
<p>&nbsp;</p>
</span></i></p>
<h5><span lang="EN-US">JkUnMount /*.bmp loadbalancer</span></h5>
<p class="MsoNormal"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: navy; FONT-FAMILY: Verdana">JkUnMount /*.png loadbalancer</span></i></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在上述配置中，是配置所有图片由</span><span lang="EN-US" style="FONT-SIZE: 12pt">APACHE</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来解析，因此我们需要将项目中的所有图片均拷贝到</span><span lang="EN-US" style="FONT-SIZE: 12pt">$APACHE-HOME/htdocs/</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下，如果你的部署的项目</span><span lang="EN-US" style="FONT-SIZE: 12pt">(</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">应用</span><span lang="EN-US" style="FONT-SIZE: 12pt">)</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，在访问时需要输入前缀</span><span lang="EN-US" style="FONT-SIZE: 12pt">,</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如</span><span lang="EN-US" style="FONT-SIZE: 12pt"><a href="http://www.ddd.com/TestCrm/login.do">http://www.DDD.com/<b>TestCrm</b>/login.do</a></span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，则请注意，在</span><span lang="EN-US" style="FONT-SIZE: 12pt">$APACHE-HOME/htdocs/</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下需要建一个目录&ldquo;</span><span lang="EN-US" style="FONT-SIZE: 12pt">TestCrm</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&rdquo;</span><span lang="EN-US" style="FONT-SIZE: 12pt">,</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">然后按照你项目中图片所在的路径，连同路径中所有目录一并考入</span><span lang="EN-US" style="FONT-SIZE: 12pt">TestCrm</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">目录，例如你的图片位于</span><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">&hellip;./TestCrm.war/images/1.jpg,</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">那么为了</span><span lang="EN-US" style="FONT-SIZE: 12pt">APACHE</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">能找到图片，则你在</span><span lang="EN-US" style="FONT-SIZE: 12pt">APACHE</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中的图片位置应是</span><span lang="EN-US" style="FONT-SIZE: 12pt">$APACHE-HOME/htdocs/TestCrm/images/1.jpg</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></p>
<h3><a name="_Toc120010818"></a><a name="_Toc124845781"><span style="mso-bookmark: _Toc120010818"><span lang="EN-US">1.4.3.workers2.properties</span></span></a><span style="mso-bookmark: _Toc124845781"><span style="mso-bookmark: _Toc120010818"><span style="FONT-FAMILY: 宋体">的所有内容</span></span></span><span lang="EN-US" style="FONT-FAMILY: 宋体">
<p>&nbsp;</p>
</span></h3>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">新建该文件，并将该文件置于</span><span lang="EN-US">$APACHE-HOME/conf</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">请注意：下列配置中的</span><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: navy">server105</span></i><span lang="EN-US">,</span><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: navy">server106</span></i><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">等紫色的斜体字符串都是根据部署的</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black">jboss</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的信息来部署的</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black">,</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">其中</span><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: navy">server105</span></i><span lang="EN-US">,</span><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: navy">server106</span></i><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">需要在</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black">jboss</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的相关配置中修改，具体详见下文介绍。对应的</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black">IP</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">地址应改为</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black">JBOSS</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">所在的</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black">server IP</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">#以下为</span><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">workers2.propertie的内容<span style="COLOR: black">
<p>&nbsp;</p>
</span></span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">worker.list=<i><span style="COLOR: navy">loadbalancer</span></i>,<span style="COLOR: navy">server105,server106</span>
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt"># Define the first node...
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">worker.<i><span style="COLOR: navy">server105</span></i>.port=8009
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">worker.<i><span style="COLOR: navy">server105</span></i>.host=<i><span style="COLOR: navy">192.10.12.105</span></i>
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">worker.<i><span style="COLOR: navy">server105</span></i>.type=ajp13
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">worker.<i><span style="COLOR: navy">server105</span></i>.lbfactor=1
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">#worker.<i><span style="COLOR: navy">server105</span></i>.local_worker=1
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">worker.<i><span style="COLOR: navy">server105</span></i>.cachesize=100
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt"># Define the 2nd node...
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">worker.<i><span style="COLOR: navy">server106</span></i>.port=8009
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">worker.<i><span style="COLOR: navy">server106</span></i>.host=<i><span style="COLOR: navy">192.10.12.106</span></i>
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">worker.<i><span style="COLOR: navy">server106</span></i>.type=ajp13
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">worker.<i><span style="COLOR: navy">server106</span></i>.lbfactor=1
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">#worker.<i><span style="COLOR: navy">server106</span></i>.local_worker=1
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">worker.<i><span style="COLOR: navy">server106</span></i>.cachesize=100
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt"># Now we define the load-balancing behaviour
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">worker.<i><span style="COLOR: navy">loadbalancer</span></i>.type=lb
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">worker.<i><span style="COLOR: navy">loadbalancer</span></i>.balanced_workers=<i><span style="COLOR: navy">server105</span></i>,<i><span style="COLOR: navy">server106</span></i>
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">worker.<i><span style="COLOR: navy">loadbalancer</span></i>.sticky_session=1
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">说明：</span><span lang="EN-US" style="FONT-SIZE: 12pt">worker.<i><span style="COLOR: navy">loadbalancer</span></i>.sticky_session=1</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">参数的设定，意味着一旦用户通过</span><span lang="EN-US" style="FONT-SIZE: 12pt">APACHE</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">连接到某台</span><span lang="EN-US" style="FONT-SIZE: 12pt">JBOSS SERVER(</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">创建了</span><span lang="EN-US" style="FONT-SIZE: 12pt">session)</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，则只要在该台</span><span lang="EN-US" style="FONT-SIZE: 12pt">JBOSS</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">服务正常的情况下，该用户所有的请求都将会发送至该</span><span lang="EN-US" style="FONT-SIZE: 12pt">JBOSS SERVER</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span></p>
<h2><a name="_Toc120010819"></a><a name="_Toc124845782"><span style="mso-bookmark: _Toc120010819"><span lang="EN-US">1.5 apache服务的启动和停止</span></span></a></h2>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">/usr/local/apache2/bin/apachectl start
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">/usr/local/apache2/bin/apachectl stop
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果启动时报错，提示</span><span lang="EN-US">80</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">端口被绑定，请注意有可能是在装</span><span lang="EN-US">linux OS</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">时选装了</span><span lang="EN-US">apache</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">并且启动了服务，请直接在命令行用</span><span lang="EN-US">apachectl stop </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，停止原先的服务，其存在路径一般为</span><span lang="EN-US">/usr/sbin/apachectl </span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;
<p>&nbsp;</p>
</span></p>
<h1><a name="_Toc120010820"></a><a name="_Toc124845783"><span style="mso-bookmark: _Toc120010820"><span lang="EN-US">2.JBOSS3.2.3/3.2.6</span></span></a><span style="mso-bookmark: _Toc124845783"><span style="mso-bookmark: _Toc120010820"><span style="FONT-FAMILY: 华文中宋; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">部署及配置修改</span></span></span></h1>
<h2><a name="_Toc120010821"></a><a name="_Toc124845784"><span style="mso-bookmark: _Toc120010821"><span lang="EN-US">2.0 FOR NEW USER</span></span></a><span style="mso-bookmark: _Toc120010821"></span></h2>
<h3><span style="mso-bookmark: _Toc120010821"><a name="_Toc124845785"><span lang="EN-US">2.0.1 JBOSS </span></a></span><span style="mso-bookmark: _Toc120010821"><span style="mso-bookmark: _Toc124845785"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的一点说明</span></span></span></h3>
<p class="MsoNormal"><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">$JBOSS-HOME/server/</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下有</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">3</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个目录，</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">all/default/minimal</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，它们是表示</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">3</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">种配置，全部的配置、默认配置、最小配置，我们在启动</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">JBOSS</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">服务时，可以指定</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></span></p>
<p class="MsoNormal"><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">run &ndash;c all </span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表示是启动</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">all</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">配置</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">(</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">将会加载所有服务</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">)</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">；</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">run </span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表示是以默认配置启动</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">;
<p>&nbsp;</p>
</span></span></p>
<p class="MsoNormal"><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">run &ndash;c mimimal<span style="mso-spacerun: yes">&nbsp; </span></span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表示是启动</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">mimimal</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">配置。这三者所加载的服务数量不同，具体区别可查阅</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">JBOSS</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">相关文档，你还可以自己定义一个配置，如</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">test</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，属于高手去为了性能上的考虑了，那这份文档对你的帮助不会太大了。</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></span></p>
<p class="MsoNormal"><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">&nbsp;
<p>&nbsp;</p>
</span></span></p>
<p class="MsoNormal"><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果你确定了</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">JBOSS</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">服务启动的配置，那么你的应用及相关配置就需要部署在对应的目录下的相关的路径下，如</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">all/</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">default/</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">minimal/</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下。</span></span></p>
<h3><span style="mso-bookmark: _Toc120010821"><a name="_Toc124845786"><span lang="EN-US">2.0.1 JBOSS</span></a></span><span style="mso-bookmark: _Toc120010821"><span style="mso-bookmark: _Toc124845786"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">常用配置文件的路径</span></span></span></h3>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为了描述方便，以下描述将以</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">JBOSS3.2.6</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">版本，</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">default</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">配置为例，如果你以别的配置启动，则在对应的目录下寻找或配置相关文件。</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">1</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、相关</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">DTD</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">定义文件位于</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">$JBOSS-HOME/docs/dtd</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，在其下的文件中可以查阅某个</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">XML</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">配置文件中某个元素或属性的意义。</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt"><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">2</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、数据源配置文件的路径，</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">$JBOSS-HOME/server/default/deploy</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，文件格式必须是</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">*-ds.xml</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的样式。不同的数据库配置参数可参考</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">$JBOSS-HOME/docs/examples/jca/</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下的示例文档。有关参数的细节在下面会有一定的描述。</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt"><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">3</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、公共的</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">jar</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">包我们可以放在</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">$JBOSS-HOME/server/default/lib</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下，如数据库的</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">JDBC jar,log4j.jar</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">等，如果这些</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">JAR</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">已经在该</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">lib</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下放置了，那么我们的应用</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">WEB-INF/lib</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下不应该再放置，否则</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">JBOSS</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">也会将他们再一次加载，白白占用内存。</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt"><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">4</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、配置日志的文件，</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">log4j.xml</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">位于</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">$JBOSS-HOME/server/default/conf</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下，具体配置下文还会有一点介绍</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt"><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">5</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">$JBOSS-HOME/server/default/work</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下存放的是</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">JSP</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">编译后的</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">.java</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">及</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">.class</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">,</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果调试</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">JSP</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">时出错了，可以到该目录下</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">(</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一级级去翻吧</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">)</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">去找对应的文件，调试问题。还有个小</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">TIPS</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，有时我们明明把一个</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">JSP</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">更新到对应的目录里了，可是去刷新页面时，内容还是旧的，为了解决该问题，我们可以到</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">work</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">目录下，将对应的</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">.java</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">及</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">.class</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件删了，再刷新即可，这个原因不好推测，有时可以自动刷新，有时不行。单个的</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">TOMCAT</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">都能自动刷新，不知为何集成到</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">JBOSS</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">里却有时不行。还需注意的事，你在清除旧的</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">java</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">class</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件时，不能为了省事，而直接删除目录，否则刷新时会报错的，等着你的就是要重启</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">JBOSS</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">服务了。</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt"><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">6</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">$JBOSS-HOME/server/default/log</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下存放的是日志文件，默认的</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">log4j.xml</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">配置是将日志输出到该文件夹下的</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">server.log</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件，可以去查看信息进行调试。</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; TEXT-ALIGN: left" align="left"><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">7</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、我们的应用一般部署在</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">$JBOSS-HOME/server/default/deploy/jbossweb-tomcat50.sar/</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下，建个</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">TestCrm.war</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">目录，把我们的整个应用部署在该</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">.war</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">目录下，这样</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">JSP</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">Servlet</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">将由</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">tomcat</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">引擎来解析处理。</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; TEXT-ALIGN: left" align="left"><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">8</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、配置应用的</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">WEB</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">服务的端口号及参数。</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; TEXT-ALIGN: left" align="left"><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">JBOSS3.2.6</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是在</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">&hellip;./ deploy/jbossweb-tomcat50.sar/server.xml</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中，自己找</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">8080,</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">修改为你想设定的端口即可。</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; TEXT-ALIGN: left" align="left"><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">JBOSS3.2.3</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是在</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">&hellip;/default/deploy/jbossweb-tomcat41.sar/META-INF/jboss-service.xml</span></span><span style="mso-bookmark: _Toc120010821"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中配置。</span></span><span style="mso-bookmark: _Toc120010821"><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt"><span style="mso-bookmark: _Toc120010821"><span lang="EN-US">&nbsp;
<p>&nbsp;</p>
</span></span></p>
<h2><span style="mso-bookmark: _Toc120010821"><a name="_Toc124845787"><span lang="EN-US">2.1 JBOSS<span style="mso-tab-count: 1">&nbsp; </span>应用程序的下载及安装</span></a></span></h2>
<p class="MsoNormal"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">前往</span><span lang="EN-US" style="FONT-SIZE: 12pt"><a href="http://www.jboss.com/">http://www.jboss.com</a></span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">去下载相应的版本。直接解压到相关的目录即可。</span><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;
<p>&nbsp;</p>
</span></p>
<h2><a name="_Toc120010822"></a><a name="_Toc124845788"><span style="mso-bookmark: _Toc120010822"><span lang="EN-US">2.2 JBOSS<span style="mso-tab-count: 1">&nbsp; </span>应用程序的配置调整</span></span></a></h2>
<h3><a name="_Toc124845789"><span lang="EN-US">2.2.1</span></a><span style="mso-bookmark: _Toc124845789"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">配置负载均衡，调整参数</span></span></h3>
<p class="MsoNormal"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">需要修改配置文件以适应</span><span lang="EN-US" style="FONT-SIZE: 12pt">apache</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中配置的&ldquo;</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #003366; FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt">session sticky</span><span style="FONT-SIZE: 12pt; COLOR: #003366; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">配置</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&rdquo;。如下：</span><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">Jboss3.2.3</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">修改</span><span lang="EN-US" style="FONT-SIZE: 12pt">:
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">%JBOSS_HOME%/server/default/deploy/jbossweb-tomcat41.sar/META-INF/ jboss-service.xml
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">修改</span><span lang="EN-US" style="FONT-SIZE: 12pt">&lt;Engine name=&quot;MainEngine&quot; defaultHost=&quot;localhost&quot;&gt;</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为</span><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">&lt;Engine name=&quot;MainEngine&quot;<span style="COLOR: purple"> </span></span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt">jvmRoute=&quot;</span><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple"> server106</span></i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt">&quot;</span><span lang="EN-US" style="FONT-SIZE: 12pt"> <span style="mso-spacerun: yes">&nbsp;</span>defaultHost=&quot;localhost&quot;&gt;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">与上述</span><span lang="EN-US" style="FONT-SIZE: 12pt">workers2.properties</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">定义的内容一致。</span><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">Jboss3.2.6</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">修改</span><span lang="EN-US" style="FONT-SIZE: 12pt">:
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">%JBOSS_HOME%/server/default/deploy/jbossweb-tomcat50.sar/server.xml
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">修改</span><span lang="EN-US" style="FONT-SIZE: 12pt">&lt;Engine name=&quot;jboss.web&quot; defaultHost=&quot;localhost&quot;&gt;</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为：</span><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">&lt;Engine name=&quot;jboss.web&quot; </span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt">jvmRoute=&quot;</span><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple"> server106</span></i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt">&quot;</span><span lang="EN-US" style="FONT-SIZE: 12pt"> defaultHost=&quot;localhost&quot;&gt;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">与上述</span><span lang="EN-US" style="FONT-SIZE: 12pt">workers2.properties</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">定义的内容一致。</span><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">Jboss4.0</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的修改和</span><span lang="EN-US" style="FONT-SIZE: 12pt">Jboss3.2.6</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的一致。</span><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如上配置后，就可以实现</span><span lang="EN-US" style="FONT-SIZE: 12pt">apache+jboss</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的负载均衡。</span><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></p>
<h3><a name="_Toc124845790"><span lang="EN-US">2.2.2</span></a><span style="mso-bookmark: _Toc124845790"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">配置集群</span><span lang="EN-US">(Clustering)</span></span><span style="mso-bookmark: _Toc124845790"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，调整参数</span></span></h3>
<p class="MsoNormal"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">如果我们要想使得几台<span lang="EN-US">JBOSS应用服务器互为备份(仅限于SESSION)，在群内一台JBOSS服务器down掉的时候，用户不受影响，继续以登陆用户身份进行工作，则我们需要配置Clustering，并启动相关服务。下面将描述相关配置项：
<p>&nbsp;</p>
</span></span></p>
<p class="MsoNormal"><b><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">1)、修改应用APP的web.xml：
<p>&nbsp;</p>
</span></b></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">Jboss3.2.6：
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">../default/deploy/jbossweb-tomcat50.sar/Test.war/WEB-INF/web.xml
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">Jboss3.2.3</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ansi-language: EN">：<span lang="EN">
<p>&nbsp;</p>
</span></span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">../default/deploy/jbossweb-tomcat41.sar/Test.war/WEB-INF/web.xml
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">修改内容如下：<span lang="EN-US">
<p>&nbsp;</p>
</span></span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana">&lt;?xml version=&quot;1.0&quot;?&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana">&lt;!DOCTYPE web-app PUBLIC
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana">&quot;-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN&quot;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana">&quot;http://java.sun.com/dtd/web-app_2_3.dtd &quot;&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana">&lt;web-app&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana">&hellip;&hellip;.
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana">&hellip;..
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana">&hellip;.
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana">&lt;distributable/&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana">&lt;/web-app&gt;</span></i><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: Courier; mso-font-kerning: 0pt">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><b><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">2）、需要启动一个服务cluster-service.xml
<p>&nbsp;</p>
</span></b></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">如果是以<span lang="EN-US">run -c all 来启动jboss服务，则默认是将<b>cluster</b>服务启动，无需做什么配置工作，只需确认相关文件是否存在即可。
<p>&nbsp;</p>
</span></span></p>
<p class="MsoNormal"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">确认<i><span lang="EN-US" style="COLOR: #003366">&hellip;/server/all/deploy/</span></i>下存在<i><span lang="EN-US" style="COLOR: #003366">cluster-service.xml</span></i>文件；<span lang="EN-US">
<p>&nbsp;</p>
</span></span></p>
<p class="MsoNormal"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">确认<i><span lang="EN-US" style="COLOR: #003366">&hellip;/server/all/lib/</span></i>下存在<i><span lang="EN-US" style="COLOR: #003366">jgroups.jar</span></i>文件，如果没有则重新安装<span lang="EN-US">jboss。
<p>&nbsp;</p>
</span></span></p>
<p class="MsoNormal"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">如果应用程序部署在<span lang="EN-US">default配置下，则需将上述的两个文件分别拷入
<p>&nbsp;</p>
</span></span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&hellip;/server/default/deploy/、&hellip;/server/default/lib/目录下。
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">配置完毕，如有异常，请查看日志。更详细的信息请参阅<span lang="EN-US">JBOSS.com上提供的<i><span style="COLOR: #003366">admin.pdf。</span></i>
<p>&nbsp;</p>
</span></span></p>
<h3><a name="_Toc124845791"><span lang="EN-US">2.2.3</span></a><span style="mso-bookmark: _Toc124845791"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">配置数据源，调整参数</span></span></h3>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">各种类型的数据库，都可以根据</span><span lang="EN-US" style="FONT-SIZE: 12pt">%JBOSS_HOME%/docs/examples/jca/</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下的示例文档配置，更详细的参数配置可参阅</span><span lang="EN-US" style="FONT-SIZE: 12pt">JBOSS.com</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">上的文档或</span><span lang="EN-US" style="FONT-SIZE: 12pt">&hellip;/docs/dtd/</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下的</span><span lang="EN-US" style="FONT-SIZE: 12pt">dtd</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">定义来配置。</span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下面以</span><span lang="EN-US" style="FONT-SIZE: 12pt">oracle</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为例，提供我们在生产机环境的配置。</span><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">该</span><span lang="EN-US" style="FONT-SIZE: 12pt">xml</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件需要被部署在</span><span lang="EN-US" style="FONT-SIZE: 12pt">%JBOSS_HOME%/server/all<i><span style="COLOR: blue">(or default)</span></i>/deploy/</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下，对应的数据库驱动程序</span><span lang="EN-US" style="FONT-SIZE: 12pt">jar</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">需</span><span lang="EN-US" style="FONT-SIZE: 12pt">copy</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">至部署的配置的</span><span lang="EN-US" style="FONT-SIZE: 12pt">lib</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下，如</span><span lang="EN-US" style="FONT-SIZE: 12pt">&hellip;all/lib/</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">或</span><span lang="EN-US" style="FONT-SIZE: 12pt">&hellip;default/lib/</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下。</span><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: 宋体">&lt;datasources&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: 宋体"><span style="mso-spacerun: yes">&nbsp; </span>&lt;local-tx-datasource&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #003366; FONT-FAMILY: 宋体"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span></span></i><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: 宋体">&lt;jndi-name&gt;<b>jdbc/TestDataSource</b>&lt;/jndi-name&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: 宋体"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;connection-url&gt;jdbc:oracle:thin:@192.168.1.2:1521:test&lt;/connection-url&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: 宋体"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>&lt;!--&lt;connection-url&gt;jdbc:oracle:oci:@youroracle-tns-name&lt;/connection-url&gt;--&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: 宋体"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;driver-class&gt;oracle.jdbc.driver.OracleDriver&lt;/driver-class&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: 宋体"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;user-name&gt;test&lt;/user-name&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: 宋体">&lt;password&gt;test&lt;/password&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #003366; FONT-FAMILY: 宋体"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;!-- Uses the pingDatabase method to check a connection is still valid before handing it out from the pool --&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #003366; FONT-FAMILY: 宋体"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;valid-connection-checker-class-name&gt;org.jboss.resource.adapter.jdbc.vendor.OracleValidConnectionChecker&lt;/valid-connection-checker-class-name&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;!-- Checks the oracle error codes and messages for fatal errors --&gt;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: 宋体">&lt;exception-sorter-class-name&gt;org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter&lt;/exception-sorter-class-name&gt;</span></i><span lang="EN-US" style="FONT-FAMILY: 宋体">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;!-- sql to call when connection is created
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;new-connection-sql&gt;some arbitrary sql&lt;/new-connection-sql&gt;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>--&gt;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span><i><span style="COLOR: purple">&lt;min-pool-size&gt;5&lt;/min-pool-size&gt;</span></i>&lt;!&mdash;最小连接池数目--&gt;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span><i><span style="COLOR: purple">&lt;max-pool-size&gt;800&lt;/max-pool-size&gt;</span></i>&lt;!&mdash;最大连接池数目--&gt;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span><i><span style="COLOR: purple">&lt;idle-timeout-minutes&gt;5&lt;/idle-timeout-minutes&gt;</span></i>&lt;!&mdash;数据库连接空闲时间,单位为分钟,如果负载较大，可以设为5，如果一般，可以设为3--&gt;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&lt;!&mdash;在从连接池里获得一个连接之前先通过执行一个简单的SQL来校验connection的有效性--&gt;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span><span style="COLOR: purple"><span style="mso-spacerun: yes">&nbsp;</span><i>&lt;check-valid-connection-sql&gt;select 1 from dual&lt;/check-valid-connection-sql&gt;
<p>&nbsp;</p>
</i></span></span></p>
<p class="MsoNormal"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: 宋体"><span style="mso-spacerun: yes">&nbsp; </span>&lt;/local-tx-datasource&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: 宋体">&lt;/datasources&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: 宋体">&nbsp;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">如有多个数据源，则根据数据库的类型，配置完成，部署在上述路径下即可。<span lang="EN-US">
<p>&nbsp;</p>
</span></span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">在代码中可通过<span lang="EN-US">JNDI来从连接池中获取连接。
<p>&nbsp;</p>
</span></span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">&hellip;&hellip;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">Context ctx = new javax.naming.InitialContext();
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">DataSource ds = (DataSource)ctx.lookup(&quot;java:</span><b><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: 宋体">jdbc/TestDataSource</span></i></b><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体"> &quot;);
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">Connection con = ds.getConnection();
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">&hellip;&hellip;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">&nbsp;
<p>&nbsp;</p>
</span></p>
<h3><a name="_Toc124845792"><span lang="EN-US">2.2.4</span></a><span style="mso-bookmark: _Toc124845792"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">配置</span><span lang="EN-US">jboss Connector</span></span><span style="mso-bookmark: _Toc124845792"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">参数</span></span></h3>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">以下的配置是介绍</span><span lang="EN-US" style="FONT-SIZE: 12pt">load balancing</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">所使用的协议</span><span lang="EN-US" style="FONT-SIZE: 12pt">(AJP 1.3 Connector)</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的服务，</span><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">更准确的有效参数以及</span><span lang="EN-US" style="FONT-SIZE: 12pt">HTTP/1.1 Connector</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的配置。</span><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">请参阅</span><span lang="EN-US" style="FONT-SIZE: 12pt">:
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt"><a href="http://tomcat.apache.org/tomcat-5.0-doc/config/ajp.html">http://tomcat.apache.org/tomcat-5.0-doc/config/ajp.html</a>
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt"><a href="http://tomcat.apache.org/tomcat-5.0-doc/config/http.html">http://tomcat.apache.org/tomcat-5.0-doc/config/http.html</a>
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">jboss3.2.3</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">配置</span><span lang="EN-US" style="FONT-SIZE: 12pt">&hellip;/jbossweb-tomcat41.sar/META-INF/jboss-service.xml</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span><span lang="EN-US" style="FONT-SIZE: 12pt">jboss3.2.6</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">配置</span><span lang="EN-US" style="FONT-SIZE: 12pt">&hellip;./jbossweb-tomcat50.sar/server.xml
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'">&lt;!-- jboss3.2.3 jboss-service.xml --&gt;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'">&lt;!-- A AJP 1.3 Connector on port 8009 --&gt;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'">&lt;Connector className=&quot;org.apache.coyote.tomcat4.CoyoteConnector&quot;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'">address=&quot;${jboss.bind.address}&quot; port=&quot;8009&quot; minProcessors=&quot;5&quot; maxProcessors=&quot;1000&quot; enableLookups=&quot;true&quot; redirectPort=&quot;8443&quot; acceptCount=&quot;100&quot; debug=&quot;0&quot; connectionTimeout=&quot;20000&quot; useURIValidationHack=&quot;false&quot;
<p>&nbsp;</p>
</span></p>
<p class="MsoBodyText3"><span lang="EN-US">protocolHandlerClassName=&quot;org.apache.jk.server.JkCoyoteHandler&quot;/&gt;</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'">&lt;!-- jboss3.2.6 server.xml --&gt;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'">&lt;!-- A AJP 1.3 Connector on port 8009 --&gt;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'">&lt;Connector port=&quot;8009&quot; address=&quot;${jboss.bind.address}&quot;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'">enableLookups=&quot;false&quot; redirectPort=&quot;8443&quot; debug=&quot;0&quot;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="MARGIN-LEFT: 12pt; TEXT-INDENT: -12pt; mso-char-indent-count: -1.0; mso-char-indent-size: 12.0pt"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'">maxProcessors =&quot;1000&quot; </span><code><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'">minProcessors=&rdquo;5&rdquo;</span></code><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'"> acceptCount=&quot;100&quot;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'">protocol=&quot;AJP/1.3&quot;/&gt;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">简单解释一两个参数</span><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'">(</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">以</span><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'">tomcat5.0</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">为准</span><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'">):
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'">maxProcessors</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">：最大并发数</span><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'">(</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">连接数</span><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'">)
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><code><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'">minProcessors</span></code><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">：初始化时启动的最小的进程数</span><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'">acceptCount:</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">在当前</span><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'">connector</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">的连接数达到最大时，允许进入等待队列的数目</span><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'">connectionTimeout</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">：连接超时时间，单位为毫秒</span><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'">enableLookups:</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">是否允许通过</span><span lang="EN-US" style="FONT-SIZE: 12pt">DNS lookups</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，返回远程客户端的机器名，如果设为</span><span lang="EN-US" style="FONT-SIZE: 12pt">false</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，则只能返回</span><span lang="EN-US" style="FONT-SIZE: 12pt">IP</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">地址。该参数默认为</span><span lang="EN-US" style="FONT-SIZE: 12pt">true</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，如果不需要，可以禁掉，设为</span><span lang="EN-US" style="FONT-SIZE: 12pt">false</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，可以提高服务器的性能</span><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><code><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'">maxPostSize</span></code><code><span style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体; mso-ascii-font-family: 'Courier New'">：</span></code><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">设定允许透过</span><span lang="EN-US" style="FONT-SIZE: 12pt">POST</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">上传参数的字节数，默认是</span><span lang="EN-US" style="FONT-SIZE: 12pt">2M</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（</span><span lang="EN-US" style="FONT-SIZE: 12pt">2097152</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">），如果想禁掉该限制，则将该值设为一个小于或等于</span><span lang="EN-US" style="FONT-SIZE: 12pt">0 </span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的值，如</span><span lang="EN-US" style="FONT-SIZE: 12pt">0</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang="EN-US" style="FONT-SIZE: 12pt">-1</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，如果所部署的应用中有上传工作，则需注意该配置</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'">port=&quot;8009&quot;</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">：这个值要与上述</span><b><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'">&rdquo;1.4.3.workers2.properties&rdquo;</span></b><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中的</span><span lang="EN-US" style="FONT-SIZE: 12pt">port</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一致</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'">redirectPort=&quot;8443&quot;:</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">是制定如果用了</span><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'">SSL</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">机制访问服务的话，将会转向的端口，请参阅</span><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'">SSL</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">相关的配置文档。</span><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'">debug=&quot;0&quot;:</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">这是配置日志级别的，可以忽略，因为该设置依赖于</span><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'">log4j</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">的配置文件的设置</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'">，<span lang="EN-US">server/all/conf/log4j.xml</span></span><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></p>
<h3><a name="_Toc124845793"><span lang="EN-US">2.2.5</span></a><span style="mso-bookmark: _Toc124845793"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">访问</span><span lang="EN-US">URL</span></span><span style="mso-bookmark: _Toc124845793"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果是目录，不想显示该目录下文件</span></span></h3>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">jboss3.2.3:
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">修改</span><span lang="EN-US" style="FONT-SIZE: 12pt">&hellip;/server/all(or default)/deploy/&hellip;.sar/web.xml
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">jboss3.2.6/jboss4.0:
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">修改</span><span lang="EN-US" style="FONT-SIZE: 12pt">&hellip;/server/all(<span style="COLOR: blue">or default</span>)/deploy/&hellip;.sar/conf/web.xml
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">查看紫色斜体字符，设为</span><span lang="EN-US" style="FONT-SIZE: 12pt">false</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表示不列出目录。默认是设为</span><span lang="EN-US" style="FONT-SIZE: 12pt">true
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&lt;servlet&gt;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&lt;servlet-name&gt;default&lt;/servlet-name&gt;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&lt;servlet-class&gt;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">org.apache.catalina.servlets.DefaultServlet
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&lt;/servlet-class&gt;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&lt;init-param&gt;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&lt;param-name&gt;debug&lt;/param-name&gt;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&lt;param-value&gt;0&lt;/param-value&gt;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&lt;/init-param&gt;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: 宋体">&lt;init-param&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: 宋体">&lt;param-name&gt;listings&lt;/param-name&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: 宋体">&lt;param-value&gt;<b>false</b>&lt;/param-value&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: 宋体">&lt;/init-param&gt;</span></i><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&lt;load-on-startup&gt;1&lt;/load-on-startup&gt;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&lt;/servlet&gt;</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;
<p>&nbsp;</p>
</span></p>
<h3><a name="_Toc124845794"><span lang="EN-US">2.2.6</span></a><span style="mso-bookmark: _Toc124845794"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">设置某个应用</span><span lang="EN-US">APP</span></span><span style="mso-bookmark: _Toc124845794"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为默认应用</span></span></h3>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">通常情况下，如果我们部署的应用目录为</span><span lang="EN-US" style="FONT-SIZE: 12pt">&hellip;/server/all(<span style="COLOR: blue">or default</span>)/deploy/&hellip;.sar/<b><i><span style="COLOR: purple">Test.war</span></i></b>/</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，则我们应用部署完后，我们访问的路径类似于：</span><span lang="EN-US" style="FONT-SIZE: 12pt">http://&hellip;./<b><span style="COLOR: purple">Test</span></b>/index.htm</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，如果我们想去掉</span><span lang="EN-US" style="FONT-SIZE: 12pt">Test</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这个</span><span lang="EN-US" style="FONT-SIZE: 12pt">APP Name</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，则如下设置即可。</span><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在你需要设为默认应用的那个</span><span lang="EN-US" style="FONT-SIZE: 12pt">war</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">目录，如上述</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple">Test.war/WEB-INF/ </span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下新建一个文件，文件名为</span><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple">jboss-web.xml</span></i><i><span style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span></i><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">内容如下</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black">:
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple">&lt;jboss-web&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal" style="TEXT-INDENT: 48pt; mso-char-indent-count: 4.0; mso-char-indent-size: 12.0pt"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple">&lt;context-root&gt;/&lt;/context-root&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple">&lt;/jboss-web&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple">&nbsp;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">重启服务后，以</span><b><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple">http://&hellip;./index.htm</span></i></b><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">即可访问部署于</span><b><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple">Test.war/</span></i></b><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下的应用</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black">
<p>&nbsp;</p>
</span></p>
<h3><a name="_Toc124845795"><span lang="EN-US">2.2.7</span></a><span style="mso-bookmark: _Toc124845795"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">配置数据源在</span><span lang="EN-US">APP</span></span><span style="mso-bookmark: _Toc124845795"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">应用加载前有效</span><span lang="EN-US">(</span></span><span style="mso-bookmark: _Toc124845795"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">各相关服务加载完毕</span><span lang="EN-US">)</span></span></h3>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这个经验的获知花费了一周多，后来结合</span><span lang="EN-US" style="FONT-SIZE: 12pt">jboss wiki/forum</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的文档，有了灵感，才得以解决。详细的介绍可参阅下面帖子，这是我发的一个求助帖，后来自己给解决后把答案贴上了。</span><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt"><a href="http://www.jboss.com/index.html?module=bb&amp;op=viewtopic&amp;t=70600">http://www.jboss.com/index.html?module=bb&amp;op=viewtopic&amp;t=70600</a>
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt"><a href="http://www.javaworld.com.tw/jute/post/view?bid=9&amp;id=129747&amp;sty=1&amp;tpg=1&amp;age=0">http://www.javaworld.com.tw/jute/post/view?bid=9&amp;id=129747&amp;sty=1&amp;tpg=1&amp;age=0</a>(</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中文</span><span lang="EN-US" style="FONT-SIZE: 12pt">)
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">以下简略说明一下。</span><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">我们部署一个应用</span><span lang="EN-US" style="FONT-SIZE: 12pt">(</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">项目</span><span lang="EN-US" style="FONT-SIZE: 12pt">)</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，应用启动之初一般都进行若干初始化吧，可能会从文件里、数据库里获取一些基础数据或配置项等等。</span><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果从数据库里获取基础数据，则我们必须确保配置的那些数据源及相关的服务在我们应用开始加载之前生效</span><span lang="EN-US" style="FONT-SIZE: 12pt">(</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">已经启动或加载完毕</span><span lang="EN-US" style="FONT-SIZE: 12pt">)</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">；也就是说，在我们部署应用的一些初始化数据方法里要能正常获取数据。如果你不做一些设置，仅仅是将配好的</span><span lang="EN-US" style="FONT-SIZE: 12pt">ds_oracle_test.xml</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">扔到</span><span lang="EN-US" style="FONT-SIZE: 12pt">&hellip;/deploy/</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下，那么很遗憾的告诉你，你的应用在初始化数据阶段根本不能从连接池中获取到连接，进而获取数据。如要达到你初始化数据的目的，请按照上面我提供的那个帖子连接去查看详细的信息，下面我仅提供解决方法。</span><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">1)</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、配置数据源</span><span lang="EN-US" style="FONT-SIZE: 12pt">:
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: 'Courier New'">&lt;!--oracle_ds.xml--&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: 'Courier New'">&lt;datasources&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: 'Courier New'">&lt;local-tx-datasource&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: 'Courier New'">&lt;jndi-name&gt;jdbc/test&lt;/jndi-name&gt;</span></i><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">2)</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">确认</span><span lang="EN-US" style="FONT-SIZE: 12pt">datasource</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">依赖的服务名</span><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="MARGIN-BOTTOM: 12pt; WORD-BREAK: break-all; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">透过</span><span lang="EN-US" style="FONT-SIZE: 12pt"><a href="http://wiki.jboss.org/wiki/Wiki.jsp?page=DependOnDataSource">http://wiki.jboss.org/wiki/Wiki.jsp?page=DependOnDataSource</a></span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">我们发现：</span><span style="FONT-SIZE: 12pt"> </span><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: Tahoma"><br /><span class="javascript">======</span></span><span class="javascript"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">原文引用</span></span><span class="javascript"><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: Tahoma">============== </span></span><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: Tahoma"><br /><span class="javascript"><span style="COLOR: purple">! Depending on a DataSource </span></span><span style="COLOR: purple"><br /><span class="javascript">To specify a dependency on a DataSource deployment, you need to depend on the service which binds the DataSource into JNDI. </span><br /><span class="javascript">The DataSource is not bound into JNDI until the service jboss.jca:service=DataSourceBinding,name=(jndi-name) has been </span><br /><span class="javascript">started. The (jndi-name) is the value of the jndi-name attribute for your DataSource as defined in the *-ds.xml. </span><br /><span class="javascript">The associated connection manager service is a function of the type of DataSource and its jndi-name attribute value. The </span><br /><span class="javascript">MBean names for the types of DataSource deployments are: </span></span></span><span class="javascript"><span lang="EN-US">
<p>&nbsp;</p>
</span></span></p>
<table style="BACKGROUND: #999999; WIDTH: 100%; mso-padding-alt: 2.25pt 2.25pt 2.25pt 2.25pt; mso-cellspacing: .7pt" cellspacing="1" cellpadding="0" width="100%" bgcolor="#999999" border="0">
    <tbody>
        <tr>
            <td style="PADDING-RIGHT: 2.25pt; PADDING-LEFT: 2.25pt; BACKGROUND: #dddddd; PADDING-BOTTOM: 2.25pt; WIDTH: 7.2pt; PADDING-TOP: 2.25pt" valign="top" width="10">
            <pre style="WORD-BREAK: break-all"><span lang="EN-US" style="COLOR: #555555">1<br />
            2<br />
            3<br />
            4<br />
            5<br />
            6<br />
            7<br />
            8<br />
            9<br />
            10</span></pre>
            </td>
            <td style="PADDING-RIGHT: 2.25pt; PADDING-LEFT: 2.25pt; BACKGROUND: white; PADDING-BOTTOM: 2.25pt; PADDING-TOP: 2.25pt" valign="top">
            <pre style="WORD-BREAK: break-all"><span lang="EN-US">no-tx-datasource </span></pre>
            <pre style="WORD-BREAK: break-all"><span lang="EN-US">jboss.jca:service=NoTxCM?,name=(jndi-name) </span></pre>
            <pre style="WORD-BREAK: break-all"><span lang="EN-US">local-tx-datasource </span></pre>
            <pre style="WORD-BREAK: break-all"><span lang="EN-US">jboss.jca:service=LocalTxCM?,name=(jndi-name) </span></pre>
            <pre style="WORD-BREAK: break-all"><span lang="EN-US">xa-datasource </span></pre>
            <pre style="WORD-BREAK: break-all"><span lang="EN-US">jboss.jca:service=XATxCM?,name=(jndi-name) </span></pre>
            <pre style="WORD-BREAK: break-all"><span lang="EN-US">no-tx-connection-factory </span></pre>
            <pre style="WORD-BREAK: break-all"><span lang="EN-US">jboss.jca:service=NoTxCM?,name=(jndi-name) </span></pre>
            <pre style="WORD-BREAK: break-all"><span lang="EN-US">tx-connection-factory </span></pre>
            <pre style="WORD-BREAK: break-all"><span lang="EN-US">jboss.jca:service=TxCM?,name=(jndi-name) </span></pre>
            </td>
        </tr>
    </tbody>
</table>
<p class="MsoNormal" style="MARGIN-BOTTOM: 12pt; WORD-BREAK: break-all"><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: Tahoma"><br /><br /><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">通过上述描述可以知道，数据源配置不同，则对应的依赖服务名信息也不同。</span><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: Tahoma"><br /><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">根据上述描述及数据源配置，相关的服务名就是：</span><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="MARGIN-BOTTOM: 12pt; WORD-BREAK: break-all"><span lang="EN-US" style="FONT-SIZE: 12pt">&quot;<i><span style="COLOR: purple">jboss.jca:service=LocalTxCM,name=jdbc/test</span></i>&quot;. <br /></span><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: Tahoma"><br /></span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">我修改了</span><span style="FONT-SIZE: 12pt"> <span lang="EN-US">...sar/...war/WEB-INF/jboss-web.xml(</span></span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果不存在该文件，就创建它</span><span lang="EN-US" style="FONT-SIZE: 12pt">),</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">然后运行</span><span lang="EN-US" style="FONT-SIZE: 12pt">jboss</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，就可以在初始化时找到</span><span lang="EN-US" style="FONT-SIZE: 12pt">datasource</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，并正确获取数据了</span><span lang="EN-US" style="FONT-SIZE: 12pt">!!! </span><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: Tahoma"><br /><br /></span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">配置文件如下：</span><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></p>
<table style="BACKGROUND: #999999; WIDTH: 100%; mso-padding-alt: 2.25pt 2.25pt 2.25pt 2.25pt; mso-cellspacing: .7pt" cellspacing="1" cellpadding="0" width="100%" bgcolor="#999999" border="0">
    <tbody>
        <tr>
            <td style="PADDING-RIGHT: 2.25pt; PADDING-LEFT: 2.25pt; BACKGROUND: #dddddd; PADDING-BOTTOM: 2.25pt; WIDTH: 7.2pt; PADDING-TOP: 2.25pt" valign="top" width="10">
            <pre style="WORD-BREAK: break-all"><span lang="EN-US" style="COLOR: #555555">1<br />
            2<br />
            3</span></pre>
            </td>
            <td style="PADDING-RIGHT: 2.25pt; PADDING-LEFT: 2.25pt; BACKGROUND: white; PADDING-BOTTOM: 2.25pt; PADDING-TOP: 2.25pt" valign="top">
            <pre style="WORD-BREAK: break-all"><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;</span>&lt;jboss-web&gt;</span></pre>
            <pre style="WORD-BREAK: break-all"><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp; </span>&lt;depends&gt;jboss.jca:service=LocalTxCM,name=jdbc/test&lt;/depends&gt;</span></pre>
            <pre style="WORD-BREAK: break-all"><span lang="EN-US">&lt;/jboss-web&gt;<span style="mso-spacerun: yes">&nbsp; </span></span></pre>
            </td>
        </tr>
    </tbody>
</table>
<p class="MsoNormal" style="TEXT-INDENT: 24pt"><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: Tahoma"><br style="mso-special-character: line-break" /><br style="mso-special-character: line-break" />
<p>&nbsp;</p>
</span></p>
<h3><a name="_Toc124845796"><span lang="EN-US">2.2.8</span></a><span style="mso-bookmark: _Toc124845796"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">日志配置，配置</span><span lang="EN-US">log4j.xml</span></span></h3>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><span lang="EN-US" style="FONT-SIZE: 12pt">JBOSS</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的日志模块集成了强大的</span><span lang="EN-US" style="FONT-SIZE: 12pt">LOG4J</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">组件，我们可以直接配置</span><span lang="EN-US" style="FONT-SIZE: 12pt">$JBOSS_HOME/server/default/conf/log4j.xml</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，来定义日志级别或是将某几个类的日志输出到一个单独的文件。</span><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">以下简单罗列一下配置文件，具体的</span><span lang="EN-US" style="FONT-SIZE: 12pt">LOG4J</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的使用请参阅</span><span lang="EN-US" style="FONT-SIZE: 12pt">LOG4J</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文档或</span><span lang="EN-US" style="FONT-SIZE: 12pt">JBOSS</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的文档。</span><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 12pt"><span style="mso-spacerun: yes">&nbsp; </span></span><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana"><span style="mso-spacerun: yes">&nbsp;</span>&lt;appender name=&quot;ImportCharge&quot; class=&quot;org.jboss.logging.appender.DailyRollingFileAppender&quot;&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal" style="TEXT-ALIGN: left" align="left"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;errorHandler class=&quot;org.jboss.logging.util.OnlyOnceErrorHandler&quot;/&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal" style="TEXT-ALIGN: left" align="left"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;param name=&quot;File&quot; value=&quot;${jboss.server.home.dir}/log/importCharge.log&quot;/&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal" style="TEXT-ALIGN: left" align="left"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;param name=&quot;Append&quot; value=&quot;true&quot;/&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal" style="TEXT-ALIGN: left" align="left"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana">&nbsp;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal" style="TEXT-ALIGN: left" align="left"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;!-- Rollover at midnight each day --&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal" style="TEXT-ALIGN: left" align="left"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;param name=&quot;DatePattern&quot; value=&quot;'.'yyyy-MM-dd&quot;/&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal" style="TEXT-ALIGN: left" align="left"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;layout class=&quot;org.apache.log4j.PatternLayout&quot;&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal" style="TEXT-ALIGN: left" align="left"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;!-- The default pattern: Date Priority [Category] Message\n --&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal" style="TEXT-ALIGN: left" align="left"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;param name=&quot;ConversionPattern&quot; value=&quot;%d %-5p [%c] %m%n&quot;/&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal" style="TEXT-ALIGN: left" align="left"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/layout&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal" style="TEXT-ALIGN: left" align="left"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>&lt;/appender&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal" style="TEXT-ALIGN: left" align="left"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana">&nbsp;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal" style="TEXT-ALIGN: left" align="left"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Verdana"><span style="mso-spacerun: yes">&nbsp; </span>&lt;logger name=&quot;com.tt.bs.action.corp.ImportChargeFileAction&quot;&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal" style="TEXT-ALIGN: left" align="left"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Verdana"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;level value=&quot;DEBUG&quot; /&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal" style="TEXT-ALIGN: left" align="left"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Verdana"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;appender-ref ref=&quot;ImportCharge&quot;/&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal" style="TEXT-ALIGN: left" align="left"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Verdana"><span style="mso-spacerun: yes">&nbsp; </span>&lt;/logger&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal" style="TEXT-ALIGN: left" align="left"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Verdana">&nbsp;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal" style="TEXT-ALIGN: left" align="left"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Verdana"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>&lt;category name=&quot; com.tt.bs.action.corp.UploadChargeFileAction &quot;&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal" style="TEXT-ALIGN: left" align="left"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Verdana"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;priority value=&quot;DEBUG&quot; /&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal" style="TEXT-ALIGN: left" align="left"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Verdana"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;appender-ref ref=&quot; ImportCharge &quot;/&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal" style="TEXT-ALIGN: left" align="left"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Verdana"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>&lt;/category&gt;</span></i><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana">
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal" style="TEXT-ALIGN: left" align="left"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana">&nbsp;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt" align="left"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana">category</span></i><i><span style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">或</span></i><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana">logger</span></i><i><span style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">的写法都可以，建议用最下面的写法，这是文档中的标准写法。</span></i><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana">
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt" align="left"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">上面的最后两个代码块，表示所列的两个</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Verdana">ACTION</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">将会引用&ldquo;</span><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Verdana">ImportCharge</span></i><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">&rdquo;这个</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Verdana">appender</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">，他们中的</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Verdana">log.debug&hellip;.</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">的日志将会同时写入&ldquo;</span><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana">importCharge.log</span></i><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">&rdquo;文件。</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Verdana">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="TEXT-ALIGN: left" align="left"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">还可以参考：</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Verdana">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Verdana"><a href="http://wiki.jboss.org/wiki/Wiki.jsp?page=Logging">http://wiki.jboss.org/wiki/Wiki.jsp?page=Logging</a>
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-FAMILY: Verdana"><a href="http://logging.apache.org/log4j/docs/">http://logging.apache.org/log4j/docs/</a>
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-FAMILY: Verdana">&nbsp;
<p>&nbsp;</p>
</span></p>
<h3><a name="_Toc124845797"><span lang="EN-US">2.2.9</span></a><span style="mso-bookmark: _Toc124845797"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">配置</span><span lang="EN-US">contentType</span></span><span style="mso-bookmark: _Toc124845797"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">及</span><span lang="EN-US">charset</span></span><span style="mso-bookmark: _Toc124845797"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span><span lang="EN-US">TOMCAT5.0</span></span><span style="mso-bookmark: _Toc124845797"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下</span><span lang="EN-US">JSP</span></span><span style="mso-bookmark: _Toc124845797"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">统一配置</span></span></h3>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">在<span lang="EN-US">JSP里头部一般要用page语句指定contentType及charset。
<p>&nbsp;</p>
</span></span></p>
<p class="MsoNormal"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">如：<span lang="EN-US" style="COLOR: purple">&lt;%@ page contentType=&quot;text/html; charset=GBK&quot; %&gt;
<p>&nbsp;</p>
</span></span></p>
<p class="MsoNormal"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">或分开写：<span lang="EN-US">
<p>&nbsp;</p>
</span></span></p>
<p class="MsoNormal"><span style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: 宋体">&ndash;<span lang="EN-US"> &lt;%@ page contentType=&quot;MIME-Type&quot; %&gt;
<p>&nbsp;</p>
</span></span></p>
<p class="MsoNormal"><span style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: 宋体">&ndash;<span lang="EN-US"> &lt;%@ page pageEncoding=&quot;Character-Set&quot; %&gt;
<p>&nbsp;</p>
</span></span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt; mso-layout-grid-align: none" align="left"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 16.5pt; mso-font-kerning: 0pt">该语句的作用是&ldquo;指定由<span lang="EN-US">JSP页面生成的servlet生成的页面的MIME类型及</span></span><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">charset&rdquo;。默认的字符集是&ldquo;<span style="COLOR: purple">ISO-8859-1</span>&rdquo;，如果不指定正确的charset,则我们的页面如有中文，是会乱码的。
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt; mso-layout-grid-align: none" align="left"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">我主要描述的是后者，<span lang="EN-US">charset,字符集。发生的场景位于一个页面包含另一个页面的情况下。
<p>&nbsp;</p>
</span></span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt; mso-layout-grid-align: none" align="left"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">在<span lang="EN-US">JBOSS3.2.3下集成的是tomcat4.0*,用的是<span style="COLOR: blue">JSP1.2/Servlet2.3</span>标准，要求JSP主页面和所包含页面中的&ldquo;<span style="COLOR: purple">pageEncoding&rdquo;</span><span style="COLOR: black">必须一致，基于这一情况，我们一般做法是包含页面不指定</span>&ldquo;<span style="COLOR: purple">pageEncoding&rdquo;，</span><span style="COLOR: black">它的属性直接继承父页面即可。
<p>&nbsp;</p>
</span></span></span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt; mso-layout-grid-align: none" align="left"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">在<span lang="EN-US">JBOSS3.2.6下，集成的是tomcat5.0*,要求每个JSP中必须有</span></span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&ldquo;<span lang="EN-US" style="COLOR: purple">pageEncoding&rdquo;，</span><span style="COLOR: black">换句话说，父页面中的指定对子页面没有影响。<span lang="EN-US">
<p>&nbsp;</p>
</span></span></span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt; mso-layout-grid-align: none" align="left"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">有两个方法可解决该问题：<span lang="EN-US">
<p>&nbsp;</p>
</span></span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">1、为每个页面指定</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&ldquo;<span lang="EN-US" style="COLOR: purple">pageEncoding&rdquo;，</span><b><span style="COLOR: black">显然不可取！</span></b><span lang="EN-US" style="COLOR: purple">
<p>&nbsp;</p>
</span></span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: 宋体">2、</span><span style="FONT-SIZE: 12pt; COLOR: blue; FONT-FAMILY: 宋体">用<span lang="EN-US">JSP2.0/Servlet2.4标准，统一配置一下WEB.XML,解析JSP时统一用一个&ldquo;pageEncoding&rdquo;.这样我们就不需要为每个JSP里加个声明了。
<p>&nbsp;</p>
</span></span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: blue; FONT-FAMILY: 宋体">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt; mso-layout-grid-align: none" align="left"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">法<span lang="EN-US">2的配置细节如下：
<p>&nbsp;</p>
</span></span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt; mso-layout-grid-align: none" align="left"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-font-kerning: 0pt; mso-hansi-font-family: 'Times New Roman'">配置</span><span lang="EN-US" style="FONT-SIZE: 12pt">$JBOSS-HOME/server/default/deploy/jbossweb-tomcat50.sar/TestCrm.war/WEB-INF/web.xml</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，为下面紫色斜体内容。</span><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt; mso-layout-grid-align: none" align="left"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">替换头部的命名空间声明：</span><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana">&lt;?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot;?&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal" style="TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana">&lt;web-app xmlns=&quot;http://java.sun.com/xml/ns/j2ee&quot;<span style="mso-spacerun: yes">&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;</span>xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>xsi:schemaLocation=&quot;http://java.sun.com/xml/ns/j2ee<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd&quot;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal" style="TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana">version=&quot;2.4&quot;&gt;</span></i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana">&hellip;&hellip;&hellip;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana">&hellip;&hellip;&hellip;</span><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: ArialUnicodeMS; mso-font-kerning: 0pt">&lt;jsp-config&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal" style="TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: ArialUnicodeMS; mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp; </span>&lt;jsp-property-group&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal" style="TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: ArialUnicodeMS; mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;description&gt;jsp encoding example&lt;/description&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal" style="TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: ArialUnicodeMS; mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;display-name&gt;JSPConfiguration&lt;/display-name&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal" style="TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: ArialUnicodeMS; mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;url-pattern&gt;*.jsp&lt;/url-pattern&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal" style="TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: ArialUnicodeMS; mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;el-ignored&gt;true&lt;/el-ignored&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal" style="TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: ArialUnicodeMS; mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;page-encoding&gt;GBK&lt;/page-encoding&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal" style="TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: ArialUnicodeMS; mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;scripting-invalid&gt;false&lt;/scripting-invalid&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal" style="TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: ArialUnicodeMS; mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;include-prelude&gt;&lt;/include-prelude&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal" style="TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: ArialUnicodeMS; mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;include-coda&gt;&lt;/include-coda&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal" style="TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: ArialUnicodeMS; mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp; </span>&lt;/jsp-property-group&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal" style="TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: ArialUnicodeMS; mso-font-kerning: 0pt">&lt;/jsp-config&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal" style="TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple; FONT-FAMILY: Verdana; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: ArialUnicodeMS; mso-font-kerning: 0pt">&lt;/web-app&gt;
<p>&nbsp;</p>
</span></i></p>
<p class="MsoNormal" style="TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: ArialUnicodeMS; mso-font-kerning: 0pt">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="TEXT-ALIGN: left" align="left"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-font-kerning: 0pt">说明：<span lang="EN-US">&lt;jsp-config&gt;的配置说明
<p>&nbsp;</p>
</span></span></p>
<p class="MsoNormal" style="TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-font-kerning: 0pt">&nbsp;
<p>&nbsp;</p>
</span></p>
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 9.0pt; mso-ascii-font-family: 'Arial Unicode MS'; mso-hansi-font-family: 'Arial Unicode MS'">你可以在</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体">&lt;jsp-property-group&gt;</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 9.0pt; mso-ascii-font-family: 'Arial Unicode MS'; mso-hansi-font-family: 'Arial Unicode MS'">中使用以下的配置元素：</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体">
<p>&nbsp;</p>
</span></p>
<table style="mso-padding-alt: 0cm 0cm 0cm 0cm; mso-cellspacing: 0cm" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; PADDING-TOP: 0cm">
            <p style="TEXT-ALIGN: center" align="center"><strong><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体">Element</span></strong><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体">
            <p>&nbsp;</p>
            </span></p>
            </td>
            <td style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; PADDING-TOP: 0cm">
            <p style="TEXT-ALIGN: center" align="center"><strong><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 9.0pt; mso-ascii-font-family: 'Arial Unicode MS'; mso-hansi-font-family: 'Arial Unicode MS'">描述</span></strong><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体">
            <p>&nbsp;</p>
            </span></p>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; PADDING-TOP: 0cm">
            <p><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体">&lt;el-ignored&gt;
            <p>&nbsp;</p>
            </span></p>
            </td>
            <td style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; PADDING-TOP: 0cm">
            <p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 9.0pt; mso-ascii-font-family: 'Arial Unicode MS'; mso-hansi-font-family: 'Arial Unicode MS'">如果设置为</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体">true, </span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 9.0pt; mso-ascii-font-family: 'Arial Unicode MS'; mso-hansi-font-family: 'Arial Unicode MS'">在匹配指定的</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体">URL</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 9.0pt; mso-ascii-font-family: 'Arial Unicode MS'; mso-hansi-font-family: 'Arial Unicode MS'">模式的</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体">JSP </span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 9.0pt; mso-ascii-font-family: 'Arial Unicode MS'; mso-hansi-font-family: 'Arial Unicode MS'">页面中，</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体">EL </span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 9.0pt; mso-ascii-font-family: 'Arial Unicode MS'; mso-hansi-font-family: 'Arial Unicode MS'">表达式被当作常规的文本而不是</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体">EL </span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 9.0pt; mso-ascii-font-family: 'Arial Unicode MS'; mso-hansi-font-family: 'Arial Unicode MS'">表达式。当移植看起来有</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体">EL</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 9.0pt; mso-ascii-font-family: 'Arial Unicode MS'; mso-hansi-font-family: 'Arial Unicode MS'">表达式文本的</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体">JSP 1.2</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 9.0pt; mso-ascii-font-family: 'Arial Unicode MS'; mso-hansi-font-family: 'Arial Unicode MS'">页面到</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体">JSP 2.0</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 9.0pt; mso-ascii-font-family: 'Arial Unicode MS'; mso-hansi-font-family: 'Arial Unicode MS'">的时候，这非常有用。在已经转换为</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体">JSP 2.0</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 9.0pt; mso-ascii-font-family: 'Arial Unicode MS'; mso-hansi-font-family: 'Arial Unicode MS'">的页面中，你可以使用一个新增的&ldquo;</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体">elIgnoredpage</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 9.0pt; mso-ascii-font-family: 'Arial Unicode MS'; mso-hansi-font-family: 'Arial Unicode MS'">&rdquo;属性来选择</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体">EL</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 9.0pt; mso-ascii-font-family: 'Arial Unicode MS'; mso-hansi-font-family: 'Arial Unicode MS'">是否有效</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体">
            <p>&nbsp;</p>
            </span></p>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; PADDING-TOP: 0cm">
            <p><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体">&lt;scripting-invalid&gt;
            <p>&nbsp;</p>
            </span></p>
            </td>
            <td style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; PADDING-TOP: 0cm">
            <p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 9.0pt; mso-ascii-font-family: 'Arial Unicode MS'; mso-hansi-font-family: 'Arial Unicode MS'">如果设置为</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体">true, </span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 9.0pt; mso-ascii-font-family: 'Arial Unicode MS'; mso-hansi-font-family: 'Arial Unicode MS'">在某个匹配的</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体">JSP</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 9.0pt; mso-ascii-font-family: 'Arial Unicode MS'; mso-hansi-font-family: 'Arial Unicode MS'">页面使用脚本</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体">
            <p>&nbsp;</p>
            </span></p>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; PADDING-TOP: 0cm">
            <p><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体">&lt;page-encoding&gt;
            <p>&nbsp;</p>
            </span></p>
            </td>
            <td style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; PADDING-TOP: 0cm">
            <p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 9.0pt; mso-ascii-font-family: 'Arial Unicode MS'; mso-hansi-font-family: 'Arial Unicode MS'">为匹配指定的</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体">URL</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 9.0pt; mso-ascii-font-family: 'Arial Unicode MS'; mso-hansi-font-family: 'Arial Unicode MS'">模式的</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体">JSP</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 9.0pt; mso-ascii-font-family: 'Arial Unicode MS'; mso-hansi-font-family: 'Arial Unicode MS'">页面指定编码。这是一个可选的配置（在每一个</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体">JSP</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 9.0pt; mso-ascii-font-family: 'Arial Unicode MS'; mso-hansi-font-family: 'Arial Unicode MS'">页面中指定页面的编码），并且对于</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体">JSP</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 9.0pt; mso-ascii-font-family: 'Arial Unicode MS'; mso-hansi-font-family: 'Arial Unicode MS'">页面来说这是使用某些文件编码（比如：</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体">EBCDIC</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 9.0pt; mso-ascii-font-family: 'Arial Unicode MS'; mso-hansi-font-family: 'Arial Unicode MS'">）唯一的办法</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体">
            <p>&nbsp;</p>
            </span></p>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; PADDING-TOP: 0cm">
            <p><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体">&lt;include-coda&gt;
            <p>&nbsp;</p>
            </span></p>
            </td>
            <td style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; PADDING-TOP: 0cm">
            <p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 9.0pt; mso-ascii-font-family: 'Arial Unicode MS'; mso-hansi-font-family: 'Arial Unicode MS'">为所有匹配指定的</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体">URL</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 9.0pt; mso-ascii-font-family: 'Arial Unicode MS'; mso-hansi-font-family: 'Arial Unicode MS'">模式的</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体">JSP</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 9.0pt; mso-ascii-font-family: 'Arial Unicode MS'; mso-hansi-font-family: 'Arial Unicode MS'">页面的末尾自动包含一个文件，而指定相关的</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体">context</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 9.0pt; mso-ascii-font-family: 'Arial Unicode MS'; mso-hansi-font-family: 'Arial Unicode MS'">路径。你可以在一个</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体">&lt;jsp-property-group&gt;</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 9.0pt; mso-ascii-font-family: 'Arial Unicode MS'; mso-hansi-font-family: 'Arial Unicode MS'">中多次使用</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体">,</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 9.0pt; mso-ascii-font-family: 'Arial Unicode MS'; mso-hansi-font-family: 'Arial Unicode MS'">或者通过多个</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体">&lt;jsp-property-group&gt;</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 9.0pt; mso-ascii-font-family: 'Arial Unicode MS'; mso-hansi-font-family: 'Arial Unicode MS'">来实现</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体">
            <p>&nbsp;</p>
            </span></p>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; PADDING-TOP: 0cm">
            <p><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体">&lt;include-prelude&gt;
            <p>&nbsp;</p>
            </span></p>
            </td>
            <td style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; PADDING-TOP: 0cm">
            <p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 9.0pt; mso-ascii-font-family: 'Arial Unicode MS'; mso-hansi-font-family: 'Arial Unicode MS'">为所有匹配指定的</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体">URL</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 9.0pt; mso-ascii-font-family: 'Arial Unicode MS'; mso-hansi-font-family: 'Arial Unicode MS'">模式的</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体">JSP</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 9.0pt; mso-ascii-font-family: 'Arial Unicode MS'; mso-hansi-font-family: 'Arial Unicode MS'">页面的开头自动包含一个文件，而指定相关的</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体">context</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 9.0pt; mso-ascii-font-family: 'Arial Unicode MS'; mso-hansi-font-family: 'Arial Unicode MS'">路径。你可以在一个</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体">&lt;jsp-property-group&gt;</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 9.0pt; mso-ascii-font-family: 'Arial Unicode MS'; mso-hansi-font-family: 'Arial Unicode MS'">中多次使用</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体">,</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 9.0pt; mso-ascii-font-family: 'Arial Unicode MS'; mso-hansi-font-family: 'Arial Unicode MS'">或者通过多个</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体">&lt;jsp-property-group&gt;</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 9.0pt; mso-ascii-font-family: 'Arial Unicode MS'; mso-hansi-font-family: 'Arial Unicode MS'">来实现</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体">
            <p>&nbsp;</p>
            </span></p>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; PADDING-TOP: 0cm">
            <p><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体">&lt;is-xml&gt;
            <p>&nbsp;</p>
            </span></p>
            </td>
            <td style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; PADDING-TOP: 0cm">
            <p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 9.0pt; mso-ascii-font-family: 'Arial Unicode MS'; mso-hansi-font-family: 'Arial Unicode MS'">如果设置为</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体">true, </span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 9.0pt; mso-ascii-font-family: 'Arial Unicode MS'; mso-hansi-font-family: 'Arial Unicode MS'">所有匹配指定的</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体">URL</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 9.0pt; mso-ascii-font-family: 'Arial Unicode MS'; mso-hansi-font-family: 'Arial Unicode MS'">模式的</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体">JSP</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 9.0pt; mso-ascii-font-family: 'Arial Unicode MS'; mso-hansi-font-family: 'Arial Unicode MS'">页面使用</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体">JSP XML</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 9.0pt; mso-ascii-font-family: 'Arial Unicode MS'; mso-hansi-font-family: 'Arial Unicode MS'">语法（它们是</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体">JSP Document</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 9.0pt; mso-ascii-font-family: 'Arial Unicode MS'; mso-hansi-font-family: 'Arial Unicode MS'">）</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体">
            <p>&nbsp;</p>
            </span></p>
            </td>
        </tr>
    </tbody>
</table>
<p class="MsoNormal" style="TEXT-ALIGN: left" align="left"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: 宋体">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="TEXT-ALIGN: left" align="left"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: 宋体">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="TEXT-ALIGN: left" align="left"><span style="COLOR: black; FONT-FAMILY: 宋体">可参见<span lang="EN-US"><a href="http://www.oreilly.com.cn/news/jsppart2.php?c=java">http://www.oreilly.com.cn/news/jsppart2.php?c=java</a>
<p>&nbsp;</p>
</span></span></p>
<p class="MsoNormal" style="TEXT-ALIGN: left" align="left"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: 宋体">&nbsp;
<p>&nbsp;</p>
</span></p>
<h2><a name="_Toc122949168"></a><a name="_Toc124845798"><span style="mso-bookmark: _Toc122949168"><span lang="EN-US">2.3 JVM最小、最大内存的设定</span></span></a></h2>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果采取默认配置的话，</span><span lang="EN-US" style="FONT-SIZE: 12pt">JVM</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">默认只能分配到最大</span><span lang="EN-US" style="FONT-SIZE: 12pt">64M</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">内存</span><span lang="EN-US" style="FONT-SIZE: 12pt">(</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">默认大小和</span><span lang="EN-US" style="FONT-SIZE: 12pt">JVM</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">版本有关系</span><span lang="EN-US" style="FONT-SIZE: 12pt">)</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，这在生产环境里肯定是不够，将会导致用户通过</span><span lang="EN-US" style="FONT-SIZE: 12pt">WEB</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方式无法访问应用服务，但是系统进程中，</span><span lang="EN-US" style="FONT-SIZE: 12pt">JBOSS</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">服务却没有宕掉的奇怪现象。</span><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">修改</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple">$jboss/bin/run.conf</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件，找到&ldquo;</span><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple">#JAVA_OPTS=</span></i><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&rdquo;，如果没有该字符串，请添加，并去掉最前面的&ldquo;</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple">#</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&rdquo;，修改该字符串</span><span lang="EN-US" style="FONT-SIZE: 12pt">(</span><b><span style="FONT-SIZE: 12pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">含双引号</span></b><span lang="EN-US" style="FONT-SIZE: 12pt">)</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为</span><i><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: purple">JAVA_OPTS=&quot;-server -Xms512m -Xmx512m&rdquo;</span></i><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，这是分配</span><span lang="EN-US" style="FONT-SIZE: 12pt">JVM</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的最小和最大内存，取决于硬件物理内存的大小，建议均设为物理内存的一半。</span><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">更详细的介绍请参见</span><span lang="EN-US" style="FONT-SIZE: 12pt"><a href="http://java.sun.com/docs/hotspot/VMOptions.html">http://java.sun.com/docs/hotspot/VMOptions.html</a>
<p>&nbsp;</p>
</span></p>
<h2><a name="_Toc122949171"></a><a name="_Toc124845799"><span style="mso-bookmark: _Toc122949171"><span lang="EN-US">2.4 OS字符集问题</span></span></a></h2>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果应用服务需要</span><span lang="EN-US" style="FONT-SIZE: 12pt">OS</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">支持</span><span lang="EN-US" style="FONT-SIZE: 12pt">GBK</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">字符集，修改文件</span><span lang="EN-US" style="FONT-SIZE: 12pt">/etc/sysconfig/i18n
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">内容为：</span><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">LANG=&quot;zh_CN.GB18030&quot;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">LANGUAGE=&quot;zh_CN.GB18030:zh_CN.GB2312:zh_CN&quot;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">SUPPORTED=&quot;zh_CN.GB18030:zh_CN:zh&quot;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">SYSFONT=&quot;lat0-sun16&quot;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">SYSFONTACM=&quot;8859-15&quot;
<p>&nbsp;</p>
</span></p>
<h2><a name="_Toc120010823"></a><a name="_Toc124845800"><span style="mso-bookmark: _Toc120010823"><span lang="EN-US">2.5 JBOSS服务的启动、停止</span></span></a></h2>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><span lang="EN-US" style="FONT-SIZE: 12pt">$JBOSS_HOME</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">以及</span><span lang="EN-US" style="FONT-SIZE: 12pt">%JBOSS_HOME%</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为</span><span lang="EN-US" style="FONT-SIZE: 12pt">jboss</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在</span><span lang="EN-US" style="FONT-SIZE: 12pt">linux</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang="EN-US" style="FONT-SIZE: 12pt">win</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下安装的路径，如果配置了，直接照样引用即可。</span><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">启动：</span><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><span lang="EN-US" style="FONT-SIZE: 12pt">1</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang="EN-US" style="FONT-SIZE: 12pt">for linux</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：</span><span lang="EN-US" style="FONT-SIZE: 12pt"> $JBOSS_HOME /bin/run.sh
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>2</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang="EN-US" style="FONT-SIZE: 12pt">for win </span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：</span><span lang="EN-US" style="FONT-SIZE: 12pt">%JBOSS_HOME%/bin/run.bat
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">关闭</span><span lang="EN-US" style="FONT-SIZE: 12pt">/</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">停止</span><span lang="EN-US" style="FONT-SIZE: 12pt">:
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt"><span lang="EN-US" style="FONT-SIZE: 12pt">1</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang="EN-US" style="FONT-SIZE: 12pt">for linux</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-ansi-language: EN">：</span><span lang="EN-US" style="FONT-SIZE: 12pt"> $JBOSS_HOME /bin/ shutdown.sh &ndash;S
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 12pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>2</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang="EN-US" style="FONT-SIZE: 12pt">for win </span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-ansi-language: EN">：</span><span lang="EN-US" style="FONT-SIZE: 12pt">%JBOSS_HOME%/bin/ shutdown &ndash;S
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">可以用</span><span lang="EN-US" style="FONT-SIZE: 12pt">tail &ndash;f<span style="mso-spacerun: yes">&nbsp; </span>$JBOSS_HOME /server/default/log/server.log</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来查看</span><span lang="EN-US" style="FONT-SIZE: 12pt">jboss</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">服务的启动或停止的信息。</span><span lang="EN-US" style="FONT-SIZE: 12pt">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;
<p>&nbsp;</p>
</span></p>
<h1><a name="_Toc124845801"><span lang="EN-US" style="FONT-FAMILY: 华文中宋; mso-bidi-font-size: 15.0pt; mso-bidi-font-family: Arial">3.附apache https 服务器的安装</span></a><span lang="EN-US" style="FONT-FAMILY: 华文中宋; mso-bidi-font-size: 15.0pt; mso-bidi-font-family: Arial">
<p>&nbsp;</p>
</span></h1>
<p class="MsoNormal"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 15.0pt; mso-font-kerning: 22.0pt; mso-bidi-font-family: Arial; mso-hansi-font-family: 华文中宋">以下为李响、谭述纲提供。感谢他们。</span><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="LINE-HEIGHT: 18pt; TEXT-ALIGN: center" align="center"><a name="_Toc27980372"></a><a name="_Toc27980927"></a><a name="_Toc27982205"></a><a name="_Toc27983707"></a><a name="_Toc27983843"></a><a name="_Toc34120457"></a><a name="_Toc37040165"></a><a name="_Toc38255882"></a><a name="_Toc39477026"></a><a name="_Toc40856214"></a><a name="_Toc44821880"></a><a name="_Toc46028590"></a><a name="_Toc47428525"></a><a name="_Toc47497895"></a><a name="_Toc48976156"></a><a name="_Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><b><span lang="EN-US" style="FONT-SIZE: 15pt; FONT-FAMILY: Arial">apache https </span></b></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></a><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><b><span style="FONT-SIZE: 15pt; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">服务器的安装</span></b></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">
<p>&nbsp;</p>
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p class="MsoNormal" style="LINE-HEIGHT: 18pt"><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">apache 1.x</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">版本需要装第三方的模块，</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">mod_ssl</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">，由于我们公司全部采用的是</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">apahce2.x</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">，所以这个版本的安装不做讨论</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">
<p>&nbsp;</p>
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p class="MsoNormal" style="LINE-HEIGHT: 18pt"><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">&nbsp;
<p>&nbsp;</p>
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p class="MsoNormal" style="LINE-HEIGHT: 18pt"><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">apache 2.0</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">以上自带</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">ssl</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">支持，</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">
<p>&nbsp;</p>
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p class="MsoNormal" style="LINE-HEIGHT: 18pt"><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">但首先要安装</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">openssl</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">，一般系统自带的</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">openssl</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">版本较低，最好下载</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">
<p>&nbsp;</p>
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p class="MsoNormal" style="LINE-HEIGHT: 18pt"><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">源码安装，例如</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">openssl-0.9.7i
<p>&nbsp;</p>
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p class="MsoNormal" style="LINE-HEIGHT: 18pt"><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">./config
<p>&nbsp;</p>
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p class="MsoNormal" style="LINE-HEIGHT: 18pt"><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">Make
<p>&nbsp;</p>
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p class="MsoNormal" style="LINE-HEIGHT: 18pt"><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">Make test
<p>&nbsp;</p>
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p class="MsoNormal" style="LINE-HEIGHT: 18pt"><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">make install
<p>&nbsp;</p>
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p class="MsoNormal" style="LINE-HEIGHT: 18pt"><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">就可以了</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">
<p>&nbsp;</p>
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p class="MsoNormal" style="LINE-HEIGHT: 18pt"><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">&nbsp;
<p>&nbsp;</p>
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p class="MsoNormal" style="LINE-HEIGHT: 18pt"><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">在</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">apache2</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">源码目录下执行</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">
<p>&nbsp;</p>
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p class="MsoNormal" style="LINE-HEIGHT: 18pt"><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">./configure --prefix=/usr/local/apache --enable-module=so --enable-shared=max --enable-ssl=static <span style="mso-spacerun: yes">&nbsp;</span>--with-ssl=/usr/local/ssl <span style="mso-spacerun: yes">&nbsp;</span>--enable-mods-shared=all
<p>&nbsp;</p>
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p class="MsoNormal" style="LINE-HEIGHT: 18pt"><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">&nbsp;
<p>&nbsp;</p>
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p class="MsoNormal" style="LINE-HEIGHT: 18pt"><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">然后</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">
<p>&nbsp;</p>
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p class="MsoNormal" style="LINE-HEIGHT: 18pt"><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">Make
<p>&nbsp;</p>
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p class="MsoNormal" style="LINE-HEIGHT: 18pt"><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">make install
<p>&nbsp;</p>
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p class="MsoNormal" style="LINE-HEIGHT: 18pt"><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">&nbsp;
<p>&nbsp;</p>
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p class="MsoNormal" style="LINE-HEIGHT: 18pt"><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">修改</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">httpd.conf </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">加入</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">SSL</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">支持部分，这里指定使用</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">SSL v2</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">协议</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">
<p>&nbsp;</p>
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p class="MsoNormal" style="LINE-HEIGHT: 18pt"><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><code><span lang="EN" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-ansi-language: EN">SSLProtocol -all +SSLv2</span></code></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN" style="COLOR: black; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-ansi-language: EN"><br /></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><code><span lang="EN" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-ansi-language: EN">SSLCipherSuite SSLv2:+HIGH:+MEDIUM:+LOW:+EXP
<p>&nbsp;</p>
</span></code></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p class="MsoNormal" style="LINE-HEIGHT: 18pt"><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><code><span lang="EN" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-ansi-language: EN">&nbsp;
<p>&nbsp;</p>
</span></code></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p class="MsoNormal" style="LINE-HEIGHT: 18pt"><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><code><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 黑体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Courier New'; mso-ansi-language: EN">生成认证证书</span></code></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><code><span lang="EN" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-ansi-language: EN">
<p>&nbsp;</p>
</span></code></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p class="MsoNormal" style="LINE-HEIGHT: 18pt"><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">先建立一个</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt"> CA </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">的证书</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-ansi-language: EN">，</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt"> <br /></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">首先为</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt"> CA </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">创建一个</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt"> RSA </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">私用密钥</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-ansi-language: EN">，</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt"> <br />[S-1] <br />openssl genrsa -des3 -out ca.key 1024 <br /></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">系统提示输入</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt"> PEM pass phrase</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-ansi-language: EN">，</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">也就是密码</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-ansi-language: EN">，</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">输入后牢记它。</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt"> <br /></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">生成</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt"> ca.key </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">文件，将文件属性改为</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt">400</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">，并放在安全的地方。</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt"> <br />[S-2] <br />chmod 400 ca.key <br /></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">你可以用下列命令查看它的内容，</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt"> <br />[S-3] <br />openssl rsa -noout -text -in ca.key <br /></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">利用</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt"> CA </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">的</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt"> RSA </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">密钥创建一个自签署的</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt"> CA </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">证书（</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt">X.509</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">结构）</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt"> <br />[S-4] <br />openssl req -new -x509 -days 3650 -key ca.key -out ca.crt <br /></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">然后需要输入下列信息：</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt"> <br />Country Name: cn </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">两个字母的国家代号</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt"> <br />State or Province Name: An Hui </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">省份名称</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt"> <br />Locality Name: Bengbu </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">城市名称</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt"> <br />Organization Name: Family Network </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">公司名称</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt"> <br />Organizational Unit Name: Home </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">部门名称</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt"> <br />Common Name: Chen Yang </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">你的姓名</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt"> <br />Email Address: sunstorm@263.net Email</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">地址</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt"> <br /></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">生成</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt"> ca.crt </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">文件，将文件属性改为</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt">400</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">，并放在安全的地方。</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt"> <br />[S-5] <br />chmod 400 ca.crt <br /></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">你可以用下列命令查看它的内容，</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt"> <br />[S-6] <br />openssl x509 -noout -text -in ca.crt <br /></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">下面要创建服务器证书签署请求，</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt"> <br /></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">首先为你的</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt"> Apache </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">创建一个</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt"> RSA </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">私用密钥：</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt"> <br />[S-7] <br />openssl genrsa -des3 -out server.key 1024 <br /></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">这里也要设定</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt">pass phrase</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">。</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt"> <br /></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">生成</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt"> server.key </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">文件，将文件属性改为</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt">400</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">，并放在安全的地方。</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt"> <br />[S-8] <br />chmod 400 server.key <br /></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">你可以用下列命令查看它的内容，</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt"> <br />[S-9] <br />openssl rsa -noout -text -in server.key <br /></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">用</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt"> server.key </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">生成证书签署请求</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt"> CSR. <br />[S-10] <br />openssl req -new -key server.key -out server.csr <br /></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">这里也要输入一些信息，和</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt">[S-4]</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">中的内容类似。</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt"> <br /></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">至于</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt"> extra attributes </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">不用输入。</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt"> <br /></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">你可以查看</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt"> CSR </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">的细节</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt"> <br />[S-11] <br />openssl req -noout -text -in server.csr <br /></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">下面可以签署证书了，需要用到脚本</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt"> sign.sh <br />[S-12] <br />sign.sh server.csr <br /></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">就可以得到</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt">server.crt</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">。</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt"> <br /></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">将文件属性改为</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt">400</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">，并放在安全的地方。</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt"> <br />[S-13] <br />chmod 400 server.crt <br /></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma">删除</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt">CSR <br />[S-14] <br />rm server.csr</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">
<p>&nbsp;</p>
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p class="MsoNormal" style="LINE-HEIGHT: 18pt"><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">&nbsp;
<p>&nbsp;</p>
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p class="MsoNormal" style="LINE-HEIGHT: 18pt"><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">Sign.sh</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">在</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">openssl</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">目录中没有。我是在</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">mod_ssl</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">第三方模块中提取的。</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">
<p>&nbsp;</p>
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p class="MsoNormal" style="LINE-HEIGHT: 18pt"><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">&nbsp;
<p>&nbsp;</p>
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p class="MsoNormal" style="LINE-HEIGHT: 18pt"><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">把生成好的文件放在相应的认证目录下。如果没有相应的目录，可以手工建立</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">
<p>&nbsp;</p>
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p class="MsoNormal" style="LINE-HEIGHT: 18pt"><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">&nbsp;
<p>&nbsp;</p>
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p class="MsoNormal" style="LINE-HEIGHT: 18pt"><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">&nbsp;
<p>&nbsp;</p>
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p class="MsoNormal" style="LINE-HEIGHT: 18pt"><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">以</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">SSL</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">支持的方式启动</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">apache
<p>&nbsp;</p>
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p class="MsoNormal" style="LINE-HEIGHT: 18pt"><span style="mso-bookmark: _Toc49917562"><span style="mso-bookmark: _Toc48976156"><span style="mso-bookmark: _Toc47497895"><span style="mso-bookmark: _Toc47428525"><span style="mso-bookmark: _Toc46028590"><span style="mso-bookmark: _Toc44821880"><span style="mso-bookmark: _Toc40856214"><span style="mso-bookmark: _Toc39477026"><span style="mso-bookmark: _Toc38255882"><span style="mso-bookmark: _Toc37040165"><span style="mso-bookmark: _Toc34120457"><span style="mso-bookmark: _Toc27983843"><span style="mso-bookmark: _Toc27983707"><span style="mso-bookmark: _Toc27982205"><span style="mso-bookmark: _Toc27980927"><span style="mso-bookmark: _Toc27980372"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Tahoma; mso-bidi-font-size: 10.5pt">/usr/local/apache/bin/apachectl startssl
<p>&nbsp;</p>
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
</div>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=37</link>
			<title><![CDATA[HttpURLConnection中设置网络超时]]></title>
			<author>webmaster@xd-tech.com(jaddy0302)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Sat,06 Jan 2007 12:06:39 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=37</guid>	
		<description><![CDATA[Java中可以使用HttpURLConnection来请求WEB资源。<br />HttpURLConnection对象不能直接构造，需要通过URL.openConnection()来获得HttpURLConnection对象，示例代码如下：<br />String urlStr= <a href="http://www.jaddy.org">www.jaddy.org</a>;<br />URL url = new URL(urlStr);<br />HttpURLConnection conn = (HttpURLConnection)url.openConnection();
<p>&nbsp;</p>
<p style="LINE-HEIGHT: 150%">HttpURLConnection是基于HTTP协议的，其底层通过socket通信实现。如果不设置超时（timeout），在网络异常的情况下，可能会导致程序僵死而不继续往下执行。可以通过以下两个语句来设置相应的超时：<br />System.setProperty(&quot;sun.net.client.defaultConnectTimeout&quot;, 超时毫秒数字符串);<br />System.setProperty(&quot;sun.net.client.defaultReadTimeout&quot;, 超时毫秒数字符串);<br /></p>
<p style="LINE-HEIGHT: 150%">其中： sun.net.client.defaultConnectTimeout：连接主机的超时时间（单位：毫秒）<br />sun.net.client.defaultReadTimeout：从主机读取数据的超时时间（单位：毫秒） </p>
<p style="LINE-HEIGHT: 150%">例如：<br />System.setProperty(&quot;sun.net.client.defaultConnectTimeout&quot;, &quot;30000&quot;);<br />System.setProperty(&quot;sun.net.client.defaultReadTimeout&quot;, &quot;30000&quot;); </p>
<p style="LINE-HEIGHT: 150%">JDK 1.5以前的版本，只能通过设置这两个系统属性来控制网络超时。在1.5中，还可以使用HttpURLConnection的父类URLConnection的以下两个方法：<br />setConnectTimeout：设置连接主机超时（单位：毫秒）<br />setReadTimeout：设置从主机读取数据超时（单位：毫秒） </p>
<p style="LINE-HEIGHT: 150%">例如：<br />HttpURLConnection urlCon = (HttpURLConnection)url.openConnection();<br />urlCon.setConnectTimeout(30000);<br />urlCon.setReadTimeout(30000); </p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=36</link>
			<title><![CDATA[Too many open files 问题解决]]></title>
			<author>webmaster@xd-tech.com(jaddy0302)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Fri,05 Jan 2007 12:33:45 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=36</guid>	
		<description><![CDATA[Too&nbsp;many&nbsp;open&nbsp;files&nbsp;问题出现有两种情况：<br/>&nbsp;&nbsp;&nbsp;&nbsp;一种是在搜索的时候出现，多半是由于索引创建完毕之后被移动过，如果创建索引的时候不出现该错误，搜索的时候也一般是不会出现的。如果出现了，有两种处理办法，一种是修改合并因子和最小合并因子，并且使用<br/>&nbsp;IndexWriter.Optimize()&nbsp;&nbsp;优化索引，这样会将索引文件数量减少到文件系统限制之内；另外一种办法是修改操作系统的打开文件数量限制。方法如下：<br/>{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;1.&nbsp;按照最大打开文件数量的需求设置系统，&nbsp;并且通过检查/proc/sys/fs/file-max文件来确认最大打开文件数已经被正确设置。&nbsp;<br/><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;cat&nbsp;/proc/sys/fs/file-max<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;如果设置值太小，&nbsp;修改文件/etc/sysctl.conf的变量到合适的值。&nbsp;这样会在每次重启之后生效。&nbsp;如果设置值够大，跳过下步。&nbsp;<br/><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;echo&nbsp;2048&nbsp;&gt;&nbsp;/proc/sys/fs/file-max<br/><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;编辑文件/etc/sysctl.conf，插入下行。&nbsp;<br/><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fs.file-max&nbsp;=&nbsp;8192<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;2.&nbsp;在/etc/security/limits.conf文件中设置最大打开文件数，&nbsp;下面是一行提示：&nbsp;<br/><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&lt;domain&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;type&gt;&nbsp;&nbsp;&lt;item&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;value&gt;<br/><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;添加如下这行。&nbsp;<br/><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;-&nbsp;nofile&nbsp;8192<br/><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;这行设置了每个用户的默认打开文件数为2048。&nbsp;注意&#34;nofile&#34;项有两个可能的限制措施。就是&lt;type&gt;项下的hard和soft。&nbsp;要使修改过得最大打开文件数生效，必须对这两种限制进行设定。&nbsp;如果使用&#34;-&#34;字符设定&lt;type&gt;,&nbsp;则hard和soft设定会同时被设定。&nbsp;<br/><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;硬限制表明soft限制中所能设定的最大值。&nbsp;soft限制指的是当前系统生效的设置值。&nbsp;hard限制值可以被普通用户降低。但是不能增加。&nbsp;soft限制不能设置的比hard限制更高。&nbsp;只有root用户才能够增加hard限制值。&nbsp;<br/><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;当增加文件限制描述，可以简单的把当前值双倍。&nbsp;例子如下，&nbsp;如果你要提高默认值1024，&nbsp;最好提高到2048，&nbsp;如果还要继续增加，&nbsp;就需要设置成4096。&nbsp;<br/>}<br/>&nbsp;&nbsp;&nbsp;&nbsp;另外一种情况是在创建索引的时候，也有两种可能，一种是&nbsp;合并因子太小，导致创建文件数量超过操作系统限制，这时可以修改合并因子，也可以修改操作系统的打开文件数限制；另外一种是合并因子受虚拟机内存的限制，无法调整到更大，而&nbsp;需要索引的doc&nbsp;数量又非常的大，这个时候就只能通过修改操作系统的打开文件数限制来解决了。]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=34</link>
			<title><![CDATA[用HttpClient来模拟浏览器GET POST]]></title>
			<author>webmaster@xd-tech.com(jaddy0302)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Thu,21 Dec 2006 00:40:57 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=34</guid>	
		<description><![CDATA[<p><font size="4">一般的情况下我们都是使用IE或者Navigator浏览器来访问一个WEB服务器，用来浏览页面查看信息或者提交一些数据等等。所访问的这些页面有的仅仅是一些普通的页面，有的需要用户登录后方可使用，或者需要认证以及是一些通过加密方式传输，例如HTTPS。目前我们使用的浏览器处理这些情况都不会构成问题。不过你可能在某些时候需要通过程序来访问这样的一些页面，比如从别人的网页中&ldquo;偷&rdquo;一些数据；利用某些站点提供的页面来完成某种功能，例如说我们想知道某个手机号码的归属地而我们自己又没有这样的数据，因此只好借助其他公司已有的网站来完成这个功能，这个时候我们需要向网页提交手机号码并从返回的页面中解析出我们想要的数据来。如果对方仅仅是一个很简单的页面，那我们的程序会很简单，本文也就没有必要大张旗鼓的在这里浪费口舌。但是考虑到一些服务授权的问题，很多公司提供的页面往往并不是可以通过一个简单的URL就可以访问的，而必须经过注册然后登录后方可使用提供服务的页面，这个时候就涉及到COOKIE问题的处理。我们知道目前流行的***页技术例如ASP、JSP无不是通过COOKIE来处理会话信息的。为了使我们的程序能使用别人所提供的服务页面，就要求程序首先登录后再访问服务页面，这过程就需要自行处理cookie，想想当你用java.net.HttpURLConnection来完成这些功能时是多么恐怖的事情啊！况且这仅仅是我们所说的顽固的WEB服务器中的一个很常见的&ldquo;顽固&rdquo;！再有如通过HTTP来上传文件呢？不需要头疼，这些问题有了&ldquo;它&rdquo;就很容易解决了！ </font></p>
<p><font size="4">我们不可能列举所有可能的顽固，我们会针对几种最常见的问题进行处理。当然了，正如前面说到的，如果我们自己使用java.net.HttpURLConnection来搞定这些问题是很恐怖的事情，因此在开始之前我们先要介绍一下一个开放源码的项目，这个项目就是Apache开源组织中的httpclient，它隶属于Jakarta的commons项目，目前的版本是2.0RC2。commons下本来已经有一个net的子项目，但是又把httpclient单独提出来，可见http服务器的访问绝非易事。</font></p>
<p><font size="4">Commons-httpclient项目就是专门设计来简化HTTP客户端与服务器进行各种通讯编程。通过它可以让原来很头疼的事情现在轻松的解决，例如你不再管是HTTP或者HTTPS的通讯方式，告诉它你想使用HTTPS方式，剩下的事情交给httpclient替你完成。本文会针对我们在编写HTTP客户端程序时经常碰到的几个问题进行分别介绍如何使用httpclient来解决它们，为了让读者更快的熟悉这个项目我们最开始先给出一个简单的例子来读取一个网页的内容，然后循序渐进解决掉前进中的所形侍狻?/font&gt;
<p><font size="4">1． 读取网页(HTTP/HTTPS)内容</font></p>
<p><font size="4">下面是我们给出的一个简单的例子用来访问某个页面</font></p>
<p><font size="4">/*</font></p>
<p><font size="4">&nbsp;* Created on 2003-12-14 by Liudong</font></p>
<p><font size="4">&nbsp;*/</font></p>
<p><font size="4">package http.demo;</font></p>
<p><font size="4">&nbsp;</font></p>
<p><font size="4">import java.io.IOException;</font></p>
<p><font size="4">&nbsp;</font></p>
<p><font size="4">import org.apache.commons.httpclient.*;</font></p>
<p><font size="4">import org.apache.commons.httpclient.methods.*;</font></p>
<p><font size="4">/**</font></p>
<p><font size="4">&nbsp;* 最简单的HTTP客户端,用来演示通过GET或者POST方式访问某个页面</font></p>
<p><font size="4">&nbsp;* @author Liudong</font></p>
<p><font size="4">&nbsp;*/</font></p>
<p><font size="4">public class SimpleClient {</font></p>
<p><font size="4">&nbsp;</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp; public static void main(String[] args) throws IOException</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp; {</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpClient client = new HttpClient();&nbsp;&nbsp;&nbsp; </font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置代理服务器地址和端口&nbsp;&nbsp;&nbsp;&nbsp; </font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //client.getHostConfiguration().setProxy(&quot;proxy_host_addr&quot;,proxy_port);</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //使用GET方法，如果服务器需要通过HTTPS连接，那只需要将下面URL中的http换成https</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpMethod method = new GetMethod(&quot;</font><a href="http://java.sun.com/"><font size="4">http://java.sun.com</font></a><font size="4">&quot;); </font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //使用POST方法</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //HttpMethod method = new PostMethod(&quot;</font><a href="http://java.sun.com/"><font size="4">http://java.sun.com</font></a><font size="4">&quot;); </font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; client.executeMethod(method);</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //打印服务器返回的状态</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(method.getStatusLine());</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //打印返回的信息</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(method.getResponseBodyAsString());</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //释放连接</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; method.releaseConnection();</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp; }<br />}</font></p>
<p><font size="4">&nbsp;</font></p>
<p><font size="4">在这个例子中首先创建一个HTTP客户端(HttpClient)的实例，然后选择提交的方法是GET或者POST，最后在HttpClient实例上执行提交的方法，最后从所选择的提交方法中读取服务器反馈回来的结果。这就是使用HttpClient的基本流程。其实用一行代码也就可以搞定整个请求的过程，非常的简单！</font></p>
<p><br /><font size="4">2． 以GET或者POST方式向网页提交参数</font></p>
<p><font size="4">其实前面一个最简单的示例中我们已经介绍了如何使用GET或者POST方式来请求一个页面，本小节与之不同的是多了提交时设定页面所需的参数，我们知道如果是GET的请求方式，那么所有参数都直接放到页面的URL后面用问号与页面地址隔开，每个参数用&amp;隔开，例如：</font><a href="http://java.sun.com/?name=liudong&amp;mobile=123456"><font size="4">http://java.sun.com?name=liudong&amp;mobile=123456</font></a><font size="4">，但是当使用POST方法时就会稍微有一点点麻烦。本小节的例子演示向如何查询手机号码所在的城市，代码如下：</font></p>
<p><font size="4">&nbsp;</font></p>
<p><font size="4">/*</font></p>
<p><font size="4">&nbsp;* Created on 2003-12-7 by Liudong</font></p>
<p><font size="4">&nbsp;*/</font></p>
<p><font size="4">package http.demo;</font></p>
<p><font size="4">&nbsp;</font></p>
<p><font size="4">import java.io.IOException;</font></p>
<p><font size="4">&nbsp;</font></p>
<p><font size="4">import org.apache.commons.httpclient.*;</font></p>
<p><font size="4">import org.apache.commons.httpclient.methods.*;</font></p>
<p><font size="4">/**</font></p>
<p><font size="4">&nbsp;* 提交参数演示</font></p>
<p><font size="4">&nbsp;* 该程序连接到一个用于查询手机号码所属地的页面</font></p>
<p><font size="4">&nbsp;* 以便查询号码段1330227所在的省份以及城市</font></p>
<p><font size="4">&nbsp;* @author Liudong</font></p>
<p><font size="4">&nbsp;*/</font></p>
<p><font size="4">public class SimpleHttpClient {</font></p>
<p><font size="4">&nbsp;</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp; public static void main(String[] args) throws IOException</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp; {</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpClient client = new HttpClient();</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; client.getHostConfiguration().setHost(&quot;</font><a href="http://www.imobile.com.cn/"><font size="4">www.imobile.com.cn</font></a><font size="4">&quot;, 80, &quot;http&quot;);</font></p>
<p><font size="4">&nbsp;</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpMethod method = getPostMethod();//使用POST方式提交数据</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; client.executeMethod(method);</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //打印服务器返回的状态</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(method.getStatusLine());</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //打印结果页面</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String response =</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new String(method.getResponseBodyAsString().getBytes(&quot;8859_1&quot;));</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //打印返回的信息</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(response);</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; method.releaseConnection();</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp; }</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp; /**</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp; * 使用GET方式提交数据</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp; * @return</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp; */</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp; private static HttpMethod getGetMethod(){</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return new GetMethod(&quot;/simcard.php?simcard=1330227&quot;);</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp; }</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp; /**</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp; * 使用POST方式提交数据</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp; * @return</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp; */</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp; private static HttpMethod getPostMethod(){</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PostMethod post = new PostMethod(&quot;/simcard.php&quot;);</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NameValuePair simcard = new NameValuePair(&quot;simcard&quot;,&quot;1330227&quot;);</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; post.setRequestBody(new NameValuePair[] { simcard});</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return post;</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp; }</font></p>
<p><font size="4">}</font></p>
<p><font size="4">在上面的例子中页面</font><a href="http://www.imobile.com.cn/simcard.php"><font size="4">http://www.imobile.com.cn/simcard.php</font></a><font size="4">需要一个参数是simcard，这个参数值为手机号码段，即手机号码的前七位，服务器会返回提交的手机号码对应的省份、城市以及其他详细信息。GET的提交方法只需要在URL后加入参数信息，而POST则需要通过NameValuePair类来设置参数名称和它所对应的值</font></p>
<p><font size="4">3． 处理页面重定向</font></p>
<p><font size="4">在JSP/Servlet编程中response.sendRedirect方法就是使用HTTP协议中的重定向机制。它与JSP中的&lt;jsp:forward &hellip;&gt;的区别在于后者是在服务器中实现页面的跳转，也就是说应用容器加载了所要跳转的页面的内容并返回给客户端；而前者是返回一个状态码，这些状态码的可能值见下表，然后客户端读取需要跳转到的页面的URL并重新加载新的页面。就是这样一个过程，所以我们编程的时候就要通过HttpMethod.getStatusCode()方法判断返回值是否为下表中的某个值来判断是否需要跳转。如果已经确认需要进行页面跳转了，那么可以通过读取HTTP头中的location属性来获取新的地址。</font></p>
<p><font size="4">状态码<br />&nbsp;对应HttpServletResponse的常量<br />&nbsp;详细描述<br />&nbsp;<br />301<br />&nbsp;SC_MOVED_PERMANENTLY<br />&nbsp;页面已经永久移到另外一个新地址<br />&nbsp;<br />302<br />&nbsp;SC_MOVED_TEMPORARILY<br />&nbsp;页面暂时移动到另外一个新的地址<br />&nbsp;<br />303<br />&nbsp;SC_SEE_OTHER<br />&nbsp;客户端请求的地址必须通过另外的URL来访问<br />&nbsp;<br />307<br />&nbsp;SC_TEMPORARY_REDIRECT<br />&nbsp;同SC_MOVED_TEMPORARILY<br />&nbsp;</font></p>
<p><br /><font size="4">下面的代码片段演示如何处理页面的重定向</font></p>
<p><font size="4">client.executeMethod(post);</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(post.getStatusLine().toString()); </font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; post.releaseConnection();</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //检查是否重定向</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int statuscode = post.getStatusCode();</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ((statuscode == HttpStatus.SC_MOVED_TEMPORARILY) ||</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (statuscode == HttpStatus.SC_MOVED_PERMANENTLY) ||</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (statuscode == HttpStatus.SC_SEE_OTHER) ||</font></p>
<p><font size="4">(statuscode == HttpStatus.SC_TEMPORARY_REDIRECT)) {</font></p>
<p><font size="4">//读取新的URL地址</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Header header = post.getResponseHeader(&quot;location&quot;);</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (header != null) {</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String newuri = header.getValue();</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ((newuri == null) || (newuri.equals(&quot;&quot;)))</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; newuri = &quot;/&quot;; </font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GetMethod redirect = new GetMethod(newuri);</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; client.executeMethod(redirect);</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot;Redirect:&quot;+ redirect.getStatusLine().toString()); </font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; redirect.releaseConnection();</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else </font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot;Invalid redirect&quot;);</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></p>
<p><font size="4">我们可以自行编写两个JSP页面，其中一个页面用response.sendRedirect方法重定向到另外一个页面用来测试上面的例子。</font></p>
<p><font size="4">4． 模拟输入用户名和口令进行登录</font></p>
<p><font size="4">本小节应该说是HTTP客户端编程中最常碰见的问题，很多网站的内容都只是对注册用户可见的，这种情况下就必须要求使用正确的用户名和口令登录成功后，方可浏览到想要的页面。因为HTTP协议是无状态的，也就是连接的有效期只限于当前请求，请求内容结束后连接就关闭了。在这种情况下为了保存用户的登录信息必须使用到Cookie机制。以JSP/Servlet为例，当浏览器请求一个JSP或者是Servlet的页面时，应用服务器会返回一个参数，名为jsessionid（因不同应用服务器而异），值是一个较长的唯一字符串的Cookie，这个字符串值也就是当前访问该站点的会话标识。浏览器在每访问该站点的其他页面时候都要带上jsessionid这样的Cookie信息，应用服务器根据读取这个会话标识来获取对应的会话信息。</font></p>
<p><font size="4">对于需要用户登录的网站，一般在用户登录成功后会将用户资料保存在服务器的会话中，这样当访问到其他的页面时候，应用服务器根据浏览器送上的Cookie中读取当前请求对应的会话标识以获得对应的会话信息，然后就可以判断用户资料是否存在于会话信息中，如果存在则允许访问页面，否则跳转到登录页面中要求用户输入帐号和口令进行登录。这就是一般使用JSP开发网站在处理用户登录的比较通用的方法。</font></p>
<p><font size="4">这样一来，对于HTTP的客户端来讲，如果要访问一个受保护的页面时就必须模拟浏览器所做的工作，首先就是请求登录页面，然后读取Cookie值；再次请求登录页面并加入登录页所需的每个参数；最后就是请求最终所需的页面。当然在除第一次请求外其他的请求都需要附带上Cookie信息以便服务器能判断当前请求是否已经通过验证。说了这么多，可是如果你使用httpclient的话，你甚至连一行代码都无需增加，你只需要先传递登录信息执行登录过程，然后直接访问想要的页面，跟访问一个普通的页面没有任何区别，因为类HttpClient已经帮你做了所有该做的事情了，太棒了！下面的例子实现了这样一个访问的过程。</font></p>
<p><br /><font size="4">/*</font></p>
<p><font size="4">&nbsp;* Created on 2003-12-7 by Liudong</font></p>
<p><font size="4">&nbsp;*/</font></p>
<p><font size="4">package http.demo;</font></p>
<p><font size="4">&nbsp;</font></p>
<p><font size="4">import org.apache.commons.httpclient.*;</font></p>
<p><font size="4">import org.apache.commons.httpclient.cookie.*;</font></p>
<p><font size="4">import org.apache.commons.httpclient.methods.*;</font></p>
<p><font size="4">&nbsp;</font></p>
<p><font size="4">/**</font></p>
<p><font size="4">&nbsp;* 用来演示登录表单的示例</font></p>
<p><font size="4">&nbsp;* @author Liudong</font></p>
<p><font size="4">&nbsp;*/</font></p>
<p><font size="4">public class FormLoginDemo {</font></p>
<p><font size="4">&nbsp;</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp; static final String LOGON_SITE = &quot;localhost&quot;;</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp; static final int&nbsp;&nbsp;&nbsp; LOGON_PORT = 8080;</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp; </font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp; public static void main(String[] args) throws Exception{</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpClient client = new HttpClient();</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; client.getHostConfiguration().setHost(LOGON_SITE, LOGON_PORT);</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //模拟登录页面login.jsp-&gt;main.jsp</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PostMethod post = new PostMethod(&quot;/main.jsp&quot;);</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NameValuePair name = new NameValuePair(&quot;name&quot;, &quot;ld&quot;);&nbsp;&nbsp;&nbsp;&nbsp; </font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NameValuePair pass = new NameValuePair(&quot;password&quot;, &quot;ld&quot;);&nbsp;&nbsp;&nbsp;&nbsp; </font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; post.setRequestBody(new NameValuePair[]{name,pass});</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int status = client.executeMethod(post);</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(post.getResponseBodyAsString());</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; post.releaseConnection();&nbsp; </font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //查看cookie信息</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CookieSpec cookiespec = CookiePolicy.getDefaultSpec();</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cookie[] cookies = cookiespec.match(LOGON_SITE, LOGON_PORT, &quot;/&quot;, false, client.getState().getCookies());</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (cookies.length == 0) {</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot;None&quot;);&nbsp;&nbsp;&nbsp; </font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; cookies.length; i++) {</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(cookies[i].toString());&nbsp;&nbsp;&nbsp; </font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //访问所需的页面main2.jsp</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GetMethod get = new GetMethod(&quot;/main2.jsp&quot;);</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; client.executeMethod(get);</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(get.getResponseBodyAsString());</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get.releaseConnection();</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp; }</font></p>
<p><font size="4">}</font></p>
<p><font size="4">5． 提交XML格式参数</font></p>
<p><font size="4">提交XML格式的参数很简单，仅仅是一个提交时候的ContentType问题，下面的例子演示从文件文件中读取XML信息并提交给服务器的过程，该过程可以用来测试Web服务。</font></p>
<p><font size="4">import java.io.File;</font></p>
<p><font size="4">import java.io.FileInputStream;</font></p>
<p><font size="4">&nbsp;</font></p>
<p><font size="4">import org.apache.commons.httpclient.HttpClient;</font></p>
<p><font size="4">import org.apache.commons.httpclient.methods.EntityEnclosingMethod;</font></p>
<p><font size="4">import org.apache.commons.httpclient.methods.PostMethod;</font></p>
<p><font size="4">&nbsp;</font></p>
<p><font size="4">/**</font></p>
<p><font size="4">&nbsp;* 用来演示提交XML格式数据的例子</font></p>
<p><font size="4">&nbsp;*/</font></p>
<p><font size="4">public class PostXMLClient {</font></p>
<p><font size="4">&nbsp;</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp; public static void main(String[] args) throws Exception {</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; File input = new File(&ldquo;test.xml&rdquo;);</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PostMethod post = new PostMethod(&ldquo;http://localhost:8080/httpclient/xml.jsp&rdquo;);</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 设置请求的内容直接从文件中读取</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; post.setRequestBody(new FileInputStream(input));</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (input.length() &lt; Integer.MAX_VALUE) </font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; post.setRequestContentLength(input.length());</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; post.setRequestContentLength(EntityEnclosingMethod.CONTENT_LENGTH_CHUNKED);</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 指定请求内容的类型</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; post.setRequestHeader(&quot;Content-type&quot;, &quot;text/xml; charset=GBK&quot;);</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpClient httpclient = new HttpClient(); </font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int result = httpclient.executeMethod(post); </font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot;Response status code: &quot; + result);</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot;Response body: &quot;);</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(post.getResponseBodyAsString());</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; post.releaseConnection();</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp; }</font></p>
<p><font size="4">}</font></p>
<p><font size="4">6． 通过HTTP上传文件</font></p>
<p><font size="4">httpclient使用了单独的一个HttpMethod子类来处理文件的上传，这个类就是MultipartPostMethod，该类已经封装了文件上传的细节，我们要做的仅仅是告诉它我们要上传文件的全路径即可，下面的代码片段演示如何使用这个类。</font></p>
<p><font size="4">MultipartPostMethod filePost = new MultipartPostMethod(targetURL);</font></p>
<p><font size="4">filePost.addParameter(&quot;fileName&quot;, targetFilePath);</font></p>
<p><font size="4">HttpClient client = new HttpClient();</font></p>
<p><font size="4">//由于要上传的文件可能比较大,因此在此设置最大的连接超时时间</font></p>
<p><font size="4">client.getHttpConnectionManager().getParams().setConnectionTimeout(5000);</font></p>
<p><font size="4">int status = client.executeMethod(filePost);</font></p>
<p><br /><font size="4">上面代码中，targetFilePath即为要上传的文件所在的路径。</font></p>
<p><font size="4">7． 访问启用认证的页面</font></p>
<p><font size="4">我们经常会碰到这样的页面，当访问它的时候会弹出一个浏览器的对话框要求输入用户名和密码后方可，这种用户认证的方式不同于我们在前面介绍的基于表单的用户身份验证。这是HTTP的认证策略，httpclient支持三种认证方式包括：基本、摘要以及NTLM认证。其中基本认证最简单、通用但也最不安全；摘要认证是在HTTP 1.1中加入的认证方式，而NTLM则是微软公司定义的而不是通用的规范，最新版本的NTLM是比摘要认证还要安全的一种方式。</font></p>
<p><font size="4">下面例子是从httpclient的CVS服务器中下载的，它简单演示如何访问一个认证保护的页面：</font></p>
<p><br /><font size="4">import org.apache.commons.httpclient.HttpClient;</font></p>
<p><font size="4">import org.apache.commons.httpclient.UsernamePasswordCredentials;</font></p>
<p><font size="4">import org.apache.commons.httpclient.methods.GetMethod;</font></p>
<p><font size="4">&nbsp;</font></p>
<p><font size="4">public class BasicAuthenticationExample {</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp; public BasicAuthenticationExample() {</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp; }</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp; public static void main(String[] args) throws Exception {</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpClient client = new HttpClient();</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; client.getState().setCredentials(</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;</font><a href="http://www.verisign.com/"><font size="4">www.verisign.com</font></a><font size="4">&quot;,</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;realm&quot;,</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new UsernamePasswordCredentials(&quot;username&quot;, &quot;password&quot;)</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; );</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GetMethod get = new GetMethod(&quot;</font><a href="https://www.verisign.com/products/index.html"><font size="4">https://www.verisign.com/products/index.html</font></a><font size="4">&quot;);</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get.setDoAuthentication( true );</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int status = client.executeMethod( get );</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(status+&quot;&quot;+ get.getResponseBodyAsString());</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get.releaseConnection();</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp; }</font></p>
<p><font size="4">}</font></p>
<p><font size="4">8． 多线程模式下使用httpclient</font></p>
<p><font size="4">多线程同时访问httpclient，例如同时从一个站点上下载多个文件。对于同一个HttpConnection同一个时间只能有一个线程访问，为了保证多线程工作环境下不产生冲突，httpclient使用了一个多线程连接管理器的类：MultiThreadedHttpConnectionManager，要使用这个类很简单，只需要在构造HttpClient实例的时候传入即可，代码如下：</font></p>
<p><font size="4">MultiThreadedHttpConnectionManager connectionManager = </font></p>
<p><font size="4">&nbsp;&nbsp; new MultiThreadedHttpConnectionManager();</font></p>
<p><font size="4">HttpClient client = new HttpClient(connectionManager);</font></p>
<p><font size="4">以后尽管访问client实例即可。</font></p>
<p><font size="4">参考资料：</font></p>
<p><font size="4">httpclient首页：&nbsp;&nbsp;&nbsp; </font><a href="http://jakarta.apache.org/commons/httpclient/"><font size="4">http://jakarta.apache.org/commons/httpclient/</font></a><br /><font size="4">关于NTLM是如何工作：&nbsp; </font><a href="http://davenport.sourceforge.net/ntlm.html"><font size="4">http://davenport.sourceforge.net/ntlm.html</font></a><br /></p>
</font></p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=33</link>
			<title><![CDATA[字符集编码检测]]></title>
			<author>webmaster@xd-tech.com(jaddy0302)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Sat,09 Dec 2006 15:17:50 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=33</guid>	
		<description><![CDATA[<p>nsDetector det = new nsDetector(nsPSMDetector.ALL);<br />&nbsp;&nbsp;&nbsp; nsICharsetDetectionObserver nsIC = new nsICharsetDetectionObserver() {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String encod = &quot;&quot;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void Notify(String charset) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HtmlCharsetDetector.found = true;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; encod = charset;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot;CHARSET = &quot; + charset);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public String getEncoding() {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot;获得编码：&quot; + encod);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return encod;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; };</p>
<p>&nbsp;&nbsp;&nbsp; det.Init(nsIC);</p>
<p><br />&nbsp;&nbsp;&nbsp; det.DoIt(buf, buf.length, false);<br />&nbsp;&nbsp;&nbsp; det.DataEnd();<br />&nbsp;&nbsp;&nbsp; String encode = nsIC.getEncoding();</p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=32</link>
			<title><![CDATA[一个很有意思的网站，制作和Google 一样的图标]]></title>
			<author>webmaster@xd-tech.com(jaddy0302)</author>
			<category><![CDATA[其他]]></category>
			<pubDate>Mon,20 Nov 2006 16:50:08 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=32</guid>	
		<description><![CDATA[<p>很有意思</p>
<p><a href="http://www.igogo8.com/">http://www.igogo8.com/</a></p>
<p>效果</p>
<p><a title="点我一下，换个风格看 Jaddy0302" href="http://ghlp.igogo8.com/igoogle8/make/?m=1&amp;t=1&amp;c=5&amp;s=Jaddy0302"><img alt="" src="http://img.igogo8.com/igoogle8/showimg/0/1/Jaddy0302.gif" border="0" /></a>&nbsp;</p>
<p>公司的</p>
<p><a href="http://ggss.igogo8.com/igoogle8/make/?m=0&amp;t=11&amp;s=%E7%BA%BF%E7%82%B9%E7%A7%91%E6%8A%80"><img alt="点我一下，换个风格看 线点科技" src="http://img.igogo8.com/igoogle8/showimg/0/11/%E7%BA%BF%E7%82%B9%E7%A7%91%E6%8A%80.gif" border="0" /></a></p>
<p><img onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(this.resized) {window.open(this.src);}" alt="" src="http://www.gwftp.com/attachments/month_0608/_%20_2_j0lkzkyX8Nwp.gif" onload="if(this.width&gt;screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window';}" border="0" />&nbsp;&nbsp;<img onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(this.resized) {window.open(this.src);}" alt="" src="http://www.gwftp.com/attachments/month_0608/__%20_3_YznLu5jA5REU.gif" onload="if(this.width&gt;screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window';}" border="0" />&nbsp; &nbsp; <img onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(this.resized) {window.open(this.src);}" alt="" src="http://www.gwftp.com/attachments/month_0608/__2_LlB5ysgXSJ8m.gif" onload="if(this.width&gt;screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window';}" border="0" /><br /></p>
<p>&nbsp;还有一个国外的&nbsp; </p>
<p><a href="http://funnylogo.net/engines/Google/White/Jaddy0302.aspx"><img id="imglogo" src="http://funnylogo.net/logo/Google/White/Jaddy0302.aspx" alt="" /></a>&nbsp;</p>
<p>网站地址：</p>
<p><a href="http://googlealive.com/create.asp"><img alt="search engines  googletestad  matrix_revolutions  rune fonts  novelty fonts  perm style  public style" src="http://googlealive.com/images/logo_FunnyLogo.gif" /></a></p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=31</link>
			<title><![CDATA[分词算法设计思想----本站 Lucene 分词算法]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Sun,19 Nov 2006 13:28:48 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=31</guid>	
		<description><![CDATA[<p>首先是词库</p>
<p>词库包含有以下种 ， 其功能对应分别为：</p>
<p>snotforeign 消除部分组合歧异&nbsp; 例如：博客中搜索 （中搜）</p>
<p>numbers_u8 分词处理，分简体和繁体， 中英文数字 例如：二零零六</p>
<p>foreign_u8 外来词处理</p>
<p>surname_u8&nbsp; 人名区分</p>
<p>bothlexu8 分词词库主体</p>
<p>内存中的词库组织形式为：</p>
<p>词条(keyword)&nbsp; 类别(type)</p>
<p>其中，词条 就是 bothlexu8 文件中的一行或其子串 ， 类别 有两种 ， 一种是 原始词（bothlexu8 文件中的一行） ， 一种是原始词截取的子串（用于最大切分）</p>
<p>然后是分词算法，描述如下：</p>
<p>从待切分字串str中取出一个字符（currentchar），把这个字符加到匹配字符串（currentword）中去，到词典中去匹配（同时匹配currentword+next currentchar），如果匹配成功，则取出匹配的字符串，得到该串的类型，如果是1（原始词），则匹配成功，在取下一个字符的时候将该词加入Token；如果匹配类别是2（原始词子串），表示有可能不是最大匹配，则继续取字符进行下一次匹配 ，如果匹配不成功表示当前字符已是最大匹配，加入Token；如果匹配成功则继续取字匹配。如果当前字符是与前一字符不同类别（中英文、数字、字符等），则当前currentword加入 Token，去掉标点符号等字符。</p>
<p>加入Token 同时记录词的位置信息（包含标点符号等字符） ， 当前词库取词只取4个字符或者以下的词条，如有需要可以将该值加到8个或以上，对性能有些影响，不适合太大。另外，平移窗口大小是1个字符 ， 也可以扩展到2个字符或者3个字符甚至更大，但是，增大平移窗口需要有对窗口的处理，也比较麻烦。</p>
<p>这个算法的处理效率为 2万字/秒 ，不过是单线程的 ， 要是能够到多线程，速度估计可以在提高N倍，如果可以达到20W字/秒，就比较有用了。</p>
<p>另外分词准确程度取决词库，没有完善的知识库，这是一个缺陷，组合歧异识别在这里面只是一个可有可无的小功能，以后的工作就是不断的完善知识库，增加歧异消除和新词识别（名字，如人名、地名、机构名等）功能</p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=30</link>
			<title><![CDATA[搜索引擎历史【转贴】]]></title>
			<author>webmaster@xd-tech.com(christian)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Wed,15 Nov 2006 15:55:43 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=30</guid>	
		<description><![CDATA[<p>1990年以前，没有任何人能搜索互联网。 </p>
<p>　　所有搜索引擎的祖先，是1990年由Montreal的McGill University学生Alan Emtage、Peter Deutsch、Bill Wheelan发明的Archie(Archie FAQ)。当时World Wide Web还未出现。Archie是第一个自动索引互联网上匿名FTP网站文件的程序，但它还不是真正的搜索引擎。Archie是一个可搜索的FTP文件名列表，用户必须输入精确的文件名搜索，然后Archie会告诉用户哪一个FTP地址可以下载该文件。</p>
<p>　　由于Archie深受欢迎，受其启发，Nevada System Computing Services大学于1993年开发了一个Gopher（Gopher FAQ）搜索工具Veronica（Veronica FAQ）。Jughead是后来另一个Gopher搜索工具。</p>
<p>　　由于专门用于检索信息的Robot程序象蜘蛛(spider)一样在网络间爬来爬去，因此，搜索引擎的Robot程序被称为spider(Spider FAQ)程序。世界上第一个Spider程序，是MIT Matthew Gray的World wide Web Wanderer，用于追踪互联网发展规模。刚开始它只用来统计互联网上的服务器数量，后来则发展为也能够捕获网址（URL）。</p>
<p>　　与Wanderer相对应，1993年10月Martijn Koster创建了ALIWEB（Martijn Koster Annouces the Availability of Aliweb），它相当于Archie的HTTP版本。ALIWEB不使用网络搜寻Robot，如果网站主管们希望自己的网页被ALIWEB收录，需要自己提交每一个网页的简介索引信息，类似于后来大家熟知的Yahoo。</p>
<p>　　1993年底，一些基于此原理的搜索引擎开始纷纷涌现，其中最负盛名的三个是：Scotland的JumpStation、Colorado 大学Oliver McBryan的The World Wide Web Worm（First Mention of McBryan&rsquo;s World Wide Web Worm）、NASA的Repository-Based Software Engineering (RBSE) spider。</p>
<p>　　1993年2月，6个Stanford（斯坦福）大学生的想法是分析字词关系，以对互联网上的大量信息作更有效的检索。这就是Excite。后来曾以概念搜索闻名，2002年5月，被Infospace收购的Excite停止自己的搜索引擎，改用元搜索引擎Dogpile</p>
<p>　　1994年1月，第一个既可搜索又可浏览的分类目录EINet Galaxy（Tradewave Galaxy）上线。除了网站搜索，它还支持Gopher和Telnet搜索。　</p>
<p>　　1994年4月，Stanford两名博士生，美籍华人Jerry Yang（杨致远）和David Filo共同创办了Yahoo。随着访问量和收录链接数的增长，Yahoo目录开始支持简单的数据库搜索。因为Yahoo!的数据是手工输入的，所以不能真正被归为搜索引擎，事实上只是一个可搜索的目录。搜索效率明显提高。（Yahoo以后陆续使用Altavista、Inktomi、Google提供搜索引擎服务）</p>
<p>　　1994年初，Washington大学CS学生Brian Pinkerton开始了他的小项目WebCrawler（Brian Pinkerton Announces the Availability of Webcrawler）。1994年4月20日，WebCrawler正式亮相时仅包含来自6000个服务器的内容。WebCrawler是互联网上第一个支持搜索文件全部文字的全文搜索引擎，在它之前，用户只能通过URL和摘要搜索，摘要一般来自人工评论或程序自动取正文的前100个字。（后来webcrawler陆续被AOL和Excite收购，现在和excite一样改用元搜索引擎Dogpile）</p>
<p>　　Lycos（Carnegie Mellon University Center for Machine Translation Announces Lycos ）是搜索引擎史上又一个重要的进步。Carnegie Mellon University的Michael Mauldin将John Leavitt的spider程序接入到其索引程序中，创建了Lycos。1994年7月20日，数据量为54,000的Lycos正式发布。除了相关性排序外，Lycos还提供了前缀匹配和字符相近限制，Lycos第一个在搜索结果中使用了网页自动摘要，而最大的优势还是它远胜过其它搜索引擎的数据量：1994年8月－－394,000 documents；1995年1月－－1.5 million documents；1996年11月－－over 60 million documents。（注：1999年4月，Lycos停止自己的Spider，改由Fast提供搜索引擎服务）</p>
<p>　　Infoseek（Steve Kirsch Announces Free Demos Of the Infoseek Search Engine）是另一个重要的搜索引擎，虽然公司声称1994年1月已创立，但直到年底它的搜索引擎才与公众见面。起初，Infoseek只是一个不起眼的搜索引擎，它沿袭Yahoo!和Lycos的概念，并没有什么独特的革新。但是它的发展史和后来受到的众口称赞证明，起初第一个登台并不总是很重要。Infoseek友善的用户界面、大量附加服务（such as UPS tracking, News, a directory, and the like) 使它声望日隆。而1995年12月与Netscape的战略性协议，使它成为一个强势搜索引擎：当用户点击Netscape浏览器上的搜索按钮时，弹出Infoseek的搜索服务，而此前由Yahoo!提供该服务。（注：Infoseek后来曾以相关性闻名，2001年2月，Infoseek停止了自己的搜索引擎，开始改用Overture的搜索结果）</p>
<p>　　1995年，一种新的搜索引擎形式出现了&mdash;&mdash;元搜索引擎（A Meta Search Engine Roundup）。用户只需提交一次搜索请求，由元搜索引擎负责转换处理后提交给多个预先选定的独立搜索引擎，并将从各独立搜索引擎返回的所有查询结果，集中起来处理后再返回给用户。第一个元搜索引擎，是Washington大学硕士生 Eric Selberg 和 oren Etzioni 的 Metacrawler。元搜索引擎概念上好听，但搜索效果始终不理想，所以没有哪个元搜索引擎有过强势地位。　</p>
<p>　　DEC的AltaVista(2001年夏季起部分网友需通过p-roxy访问，无p-roxy可用qbseach单选altavista搜索，只能显示第一页搜索结果)是一个迟到者，1995年12月才登场亮相（AltaVista Public Beta Press Release ）。但是，大量的创新功能使它迅速到达当时搜索引擎的顶峰。Altavista最突出的优势是它的速度（搜索引擎9238：比较搞笑，设计altavista的目的，据说只是为了展示DEC Alpha芯片的强大运算能力）。　　而Altavista的另一些新功能，则永远改变了搜索引擎的定义。AltaVista是第一个支持自然语言搜索的搜索引擎，AltaVista是第一个实现高级搜索语法的搜索引擎（如AND, or, NOT等)。用户可以用AltaVista搜索Newsgroups（新闻组）的内容并从互联网上获得文章，还可以搜索图片名称中的文字、搜索Titles、搜索Java applets、搜索ActiveX objects。AltaVista也声称是第一个支持用户自己向网页索引库提交或删除URL的搜索引擎，并能在24小时内上线。AltaVista最有趣的新功能之一，是搜索有链接指向某个URL的所有网站。在面向用户的界面上，AltaVista也作了大量革新。它在搜索框区域下放了&ldquo;tips&rdquo;以帮助用户更好的表达搜索式，这些小tip经常更新，这样，在搜索过几次以后，用户会看到很多他们可能从来不知道的的有趣功能。这系列功能，逐渐被其它搜索引擎广泛采用。1997年，AltaVista发布了一个图形演示系统LiveTopics，帮助用户从成千上万的搜索结果中找到想要的。</p>
<p>　　然后到来的是HotBot。1995年9月26日，加州伯克利分校CS助教Eric Brewer、博士生Paul Gauthier创立了Inktomi（UC Berkeley Announces Inktomi），1996年5月20日，Inktomi公司成立，强大的HotBot出现在世人面前。声称每天能抓取索引1千万页以上，所以有远超过其它搜索引擎的新内容。HotBot也大量运用cookie储存用户的个人搜索喜好设置。（Hotbot曾是随后几年最受欢迎的搜索引擎之一，后被Lycos收购）</p>
<p>　　Northernlight 公司于1995年9月成立于马萨诸塞州剑桥，1997年8月，Northernlight搜索引擎正式现身。它曾是拥有最大数据库的搜索引擎之一，它没有Stop Words，它有出色的Current News、7,100多出版物组成的Special Collection、良好的高级搜索语法，第一个支持对搜索结果进行简单的自动分类。（2002年1月16日，Northernlight公共搜索引擎关闭，随后被divine收购，但在Nlresearch，选中&quot;World Wide Web only&quot;，仍可使用Northernlight搜索引擎）</p>
<p>　　1998年10月之前，Google只是Stanford大学的一个小项目BackRub。1995年博士生Larry Page开始学习搜索引擎设计，于1997年9月15日注册了google.com的域名，1997年底，在Sergey Brin和Scott Hassan、Alan Steremberg的共同参与下，BachRub开始提供Demo。1999年2月，Google完成了从Alpha版到Beta版的蜕变。Google公司则把1998年9月27日认作自己的生日。</p>
<p>　　Google在Pagerank、动态摘要、网页快照、DailyRefresh、多文档格式支持、地图股票词典寻人等集成搜索、多语言支持、用户界面等功能上的革新，象Altavista一样，再一次永远改变了搜索引擎的定义。</p>
<p>　　在2000年中以前，Google虽然以搜索准确性备受赞誉，但因为数据库不如其它搜索引擎大，缺乏高级搜索语法，所以使用价值不是很高，推广并不快。直到2000年中数据库升级后，又借被Yahoo选作搜索引擎的东风，才一飞冲天。</p>
<p>　　Fast（Alltheweb）公司创立于1997年，是挪威科技大学(NTNU)学术研究的副产品。1999年5月，发布了自己的搜索引擎AllTheWeb。Fast创立的目标是做世界上最大和最快的搜索引擎，几年来庶几近之。Fast（Alltheweb）的网页搜索可利用ODP自动分类，支持Flash和pdf搜索，支持多语言搜索，还提供新闻搜索、图像搜索、视频、MP3、和FTP搜索，拥有极其强大的高级搜索功能。</p>
<p>　　Teoma 起源于1998年Rutgers大学的一个项目。Apostolos Gerasoulis教授带领华裔Tao Yang教授等人创立Teoma于新泽西Piscataway，2001年春初次登场，2001年9月被提问式搜索引擎Ask Jeeves收购，2002年4月再次发布。Teoma的数据库目前仍偏小，但有两个出彩的功能：支持类似自动分类的Refine；同时提供专业链接目录的Resources。</p>
<p>　　Wisenut 由韩裔Yeogirl Yun创立。2001年春季发布Beta版，2001年9月5日发布正式版，2002年4月被分类目录提供商looksmart收购。wisenut也有两个出彩的功能：包含类似自动分类和相关检索词的WiseGuide；预览搜索结果的Sneak-a-Peek。</p>
<p>　　Gigablast 由前Infoseek工程师Matt Wells创立，2002年3月展示pre-beta版，2002年7月21日发布Beta版。Gigablast的数据库目前仍偏小，但也提供网页快照，一个特色功能是即时索引网页，你的网页刚提交它就能搜索（注：这个spammers的肉包子功能暂已关闭）。</p>
<p>　　Openfind 创立于1998年1月，其技术源自台湾中正大学吴升教授所领导的GAIS实验室。Openfind起先只做中文搜索引擎，曾经是最好的中文搜索引擎，鼎盛时期同时为三大著名门户新浪、奇摩、雅虎提供中文搜索引擎，但2000年后市场逐渐被Baidu和Google瓜分。2002年6月，Openfind重新发布基于GAIS30 Project的Openfind搜索引擎Beta版，推出多元排序(PolyRankTM)，宣布累计抓取网页35亿，开始进入英文搜索领域，此后技术升级明显加快。</p>
<p>　　北大天网 是国家&quot;九五&quot;重点科技攻关项目&quot;中文编码和分布式中英文信息发现&quot;的研究成果，由北大计算机系网络与分布式系统研究室开发，于1997年10月29日正式在CERNET上提供服务。2000年初成立天网搜索引擎新课题组，由国家973重点基础研究发展规划项目基金资助开发，收录网页约6000万，利用教育网优势，有强大的ftp搜索功能。</p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=29</link>
			<title><![CDATA[通用时间格式转换可以转换的时间戳格式列表]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Sat,11 Nov 2006 17:37:59 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=29</guid>	
		<description><![CDATA[<p>可以识别以下格式的时间：</p>
<p>16 Sep 2004 00:13:31<br />Mon, 28 Aug 2006<br />Thu, 7 Sep 2006 22:23 GMT<br />29 Dec 2005 09:10:00 -0500<br />8/8/2006<br />16 Sep 2004 00:13:32<br />03/08/2006<br />July 27 2004 17:49:07.<br />January 31 2005 16:40:37.<br />Friday, 15 9 2006 12:00:00 -0700<br />1158993184<br />Thu, 21 Sep 2006 19:19 GMT<br />2006-05-17<br />9/23/2006 9:25:57 PM<br />Thu, 21 Sep 2006 19:19 GMT<br />2006-8-28<br />9/23/2006 8:32:12 AM<br />2006-11-03 12:37 AM<br />2006-11-04 05:05 PM<br />2006-10-10T12:24:05+08:00<br />2006-11-04T14:19:34Z<br />Sat,04 Nov 2006 23:37:53 +0800<br />Sat, 4 Nov 2006 22:24:38 +0800<br />Sat, 04 Nov 2006 15:30:13 GMT+8<br />日, 19 二月 2006 07:17:58 GMT<br />2006-11-04 19:03:31<br />Sat, 04 Nov 2006 06:43:14 GMT<br />2006-11-04 23:13:52<br />Sat, 04 Nov 2006 15:11:52 GMT<br />2006-11-3星期五(Friday)晴<br />2005-12-10 20:33:39 星期六<br />2006-10-30 17:45:35 星期一<br />2006-06-27T17:29:35Z<br />2006-06-27T17:29:35Z<br />2006-06-27T17:29:35Z<br />2006-06-27T17:29:35Z<br />2006-06-27T17:29:35Z<br />2006-11-2 19:08:49<br />Fri, 03 Nov 2006 13:57:15 +0000<br />Sun, 29 Oct 2006 17:57:00 -0600<br />Fri, 03 Nov 2006 07:10:04 +0000<br />Sat, 04 Nov 2006 19:00:57 GMT<br />Sat, 04 Nov 2006 14:56:00 GMT<br />2006-10-15 11:10<br />2006-11-04 20:07:32<br />Sat, 04 Nov 2006 13:27:09 +0000<br />Sat, 04 Nov 2006 00:58:15 +0800<br />Sun, 29 Oct 2006 17:57:00 -0600<br />Thu, 26 Oct 2006 14:39:52 +0000<br />11.2 2006 / 14:54<br />2006-11-4 21:47:00<br />2006-8-22 16:48<br />2006-10-24 15:52:08<br /></p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=28</link>
			<title><![CDATA[Web 2.0 的核心思想]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Fri,10 Nov 2006 23:19:46 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=28</guid>	
		<description><![CDATA[<small class="metadata"><font size="2"><span class="chronodata">作者: 拙尘 发表于 2006年07月28日 </span><br /></font><span class="chronodata"><font size="2">分类: </font><a title="查看 Web 2.0 的所有文章" href="http://www.yeeyan.com/category/web-20/" rel="category tag"><font color="#2277dd" size="3">Web 2.0</font></a></span> <span class="chronodata"><font size="2">&nbsp;--&nbsp;&nbsp;[</font><a href="http://www.xd-tech.com/blog/javascript:d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape('{言多必得} 之 Web 2.0 的核心思想')+'&amp;u='+escape('http://www.yeeyan.com/web-20-%e7%9a%84%e6%a0%b8%e5%bf%83%e6%80%9d%e6%83%b3')+'&amp;c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();" rel="nofollow"><font color="#2277dd" size="3">收藏入365Key</font></a><font size="2">]</font></span> </small>
<div class="itemtext"><blockquote>
<p>作者：Joshua Porter<br />翻译：拙尘 @ yeeyan.com<br />原文链接：<a href="http://bokardo.com/archives/the-one-crucial-idea-of-web-20/" target="_blank"><font color="#2277dd" size="3">The One Crucial Idea of Web 2.0</font></a></p>
</blockquote>
<p><em>（译者：到底什么是Web 2.0的精髓？新技术？还是新观念？对此的争论可谓仁者见仁，智者见智。本文作者认为是&ldquo;大众的智慧&rdquo;这一新观念，带动了技术和社会的变革，因而是Web 2.0的精髓所在。稍后，我们会翻译另一个作者对此文的回应，从中可以看到不同的观点。改编套用&ldquo;达芬奇密码&rdquo;中的一句台词：Debate Is Good。）</em></p>
<p>James Surowiecki 在SXSW大会上作了题为&ldquo;大众的智慧&rdquo;（The Wisdom of Crowds）的演讲。我对这一思想在如此短的时间内得到广泛传播而感到震惊。究其缘由，是Google的&ldquo;网页等级&rdquo;（Pagerank）算法所获得的成功，推动了这一思想的传播。该算法正是利用了&ldquo;大众的智慧&rdquo;来评估网页的内容。</p>
<p>如果用一句话来高度概括什么是Web 2.0的核心思想，那就是利用网络来发掘大众的智慧。这一思想在过去只是天方夜谭，今天则变成了现实。先暂时忘掉Ajax，API 等等这些所谓的技术吧。真正的挑战在于：收集我们能够找到的所有被数字化记录下来的行为碎片，分析其内在的联系，并通过简单明了的界面，最终发掘出大众的智慧。</p>
<p>有人认为Web 2.0的精髓在于技术，对此我不敢苟同。Web 2.0的核心与灵魂应该是那些带动了技术和社会变革的新思想；而其核心思想，正是Surowiecki在他的著作《The Wisdom of Crowds: Why the Many Are Smarter Than the Few and How Collective Wisdom Shapes Business, Economies, Societies and Nations》中所阐明的那一条。这一思想，从此改变了人们写软件的方式。</p>
<p>有越来越多的证据表明了这一点。Richard MacManus 最近介绍过<a href="http://www.readwriteweb.com/archives/rojo_adds_relev.php" target="_blank"><font color="#2277dd" size="3">Rojo的新特性</font></a>。在说明这些特性到底是什么时，Chris Alden 告诉 Richard：它们就是网页等级的翻版：</p>
<p><em>&ldquo;我们是如何决定关联度的呢？简单地说，正如Google利用链接的元数据（metadata）来分析搜索结果的关联度一样，我们也有相当数量的元数据，可以用来进行关联度分析。这些元数据包括：有多少人在读你的故事、做标签、和投你一票；一篇帖子的流行性如何&mdash;&mdash;从你的个人角度，你的圈子，以及所有读者的角度来说；还有就是链接数据和内容分析，等等。&rdquo;</em></p>
<p>这一变革的最终结果产生了关联引擎（relevance engines），过滤器（filters），推荐系统（recommendation systems），Web 2.0 软件，等等，等等。而Surowiecki则天才地把这些总结到了一起。 </p>
</div>
<!--
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
<rdf:Description rdf:about="http://www.yeeyan.com/web-20-%e7%9a%84%e6%a0%b8%e5%bf%83%e6%80%9d%e6%83%b3"
dc:identifier="http://www.yeeyan.com/web-20-%e7%9a%84%e6%a0%b8%e5%bf%83%e6%80%9d%e6%83%b3"
dc:title="Web 2.0 的核心思想"
trackback:ping="http://www.yeeyan.com/web-20-%e7%9a%84%e6%a0%b8%e5%bf%83%e6%80%9d%e6%83%b3/trackback/"  />
</rdf:RDF>				-->]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=27</link>
			<title><![CDATA[白手起家的艺术]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Fri,10 Nov 2006 23:18:37 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=27</guid>	
		<description><![CDATA[<small class="metadata"><font size="2"><span class="chronodata">作者: 拙尘 发表于 2006年07月27日 </span><br /></font><span class="chronodata"><font size="2">分类: </font><a title="查看 创业 的所有文章" href="http://www.yeeyan.com/category/%e5%88%9b%e4%b8%9a/" rel="category tag"><font color="#2277dd" size="3">创业</font></a></span> <span class="chronodata"><font size="2">&nbsp;--&nbsp;&nbsp;[</font><a href="http://www.xd-tech.com/blog/javascript:d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape('{言多必得} 之 白手起家的艺术')+'&amp;u='+escape('http://www.yeeyan.com/%e7%99%bd%e6%89%8b%e8%b5%b7%e5%ae%b6%e7%9a%84%e8%89%ba%e6%9c%af')+'&amp;c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();" rel="nofollow"><font color="#2277dd" size="3">收藏入365Key</font></a><font size="2">]</font></span> </small>
<div class="itemtext"><blockquote>
<p><strong>原文作者</strong>：Guy Kawasaki<br /><strong>译者</strong>： 拙尘 @ yeeyan.com<br /><strong>原文链接</strong>：<a href="http://blog.guykawasaki.com/2006/01/the_art_of_boot.html" target="_blank"><font color="#2277dd" size="3">The Art of Bootstrapping</font></a></p>
</blockquote>
<p><em>(译者：关于 Guy Kawasaki，已经在<strong>雷声大雨点大</strong>翻译的另一篇文章<a href="http://www.yeeyan.com/%e5%88%9b%e4%b8%9a%e8%80%85%e7%9a%8410%e5%a4%a7%e8%b0%8e%e8%a8%80" target="_blank"><font color="#2277dd" size="3">《创业者的十大谎言》</font></a>里有过介绍了。在这篇文章里，作者对如何白手起家创业提出了11条建议。希望这些建议能对创业者们有所启迪。）<br /></em><br />有人曾经对我说，一个创业者得到风险投资的几率如同在一个晴天下站在游泳池里被闪电击中一样。这种比喻还是过于乐观了。</p>
<p>人们可能以种种借口拒绝投资你的企业：你们不是一个&ldquo;令人信服&rdquo;的团队，没有&ldquo;令人信服&rdquo;的技术，不在一个&ldquo;令人信服&rdquo;的市场里；或者你的公司根本就不具备 &ldquo;风险投资的潜质&rdquo;&mdash;&mdash;也就是说没有可能上市或者被巨资收购；再或者你的组织受到太多政府或环境因素的干扰。如果拿不到任何风险投资，你是否应该放弃呢？当然不！</p>
<p>我可以举出例子来说明，对于许多公司来说，太多的钱比太少的钱更糟糕&mdash;&mdash;这并不是说我不想有一天能运行超级碗（Super Bowl）那样的商业活动。但是直到那天成为现实之前，要想成功还必须白手起家（bootstrapping）。这个词来源于德国故事《吹牛大王历险记》，故事的主人公拉着自己的鞋后跟把自己从海里提了出来。下面是一些白手起家的艺术：</p>
<ol>
    <li>注重现金流而不是盈利性（Focus on cash flow, not profitability）。理论上讲，利润是生存的关键。问题是，理论不能用来付帐单。在现实中，你是用现金来付账单的，所以请把重点放在现金流上。如果你要白手起家，那么你的业务应该具备这些特点：必需的资金要少，销售周期和付款期要短，以及具有可重复增加的收入（recurring revenue）。这意味着你要放弃那些需要12个月的时间来完成定单、发货和收账的大单。现金对于白手起家者来说，就是一切。 </li>
    <li>自底向上的预测（Forecast from the bottom up）。很多创业者进行自顶向下的预测：&ldquo;美国有1亿5千万辆汽车。就算在第一年里只有1％的汽车装了我们的卫星收音系统，那就是150万套系统。&rdquo;而自底向上的预测是这样的：&ldquo;在第一年里，我们能够开设10个安装点。每个安装点平均每天安装10套系统的话，第一年的销售量将是 10个安装点 &times; 10套/天/安装点 &times; 240天 = 24000 套。&rdquo;24000和自顶向下中声称的150万保守估计显然相去甚远。你们觉得哪一个更有可能实现呢？ </li>
    <li>先发货，再测试（Ship, then test）。我已经听到批评的声音了：&ldquo;你怎么能够建议发送那些并不完美的货品呢？&rdquo;等等，等等。&ldquo;完美&rdquo;（perfect）是&ldquo;足够好&rdquo;（good enough）的敌人。当你的产品或服务足够好时，尽快向客户提交他们，以获得现金的流入。而且，花费更多的时间并不能保证产品的完美，只会产生更多不需要的功能。发货后，你也能了解到客户需要你真正解决什么问题。当然，这需要在你的信誉和现金流中做一个折衷：你当然不能向客户发送一堆垃圾，但也不能等待你的产品变得完美无瑕。注意：那些同生命科学有关的公司，请忽略这一条建议。 </li>
    <li>忘掉所谓&ldquo;令人信服&rdquo;的团队（Forget the &ldquo;proven&rdquo; team）。令人信服的团队要求太高&mdash;&mdash;特别是大多数人把这定义为一群在过去十年里为超级大公司工作的人们。这些人，习惯了某种特定的生活方式，但绝不是白手起家的生活方式。聘用那些年轻、便宜、渴望工作的人，那些上手快但并不一定有全面经验的人（people with fast chips, but not necessarily a fully functional instruction set）。当你实现了可观的现金流后，再聘用那些资深的管理者。在那之前，请使用那些你能够负担得起的人，并把他们培养成优秀的雇员。 </li>
    <li>从服务开始做起（Start as a service business）。假如你的想法是要最终成立一个软件公司，让人们花钱买你的软件。这当然是一个很清晰的业务并且有完善的商业模式。但是，在完成你的软件之前，你还可以提供基于你的中期产品的咨询服务等。这样做有两个好处：你可以立即获得收入并让真正的客户来测试你的产品。一旦你的软件经受住了各种各样的测试和考验，你就可以把公司转换为产品型了。 </li>
    <li>注重功能而不是形式（Focus on function, not form）。我喜欢好的&ldquo;形式&rdquo;。MacBooks；Audis；Graf skates；Bauer sticks；Breitling watches。你还可以举出很多。但是白手起家者们在买东西时，注重的是功能而不是形式。上面那些形式，相对应的功能分别是：计算；从点A移动到点B；滑冰；滑雪；了解时间。这些功能并不要求那些昂贵的形式。椅子就是用来让你的屁股坐在上面的；它并不需要看上去属于哪个现代艺术的博物馆。你要设计高贵的东西，但是要买便宜的东西。 </li>
    <li>有选择地战斗（Pick your battles）。白手起家者们有选择地战斗。他们不会在所有的战线上开战，因为他们承担不起。如果你要开设一所新的教堂，你真的需要一套10万美金的多媒体视听系统吗？还是从一座讲台上发出的福音？如果你要建设一个靠广告收入的网站（a content wet site based on the advertising model），你需要自己写客户广告发布软件（customer ad-serving software）吗？我不这样认为。 </li>
    <li>雇用尽可能少的员工（Understaff）。许多创业者为可能发生的最好情况而储备雇员。&ldquo;保守的估计（自顶向下），第一年卫星收音系统的销售量会是150万套。我们最好开设一个24小时营业的客户支持中心。&rdquo;结果怎样？你根本就不可能销售150万套系统，但你的确为此雇用了200个员工，培训他们，并且把他们安置在一个5万平方英尺的电子化市场中心里。白手起家者们雇用尽可能少的员工，因为他们知道任何糟糕的情况都可能发生。人手不足，按照在硅谷的说法，属于一个&ldquo;良性问题&rdquo;（a high quality problem）。相信我，当一个创业者因为销售激增而打电话要求更多的资金时，任何一个风险投资家都会对此惊喜若狂。而惊喜之所以称为惊喜，正是因为它们很少发生。 </li>
    <li>采用直销方式（Go direct）。在白手起家者和他的客户之间最好不要有第三方存在。的确，商店提供了接触消费者的途径，批发商们提供了货品分发的途径。但是上帝发明了电子商务（ecommerce），从而你可以直销你的商品并实现更高的边际利润。上帝的聪明之处还在于，通过直销，你能够了解更多的客户需求。商店和批发商们是用来满足需求的，他们并不创造需求。如果你能够创造足够的需求，你稍后总能找到办法来满足它；如果你不能创造足够的需求，那么所谓世界范围内的分发渠道对你来说毫无意义。 </li>
    <li>用业界的领先者来作比（Position against the leader）。没有钱来做长篇大论的广告吗？没关系。用业界的领先者来作比好了。Toyota是这样推销Lexus的：花一半的价钱，买Mercedes的品质。Toyota用不着解释什么是&ldquo;Mercedes的品质&rdquo;。想想看，这能为他们节省多少广告费！其它的像&ldquo;便宜的iPod&rdquo;和&ldquo;属于大众的Bose无噪音耳机&rdquo;，都有同样的效果。 </li>
    <li>直面惨淡的真相（Take the &ldquo;red pill&rdquo;）。正如Neo在The Matrix里做的决定一样。红色药丸会让你知道整个真相；而蓝色药丸则会使你像是醒来时觉得只是做了一场恶梦。白手起家者们没有那种奢侈去选择蓝色药丸。他们每天都在忙于知道真相&mdash;&mdash;这个兔子洞到底有多深。一个简单的计算公式是：现金总数除以烧钱的速度。因为这可以告诉你到底还可以活多久。就像我的朋友Craig Johnson喜欢说的：&ldquo;钱花光时你就玩完儿了。大多数的创业公司都是这样死掉的。&rdquo;只要你手里还有钱，你就没有出局。</li>
</ol>
</div>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=26</link>
			<title><![CDATA[通用时间格式转换]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Tue,07 Nov 2006 10:13:52 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=26</guid>	
		<description><![CDATA[<p>/*<br />&nbsp;* &lt;p&gt;Company: 线点科技 <a href="http://www.xd-tech.com.cn">www.xd-tech.com.cn</a> &lt;/p&gt;<br />&nbsp;* @author jaddy0302<br />&nbsp;* @version 0.25<br />&nbsp;* Created on 2006-9-20<br />&nbsp;* 搜索引擎 部分源代码<br />&nbsp;*/</p>
<p>import java.text.*;<br />import java.util.*;</p>
<p>public class DateUtil {<br />&nbsp;&nbsp;&nbsp; /**<br />&nbsp;&nbsp;&nbsp;&nbsp; * GMT 时间转换 ， 0.2版本功能， 正则表达式 ， 部分存在 bug ， 去掉 时区标志<br />&nbsp;&nbsp;&nbsp;&nbsp; * 后续版本将会保留时区标志<br />&nbsp;&nbsp;&nbsp;&nbsp; *<br />&nbsp;&nbsp;&nbsp;&nbsp; * @param date<br />&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 指定时间字符串。<br />&nbsp;&nbsp;&nbsp;&nbsp; * @return 指定日期的下一个星期<br />&nbsp;&nbsp;&nbsp;&nbsp; */<br />&nbsp;&nbsp;&nbsp; public static synchronized java.util.Date getRegtime(String time) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StringBuffer strb = new StringBuffer();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; time != null &amp;&amp; i &lt; time.length(); i++) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (time.charAt(i) != '?')<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb.append(time.charAt(i));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb.append(&quot; &quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (time.indexOf(&quot;UTC&quot;) &gt; 0) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(strb.substring(0, strb.indexOf(&quot;UTC&quot;)));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (strb.charAt(strb.length() - 1) == ' ') {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(strb.substring(0, strb.length() - 1));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (time.indexOf(&quot;EDT&quot;) &gt; 0) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(strb.substring(0, strb.indexOf(&quot;EDT&quot;)));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (strb.charAt(strb.length() - 1) == ' ') {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(strb.substring(0, strb.length() - 1));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(time.indexOf(&quot;T&quot;)&gt;0 &amp;&amp; time.indexOf(&quot;Z&quot;)&gt;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(strb.toString().replace('T',' ').replace('Z',' '))&nbsp; ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (time.indexOf(&quot;CDT&quot;) &gt; 0) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(strb.substring(0, strb.indexOf(&quot;CDT&quot;)));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (strb.charAt(strb.length() - 1) == ' ') {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(strb.substring(0, strb.length() - 1));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (time.indexOf(&quot;GMT&quot;) &gt; 0) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(strb.substring(0, strb.indexOf(&quot;GMT&quot;)));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (strb.charAt(strb.length() - 1) == ' ') {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(strb.substring(0, strb.length() - 1));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (time.indexOf(&quot;CST&quot;) &gt; 0) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(strb.substring(0, strb.indexOf(&quot;CST&quot;)));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (strb.charAt(strb.length() - 1) == ' ') {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(strb.substring(0, strb.length() - 1));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (time.indexOf(&quot;PDT&quot;) &gt; 0) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(strb.substring(0, strb.indexOf(&quot;PDT&quot;)));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (strb.charAt(strb.length() - 1) == ' ') {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(strb.substring(0, strb.length() - 1));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SimpleDateFormat format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;EEE MMM dd HH:mm:ss z yyyy&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(time!=null &amp;&amp; time.matches(&quot;<a href="http://www.xd-tech.com/blog/file://\\d{1,4}\\-[a-zA-Z]{1,}-\\d{1,2">\\d{1,4}\\-[a-zA-Z]{1,}-\\d{1,2</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;yyyy-MMM-dd HH:mm:ss&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;<a href="http://www.xd-tech.com/blog/file://\\d{1,4">\\d{1,4</a>} [a-zA-Z]{1,} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>} [a-zA-Z]{1,}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //10 Sep 2006 16:00:00 GMT<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;dd MMM yyyy HH:mm:ss&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;<a href="http://www.xd-tech.com/blog/file://\\d{8">\\d{8</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;yyyyMMdd&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{1,},\\d{2} <a href="http://www.xd-tech.com/blog/file://\\d{2">\\d{2</a>} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Sat,23 09 2006 13:19:52<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;EEE,dd MM yyyy hh:mm:ss&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{3}, <a href="http://www.xd-tech.com/blog/file://\\d{2">\\d{2</a>} [a-zA-Z]{3} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Sat, 23 Sep 2006 01:41<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;EEE, dd MMM yyyy hh:mm&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;<a href="http://www.xd-tech.com/blog/file://\\d{1},\\d{1,2">\\d{1},\\d{1,2</a>} [a-zA-Z]{3} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //0,17 Sep 2006 22:30:16<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(time.substring(time.indexOf(&quot;,&quot;)+1,time.length())) ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;dd MMM yyyy hh:mm:ss&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;<a href="http://www.xd-tech.com/blog/file://\\d{2}/\\d{2}/\\d{2">\\d{2}/\\d{2}/\\d{2</a>} <a href="http://www.xd-tech.com/blog/file://\\d{2}:\\d{2}:\\d{2">\\d{2}:\\d{2}:\\d{2</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //01/01/01 16:10:01<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;dd/MM/yy hh:mm:ss&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;<a href="http://www.xd-tech.com/blog/file://\\d{1,2}/\\d{1,2}/\\d{4">\\d{1,2}/\\d{1,2}/\\d{4</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>} [a-zA-Z]{2}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //11/3/2002 10:02:13 PM</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;MM/dd/yyyy hh:mm:ss a&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;<a href="http://www.xd-tech.com/blog/file://\\d{4}-\\d{1,2}-\\d{1,2">\\d{4}-\\d{1,2}-\\d{1,2</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>} [a-zA-Z]{3}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //2006-9-13 15:17:25 GMT<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;yyyy-MM-dd hh:mm:ss&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;<a href="http://www.xd-tech.com/blog/file://\\d{4}-\\d{1,2}-\\d{1,2}[a-zA-Z]{1}\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{4}-\\d{1,2}-\\d{1,2}[a-zA-Z]{1}\\d{1,2}:\\d{1,2}:\\d{1,2</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //2006-09-16T22:16:00<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(time.replace(&quot;T&quot;,&quot; &quot;)) ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;yyyy-MM-dd hh:mm:ss&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{3,}, <a href="http://www.xd-tech.com/blog/file://\\d{2">\\d{2</a>} [a-zA-Z]{3,} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2</a>} [a-zA-Z]{3}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Wednesday, 20 September 2006 00:00 GMT<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;EEE, dd MMM yyyy hh:mm&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;<a href="http://www.xd-tech.com/blog/file://\\d{4}-\\d{1,2}-\\d{1,2}T\\d{1,2}:\\d{1,2}:\\d{1,2}-\\d{1,2}:\\d{1,2">\\d{4}-\\d{1,2}-\\d{1,2}T\\d{1,2}:\\d{1,2}:\\d{1,2}-\\d{1,2}:\\d{1,2</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //2005-02-27T08:36:00-05:00<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(time.replace(&quot;T&quot;,&quot; &quot;).substring(0,time.lastIndexOf(&quot;-&quot;))) ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;yyyy-MM-dd hh:mm:ss&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;<a href="http://www.xd-tech.com/blog/file://\\d{4}--\\d{1,2}-\\d{1,2}-T\\d{1,2">\\d{4}--\\d{1,2}-\\d{1,2}-T\\d{1,2</a>}: <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:-\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:-\\d{1,2}:\\d{1,2</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(time.replace(&quot;T&quot;,&quot; &quot;).replace(&quot; &quot;,&quot;&quot;).substring(0,time.lastIndexOf(&quot;-&quot;))) ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;yyyy--MM-dd-hh:mm:ss&quot;, Locale.US);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;<a href="http://www.xd-tech.com/blog/file://\\d{4}-\\d{1,2}-\\d{1,2">\\d{4}-\\d{1,2}-\\d{1,2</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot;time:&quot;+time);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;yyyy-MM-dd hh:mm:ss&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{3} <a href="http://www.xd-tech.com/blog/file://\\w{4">\\w{4</a>} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}[a-zA-Z]{2">\\d{1,2}:\\d{1,2}[a-zA-Z]{2</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Jul 31st 2006 10:08PM<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot;time&quot;+time);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(time.replace(&quot;st&quot;,&quot;&quot;).replace(&quot;nd&quot;,&quot;&quot;).replace(&quot;th&quot;,&quot;&quot;)) ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;MMM dd yyyy hh:mma&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{1,2}, <a href="http://www.xd-tech.com/blog/file://\\d{1,2">\\d{1,2</a>} [a-zA-Z]{3} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>} -\\d{4}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(time.substring(time.indexOf(&quot;,&quot;)+2,time.length())) ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;dd MMM yyyy HH:mm:ss Z&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[1]\\d{9}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;dd MMM yyyy HH:mm:ss Z&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(format.format(new Date(Long.parseLong(time)*1000)))&nbsp; ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{3,}, <a href="http://www.xd-tech.com/blog/file://\\d{1,2">\\d{1,2</a>} [a-zA-Z]{3,} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>}, <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>} [a-zA-Z]{2}ST&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Saturday, 23 September 2006, 11:32:29 SAST<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;EEE, dd MMM yyyy, HH:mm:ss Z&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;<a href="http://www.xd-tech.com/blog/file://\\d{4}-\\d{1,2}-\\d{1,2">\\d{4}-\\d{1,2}-\\d{1,2</a>} [^\\x00-\\xff]{1,} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //2006-9-22 锟斤拷锟斤拷 08:40:18<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(time.replaceAll(&quot;[^\\x00-\\xff]{1,}&quot;,&quot;&quot;)) ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;yyyy-MM-dd&nbsp; HH:mm:ss&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{3}, <a href="http://www.xd-tech.com/blog/file://\\d{1,2">\\d{1,2</a>} [a-zA-Z]{3} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2</a>} [a-zA-Z]{3,}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {//Thu, 7 Sep 2006 22:23 GMT<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;EEE, dd MMM yyyy HH:mm&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;<a href="http://www.xd-tech.com/blog/file://\\d{4}/\\d{1,2}/\\d{1,2">\\d{4}/\\d{1,2}/\\d{1,2</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {//2006/09/23 21:54<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;yyyy/MM/dd hh:mm&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{3}, <a href="http://www.xd-tech.com/blog/file://\\d{1,2">\\d{1,2</a>} [a-zA-Z]{3} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {//Tue, 19 Sep 2006<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;EEE, dd MMM yyyy&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;<a href="http://www.xd-tech.com/blog/file://\\d{4}[^\\x00-\\xff]{1,}\\d{1,2}[^\\x00-\\xff]{1,}\\d{1,2}[^\\x00-\\xff]{1">\\d{4}[^\\x00-\\xff]{1,}\\d{1,2}[^\\x00-\\xff]{1,}\\d{1,2}[^\\x00-\\xff]{1</a>,}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(time.replaceAll(&quot;[^\\x00-\\xff]{1,}&quot;,&quot;-&quot;)) ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;yyyy-MM-dd&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{1,}, <a href="http://www.xd-tech.com/blog/file://\\d{1,2">\\d{1,2</a>} [a-zA-Z]{1,} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {//Sa, 23 Sep 2006 13:49:25<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(time.indexOf(&quot;, &quot;)&gt;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(time.substring(time.indexOf(&quot;, &quot;)+2,time.length())) ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;dd MMM yyyy hh:mm:ss&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{1,} [a-zA-Z]{1,} <a href="http://www.xd-tech.com/blog/file://\\d{1,2">\\d{1,2</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>} [a-zA-Z ]{1,} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {//Sat Sep 23 15:29:45 CD&nbsp; 2006<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Wed Sep 14 13:14:23 U C 2005<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(time);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{1,} [a-zA-Z]{1,} <a href="http://www.xd-tech.com/blog/file://\\d{1,2">\\d{1,2</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>} [a-zA-Z]{1,}&nbsp; <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Sat Sep 23 15:29:45 CD&nbsp; 2006<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(time.replaceAll(&quot;[a-zA-Z]{1,}&nbsp; &quot;, &quot; &quot;));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;EEE MMM dd hh:mm:ss yyyy&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Wed Sep 14 13:14:23 U C 2005<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(time.replace(&quot; [a-zA-Z]{1} [a-zA-Z]{1} &quot;, &quot; &quot;));<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(strb.toString());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;EEE MMM dd hh:mm:ss 'U C' yyyy&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{1,} <a href="http://www.xd-tech.com/blog/file://\\d{1,2">\\d{1,2</a>}, <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>}, <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}[a-zA-Z]{2">\\d{1,2}:\\d{1,2}[a-zA-Z]{2</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {//September 20, 2006, 11:56AM<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;MMM dd, yyyy, hh:mma&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{1,}, <a href="http://www.xd-tech.com/blog/file://\\d{1,2">\\d{1,2</a>} [a-zA-Z]{1,} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {//We, 26 Jul 2006 00:55:30<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(time.replace(&quot;[a-zA-Z]{1,}, &quot;,&quot;&quot;)) ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;dd MMM yyyy hh:mm:ss&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;<a href="http://www.xd-tech.com/blog/file://\\d{4}[^\\x00-\\xff]{1">\\d{4}[^\\x00-\\xff]{1</a>,}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;yyyy&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{1,} [a-zA-Z]{1,} <a href="http://www.xd-tech.com/blog/file://\\d{1,2">\\d{1,2</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {//Sat Sep 23 09:51:06 2006<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;EEE MMM dd hh:mm:ss yyyy&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{1,}, <a href="http://www.xd-tech.com/blog/file://\\d{1,2">\\d{1,2</a>}, [a-zA-Z]{1,} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>} -\\d{1,}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {//Fri, 22, Sept 2006 11:54:00 -0700<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(time.split(&quot;[a-zA-Z]{4} &quot;).length&gt;1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(time.replaceAll(&quot;[a-zA-Z] &quot;,&quot; &quot;)) ;<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(strb);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;EEE, dd, MMM yyyy hh:mm:ss z&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;<a href="http://www.xd-tech.com/blog/file://\\d{1,2">\\d{1,2</a>} [a-zA-Z]{3} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;dd MMM yyyy&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;<a href="http://www.xd-tech.com/blog/file://\\d{1,2}/\\d{1,2}/\\d{4">\\d{1,2}/\\d{1,2}/\\d{4</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;dd/MM/yyyy&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{3,} <a href="http://www.xd-tech.com/blog/file://\\d{1,2">\\d{1,2</a>} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>}.&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {//October 12 2005 16:01:49.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;MMM dd yyyy hh:mm:ss.&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{3,} <a href="http://www.xd-tech.com/blog/file://\\d{1,2">\\d{1,2</a>} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;MMM dd yyyy&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{3,}, [a-zA-Z]{3,} <a href="http://www.xd-tech.com/blog/file://\\d{1,2">\\d{1,2</a>} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>} -\\d{1,}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {//Thu, September 7 2006 12:40:02 -0700<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;EEE, MMM dd yyyy hh:mm:ss z&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;<a href="http://www.xd-tech.com/blog/file://\\d{1,2">\\d{1,2</a>} [a-zA-Z]{3} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {//28 Aug 2004 19:53:19<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;dd MMM yyyy hh:mm:ss&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{1,} [a-zA-Z]{1,} <a href="http://www.xd-tech.com/blog/file://\\d{1,2">\\d{1,2</a>}, <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2</a>} [a-zA-Z]{2}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {//Sat Sep 09, 2006 3:39 pm<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;EEE MMM dd, yyyy hh:mm a&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{1,} [a-zA-Z]{1,} <a href="http://www.xd-tech.com/blog/file://\\d{1,2">\\d{1,2</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>} [a-zA-Z]{2}&nbsp; <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {//Sat Dec 03 12:54:26 CS&nbsp; 2005<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(time.replaceAll(&quot;[a-zA-Z]{2,}&nbsp; &quot;,&quot; &quot;)) ;<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(time);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;EEE MMM dd hh:mm:ss yyyy&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{1,} <a href="http://www.xd-tech.com/blog/file://\\d{1,2">\\d{1,2</a>}, <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {//September 21, 2006 12:00:00<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot;asfasljkf&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;MMM dd, yyyy hh:mm:ss&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Date date = null;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = format.parse(strb.toString());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (ParseException ex) {<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ex.printStackTrace();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(ex.getMessage());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = new Date(System.currentTimeMillis()-(long)1000*60*60*24*30);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return date;</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; /**<br />&nbsp;&nbsp;&nbsp;&nbsp; * GMT 时间转换 , 0.1版本保留功能 有较多错误<br />&nbsp;&nbsp;&nbsp;&nbsp; * @param time String<br />&nbsp;&nbsp;&nbsp;&nbsp; * @return Date<br />&nbsp;&nbsp;&nbsp;&nbsp; */<br />&nbsp;&nbsp;&nbsp; public static synchronized java.util.Date getGMTime(String time) {<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot;格式时间：&quot;+time);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StringBuffer strb = new StringBuffer();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; time != null &amp;&amp; i &lt; time.length(); i++) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (time.charAt(i) != '?')<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb.append(time.charAt(i));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb.append(&quot; &quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(time);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SimpleDateFormat format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;EEE MMM dd HH:mm:ss z yyyy&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (time.indexOf(&quot;+&quot;) &gt; 0) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(strb.substring(0, strb.indexOf(&quot;+&quot;)));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (strb.charAt(strb.length() - 1) == ' ') {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(strb.substring(0, strb.length() - 1));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (strb.indexOf(&quot;-&quot;) &gt; 0) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(strb.toString().split(&quot;-&quot;).length==1 || strb.toString().split(&quot;-&quot;).length&gt;3)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(strb.substring(0, strb.indexOf(&quot;-&quot;)));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (strb.charAt(strb.length() - 1) == ' ') {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(strb.substring(0, strb.length() - 1));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (time.indexOf(&quot;UTC&quot;) &gt; 0) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(strb.substring(0, strb.indexOf(&quot;UTC&quot;)));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (strb.charAt(strb.length() - 1) == ' ') {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(strb.substring(0, strb.length() - 1));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (time.indexOf(&quot;EDT&quot;) &gt; 0) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(strb.substring(0, strb.indexOf(&quot;EDT&quot;)));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (strb.charAt(strb.length() - 1) == ' ') {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(strb.substring(0, strb.length() - 1));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(time.indexOf(&quot;T&quot;)&gt;0 &amp;&amp; time.indexOf(&quot;Z&quot;)&gt;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(strb.toString().replace('T',' ').replace('Z',' '))&nbsp; ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (time.indexOf(&quot;CDT&quot;) &gt; 0) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(strb.substring(0, strb.indexOf(&quot;CDT&quot;)));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (strb.charAt(strb.length() - 1) == ' ') {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(strb.substring(0, strb.length() - 1));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (time.indexOf(&quot;CST&quot;) &gt; 0) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(strb.substring(0, strb.indexOf(&quot;CST&quot;)));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (strb.charAt(strb.length() - 1) == ' ') {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(strb.substring(0, strb.length() - 1));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (time.indexOf(&quot;PDT&quot;) &gt; 0) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(strb.substring(0, strb.indexOf(&quot;PDT&quot;)));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (strb.charAt(strb.length() - 1) == ' ') {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(strb.substring(0, strb.length() - 1));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (java.lang.Character.isDigit(time.charAt(0))) {<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(strb.substring(strb.indexOf(&quot;,&quot;) + 1,<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb.length()));<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(&quot;dd MMM yyyy HH:mm:ss&quot;, Locale.US);<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (time.charAt(1) == ' ' &amp;&amp; time.indexOf(&quot;GMT&quot;) &gt; 0) {<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(&quot; &quot;).append(strb.toString());<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (Character.UnicodeBlock.of(strb.charAt(0)) ==<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(Character.UnicodeBlock.of(strb.charAt(1)) ==<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(&quot;EEE, dd MMM yyyy HH:mm:ss&quot;,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Locale.SIMPLIFIED_CHINESE);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(strb.substring(strb.indexOf(&quot;,&quot;)+1)) ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(&quot;dd MMM yyyy HH:mm:ss&quot;,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Locale.SIMPLIFIED_CHINESE);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else if (strb.indexOf(&quot;GMT&quot;) &gt; 0) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (strb.indexOf(&quot;, &quot;) &gt; 0) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(&quot;EEE, dd MMM yyyy HH:mm:ss z&quot;,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else if (strb.indexOf(&quot;, &quot;) &lt; 0 &amp;&amp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb.indexOf(&quot;,&quot;) &gt; 0) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(&quot;EEE,dd MMM yyyy HH:mm:ss z&quot;,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (time.toUpperCase().indexOf(&quot;AM&quot;) &gt; 0 ||<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; time.toUpperCase().indexOf(&quot;PM&quot;) &gt; 0) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(time);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(&quot;yyyy-MM-dd hh:mm a&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if (strb.indexOf(&quot;, &quot;) &gt; 0) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(&quot;EEE, dd MMM yyyy HH:mm:ss&quot;,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else if (strb.indexOf(&quot;, &quot;) &lt; 0 &amp;&amp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb.indexOf(&quot;,&quot;) &gt; 0) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(&quot;EEE,dd MMM yyyy HH:mm:ss&quot;,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if (time != null &amp;&amp; (time.indexOf(&quot;(&quot;) &gt; 0 &amp;&amp; time.indexOf(&quot;)&quot;) &gt; 0)) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(time.indexOf(&quot;星期&quot;)&gt;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(time.substring(0, time.indexOf(&quot;星期&quot;)));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(&quot;yyyy-MM-dd&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if (time != null &amp;&amp; (time.indexOf(&quot;T&quot;) &gt; 0)) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(time.indexOf(&quot;+&quot;)&gt;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(time.replace('T', ' ').substring(0,time.indexOf(&quot;+&quot;)));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(time.replace('T', ' '));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(&quot;yyyy-MM-dd HH:mm:ss&quot;,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if (time != null &amp;&amp; (time.indexOf(&quot;-&quot;) &gt; 0) &amp;&amp; (time.length()&gt;11)) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(&quot;yyyy-MM-dd HH:mm:ss&quot;,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if (time != null &amp;&amp; (time.indexOf(&quot;.&quot;) &gt; 0 &amp;&amp; time.indexOf(&quot;/&quot;) &gt; 0)) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(&quot;MM.dd yyyy / HH:mm&quot;,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if (time != null &amp;&amp; (time.length()&lt;12)) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(&quot;yyyy-MM-dd&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(&quot;dd MMM yyyy HH:mm:ss&quot;,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Date date = null;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = format.parse(strb.toString());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (ParseException ex) {<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ex.printStackTrace();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(ex.getMessage());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = new Date(System.currentTimeMillis()-(long)1000*60*60*24*30);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return date;<br />&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; /**<br />&nbsp;&nbsp;&nbsp;&nbsp; * 格式化时间<br />&nbsp;&nbsp;&nbsp;&nbsp; * @param time String<br />&nbsp;&nbsp;&nbsp;&nbsp; * @return Date<br />&nbsp;&nbsp;&nbsp;&nbsp; */<br />&nbsp;&nbsp;&nbsp; public static synchronized java.util.Date getFormatDate(String time) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SimpleDateFormat theDateTimeFormat = null;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (time == null || time.equals(&quot;&quot;)) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return new Date();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (time.indexOf(&quot;-&quot;) &gt; 0) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (time.indexOf(&quot;　&quot;) &gt; 0) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; time = time.trim();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(time.split(&quot;:&quot;).length&gt;2 &amp;&amp; time.indexOf(&quot; &quot;)&lt;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; theDateTimeFormat = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;yyyy-MM-ddhh:mm:ss&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }if(time.split(&quot;:&quot;).length&gt;2 &amp;&amp; time.indexOf(&quot; &quot;)&gt;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; theDateTimeFormat = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;yyyy-MM-dd hh:mm:ss&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; theDateTimeFormat = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;yyyy-MM-ddhh:mm&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else if (time.indexOf(&quot;/&quot;) &gt; 0) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; theDateTimeFormat = DATE_TIME_EXTENDED_FORMAT;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else if (time.indexOf(&quot;　&quot;) &gt; 0) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; time = time.trim() ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; theDateTimeFormat = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;yyyy-MM-ddhh:mm:ss&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; theDateTimeFormat = DATE_TIME_EXT_FORMAT;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return theDateTimeFormat.parse(time);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (ParseException ex) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(ex.getMessage());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return new Date(System.currentTimeMillis()-(long)1000*60*60*24*30);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; /**<br />&nbsp;&nbsp;&nbsp;&nbsp; * 取得指定日期的下一个星期<br />&nbsp;&nbsp;&nbsp;&nbsp; *<br />&nbsp;&nbsp;&nbsp;&nbsp; * @param date<br />&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 指定日期。<br />&nbsp;&nbsp;&nbsp;&nbsp; * @return 指定日期的下一个星期<br />&nbsp;&nbsp;&nbsp;&nbsp; */<br />&nbsp;&nbsp;&nbsp; public static synchronized String getFormatString(String time) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SimpleDateFormat theDateTimeFormat = null;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String returnStr = &quot;&quot;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (time == null || time.equals(&quot;&quot;)) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; returnStr = DATE_TIME_EXTENDED_FORMAT.format(new Date());<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot;格式之后的缺省时间：&quot;+returnStr);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return returnStr;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (time.indexOf(&quot;-&quot;) &gt; 0) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; theDateTimeFormat = DATE_TIME_EXT_FORMAT;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else if (time.indexOf(&quot;/&quot;) &gt; 0) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; theDateTimeFormat = DATE_TIME_EXTENDED_FORMAT;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else if (time.indexOf(&quot;　&quot;) &gt; 0) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; theDateTimeFormat = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;yyyy-MM-dd　hh:mm:ss&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; theDateTimeFormat = DATE_TIME_EXT_FORMAT;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; returnStr = theDateTimeFormat.format(getDate(time));<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot;格式之前的时间：&quot;+time+&quot;&nbsp;&nbsp; 格式之后的时间：&quot;+returnStr);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return returnStr;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; /**<br />&nbsp;&nbsp;&nbsp;&nbsp; * 标准日期格式<br />&nbsp;&nbsp;&nbsp;&nbsp; */<br />&nbsp;&nbsp;&nbsp; private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;MM/dd/yyyy&quot;);<br />&nbsp;&nbsp;&nbsp; /**<br />&nbsp;&nbsp;&nbsp;&nbsp; * 标准时间格式<br />&nbsp;&nbsp;&nbsp;&nbsp; */<br />&nbsp;&nbsp;&nbsp; private static final SimpleDateFormat DATE_TIME_FORMAT = new<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;MM/dd/yyyy hh:mm&quot;);<br />&nbsp;&nbsp;&nbsp; /**<br />&nbsp;&nbsp;&nbsp;&nbsp; * 带时分秒的标准时间格式<br />&nbsp;&nbsp;&nbsp;&nbsp; */<br />&nbsp;&nbsp;&nbsp; private static final SimpleDateFormat DATE_TIME_EXTENDED_FORMAT = new<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;yyyy/MM/dd hh:mm:ss&quot;);<br />&nbsp;&nbsp;&nbsp; /**<br />&nbsp;&nbsp;&nbsp;&nbsp; * 以横线格开的时间格式<br />&nbsp;&nbsp;&nbsp;&nbsp; */<br />&nbsp;&nbsp;&nbsp; private static final SimpleDateFormat DATE_TIME_EXT_FORMAT = new<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;yyyy-MM-dd hh:mm:ss&quot;);</p>
<p>&nbsp;&nbsp;&nbsp; /**<br />&nbsp;&nbsp;&nbsp;&nbsp; * orA标准日期格式<br />&nbsp;&nbsp;&nbsp;&nbsp; */<br />&nbsp;&nbsp;&nbsp; private static final SimpleDateFormat orA_DATE_FORMAT = new<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;yyyyMMdd&quot;);<br />&nbsp;&nbsp;&nbsp; /**<br />&nbsp;&nbsp;&nbsp;&nbsp; * orA标准时间格式<br />&nbsp;&nbsp;&nbsp;&nbsp; */<br />&nbsp;&nbsp;&nbsp; private static final SimpleDateFormat orA_DATE_TIME_FORMAT = new<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;yyyyMMddhhmm&quot;);<br />&nbsp;&nbsp;&nbsp; /**<br />&nbsp;&nbsp;&nbsp;&nbsp; * 带时分秒的ORA标准时间格式<br />&nbsp;&nbsp;&nbsp;&nbsp; */<br />&nbsp;&nbsp;&nbsp; private static final SimpleDateFormat orA_DATE_TIME_EXTENDED_FORMAT = new<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;yyyyMMddhhmmss&quot;);</p>
<p><br />&nbsp;&nbsp;&nbsp; public static java.util.Date getDate(String time) {<br />&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot;需要转换的时间：&quot; + time);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Date date = null;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StringBuffer strb = new StringBuffer();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; time != null &amp;&amp; i &lt; time.length(); i++) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (time.charAt(i) != '?' &amp;&amp; time.charAt(i) != '　')<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb.append(time.charAt(i));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb.append(&quot; &quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; time = strb.toString() ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(time!=null &amp;&amp; time.matches(&quot;<a href="http://www.xd-tech.com/blog/file://\\d{1,4}\\-[a-zA-Z]{1,}-\\d{1,2">\\d{1,4}\\-[a-zA-Z]{1,}-\\d{1,2</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getRegtime(time); //<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;<a href="http://www.xd-tech.com/blog/file://\\d{1,4">\\d{1,4</a>} [a-zA-Z]{1,} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>} [a-zA-Z]{1,}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getRegtime(time); //<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;<a href="http://www.xd-tech.com/blog/file://\\d{8">\\d{8</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getRegtime(time); //<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{1,},\\d{2} <a href="http://www.xd-tech.com/blog/file://\\d{2">\\d{2</a>} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getRegtime(time); //<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{3}, <a href="http://www.xd-tech.com/blog/file://\\d{2">\\d{2</a>} [a-zA-Z]{3} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getRegtime(time); //<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;<a href="http://www.xd-tech.com/blog/file://\\d{1},\\d{1,2">\\d{1},\\d{1,2</a>} [a-zA-Z]{3} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getRegtime(time); //<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;<a href="http://www.xd-tech.com/blog/file://\\d{2}/\\d{2}/\\d{2">\\d{2}/\\d{2}/\\d{2</a>} <a href="http://www.xd-tech.com/blog/file://\\d{2}:\\d{2}:\\d{2">\\d{2}:\\d{2}:\\d{2</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getRegtime(time); //<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;<a href="http://www.xd-tech.com/blog/file://\\d{1,2}/\\d{1,2}/\\d{4">\\d{1,2}/\\d{1,2}/\\d{4</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>} [a-zA-Z]{2}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getRegtime(time); //<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;<a href="http://www.xd-tech.com/blog/file://\\d{4}-\\d{1,2}-\\d{1,2">\\d{4}-\\d{1,2}-\\d{1,2</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>} [a-zA-Z]{3}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getRegtime(time); //\\d{4}-\\d{1,2}-\\d{1,2}[a-zA-Z]{1}\\d{1,2}:\\d{1,2}:\\d{1,2}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;<a href="http://www.xd-tech.com/blog/file://\\d{4}-\\d{1,2}-\\d{1,2}[a-zA-Z]{1}\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{4}-\\d{1,2}-\\d{1,2}[a-zA-Z]{1}\\d{1,2}:\\d{1,2}:\\d{1,2</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getRegtime(time); //<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{3,}, <a href="http://www.xd-tech.com/blog/file://\\d{2">\\d{2</a>} [a-zA-Z]{3,} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2</a>} [a-zA-Z]{3}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Wednesday, 20 September 2006 00:00 GMT<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getRegtime(time); //<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{3,}, <a href="http://www.xd-tech.com/blog/file://\\d{2">\\d{2</a>} [a-zA-Z]{3,} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2</a>} [a-zA-Z]{3}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Wednesday, 20 September 2006 00:00 GMT<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getRegtime(time); //<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;<a href="http://www.xd-tech.com/blog/file://\\d{4}-\\d{1,2}-\\d{1,2}T\\d{1,2}:\\d{1,2}:\\d{1,2}-\\d{1,2}:\\d{1,2">\\d{4}-\\d{1,2}-\\d{1,2}T\\d{1,2}:\\d{1,2}:\\d{1,2}-\\d{1,2}:\\d{1,2</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Wednesday, 20 September 2006 00:00 GMT<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getRegtime(time); //<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;<a href="http://www.xd-tech.com/blog/file://\\d{4}--\\d{1,2}-\\d{1,2}-T\\d{1,2">\\d{4}--\\d{1,2}-\\d{1,2}-T\\d{1,2</a>}: <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:-\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:-\\d{1,2}:\\d{1,2</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Wednesday, 20 September 2006 00:00 GMT<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getRegtime(time); //<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //\\d{4}-\\d{1,2}-\\d{1,2} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;<a href="http://www.xd-tech.com/blog/file://\\d{4}-\\d{1,2}-\\d{1,2">\\d{4}-\\d{1,2}-\\d{1,2</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {//Jul 31st 2006 10:08PM<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getRegtime(time); //<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{3} <a href="http://www.xd-tech.com/blog/file://\\w{4">\\w{4</a>} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}[a-zA-Z]{2">\\d{1,2}:\\d{1,2}[a-zA-Z]{2</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getRegtime(time);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{1,2}, <a href="http://www.xd-tech.com/blog/file://\\d{1,2">\\d{1,2</a>} [a-zA-Z]{3} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>} -\\d{4}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getRegtime(time);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[1]\\d{9}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getRegtime(time);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{3,}, <a href="http://www.xd-tech.com/blog/file://\\d{1,2">\\d{1,2</a>} [a-zA-Z]{3,} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>}, <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>} [a-zA-Z]{2}ST&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //澳大利亚时间<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getRegtime(time);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;<a href="http://www.xd-tech.com/blog/file://\\d{4}-\\d{1,2}-\\d{1,2">\\d{4}-\\d{1,2}-\\d{1,2</a>} [^\\x00-\\xff]{1,} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getRegtime(time);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{3}, <a href="http://www.xd-tech.com/blog/file://\\d{1,2">\\d{1,2</a>} [a-zA-Z]{3} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2</a>} [a-zA-Z]{3,}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getRegtime(time);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;<a href="http://www.xd-tech.com/blog/file://\\d{4}/\\d{1,2}/\\d{1,2">\\d{4}/\\d{1,2}/\\d{1,2</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getRegtime(time);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{3}, <a href="http://www.xd-tech.com/blog/file://\\d{1,2">\\d{1,2</a>} [a-zA-Z]{3} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getRegtime(time);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;<a href="http://www.xd-tech.com/blog/file://\\d{4}[^\\x00-\\xff]{1,}\\d{1,2}[^\\x00-\\xff]{1,}\\d{1,2}[^\\x00-\\xff]{1">\\d{4}[^\\x00-\\xff]{1,}\\d{1,2}[^\\x00-\\xff]{1,}\\d{1,2}[^\\x00-\\xff]{1</a>,}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getRegtime(time); //<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{1,}, <a href="http://www.xd-tech.com/blog/file://\\d{1,2">\\d{1,2</a>} [a-zA-Z]{1,} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getRegtime(time);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{1,} [a-zA-Z]{1,} <a href="http://www.xd-tech.com/blog/file://\\d{1,2">\\d{1,2</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>} [a-zA-Z ]{1,} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getRegtime(time);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{1,} <a href="http://www.xd-tech.com/blog/file://\\d{1,2">\\d{1,2</a>}, <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>}, <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}[a-zA-Z]{2">\\d{1,2}:\\d{1,2}[a-zA-Z]{2</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {//<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getRegtime(time);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{1,}, <a href="http://www.xd-tech.com/blog/file://\\d{1,2">\\d{1,2</a>} [a-zA-Z]{1,} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getRegtime(time);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;<a href="http://www.xd-tech.com/blog/file://\\d{4}[^\\x00-\\xff]{1">\\d{4}[^\\x00-\\xff]{1</a>,}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getRegtime(time);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{1,} [a-zA-Z]{1,} <a href="http://www.xd-tech.com/blog/file://\\d{1,2">\\d{1,2</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getRegtime(time);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{1,}, <a href="http://www.xd-tech.com/blog/file://\\d{1,2">\\d{1,2</a>}, [a-zA-Z]{1,} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>} -\\d{1,}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getRegtime(time);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;<a href="http://www.xd-tech.com/blog/file://\\d{1,2">\\d{1,2</a>} [a-zA-Z]{3} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getRegtime(time);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;<a href="http://www.xd-tech.com/blog/file://\\d{1,2}/\\d{1,2}/\\d{4">\\d{1,2}/\\d{1,2}/\\d{4</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getRegtime(time);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{3,} <a href="http://www.xd-tech.com/blog/file://\\d{1,2">\\d{1,2</a>} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>}.&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getRegtime(time);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{3,} <a href="http://www.xd-tech.com/blog/file://\\d{1,2">\\d{1,2</a>} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getRegtime(time);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{3,}, [a-zA-Z]{3,} <a href="http://www.xd-tech.com/blog/file://\\d{1,2">\\d{1,2</a>} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>} -\\d{1,}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getRegtime(time);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;<a href="http://www.xd-tech.com/blog/file://\\d{1,2">\\d{1,2</a>} [a-zA-Z]{3} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getRegtime(time);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{1,} [a-zA-Z]{1,} <a href="http://www.xd-tech.com/blog/file://\\d{1,2">\\d{1,2</a>}, <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2</a>} [a-zA-Z]{2}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getRegtime(time);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{1,} [a-zA-Z]{1,} <a href="http://www.xd-tech.com/blog/file://\\d{1,2">\\d{1,2</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>} [a-zA-Z]{2}&nbsp; <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getRegtime(time);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{1,} <a href="http://www.xd-tech.com/blog/file://\\d{1,2">\\d{1,2</a>}, <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getRegtime(time);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if (time.indexOf(&quot;T&quot;) &gt; 0 &amp;&amp; time.indexOf(&quot;Z&quot;) &gt; 0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getGMTime(time); //<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if (time != null &amp;&amp; time.indexOf(&quot;GMT&quot;) &gt; 0) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getGMTime(time); //<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else if (time != null &amp;&amp; time.indexOf(&quot;0000&quot;) &gt; 0) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getGMTime(time); //+00000800<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else if (time != null &amp;&amp; time.indexOf(&quot;0800&quot;) &gt; 0) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getGMTime(time); //+0800<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else if (time != null &amp;&amp; time.indexOf(&quot;+&quot;) &gt; 0) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getGMTime(time); //+0800<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else if (time != null &amp;&amp; time.indexOf(&quot; -&quot;) &gt; 0) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getGMTime(time); //+0800<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else if (time != null &amp;&amp; time.indexOf(&quot;UTC&quot;) &gt; 0) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getGMTime(time); //+0800<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else if (time != null &amp;&amp; time.indexOf(&quot;EDT&quot;) &gt; 0) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getGMTime(time); //+0800<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else if (time != null &amp;&amp; time.indexOf(&quot;CDT&quot;) &gt; 0) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getGMTime(time); //+0800<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else if (time != null &amp;&amp; time.indexOf(&quot;CST&quot;) &gt; 0) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getGMTime(time); //+0800<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else if (time != null &amp;&amp; time.indexOf(&quot;PDT&quot;) &gt; 0) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getGMTime(time); //+0800<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else if (time != null &amp;&amp; (time.trim().indexOf(&quot;AM&quot;) &gt; 0 || time.trim().indexOf(&quot;PM&quot;)&gt;0)) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getGMTime(time); //+0800<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else if (time != null &amp;&amp; time.length() &gt; 0 &amp;&amp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Character.isLetter(time.charAt(0)) ||<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Character.UnicodeBlock.of(time.charAt(0)) ==<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS)) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getGMTime(time); //+中文<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else if (time != null &amp;&amp; (time.indexOf(&quot;(&quot;) &gt; 0 &amp;&amp; time.indexOf(&quot;)&quot;) &gt; 0)) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getGMTime(time); //+0800<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if (time != null &amp;&amp; (time.indexOf(&quot;.&quot;) &gt; 0 &amp;&amp; time.indexOf(&quot;/&quot;) &gt; 0)) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getGMTime(time); //+特殊的<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if (time != null &amp;&amp; (time.length()&lt;12) &amp;&amp; time.indexOf(&quot;-&quot;)&lt;0 &amp;&amp; time.indexOf(&quot;/&quot;)&lt;0) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getGMTime(time); //+特殊的<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if (time != null &amp;&amp; (time.length()&lt;12)) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getGMTime(time); //+特殊的<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = getFormatDate(time);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot;传入的时间：&quot;+time +&quot;&nbsp; 索引时间：&quot;+DATE_TIME_EXT_FORMAT.format(date));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return date;<br />&nbsp;&nbsp;&nbsp; }</p>
<p>}<br /></p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=25</link>
			<title><![CDATA[雅虎搜索盲测的一个比较明显的可以区分的特征]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Sun,05 Nov 2006 14:20:16 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=25</guid>	
		<description><![CDATA[<p>刚看到<a href="http://fun.yahoo.cn/?source=0X">雅虎盲测</a>比赛的 网页，比赛一直持续到 21号 ，试了几下 ，都通过了 ，但是抽奖一个也没有中 ，不爽。</p>
<p>一个特征，可以比较快速的区分是雅虎还是百度</p>
<p>例如，搜索关键词&ldquo;我心依旧&rdquo; , 在雅户的搜索结果里面有很多的 单个的字被加上了高亮 ， 但百度在第十页都不会出现单个字加高亮</p>
<p>分词的区别 ， 百度的分词效果要比雅虎的 处理更为符合搜索用户的搜索行为习惯</p>
<p>&nbsp;</p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=24</link>
			<title><![CDATA[Lucene 一个比较准确和高效的分词算法 -----修改版(11月19日再次修改)]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Sun,05 Nov 2006 12:25:58 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=24</guid>	
		<description><![CDATA[<p>修改版本，性能有 40％左右的提高，增加了对部分组合歧异的处理，例如：博客中搜索 的 中搜的识别</p>
<p>上午和服装公司交涉 中的 和服 </p>
<p>package org.xdtech.iceworld.util;</p>
<p>import java.io.*;<br />import java.util.*;</p>
<p>import org.apache.lucene.analysis.Token;<br />import org.apache.lucene.analysis.Tokenizer;<br />import org.apache.nutch.searcher.Query;</p>
<p>/*<br />&nbsp;* &lt;p&gt;Company: 线点科技 <a href="http://www.xd-tech.com.cn">www.xd-tech.com.cn</a> &lt;/p&gt;<br />&nbsp;* @author jaddy0302<br />&nbsp;* @version 0.25<br />&nbsp;* Created on 2006-9-20<br />&nbsp;* 搜索引擎 部分源代码<br />&nbsp;*/</p>
<p>public class XDChineseTokenizer extends Tokenizer {<br />&nbsp;&nbsp;&nbsp; //private Hashtable zhwords;<br />&nbsp;&nbsp;&nbsp; private static final int IO_BUFFER_SIZE = 256;</p>
<p>&nbsp;&nbsp;&nbsp; private final char[] ioBuffer = new char[IO_BUFFER_SIZE];</p>
<p>&nbsp;&nbsp;&nbsp; private int bufferIndex = 0;</p>
<p>&nbsp;&nbsp;&nbsp; private int dataLen = 0;</p>
<p>&nbsp;&nbsp;&nbsp; private String tokenType = &quot;&quot;;</p>
<p>&nbsp;&nbsp;&nbsp; private List tokenList = new ArrayList();</p>
<p>&nbsp;&nbsp;&nbsp; public XDChineseTokenizer(Reader reader) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.input = reader;<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; private static HashMap zhwords;<br />&nbsp;&nbsp;&nbsp; private static TreeSet csurname, cforeign, cnumbers, cnotname ,snotname;<br />&nbsp;&nbsp;&nbsp; private static InputStream worddata = null;<br />&nbsp;&nbsp;&nbsp; static{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; csurname = new TreeSet();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cforeign = new TreeSet();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cnumbers = new TreeSet();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cnotname = new TreeSet();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; snotname = new TreeSet();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; zhwords = new HashMap();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; loadset(cnumbers, &quot;data/snumbers_u8.txt&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; loadset(cforeign, &quot;data/sforeign_u8.txt&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; loadset(csurname, &quot;data/ssurname_u8.txt&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; loadset(cnotname, &quot;data/snotname_u8.txt&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; loadset(cnumbers, &quot;data/tnumbers_u8.txt&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; loadset(cforeign, &quot;data/tforeign_u8.txt&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; loadset(csurname, &quot;data/tsurname_u8.txt&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; loadset(cnotname, &quot;data/tnotname_u8.txt&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; loadset(snotname, &quot;data/snotforeign.txt&quot;);<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(snotname);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; worddata = XDChineseTokenizer.class.getResourceAsStream(&quot;bothlexu8.txt&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; init();<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; private String debugencoding;</p>
<p>&nbsp;&nbsp;&nbsp; private boolean debug;</p>
<p>&nbsp;&nbsp;&nbsp; // Char form<br />&nbsp;&nbsp;&nbsp; public final static int TRAD = 0;<br />&nbsp;&nbsp;&nbsp; public final static int SIMP = 1;<br />&nbsp;&nbsp;&nbsp; public final static int BOTH = 2;</p>
<p>&nbsp;&nbsp;&nbsp; /*<br />&nbsp;&nbsp;&nbsp;&nbsp; * (non-Javadoc)<br />&nbsp;&nbsp;&nbsp;&nbsp; *<br />&nbsp;&nbsp;&nbsp;&nbsp; * @see org.apache.lucene.analysis.TokenStream#next()<br />&nbsp;&nbsp;&nbsp;&nbsp; */<br />&nbsp;&nbsp;&nbsp; public Token next() throws IOException {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (tokenList == null || tokenList.size() == 0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tokenize();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (tokenList.size() == 0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return null;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Token token = (Token) tokenList.get(0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tokenList.remove(0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return token;<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; private static void init()<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int charform;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boolean loadwordfile = true ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int count = 0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!loadwordfile) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String newword = null;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {</p>
<p><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BufferedReader in = new BufferedReader(new InputStreamReader(worddata, &quot;UTF8&quot;));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot;开始载入词库:&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while ((newword = in.readLine()) != null) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ((newword.indexOf(&quot;#&quot;) == -1) &amp;&amp; (newword.length() &lt; 5)) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; zhwords.put(newword.intern(), &quot;1&quot;);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (newword.length() == 3) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (zhwords.containsKey(newword.substring(0, 2).intern()) == false) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; zhwords.put(newword.substring(0,2).intern(), &quot;2&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (newword.length() == 4) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (zhwords.containsKey(newword.substring(0, 2).intern()) == false) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; zhwords.put(newword.substring(0,2).intern(), &quot;2&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (zhwords.containsKey(newword.substring(0, 3).intern()) == false) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; zhwords.put(newword.substring(0,3).intern(), &quot;2&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (count++ % 40000 == 0) { System.err.print(&quot;&nbsp; &quot;+count+&quot;&nbsp; &quot;); }</p>
<p><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot;载入词库完成&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; in.close();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (IOException e) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.err.println(&quot;IOException: &quot;+e);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; }</p>
<p><br />&nbsp;&nbsp;&nbsp; /** Load a set of character data */<br />&nbsp;&nbsp;&nbsp; private static void loadset(TreeSet targetset, String sourcefile) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String dataline;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InputStream setdata = XDChineseTokenizer.class.getResourceAsStream(sourcefile);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BufferedReader in = new BufferedReader(new InputStreamReader(setdata, &quot;UTF-8&quot;));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while ((dataline = in.readLine()) != null) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ((dataline.indexOf(&quot;#&quot;) &gt; -1) || (dataline.length() == 0)) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; continue;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; targetset.add(dataline.intern());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; in.close();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (Exception e) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.err.println(&quot;Exception loading data file&quot; + sourcefile + &quot; &quot; + e);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public boolean isNumber(String testword) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boolean result = true;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; testword.length(); i++) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (cnumbers.contains(testword.substring(i, i+1).intern()) == false) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = false;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return result;<br />&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public boolean isAllForeign(String testword) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boolean result = true;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; testword.length(); i++) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (cforeign.contains(testword.substring(i, i+1).intern()) == false) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = false;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return result;<br />&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public boolean isNotCJK(String testword) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boolean result = true;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; testword.length(); i++) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (Character.UnicodeBlock.of(testword.charAt(i)) == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = false;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return result;<br />&nbsp;&nbsp;&nbsp; }</p>
<p>//<br />//<br />//&nbsp;&nbsp;&nbsp; public String stemWord(String word) {<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String[] prefix = new String[] {&quot;\u7b2c&quot;, &quot;\u526f&quot;, &quot;\u4e0d&quot;};<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String[] suffix = new String[] {&quot;\u4e86&quot;, &quot;\u7684&quot;, &quot;\u5730&quot;, &quot;\u4e0b&quot;, &quot;\u4e0a&quot;, &quot;\u4e2d&quot;, &quot;\u91cc&quot;,<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;\u5230&quot;, &quot;\u5185&quot;, &quot;\u5916&quot;, &quot;\u4eec&quot;};<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String[] infix&nbsp; = new String[] {&quot;\u5f97&quot;, &quot;\u4e0d&quot;};<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int i;<br />//<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StringBuffer unstemmed = new StringBuffer(word);<br />//<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (i = 0; i &lt; prefix.length; i++) {<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (unstemmed.substring(0, 1).equals(prefix[i]) == true &amp;&amp;<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (zhwords.get(unstemmed.substring(1, unstemmed.length()).intern()) != null ||<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unstemmed.length() == 2)) {<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot;Stemmed prefix&quot;);<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {System.out.println(new String(unstemmed.toString().getBytes(debugencoding)));} catch (Exception a) { };<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unstemmed.deleteCharAt(0);<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return unstemmed.toString();<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />//<br />//<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (i = 0; i &lt; suffix.length; i++) {<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (unstemmed.substring(unstemmed.length()-1, unstemmed.length()).equals(suffix[i]) == true &amp;&amp;<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (zhwords.get(unstemmed.substring(0, unstemmed.length()-1).intern()) != null ||<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unstemmed.length() == 2)) {<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot;Stemmed suffix&quot;);<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {System.out.println(new String(unstemmed.toString().getBytes(debugencoding)));} catch (Exception a) { };<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unstemmed.deleteCharAt(unstemmed.length()-1);<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return unstemmed.toString();<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />//<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (i = 0; i &lt; infix.length; i++) {<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (unstemmed.length() == 3 &amp;&amp; unstemmed.substring(1, 2).equals(infix[i]) == true &amp;&amp;<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; zhwords.get(new String(unstemmed.substring(0, 1) + unstemmed.substring(2, 3)).intern()) != null) {<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot;Stemmed infix&quot;);<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unstemmed.deleteCharAt(1);<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return unstemmed.toString();<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />//<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return unstemmed.toString();<br />//&nbsp;&nbsp;&nbsp; }<br />//</p>
<p>&nbsp;&nbsp;&nbsp; public void tokenize()&nbsp; throws IOException {<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(System.currentTimeMillis());<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List tokenCache = new ArrayList();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StringBuffer strb = new StringBuffer() ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char[] charb = new char[1024];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (input.read(charb)&gt;0) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb.append(charb) ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; charb = new char[1024];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String cline, separator ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cline = strb.toString() ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; separator = &quot;&quot; ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StringBuffer currentword = new StringBuffer();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StringBuffer outline = new StringBuffer();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StringBuffer tempword = new StringBuffer() ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int clength;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char currentchar;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //separator = &quot; &quot;;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; clength = cline.length();<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int[][] offsets = new int[clength][2];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boolean isLetter =false ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; clength; i++) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; currentchar = cline.charAt(i);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (Character.UnicodeBlock.of(currentchar) == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS ||<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; isNumber(cline.substring(i, i+1)) == true) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(isLetter)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; isLetter = false;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(currentword.length()&gt;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot;中文字符:&quot;+currentchar +&quot;&nbsp; 英文单词:&quot;+currentword.toString());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Token token = new Token(currentword.toString(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; outline.length(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; outline.length() +<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; outline.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; length(), tokenType);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tokenList.add(token);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; outline.append(currentword);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; currentword.setLength(0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Character in CJK block<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (currentword.length() == 0) {&nbsp; // start looking for next word<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //System.err.println(&quot;current word length 0&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (i &gt; 0 &amp;&amp; (Character.isWhitespace(cline.charAt(i-1)) == true)) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; outline.append(separator);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; currentword.append(currentchar);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(snotname.contains(String.valueOf(currentchar).intern()) == true)<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(currentchar +&quot; &quot; +currentword.length());<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 一个已知的bug ，在切分 直到这样的词的时候会被分成 直和 到两字，不够准确<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */</p>
<p><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (zhwords.containsKey(new StringBuffer(currentword).append(currentchar).toString().intern()) == true &amp;&amp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((String)(zhwords.get(new StringBuffer(currentword).append( currentchar).toString().intern()))).equals(&quot;1&quot;) == true) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // word is in lexicon<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; currentword.append(currentchar);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else if (isAllForeign(currentword.toString()) &amp;&amp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cforeign.contains(new String(new char[] {currentchar}).intern()) &amp;&amp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i + 2 &lt; clength &amp;&amp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (zhwords.containsKey(cline.substring(i, i+2).intern()) == false)) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Possible a transliteration of a foreign name<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; currentword.append(currentchar);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else if (isNumber(currentword.toString()) &amp;&amp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cnumbers.contains(new String(new char[] {currentchar}).intern())<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* &amp;&amp; (i + 2 &lt; clength) &amp;&amp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (zhwords.containsKey(cline.substring(i, i+2).intern()) == false) */ ) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Put all consecutive number characters together<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; currentword.append(currentchar);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else if ((zhwords.containsKey(new StringBuffer(currentword).append( currentchar).toString().intern())) &amp;&amp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (((String)(zhwords.get(new StringBuffer(currentword.toString()).append(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; currentchar).toString().intern()))).equals(&quot;2&quot;) == true) &amp;&amp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i + 1 &lt; clength &amp;&amp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (zhwords.containsKey(new StringBuffer(currentword).append( currentchar).append(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cline.charAt(i+1)).toString().intern()) == true))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Starts a word in the lexicon<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; currentword.append(currentchar);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else { // Start anew<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Token token = new Token(currentword.toString(), outline.length(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; outline.length()+currentword.length(), tokenType);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tokenList.add(token);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; outline.append(currentword);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (Character.isWhitespace(currentchar) == false) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; outline.append(separator);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; currentword.setLength(0);</p>
<p><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; currentword.append(currentchar);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println((cline.charAt(i+1)));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (currentword.length() &gt; 0 &amp;&amp; snotname.contains(String.valueOf(currentchar).intern()) == true&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp; (cline.length()&gt;(i+1) &amp;&amp; !snotname.contains(String.valueOf((cline.charAt(i+1)))))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp; (<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cline.length()&gt;=i+3 &amp;&amp; zhwords.containsKey((cline.substring(i+1, i+3)).intern())==true &amp;&amp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((String)(zhwords.get((cline.substring(i+1, i+3)).intern()))).equals(&quot;1&quot;) == true) ||<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cline.length()&gt;=i+4 &amp;&amp; zhwords.containsKey((cline.substring(i+1, i+4)).intern())==true &amp;&amp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((String)(zhwords.get((cline.substring(i+1, i+4)).intern()))).equals(&quot;1&quot;) == true))) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tempword.append(currentchar) ;</p>
<p>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; outline.append(currentchar);<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; outline.append(separator) ;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (tempword.length() &gt; 0) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Token ctoken = new Token(currentword.toString(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; outline.length(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; outline.length() +<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; currentword.length(), tokenType);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tokenList.add(ctoken);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; outline.append(currentword);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; outline.append(separator);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tempword.setLength(0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!tempword.toString().equals(currentword.toString()))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(currentword);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; currentword.setLength(0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(currentword);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; continue ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {&nbsp; // Not chinese character<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //System.err.println(&quot;not cjk&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!isLetter)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot;英文字符:&quot;+currentchar +&quot;&nbsp; 中文单词:&quot;+currentword.toString());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (currentword.length() &gt; 0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Token token = new Token(currentword.toString(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; outline.length(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; outline.length() +<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; currentword.length(), tokenType);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tokenList.add(token);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; outline.append(currentword);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; currentword.setLength(0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; outline.append(separator);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; isLetter = true ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(Character.isLetterOrDigit(currentchar))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; currentword.append(currentchar);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //System.out.println(&quot;字符:&quot;+currentchar +&quot;&nbsp; 单词:&quot;+currentword.toString());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (currentword.length() &gt; 0) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (Character.isLetterOrDigit(currentchar) == false) {</p>
<p>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot;英文字符:&quot; + currentchar + &quot;&nbsp; 英文单词:&quot; +currentword.toString());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Token token = new Token(currentword.toString(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; outline.length(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; outline.length() +<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; currentword.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; length(), tokenType);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tokenList.add(token);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; outline.append(currentword);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; outline.append(separator);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; currentword.setLength(0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(Character.isLetterOrDigit(currentchar)==false)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; outline.append(currentchar);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(currentword.length()&gt;0 &amp;&amp; outline.length()&lt;cline.length())<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Token token = new Token(currentword.toString(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; outline.length(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; outline.length() +<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; currentword.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; length(), tokenType);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tokenList.add(token);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; outline.append(currentword);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; outline.append(separator);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; currentword.setLength(0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; outline.append(currentword.toString());<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i = 0; i &lt; tokenList.size(); ++i){<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Token token = (Token) tokenList.get(i);<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot;token:&quot;+token.termText());<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tokenList.add(token);<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot;Clength:&quot;+outline);<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(System.currentTimeMillis());<br />&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; public static void main(String[] argv) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int charform = XDChineseTokenizer.TRAD;<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BufferReader bu = new Buffer<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String temp = //&quot;博客中国信息&quot; ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论&quot;;<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot; Length:&quot;+temp.length());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; java.io.StringReader reader = new StringReader(temp)&nbsp; ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XDChineseTokenizer mainsegmenter = new XDChineseTokenizer(reader);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (Token token = mainsegmenter.next(); token != null;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; token = mainsegmenter.next()) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot;&nbsp; ceshi:&quot;+token.termText()+&quot; 位置信息,x:&quot;+token.startOffset()+&quot; ;y:&quot;+token.endOffset());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (Exception ex) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ex.printStackTrace();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Query q = new Query() ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; q.addRequiredTerm(&quot;Nutch&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; org.apache.nutch.searcher.Summarizer s = new org.apache.nutch.searcher.Summarizer();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(s.getSummary(temp, q).toString());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (IOException ex1) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mainsegmenter<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println( mainsegmenter(&quot;&quot;, &quot; &quot;) );<br />&nbsp;&nbsp;&nbsp; }</p>
<p>}<br /></p>
<p>分词结果（37W词库）:</p>
<p>&nbsp; ceshi:中国 位置信息,x:0 ;y:2<br />&nbsp; ceshi:是 位置信息,x:2 ;y:3<br />&nbsp; ceshi:一个 位置信息,x:3 ;y:5<br />&nbsp; ceshi:人口 位置信息,x:5 ;y:7<br />&nbsp; ceshi:大国 位置信息,x:7 ;y:9<br />&nbsp; ceshi:在 位置信息,x:10 ;y:11<br />&nbsp; ceshi:博客 位置信息,x:11 ;y:13<br />&nbsp; ceshi:中 位置信息,x:13 ;y:14<br />&nbsp; ceshi:搜索 位置信息,x:14 ;y:16<br />&nbsp; ceshi:在 位置信息,x:17 ;y:18<br />&nbsp; ceshi:中搜 位置信息,x:18 ;y:20<br />&nbsp; ceshi:中 位置信息,x:20 ;y:21<br />&nbsp; ceshi:搜索 位置信息,x:21 ;y:23<br />&nbsp; ceshi:中搜 位置信息,x:23 ;y:25<br />&nbsp; ceshi:在线 位置信息,x:25 ;y:27<br />&nbsp; ceshi:在 位置信息,x:27 ;y:28<br />&nbsp; ceshi:纳斯达克 位置信息,x:28 ;y:32<br />&nbsp; ceshi:上市 位置信息,x:32 ;y:34<br />&nbsp; ceshi:的 位置信息,x:34 ;y:35<br />&nbsp; ceshi:消息 位置信息,x:35 ;y:37<br />&nbsp; ceshi:热烈 位置信息,x:38 ;y:40<br />&nbsp; ceshi:庆祝 位置信息,x:40 ;y:42<br />&nbsp; ceshi:中搜 位置信息,x:42 ;y:44<br />&nbsp; ceshi:在线 位置信息,x:44 ;y:46<br />&nbsp; ceshi:在 位置信息,x:46 ;y:47<br />&nbsp; ceshi:纳斯达克 位置信息,x:47 ;y:51<br />&nbsp; ceshi:上市 位置信息,x:51 ;y:53<br />&nbsp; ceshi:成功 位置信息,x:53 ;y:55<br />&nbsp; ceshi:中国 位置信息,x:56 ;y:58<br />&nbsp; ceshi:拥有 位置信息,x:58 ;y:60<br />&nbsp; ceshi:丰富 位置信息,x:60 ;y:62<br />&nbsp; ceshi:的 位置信息,x:62 ;y:63<br />&nbsp; ceshi:人力资源 位置信息,x:63 ;y:67<br />&nbsp; ceshi:穿 位置信息,x:68 ;y:69<br />&nbsp; ceshi:和服 位置信息,x:69 ;y:71<br />&nbsp; ceshi:的 位置信息,x:71 ;y:72<br />&nbsp; ceshi:女人 位置信息,x:72 ;y:74<br />&nbsp; ceshi:在 位置信息,x:74 ;y:75<br />&nbsp; ceshi:和 位置信息,x:75 ;y:76<br />&nbsp; ceshi:服装 位置信息,x:76 ;y:78<br />&nbsp; ceshi:公司 位置信息,x:78 ;y:80<br />&nbsp; ceshi:的 位置信息,x:80 ;y:81<br />&nbsp; ceshi:男人 位置信息,x:81 ;y:83<br />&nbsp; ceshi:交涉 位置信息,x:83 ;y:85<br />&nbsp; ceshi:和服 位置信息,x:86 ;y:88<br />&nbsp; ceshi:女人 位置信息,x:88 ;y:90<br />&nbsp; ceshi:在 位置信息,x:90 ;y:91<br />&nbsp; ceshi:和服 位置信息,x:91 ;y:93<br />&nbsp; ceshi:生产 位置信息,x:93 ;y:95<br />&nbsp; ceshi:车间 位置信息,x:95 ;y:97<br />&nbsp; ceshi:和 位置信息,x:97 ;y:98<br />&nbsp; ceshi:服装 位置信息,x:98 ;y:100<br />&nbsp; ceshi:公司 位置信息,x:100 ;y:102<br />&nbsp; ceshi:的 位置信息,x:102 ;y:103<br />&nbsp; ceshi:男人 位置信息,x:103 ;y:105<br />&nbsp; ceshi:一起 位置信息,x:105 ;y:107<br />&nbsp; ceshi:裸体 位置信息,x:107 ;y:109<br />&nbsp; ceshi:试穿 位置信息,x:109 ;y:111<br />&nbsp; ceshi:和服 位置信息,x:111 ;y:113<br />&nbsp; ceshi:研究生 位置信息,x:114 ;y:117<br />&nbsp; ceshi:态 位置信息,x:117 ;y:118<br />&nbsp; ceshi:理论 位置信息,x:118 ;y:120<br /><br /></p>
<p>&nbsp;</p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=23</link>
			<title><![CDATA[字符集编码的自动识别jchardet]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Thu,02 Nov 2006 18:00:02 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=23</guid>	
		<description><![CDATA[<h4>什么是jchardet?</h4>
<br />jchardet是mozilla自动字符集探测算法代码的java移植,其源代码可以从<a href="http://www.infomall.cn/cgi-bin/mallgate/20040514/http://sourceforge.net/project/showfiles.php?group_id=85452&amp;release_id=171192">sourceforge</a>下载。这个算法的最初作者是frank Tang,C++源代码在<a href="http://www.infomall.cn/cgi-bin/mallgate/20040514/http://lxr.mozilla.org/mozilla/source/intl/chardet/">http://www.infomall.cn/cgi-bin/mallgate/20040514/http://lxr.mozilla.org/mozilla/source/intl/chardet/</a>，可以从<a href="http://www.infomall.cn/cgi-bin/mallgate/20040514/http://www.mozilla.org/projects/intl/chardet.html">http://www.infomall.cn/cgi-bin/mallgate/20040514/http://www.mozilla.org/projects/intl/chardet.html</a>得到更多关于这个算法的信息。<br />
<h4>编译及应用</h4>
<br />　　将下载后的chardet.zip解压缩后，到~/mozilla/intl/chardet/java/目录下，运行ant即可在dist/lib目录下生成chardet.jar，将这个jar包加入CLASSPATH.然后
<div class="code">运行：java org.mozilla.intl.chardet.HtmlCharsetDetector http://hedong.3322.org<br />结果：CHARSET = GB18030<br />运行：java org.mozilla.intl.chardet.HtmlCharsetDetector http://www.wesnapcity.com/ <br />结果：CHARSET = ASCII<br />运行：java org.mozilla.intl.chardet.HtmlCharsetDetector http://www.wesnapcity.com/blog/ <br />结果：CHARSET = UTF-8</div>
<br />
<h4>编程使用</h4>
<br />　　下面就jchardet.jar中的HtmlCharsetDetector.java,对调用jchardet过程予以说明：<br />
<div class="code">//实现nsICharsetDetectionObserver接口，这个接口只有一个Notify()方法.当jchardet引擎自己认为已经识别出字符串的字符集后(不论识别的对错)，都会调用这个Notify方法。<br />nsICharsetDetectionObserver cdo=new nsICharsetDetectionObserver() {<br />&nbsp;&nbsp;public void Notify(String charset) {<br />&nbsp;&nbsp; HtmlCharsetDetector.found = true ;<br />&nbsp;&nbsp; System.out.println(&quot;CHARSET = &quot; + charset);<br />&nbsp;&nbsp;}<br />};<br />/**<br />* 初始化nsDetector()<br />*lang为一个整数，用以提示语言线索，可以提供的语言线索有以下几个： <br />*
<ol>
    <li>Japanese </li>
    <li>Chinese </li>
    <li>Simplified Chinese </li>
    <li>Traditional Chinese </li>
    <li>Korean </li>
    <li>Dont know (默认)</li>
</ol>
<br />*/<br />nsDetector det = new nsDetector(lang) ;<br />// 设置一个Oberver<br />det.Init(cdo);<br />BufferedInputStream imp = new BufferedInputStream(url.openStream());<br />byte[] buf = new byte[1024] ;<br />boolean done = false ;&nbsp;&nbsp;//是否已经确定某种字符集<br />boolean isAscii = true ;//假定当前的串是ASCII编码<br />while( (len=imp.read(buf,0,buf.length)) != -1) {<br />&nbsp;&nbsp;// 检查是不是全是ascii字符，当有一个字符不是ASC编码时，则所有的数据即不是ASCII编码了。<br />&nbsp;&nbsp;if (isAscii) isAscii = det.isAscii(buf,len);<br />&nbsp;&nbsp;// 如果不是ascii字符，则调用DoIt方法.<br />&nbsp;&nbsp;if (!isAscii &amp;&amp; !done) done = det.DoIt(buf,len, false);//如果不是ASCII，又还没确定编码集，则继续检测。<br />}<br />det.DataEnd();//最后要调用此方法，此时，Notify被调用。<br />if (isAscii) {<br />System.out.println(&quot;CHARSET = ASCII&quot;);<br />found = true ;<br />}<br />if (!found) {//如果没找到，则找到最可能的那些字符集<br />String prob[] = det.getProbableCharsets() ;<br />for(int i=0; i &nbsp;&nbsp;System.out.println(&quot;Probable Charset = &quot; + prob[i]);<br />}<br />}</div>
<br />
<h4>jchardet主要解决什么样的问题？</h4>
<br />　　Java字符串（及字符）类以Unicode编码保存数据。当处理来自外部的国际性文本时，我们需要提供关于这些文本的编码，以便准确地将它们转换为Unicode。这意味着你必须知道你的java代码要处理的所有文件的编码。许多基于Internet的Java应用程序，要处理来自随机数据源的数据，而很多数据的编码不能确切的知道。例如，一个HTML页面中的数据，如果没有元数据标签明确地指定页面的字符集，就很难确实其编码，将其转换为Java Unicode字符串时也会误用而终止。
<p>&nbsp;</p>
<p>&nbsp;</p>
<h4>这个算法是如何工作的？</h4>
<br />　　浏览器处理这个问题的方法，是对数据一个字节一个字节的检查，以力图测试字符集（当你点击菜单View-&gt;Auto-select或auto-detect时）。这个算法（最初由Frank Tang开发）检查字节序列，基于每个字节的值，利用逐步消除法(elimination logic)逐步缩小以至最后确定字符集。如果这个方法仍难以确定，就利用另一个方法，根据某种语言的字符的频次统计来确实字符集。]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=22</link>
			<title><![CDATA[汉语词法分析和句法分析技术综述 (关注隐含马尔可夫模型)]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Thu,02 Nov 2006 11:00:54 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=22</guid>	
		<description><![CDATA[第一届学生计算语言学研讨会(SWCL2002)专题讲座<br />汉语词法分析和句法分析技术综述<br />刘群<br />北京大学计算语言学研究所<br />中国科学院计算技术研究所<br />liuqun@ict.ac.cn<br /><br />引言<br />本文主要介绍一些常用的汉语分析技术。<br />所谓语言的分析，就是将一个句子分解成一些小的组成部分（词、短语等等）并了解这些<br />部分之间的关系，从而帮助我们把握这个句子的意义。<br />语言的研究，一般而言存在四个层面：词法层、句法层、语义层和语用层。<br />同样，语言的分析也存在四个层面：词法分析、句法分析、语义分析和语用分析。<br />本文主要介绍汉语的词法分析和句法分析技术。这两种技术是汉语分析技术的基础，而且<br />已经发展得比较成熟。文中也会少量提及语义层面和语用层面的一些问题，但不会做深入<br />的探讨。<br />汉语是一种孤立语（又称分析语），与作为曲折语和黏着语的其他一些语言相比，汉语在<br />语法上有一些特点，仅仅从形式上看，这种特点主要体现在以下几个方面：<br />1.	汉语的基本构成单位是汉字而不是字母。常用汉字就有3000多个（GB2312一级汉字），<br />全部汉字达数万之多（UNICODE编码收录汉字20000多）；<br />2.	汉语的词与词之间没有空格分开，也可以说，从形式上看，汉语中没有&ldquo;词&rdquo;这个单位<br />；<br />3.	汉语词没有形态上的变化（或者说形态变化非常弱），同一个词在句子中充当不同语法<br />功能时，形式是完全相同的；<br />4.	汉语句子没有形式上唯一的谓语中心词。<br />这些特点对汉语的分析造成了一定的影响，使得汉语分析呈现出和英语（以及其他一些语<br />言）不同的特点。<br />不过也不能过分夸大这种不同。我认为，那种以为汉语完全不同于英语，因此有必要重新<br />建立一套分析体系的想法是没有道理的。从现有的研究看，汉语分析所使用的技术和其他<br />语言分析所使用的技术并没有本质的不同，只是应用方式上有所区别（主要体现在词法分<br />析方面）。而且从应用的效果看，没有证据表明，这些技术用来分析汉语比用来分析英语<br />效果更差。<br />本文结合我们自己的一些工作，比较全面的介绍一下汉语词法分析和句法分析中所使用的<br />各种技术。<br />1	汉语词法分析<br />前面说过，汉语在形式上，并没有&ldquo;词&rdquo;这一个单位，也就是说，汉语的语素、词、短语<br />、甚至句子之间（词也可以直接成句，称为独词句），都没有明确的界限。<br />这是不是说，汉语就没有必要做词法分析，可以直接做句法分析呢？<br />实际并不是这样。因为如果这样做的话，会导致句法分析的搜索空间急剧膨胀，以致无法<br />承受。实际上，根据我们的统计，未定义词在汉语中真实文本中所占的比例并不大，可见<br />绝大部分词都是可以在词典中找到的，如果这些词都要从头开始分析，势必给句法分析带<br />来太多的负担。<br />不过汉语的词法分析与英语（或其他屈折型语言）的词法分析有很大不同。就英语来说，<br />采用确定的有限状态自动机就已经能基本解决问题，而对于汉语词法分析来说，需要更为<br />复杂的计算工具。就问题的复杂性而言，我认为汉语的词法分析大致相当于英语的词法分<br />析和基本短语分析之和。<br />1.1	汉语词法分析的任务<br />汉语词法分析包括一下几个任务：<br />1.	查词典<br />2.	处理重叠词、离合词、前后缀<br />3.	未定义词识别<br />a)	时间词、数词处理<br />b)	中国人名识别<br />c)	中国地名识别<br />d)	译名识别<br />e)	其他专名识别<br />4.	切分排歧<br />5.	词性标注<br />1.2	数据结构：词图（Word Graph）<br />对于一个汉语句子，如果把两个汉字之间的间隔作为结点，把一个汉语词作为连接两个结<br />点的有向边，那么我们就可以得到一个无环有向图：<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />根据这个数据结构，我们可以把词法分析中的几种操作转化为：<br />1.	给词图上添加边（查词典，处理重叠词、离合词和前后缀）；<br />2.	寻找一条起点S到终点E的最优路径（切分排歧）；<br />3.	给路径上的边加上标记（词性标注）；<br />1.3	词典查询与重叠词、离合词和前后缀的处理<br />词典查询主要考虑分词词典的数据结构与查询算法的时空消耗问题。<br />在词典规模不大的时候，各种词典查询算法对汉语词法分析的效率整体影响并不大。不过<br />当词典规模很大时（几十万到上百万数量级），词典查询的时空开销会变得很严重，需要<br />详细设计一个好的词典查询算法。<br />（孙茂松，2000）一文比较详细的总结了汉语词法分析中使用的几种词典查询算法。（Ah<br />o&amp;Corasick，1990）提出的算法（简称AC算法）实现了一种自动机，可以在线性的时间里<br />用一组关键词去匹配一个输入字符串，（Ng&amp;Lua， 2002）一文对AC算法中提出的自动机（<br />实际上就是一种词典索引的组织方式）进行了改进，可以快速实现输出汉语句子的多种切<br />分候选结果。对词典查询算法感兴趣的同学可以去查阅这几篇文章，这里不再做详细的介<br />绍。<br />汉语重叠词的重叠方式有很强的规律，处理起来并不困难。例如汉语的双字形容词的重叠<br />现象主要有三种：AABB、ABAB、A里AB。遇到这种形式的词，只要还原成词语原形AB并查词<br />典即可。<br />汉语词的前后缀不多，处理也不困难，通过简单的规则，即可这里不做介绍。<br />离合词的处理稍微复杂一些。现在一般的词法分析器都没有对离合词进行处理，仅仅把分<br />开的离合词作为两个词对待，实际上这样做是不太合理的。离合词中，通常有一个语素的<br />自由度比较差，可以通过这个语素触发，在一定的上下文范围内查找另一个语素，即可发<br />现离合词。<br />1.4	不考虑未定义词的切分排歧<br />1.4.1	切分歧义的分类<br />不考虑未定义词的切分排歧问题，也就是我们一般说的切分问题。<br />一般把切分歧义分为两种结构类型：交集型歧义（交叉歧义）和组合型歧义（覆盖歧义）<br />。<br />交集型歧义（交叉歧义）：&ldquo;有意见&rdquo;：我对他有意见。总统有意见他。<br />组合型歧义（覆盖歧义）：&ldquo;马上&rdquo;：我马上就来。他从马上下来。<br />其中交集型歧义占到了总歧义字段的85%以上。<br />实际语料中出现的情况并不都这么简单，有时会出现非常复杂的歧义切分字段。例如：<br /><br />公路局正在治理解放大道路面积水问题<br />其中&ldquo;治理&rdquo;&ldquo;理解&rdquo;&ldquo;解放&rdquo;&ldquo;放大&rdquo;&ldquo;大道&rdquo;&ldquo;道路&rdquo;&ldquo;路面&rdquo;&ldquo;面积&rdquo;&ldquo;积水&rdquo;都<br />是词，考虑到这些单字也都可以成词，这就使得这个句子可能的歧义切分结果非常多。<br /><br />1.4.2	切分排歧算法概述<br />这里我们介绍几种最主要的歧义切分算法：<br />1.	全切分：全切分算法可以给出一个句子所有可能的切分结果。由于全切分的结果数随着<br />句子长度的增加呈指数增长，因此这种方法的时空开销非常大；<br />2.	最大匹配：从左到右或从右到左，每次取最长词，得到切分结果。分为前向最大匹配、<br />后向最大匹配和双向最大匹配三种方法。很明显，最大匹配法无法发现组合型歧义（覆盖<br />歧义），对于某些复杂的交集型歧义（交叉歧义）也会遗漏；<br />3.	最短路径法：采用动态规划方法找出词图中起点到终点的最短路径，这种方法比最大匹<br />配法效果要好，但也存在遗漏的情况；<br />4.	交叉歧义检测法：（王显芳，2001-1）给出了一种交叉歧义的检测方法，可以快速给出<br />句子中所有可能的交叉歧义切分结果，对于改进切分的效率非常有效；<br />5.	基于记忆的交叉歧义排除法：（孙茂松，1999）考察了一亿字的语料，发现交集型歧义<br />字段的分布非常集中。其中在总共的22万多个交集型歧义字段中，高频的4,619个交集型歧<br />义字段站所有歧义切分字段的59.20%。而这些高频歧义切分字段中，又有4,279个字段是伪<br />歧义字段，也就是说，实际的语料中只可能出现一种切分结果。这样，仅仅通过基于记忆<br />的方法，保存一种伪歧义切分字段表，就可以使交集型歧义切分的正确率达到53%，再加上<br />那些有严重偏向性的真歧义字段，交集型歧义切分的正确率可以达到58.58%。<br />6.	规则方法：使用规则排除切分标注中的歧义也是一种很常用的方法。规则的形式定义可<br />以非常灵活，如下所示：<br />@@ 的话(A+B, AB)<br />CONDITION FIND(R,NEXT,X) {%X.ccat=~w} Select 1<br />CONDITION FIND(L,NEAR,X) {%X.yx=听|相信|同意} Select 1<br />CONDITION FIND(L,NEAR,X) {%X.yx=如果|假如|假设|要是|若|如若} Select 2<br />OTHERWISE Select 1<br />可以看到，通过规则可以在整个句子的范围内查找对于排歧有用的信息，非常灵活。规则<br />方法的主要问题在于知识获取。如果单纯依靠人来写规则，无疑工作量太大，而且也很难<br />总结得比较全面。也可以通过从语料库学习的方法来获取规则，如采用错误驱动的基于转<br />换的学习方法。<br />7.	n元语法：利用大规模的语料库和成熟的n元语法统计模型，可以很容易将切分正确率提<br />高到很高的正确率。（王显芳，2001-2）和（高山，2001）都说明，使用三元语法，在不<br />考虑未定义词的情况下，就可以将切分的正确率提高到98%以上。<br />8.	最大压缩方法：（Teahan et. al. 2000）提出了一种基于最大压缩的汉语分词算法。<br />这是一种自适应的算法，其基本思想是，首先用一个标注语料库进行训练，在实际标注过<br />程中以最大压缩比为指导来决定切分方式。这种方法的主要优点是其自适应的特定，可以<br />切分出一些词典中没有出现的词。<br />上面这些方法中，前四种方法不需要人工总结规则，也不需要语料库；规则方法需要人工<br />总结规则，比较费时费力；其他几种方法需要大规模的切分语料库为训练的基础。好在目<br />前这种语料库已经可以得到，如（俞士汶等， 2000）。<br />1.4.3	n元语法<br />从上面的介绍可以看到，在有大规模语料库切分语料库的情况下，采用简单的n元语法，就<br />可以使切分正确率达到相当高的程度。所以我们在这里简单介绍一下n元语法在汉语分词中<br />的应用。首先简单介绍一下n元语法的原理。<br />n元语法的作用之一，是可以预测一个单词序列出现的概率。n元语法假设一个单词出现的<br />概率分布只与这个单词前面的n-1个单词有关，与更早出现的单词无关。这样，为了描述这<br />个概率分布，我们需要使用一个n维数组，这个数组中每一维长度为单词的个数m，这个数<br />组中元素的个数为mn，其中元素 的含义为：在单词串 后面出现单词 的概率，也就是 。<br /><br />假设我们的单词表中有50,000个单词，如果我们使用一元语法，就是说，假设每个单词出<br />现的频率与其他单词无关，那么所使用的参数实际上就是每个单词出现的词频，参数个数<br />等于50,000。如果我们使用二元语法，就是说，假设每个单词出现的频率只与上一个单词<br />相关，那么所使用的参数就是一个单词后面出现另外一个单词的转移概率，参数个数为50<br />,000&times;50,000。如果采用三元语法，参数的个数将是50,000的三次方。实际上，由于很多<br />的单词序列在实际的语料库中并不会出现，所以实际上有效的参数数量会少的多。不过，<br />如果这些在训练语料中没有出现的单词序列出现在测试文本中，会导致该文本的预测概率<br />为0。为了避免这种情况，我们就要采用某种策略将这些为概率为0的单词序列赋予一个很<br />小的猜测值，这种策略叫做数据平滑。由于数据稀疏问题的大量存在，数据平滑在任何一<br />种统计模型中都是必须采用的。数据平滑有很多种技术，这里不再一一介绍。<br />n元语法是一种非常成熟的语言模型，而且在自然语言处理中被证明是非常有效的。Inter<br />net上有现成的n元语法的源代码可以下载（如The CMU-Cambridge Statistical Language<br /> Modeling toolkit），而且即使自己编写，也并不太复杂。<br />我们的实验表明，仅仅使用一元语法（也就是仅使用词频信息），切分的正确率就可以达<br />到92%以上。<br />1.4.4	基于n元语法的切分排歧方法<br />前面我们说了，所谓切分排歧过程，可以看作从词图中选择一条最优路径的过程。利用n元<br />语法，我们可以对任何一条路径进行概率评分：<br /> <br />算法可采用动态规划方法实现。算法的时间开销与句子长度成正比。<br />1.5	未定义词识别<br />汉语中，由于词与词之间没有形式上的边界，而且绝大多数的汉字都可以独立成词，因此<br />未定义词的识别问题非常严重。<br />1.5.1	时间词、数词处理<br />由于时间词、数词的组成规律性较强，识别起来比较简单。一般采用一个简单的确定性有<br />限状态自动机即可。例如采用下面的有限状态自动机可以识别年份：<br /><br /><br /><br /><br /><br /><br /><br />1.5.2	中国人名、中国地名、译名和其他专名的识别<br />中国人名是未定义词中最常见，也是比较容易识别的一类，因为中国人名的姓名用字都有<br />比较强的规律。中国地名的规律性稍差一些。译名的用字非常集中，不过短译名比较容易<br />和其他类型的未定义词混淆。其他专名主要包括组织机构名、企业商标字号等等，这些专<br />名的用字分布也有一定规律，但规律性不是很强，目前识别准确率都不高。<br />这些类型的未定义词识别，仅仅使用规则方法很难达到好的效果，一般都要进入统计方法<br />。我们这里仅以中国人名为例说明这些类型未定义词的识别方法。有关中国人名识别的研<br />究已经很多：（李建华，2000）、（孙茂松， 1995）、（张俊盛，1992）、（宋柔，199<br />3）等。所使用的方法包括规则加统计的方法和纯统计的方法。其中（孙茂松，1995）一文<br />对中国人名用字的分布有比较详细的统计结果。<br />这里我们主要介绍我们自己使用的一种采用隐马尔可夫模型（HMM）的中国人名识别方法（<br />Zhang et al.，2002，张华平等，2002），我们称之为&ldquo;基于角色标注的中国人名自动识<br />别方法&rdquo;。在我们的词法分析系统中，这种方法达到了很好的效果。<br />1) 	人名识别的输入输出<br />人名识别的输入是一个已经经过粗切分的句子，只是其中的未定义词都没有被识别出来，<br />如：<br />馆&nbsp; 内&nbsp; 陈列&nbsp; 周&nbsp; 恩&nbsp; 来&nbsp; 和&nbsp; 邓&nbsp; 颖&nbsp; 超生&nbsp; 前&nbsp; 使用&nbsp; 过&nbsp; 的&nbsp; 物品<br />注意，这个粗切分结果可能是有错误的，如这个句子就把超生合并成了一个词。<br />在通过中国人名识别程序后，应该把句子中&ldquo;周恩来&rdquo;和&ldquo;邓颖超&rdquo;这两个人名识别出来<br />。<br />2) 	隐马模型<br />关于隐马模型，我们这里不再做详细的介绍，只给出一个直观的解释。感兴趣的同学可以<br />取参考（Rabiner，1989）和（翁富良，1998）。隐马模型作为一种简单而有效的数学工具<br />，在自然语言处理、语音识别、生物信息学很多领域得到了广泛的应用。后面我们将要介<br />绍的词性标注，也要使用隐马模型这个工具。隐马模型目前已经发展得非常成熟，在网上<br />也能找到完整的带源代码的软件工具（如HMM Toolkit）。<br />我们这里以词性标注问题为例，对隐马模型给出一个直观的解释。<br />隐马模型要解决的问题，就是对于一个单词串（句子），要给这个单词串中的每一个单词<br />做一个标记（例如单词的词性）。并假设从统计规律上说，每一个词性的概率分布只与上<br />一个词的词性有关（也就是一个词性的二元语法），而每一个单词的概率分布只与其词性<br />相关。<br />如果我们已经有了一个已经标记了词性的语料库，那么我们就可以通过统计得到以下两个<br />矩阵（实际上还有一个初始词性概率分布矩阵）：<br />词性到词性的转移概率矩阵：A = {aij}，aij = p(Xt+1 = qj |Xt = qi)<br />词性到单词的输出概率矩阵：B = {bik}，bik = p(Ot = vk | Xt = qi)<br />这里q1,&hellip;,qn是词性集合，v1,&hellip;,vm是单词的集合。<br />对于词性标注问题而言，转移概率矩阵中的一个元素aij含义的就是上一个词的词性为qi时<br />，下一个词的词性为qj的概率；输出概率矩阵中的一个元素bik的含义就是对于一个词性q<br />i来说，对应的词语为vk的概率。<br />在有了这两个矩阵之后，对于任何一个给定的观察值序列（单词串），我们总可以通过一<br />个Viterbi算法，很快得到一个可能性最大的状态值序列（词性串）。算法的复杂度与观察<br />值序列的长度（句子中的单词个数）成正比。对于Viterbi算法，我们这里不再详细描述。<br /><br />3) 	中国人名识别中的角色定义<br />通过上面的介绍我们可以看到，隐马模型处理的问题就是一个标注问题，也就是给一个单<br />词串中的每一个单词做一个标注的问题。<br />对于词性标注问题而言，这个标注就是词性。<br />对于中国人名识别问题，我们要标注的是这个单词在人名识别中充当的角色。<br />我们定义的角色如下表所示：<br />编码	意义	例子<br />B	姓氏	张华平先生<br />C	双名的首字	张华平先生<br />D	双名的末字	张华平先生<br />E	单名	张浩说：&ldquo;我是一个好人&rdquo; <br />F	前缀	老刘、小李 <br />G	后缀	王总、刘老、肖氏、吴妈、叶帅<br />K	人名的上文	又来到于洪洋的家。<br />L	人名的下文	新华社记者黄文摄<br />M	两个中国人名之间的成分	编剧邵钧林和稽道青说<br />U	人名的上文和姓成词	这里有关天培的壮烈<br />V	人名的末字和下文成词	龚学平等领导, 邓颖超生前<br />X	姓与双名的首字成词	王国维、<br />Y	姓与单名成词	高峰、汪洋<br />Z	双名本身成词	张朝阳<br />A	以上之外其他的角色	<br />4) 	语料库的训练<br />隐马模型的训练需要标记好的语料库。由于这里的标记是我们自己定义的，显然没有现成<br />的语料库可用。不过这个问题并不难解决。由于我们已经有了《人民日报》的切分标记语<br />料库，这个语料库中所有词都标注了词性，其中人名也有专门的标记（nr），我们设计了<br />一个半自动转换程序，只需要很少的人工干预，就可以将《人民日报》语料库的词性标记<br />转换为我们设定的中国人名角色标记。<br />5) 	人名的识别<br />通过语料库的训练，我们可以得到中国人名识别的隐马模型（三个个概率矩阵）。这样，<br />对于输入的任何一个粗切分结果，我们都可以进行中国人名的角色标注。<br />为了解决人名与其上下文组合成词的问题，在人名识别之前，我们要对角色U（人名的上文<br />和姓成词）和V（人名的末字和下文成词）进行分裂处理。相应地分裂为KB、DL或者EL。然<br />后，我们在得到的角色序列中寻找一些特定的模式：{BBCD, BBE, BBZ, BCD, BEE, BE, B<br />G, BXD, BZ, CD, EE, FB, Y, XD}，凡是匹配成功的序列，我们都认为是一个人名。<br />以前面的句子为例，我们得到的标注结果（分裂后）就是：<br />馆/A 内/A 陈列/K 周/B 恩/C 来/D 和/M 邓/B 颖/C 超/D 生/L 前/A <br />使用/A 过/A 的/A 物品/A<br />通过模式匹配，得到两个成功的模式（都是BCD），对应的人名就是&ldquo;周恩来&rdquo;和&ldquo;邓颖超<br />&rdquo;。<br />6) 	实验结果<br />我们利用两个月的《人民日报》语料进行初步的测试，结果如下表所示：<br />类别	封闭测试语料1	封闭测试语料2	开放测试语料<br />来源均为《人民日报》	98年1月	98年2月1日-20日	98年2月20日-28日<br />语料库大小（字节）	8,621K	6,185K	2,605K<br />实际人名数	13360	7224	2967<br />识别出的人名数	17505	10929	4259<br />正确识别的人名数	13079	7106	2739<br />准确率	74.72%	65.02	64.32%<br />召回率	97.90%	98.37%	92.32%<br />F值 	84.75%	78.29%	75.81%<br />需要说明的是，我们这里的测试是在完全真实的语料环境下进行的。如果仅对12,507个含<br />人名的句子重新进行识别测试实验，无论是封闭测试还是开放测试，准确率、召回率均超<br />过92%以上。因为这种方法下，排除了原来没有人名的句子被识别出人名的错误情况。另外<br />，由于我们的实验规模比已有的一些类似工作的规模都要大得多，其实验结果的可信度也<br />更高。<br />我们的实验结果中，召回率比较高，而准确率较低，这也对我们的整个词法分析是有利的<br />。由于人名识别只是整个词法分析过程的一个阶段，错误识别出的人名在后续的过程中还<br />有可能被排除掉，但被忽略掉的人名在后续过程中却不可能被重新发现。众所周知，召回<br />率和准确率是互相矛盾的。高召回率、低识别率对于整个词法分析过程是有利的。<br />1.6	考虑未定义词的切分排歧<br />前面介绍的切分排歧方法，都没有考虑到未定义词问题。如果把未定义词的因素考虑进来<br />，切分排歧算法应该如何调整呢？<br />前面我们介绍了，采用n元语法，我们可以从一个词图中选取一条最优路径，作为最好的分<br />词结果。其中，n元语法的参数可以事先从语料库中训练得到。在未定义词词识别以后，词<br />图中加入了新识别出来的未定义词。不过，由于未定义词可能是语料库没有出现的，无法<br />事先得到未定义词的n元语法参数。<br />我们采用的做法是：把每一种类型的未定义词（如中国人名、中国地名等）作为同一个词<br />进行n元语法的参数估计。在实际计算词图中的一条路径的概率评分时，除了要利用n元语<br />法的概率评分之外，还要乘上句子中每一个未定义词在该类未定义词中出现的概率。也就<br />是评分函数修改如下：<br /> <br />其中，Type(t)，t=1&hellip;T，表示T种类型的未定义词， 为句子中识别出来的类型为Type(t)<br />的lt个未定义词。其中 可以由前面的未定义词识别算法得到。<br />1.7	词性标注<br />词性标注也是研究得比较充分的一个课题。<br />总体上说，汉语的词性标准和英语的词性标注在方法上没有明显的不同。<br />在有大规模标注语料库的情况下，很多方法（特别是统计方法）都可用于解决词性标注问<br />题，而且结果通常也都很好。我们这里不一一列举，只给出常用的两种方法：<br />1.	隐马模型（HMM）：前面已经介绍了；<br />2.	错误驱动的基于转换的规则方法（TBL）：这是一种从语料库中学习规则的方法，由于<br />篇幅所限，这里不做详细介绍；<br />我们使用《人民日报》标注语料库，采用隐马模型，也得到了很好的结果。<br />1.8	词法分析的流程<br />大家可以看到，词法分析是一个很复杂的过程，其中有很多子任务，而这些子任务又是互<br />相交织在一起的。作为一个完整的词法分析程序，应该如何组织这个过程？子任务之间又<br />应该如何衔接呢？<br />在具体实现上，各个子任务的顺序并没有明确的规定，例如，前后缀的处理可以在查词典<br />阶段进行，也可以在未定义词识别阶段进行；人名识别可以在查词典之前进行（基于字的<br />模型），也可以在查词典以后进行（基于词的模型），切分和标注可以分别进行，也可以<br />同时进行（高山，2001）。<br />不过，根据我们的经验，我们在这里提出几条原则，应该说对整个词法分析流程的设计有<br />一定的指导意义：<br />1.	采用一致的数据结构（如词图），有利于各个阶段之间的衔接。这个数据结构应该有一<br />定的冗余表达能力，能够同时表示多种切分标注的结果；<br />2.	每一个阶段最好能输出几个候选结果，有些歧义现象在某一个阶段无法排除，可能在下<br />一阶段却很容易解决，提供多个候选结果，有利于总体上减少错误率；<br />3.	如果采用统计模型，应该尽量在各个统计模型之间建立一定的联系，也就是前面得到的<br />概率评分值能在后面的阶段中有效的利用起来，最理想的是建立统一的概率模型，可以得<br />到总体最优的结果。<br />在我们的系统中，我们采用的词法分析流程如下所示：<br />1.	查词典，重叠词处理；<br />2.	数词、时间词、前后缀处理；<br />3.	粗切分（采用基于词一元语法，保留多个结果）；<br />4.	未定义词识别（采用基于角色标注的隐马模型，识别中国人名、中国地名、译名、其他<br />专名）；<br />5.	细切分（采用基于词的二元语法，利用PCFG计算未定义词概率，输出多个结果）；<br />6.	词性标注（采用隐马模型，输出一个或多个结果）。<br />我们开发的系统ICTCLAS通过大规模的开放测试，实际切分正确率在97%以上，标注正确率<br />约为95%。该系统的源代码可以在自然语言处理开放平台(<a href="http://www.nlp.org.cn/" target="_blank"><font color="#337fd4">http://www.nlp.org.cn</font></a>下载。<br /><br />2	汉语句法分析<br />词法分析的作用是从词典中划分出词，而句法分析的作用是了解这些词之间的关系。所以<br />，句法分析的输入是一个词串（可能含词性等属性），输出是句子的句法结构。<br />就句法分析所面临的问题而言，汉语和英语及其他语言，都没有太大的不同。二者所采用<br />的技术也都大体一致。<br />2.1	形式语法体系<br />句法分析一般都依赖于某种语法体系。语法体系的形式丰富多彩，各种语法形式都有各自<br />的特点。这里简要介绍几种典型的语法形式，主要目的是让读者对语法形式的多样性有一<br />个直观的感受。<br />不同的语法体系产生的句法结构形式不尽相同。最常见也最直观的句法结构形式是句法树<br />。其他主要的形式有依存关系树（依存语法、范畴语法）、有向图（链语法）、特征结构<br />（HPSG、LFG）等等。<br />2.1.1	乔姆斯基层次体系<br />所谓乔姆斯基层次体系（Chomsky Hierarchy），指的是乔姆斯基定义的四种形式语法，这<br />四种语法，这四种语法所产生的语言依据包含关系构成了严格的层次体系。<br />乔姆斯基层次体系第一次严格地描述了形式语法、语言和自动机之间的关系，在数学、计<br />算机科学和语言学建立起了一道沟通的桥梁。<br />在乔姆斯基的语法层次体系中，一共定义了四种层次的形式语法，这四种语法可统称为短<br />语结构语法（PSG）。一个PSG形式定义如下：<br />一个PSG是一个四元组：{ V, N, S, P }, 其中V是终结符的集合（字母表），N是非终结符<br />的集合，S&isin;N是开始符号，P是重写产生式规则集。<br />乔姆斯基语法层次体系中的四种语法形式具体说明如下：<br />层级	语法	识别自动机	产生式规则形式	例子<br />0型	不受限短语结构语法	图灵机	&alpha; -&gt; &beta;	<br />1型	上下文敏感语法	线性有界自动机	&alpha;A&beta; -&gt; &alpha;&gamma;&beta;	anbncn<br />2型	上下文无关语法	下推自动机	A -&gt; &gamma;	anbn<br />3型	正规语法	有限状态机	A -&gt; aBA -&gt; a 	a*<br />一个PSG所接受的语言就是由开始符号S通过P中的规则所可以导出的所有终结符串的集合。<br />乔姆斯基四种形式语法所导出的语言具有以下关系：<br />0型语法1型语法2型语法3型语法<br /><br /><br /><br />正规语法的语法形式最严格，生成的语言最简单，分析起来也最容易（时间复杂度是线性<br />的），可以用有限状态自动机进行分析。有限状态自动机现在广泛应用于各种语言的词法<br />分析中。由于有限状态自动机的高效性，也有人使用它来进行句法分析（见后面部分分析<br />的介绍），甚至有人用来做机器翻译(Alshawi et al.，2000)。<br />上下文无关语法虽然不足以刻划自然语言的复杂性，但由于其形式简单，分析效率高（多<br />项式时间复杂度），实际上是句法分析中使用最广泛的一种语言形式。我们后面将要介绍<br />的句法分析算法大多也都是基于上下文无关语法的。<br />上下文敏感语法分析的时间复杂度是非多项式的（NP问题），而0型文法的分析甚至不是一<br />个可判定性问题（实际上是一个半可判定问题），所以这两种语法形式在实际中都无法得<br />到应用。<br />2.1.2	乔姆斯基的形式句法理论<br />乔姆斯基的形式语法理论不仅是现代计算机科学的基础之一，也为语言学的研究打开了一<br />个暂新的局面，对自然科学和社会科学的很多领域都产生了深远的影响，被称为&ldquo;乔姆斯<br />基革命&rdquo;，在科学史上具有里程碑式的重要地位。<br />乔姆斯基的形式语法理论是一个不断演变、不断发展的过程。在1957年，乔姆斯基提出了<br />&ldquo;转换生成语法理论（TG）&rdquo;，1970年代，发展成为&ldquo;标准理论&rdquo;，在1981年，乔姆斯基<br />又提出了&ldquo;管辖－约束理论（GB）&rdquo;，1992年，提出了&ldquo;最简方案（MP）&rdquo;。<br />乔姆斯基的形式语法理论有一个核心思想，就是&ldquo;普遍语法&rdquo;的思想。他认为人有先天的<br />语言习得机制，生来就具有一种普遍语法知识，这是人类独有的生理现象。人类各种语言<br />之间共性（原则）是主要的，语言之间的个性（参数）是次要的。因此乔姆斯基后期的语<br />言学理论（GB以后）又称为&ldquo;原则＋参数&rdquo;的语言学理论。<br />乔姆斯基早期的转换生成语法还比较简单，后来乔姆斯基语法理论越来越复杂，使得形式<br />化的工作变得非常困难。所以现在计算语言学领域的研究中，已经很少有人采用乔姆斯基<br />的形式语法体系。不过乔姆斯基的形式句法理论在语言学界还是很有生命力的，因为它确<br />实可以解释很多其他理论很难解释的语言现象。<br />2.1.3	中心词驱动的短语结构语法（HPSG）和词汇功能语法（LFG）<br />HPSG和LFG属于非乔姆斯基阵营的语法理论中比较有生命力的两种。<br />他们与乔姆斯基语法理论的本质差别在于没有转换规则（乔姆斯基后期的理论中又称为&alpha;<br />－移动），没有浅层结构和深层结构的区别。<br />从计算机实现的角度看，这两种理论都采用了特征结构这种形式来表达复杂的语言学知识<br />并采用合一算法进行规则的推导。与乔姆斯基的语法理论不同，这两种语法理论都又很好<br />的可实现性。因此这两种理论的发展一直和计算机的结合非常紧密。<br />有关这两种语法的详细资料，可到互联网上查询相应网站。<br />LFG：Stanford：<a href="http://www-lfg.stanford.edu/lfg/" target="_blank"><font color="#014da2">http://www-lfg.stanford.edu/lfg/</font></a><br />Essex：&nbsp; <a href="http://clwww.essex.ac.uk/LFG/" target="_blank"><font color="#014da2">http://clwww.essex.ac.uk/LFG/</font></a><br />HPSG：<a href="http://hpsg.stanford.edu/" target="_blank"><font color="#014da2">http://hpsg.stanford.edu/</font></a><br />下面仅通过几个图示简单介绍一下LFG，使读者对LFG有一个直观的映像。<br />在LFG中，一个句子的结构除了用一棵句法树（c-structure），还用一个特征结构（f-st<br />ructure）来刻划这个句子的各种句法特征，如下图所示：<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />相应的，LFG的规则（包括词典中的词条）除了通常的短语结构规则形式外，还附带一些合<br />一表达式，如下图所示（&amp;shy;其中表示父结点的特征结构，&amp;macr;表示本结点的特征结构<br />）：<br /><br /><br /><br /><br /><br /><br /><br /><br />2.1.4	依存语法<br />依存语法也是一种使用非常广泛的语法形式。<br />与短语结构语法（PSG）的最大不同在于，依存语法的句法结构表示形式不是一棵句法层次<br />结构的句法树，而是一棵依存树：依存树上的所有结点都是句子中的词，没有非终结符结<br />点。例如句子&ldquo;我喜欢看古典小说&rdquo;的依存结构如下图所示：<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />可以看到，在依存关系树中，丢失了句子中词与词之间的顺序关系。<br />应该说，依存语法并不是一种严格定义的语法形式。依存语法没有明确定义的规则形式。<br />也没有明确规定依存关系是否要加上标记。实际的应用系统中，一般都会给依存关系加上<br />句法或语义的标记。<br />1970年，美国计算语言学家J. 罗宾孙(J. Robinson)提出了依存语法的4条公理：<br />1.	一个句子只有一个成分是独立的；<br />2.	句子中的其它成分直接从属于某一成分；<br />3.	任何一个成分都不能从属于两个或两个以上的成分；<br />4.	如果成分A直接从属于成分B，而成分C在句子中位于A和B之间，那么，成分C或者从属于<br />A，或者从属于B，或者从属于A和B之间的某一成分。<br />这四条公理比较准确界定了一个依存树所要满足的条件，得到了依存语法研究者的普遍接<br />受。<br />2.1.5	链语法<br />链语法由美国CMU计算机学院的Daniel Sleator和美国Columbia Uiversity（的Davy Temp<br />erley共同提出，最早的文章是1991年的一个技术报告，题目是&ldquo;Parsing English with <br />a Link Grammar&rdquo;。<br />链语法的网址是：<a href="http://www.link.cs.cmu.edu/link。" target="_blank"><font color="#014da2">http://www.link.cs.cmu.edu/link。</font></a><br />链语法词典中的词条如下图所示：<br /><br /><br /><br /><br /><br /><br /><br /><br /><br />上面的一些词组成的一个句子通过句法分析得到下面的结构：<br /><br /><br /><br /><br /><br /><br /><br />链语法的一个显著特点是分析的结果不是一棵句法树，而是一个有向图。<br />链语法的另一个特点是没有句法规则，只有几条简单的原则，用于规定句法成分之间互相<br />结合的方式。链语法的语法知识都存放在词典中。<br />链语法的网站上提供了链语法分析器的完整源代码。<br />2.1.6	范畴语法<br />范畴语法语法的特点在于，把句法分析的过程变成了一种类似分数乘法中进行的&ldquo;约分&rdquo;<br />运算。<br />举一个简单的例子：我喜欢红苹果。<br />在词典中，句子中的几个词分别表示为：<br />我：N<br />喜欢：N/S\N<br />红：N/N<br />苹果：N<br />句法分析的过程表现为：<br />红＋苹果：N/N + N =&gt; N<br />喜欢＋红苹果：N\S/N + N =&gt; N\S<br />我＋喜欢红苹果：N+N\S =&gt; S<br />和链语法一样，在范畴语法中，也没有规则，只有几条简单的原则，规定范畴之间如何进<br />行&ldquo;约分&rdquo;，所有的语法信息都表现在词典中。<br />范畴语法在现在的形式语义学理论中有很重要的作用。<br />范畴语法的网站是：<a href="http://www.cs.man.ac.uk/ai/CG/。" target="_blank"><font color="#014da2">http://www.cs.man.ac.uk/ai/CG/。</font></a><br />2.2	句法分析算法<br />句法分析的过程就是将小的语法成分组合成大的语法成分的过程。虽然各种语法的形式相<br />差很大，不过在句法分析的过程中采用的分析算法都是类似的（也有少数语法有自己特有<br />的句法分析算法）。<br />2.2.1	常见的分析算法<br />常见的句法分析算法包括：<br />1.	自顶向下分析算法；<br />2.	自底向上分析算法；<br />3.	左角分析算法；<br />4.	CYK算法；<br />5.	Marcus确定性分析算法；<br />6.	Earley算法；<br />7.	Tomita算法（GLR算法）；<br />8.	Chart算法；<br />等等。<br />这些算法都有各自的优缺点和适用的场合，由于篇幅关系，我们难以一一介绍。<br />目前应用得最为广泛的句法分析算法是Tomita算法和Chart算法。<br />Tomita算法是传统的LR分析算法的一种扩展，所有又被称为Generalized LR（GLR）算法。<br />和LR算法一样，GLR算法也是一种移进－规约（Shift-Reduce）算法。GLR算法对传统LR算<br />法的改进主要体现在：<br />1)	GLR分析表允许有多重入口（即一个格子里有多个动作），这样就克服了传统LR算法无<br />法处理歧义结构的缺点；<br />2)	将线性分析栈改进为图分析栈处理分析动作的歧义（分叉）；<br />3)	采用共享子树结构来表示局部分析结果，节省空间开销<br />4)	通过节点合并，压缩局部歧义。<br />对于Tomita算法，我们这里不做详细的介绍。我们主要介绍的是Chart分析算法。实际上，<br />Chart分析算法是非常灵活的，通过修改Chart算法中的分析策略，很容易模拟很多种形式<br />的其他算法，例如自顶向下的分析算法、自底向上的分析算法和左角分析算法等等。这也<br />是Chart分析算法得到广泛应用的原因之一。<br />2.2.2	Chart算法<br />1) 	一个简单的文法<br />算法的介绍，最直观的做法莫过于通过一个例子来说明。我们这里也不例外。<br />考虑一个句子 ：我 是 县长 派 来 的。<br />词典中的词条有：<br />(1)	R &agrave; 我<br />(2)	N &agrave; 县长<br />(3)	V &agrave; 是 | 派 | 来<br />所使用的规则为：<br />(1)	S &agrave; NP VP<br />(2)	NP &agrave; R<br />(3)	NP &agrave; N<br />(4)	NP &agrave; Sf 的<br />(5)	VP &agrave; V NP<br />(6)	Sf &agrave; NP VPf <br />(7)	VPf &agrave; V V<br />其中Sf、VPf分别表示带空位的S和VP，这里大家可以不必管它的含义，只要把Sf和VPf分别<br />看成两个独立的短语类型即可。<br />2) 	Chart数据结构<br />Chart（有人译为线图）是Chart算法中最重要的数据结构。<br />与前面介绍的词图表示法有点类似，线图是把词与词之间的间隔作为结点，把词和短语当<br />作连接结点的边。于是这个句子可以用词图表示为：<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />这个图上，我们不仅标出了每条边的标记，还标出了产生该边的规则。<br />注意：&ldquo;我是县长&rdquo;和&ldquo;我是县长派来的&rdquo;都是句子。<br />3) 	活跃边与非活跃边<br />我们注意到，&ldquo;我是县长&rdquo;和&ldquo;我是县长派来的&rdquo;都是由规则S &agrave; NP VP生成的，而且其<br />中&ldquo;NP&rdquo;都是对应同一个结点（&ldquo;我&rdquo;）。也就是说，这两次规则使用的过程中，有一个<br />冗余的操作：将规则右部的第一个结点NP与同一个结点（&ldquo;我&rdquo;）进行匹配。如果规则很<br />多，Chart的结构很复杂，这种冗余是很严重的。那么，我们能不能消除这种冗余操作呢？<br />答案是可以。在Chart算法中，将边分为两种，一种叫做非活跃边，就是上图中我们已经见<br />过的这种边。另一种叫做活跃边，用于记录一条规则部分被匹配的情形。于是，规则S &agrave;<br /> NP VP生成结点&ldquo;我是县长&rdquo;的匹配过程可以记录为两条活跃边和一条非活跃边：<br /><br />记录方式	边状态	匹配程度	起点	终点	对应词串<br />&lt;0,0, S&agrave;.NP VP&gt;	活跃	S &agrave; .NP VP	0	0	<br />&lt;0,1, S&agrave;NP. VP&gt;	活跃	S &agrave; NP. VP	0	1	我<br />&lt;0,3, S&agrave;NP VP.&gt;	非活跃	S &agrave; NP VP.	0	3	我是县长<br /><br />其中&ldquo;匹配程度&rdquo;用规则中加入句点来表示，其中句点的位置表示规则已经匹配成功的位<br />置（从左边开始）。用Chart表示如下：<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />4) 	日程表（Agenda）<br />在Chart算法中，还有一个重要的数据结构，称为&ldquo;日程表（Agenda）&rdquo;。<br />Chart分析的过程就是一个不断产生新的边的过程。但是每一条新产生的边并不能立即加入<br />到Chart中，而是要放到日程表（Agenda）中。<br />日程表（Agenda）实际上是一个边的集合，用于存放已经产生，但是还没有加入到Chart中<br />的边。日程表（Agenda）中边的排序和存取方式，是Chart算法执行策略的一个重要方面（<br />后面将要介绍）。<br />5) 	Chart算法的基本流程<br />Chart算法就是一个由日程表驱动的不断循环的过程：<br />(1)	按照初始化策略初始化日程表（Agenda）；<br />(2)	如果日程表（Agenda）为空，那么分析失败；<br />(3)	每次按照日程表组织策略从日程表（Agenda）中取出一条边；<br />(4)	如果取出的边是一条非活跃边，而且覆盖整个句子，那么返回成功；<br />(5)	将取出的边加入到Chart中，执行基本策略和规则调用策略，将产生的新边又加入到日<br />程表（Agenda）中；<br />(6)	返回第(2)步。<br />这个算法流程当中，各项基本策略都是可以调整的，通过调整这些策略，可以得到不同的<br />分析算法。下面我们主要介绍如果通过调整这些策略来改变分析算法。<br />6) 	初始化策略<br />Chart分析算法开始执行以前，要先将日程表（Agenda）初始化。对于自底向上和自顶向下<br />的分析算法，要采用不同的初始化策略：<br />自底向上分析的规则调用策略：<br />(2)	将所有单词（含词性）边加入到日程表（Agenda）中。<br />自顶向下分析的规则调用策略：<br />(1)	将所有单词（含词性）边加入到日程表（Agenda）中；<br />(2)	对于所有形式为：S&agrave;W的规则，产生一条形式为&lt;0, 0, S&agrave;.W&gt;的边，并加入到日程表<br />（Agenda）中；<br />7) 	基本策略<br />在Chart算法中，边是逐条被加入到Chart中的。每一条边在被加入到Chart中时，都要执行<br />以下基本策略：<br />(1)	如果新加入一条活跃边形式为：&lt;i, j, A&agrave;W1. B W2&gt;<br />那么对于Chart中所有形式为：&lt;j, k, B&agrave;W3&gt;的非活跃边，生成一条形式为&lt;i, j, A&agrave;W1<br /> B. W2&gt;的新边，并加入到日程表（Agenda）中；<br />(2)	如果新加入一条活跃边形式为：&lt;j, k, B&agrave;W3&gt;<br />那么对于Chart中所有形式为：&lt;i, j, A&agrave;W1. B W2&gt;的活跃边，生成一条形式为&lt;i, j, A<br />&agrave;W1 B. W2&gt;的新边，并加入到日程表（Agenda）。<br />上面A、B为非终结符，W1、W2、W3为终结符和非终结符组成的串，其中W1、W2允许为空，<br />W3不允许为空。<br />8) 	规则调用策略<br />自底向上的分析和自顶向下的分析中，要使用不同的规则调用策略：<br />自底向上分析的规则调用策略：<br />如果要加入一条形式为&lt;i, j, C&agrave;W1.&gt;的边到Chart中，<br />那么对于所有形式为B&agrave;C W2的规则，产生一条形式为&lt;i, i, B&agrave;.C W2&gt;的边加入到日程表<br />（Agenda）中。<br />自顶向下分析的规则调用策略：<br />如果要加入一条形式为&lt;i, j, C&agrave;W1.B W2&gt;的边到Chart中，<br />那么对于所有形式为B&agrave;W的规则，产生一条形式为&lt;j, j, B&agrave;.W&gt;的边，并加入到日程表（<br />Agenda）中。<br />9) 	日程表组织策略<br />通过日程表组织的不同策略，可以分别实现深度优先和广度优先等句法分析策略：<br />深度优先的日程表组织策略：<br />将日程表按照堆栈的形式，每次从日程表中取出最后加入的结点；<br />广度优先的日程表组织策略：<br />将日程表按照队列的形式，每次从日程表中取出最早加入的结点；<br />10) 	细节处理<br />前面的讨论中忽略了两个细节，在实现一个系统时应该考虑到：<br />(1)	考虑到可能通过多种途径生成一条完全相同的边，所以每次从日程表（Agenda）中取<br />出一条新边加入Chart时，要先检查一下Chart中是否已经有相同的边，如果有，那么删除<br />这条边，直接进入下一个循环；<br />(2)	为了生成最后的句法结构树，每一条边中还应该记录其的子句法成分所对应的边。<br /><br />11) 	例子<br />下面我们按照自底向上的初始化策略和规则调用策略以及深度优先的日程表组织策略，给<br />出上述例句（&ldquo;我是县长派来的&rdquo;）的分析过程（略）。<br />12) 	讨论<br />通过上面的介绍，大家可以看到，Chart分析算法是一种非常灵活的分析算法，通过修改分<br />析过程中的一些具体策略，Chart分析算法可以模拟很多种其他句法分析算法。<br />如果你有兴趣，完全可以自己尝试修改这些策略，以实现新的句法分析算法。<br />另外，（白硕&amp;张浩，2002）中，把Tomita算法中&ldquo;向前看（look ahead）&rdquo;的思想结合到<br />Chart分析算法中，提出了一种&ldquo;角色反演算法&rdquo;，可以减少Chart分析算法中垃圾边的数<br />量而又不影响最后的分析结果，提高分析的效率。<br />2.2.3	基于统计的句法分析算法<br />随着统计方法在NLP中的复兴，各种统计的句法分析算法也开始得到广泛的研究，并取得了<br />很大的进展。<br />纯粹基于规则的句法分析算法有以下缺点：<br />1.	歧义问题：如何总众多的歧义结构中选择合理的结构？规则方法无法给出满意的答复；<br /><br />2.	鲁棒性问题：对于不符合语法的句子，规则方法无法给出满意的猜测；<br />3.	规则冲突问题：规则增加时规则之间的冲突变得非常严重，规则调试非常困难，后面的<br />规则往往会抵消前面规则的作用，使得系统总体效果无法改善。<br />由于基于统计的概率句法分析算法都需要句法树库作为训练数据（无指导的统计句法分析<br />算法也有人尝试过，效果非常糟糕），这使得句法树库的建设成为了实现统计句法分析算<br />法的前提。好在现在已经开始有了一些这种语料库，如LDC提供的英语和汉语句法树库。其<br />中汉语的句法树库规模较小，含10万汉语词语，约4千个汉语句子，主要的数据来源是新华<br />社新闻稿。<br />下面我们我们先介绍统计句法分析方法的两种类型的模型，然后介绍几种典型的统计的句<br />法分析算法：<br />1) 	分析模型与语言模型<br />任何统计模型，最基本的都是一个归一性假设。<br />统计句法分析的两类模型的区别就在于归一性假设上。<br />在分析模型中，假设对于任何一个句子，其所有的可能的分析树的概率之和为1：<br /><br /><br /><br /><br /><br />其中，G表示该分析模型，s表示一个句子，t表示该句子的一种可能的分析结果（句法树）<br />。<br />而在语言模型中，假设从一种语言中推导出的所有句子结构（句法树）的概率为1，而一个<br />句子的概率为其所有可能的句子结构（句法树）的概率之和： <br /><br /><br /><br /><br /><br /><br /><br /><br /><br />初看上去，好像分析模型比较符合我们的推理过程。不过，在实际的研究工作中，语言模<br />型应用更多。因为实现的时候，分析模型需要正例和反例同时进行训练，这在处理上比较<br />困难。而语言模型只需要即可进行训练。从已有的研究工作看，语言模型的效果也更好一<br />些。<br />2) 	统计句法分析的评价标准<br />在统计句法分析研究中，一般使用以下几个参数作为评价标准：<br />标记正确率（Labeled Precision）<br /><br /><br /><br />标记召回率（Labeled Recall）<br /><br /><br /><br />交叉括号数（Crossing Brackets）<br /><br /><br /><br />所谓交叉括号数，就是与标准语料库中发生边界冲突的结点数目，类似于汉语词切分中的<br />交叉歧义字段数。<br />3) 	概率上下文无关语法<br />概率上下文无关语法的基本思想就是给传统的上下文无关语法加上概率信息。其基本思想<br />非常简单：所有由同一个句法标记导出的规则的概率之和为1：<br />简单的概率上下文无关语法有三个基本假设：<br />位置无关(Place invariance)<br />上下文无关(Context-free)<br />祖先无关(Ancestor-free)<br />根据这三个基本假设，可以推导出：分析树的概率等于所有施用规则概率之乘积。<br />实验表明，这种简单的概率上下文无关语法的使用效果并不理想。在作为一个语言模型使<br />用时（判断一个句子出现的概率），效果还不如简单的n元语法。我们自己的实验表明，即<br />使采用这种简单的概率上下文无关语法，分析的正确率大约可以达到50～60%。这已经比不<br />采用概率时效果要好得多。因为在不采用概率信息时，分析的结果经常是成千上万棵句法<br />树，而从中任选一棵为正确的概率显然非常低。<br />目前的概率上下文无关语法研究，主要集中在如何突破上述的几个基本假设。通过逐步的<br />放宽这些假设，分析的正确率可以得到很大的提高。现在也有很多研究者在研究词汇化的<br />概率上下文无关语法，为句法树上的每个结点标上中心词信息，并分别计算每条规则在不<br />同中心词搭配下的概率。这样做确实非常有效，可以达到很高的正确率。不过随之而来的<br />问题是数据稀疏问题和搜索空间过大的问题。特别是引入词汇信息以后，数据空间变得非<br />常巨大，数据稀疏问题也极为严重。<br />对概率上下文无关语法感兴趣的同学可以参考（Charniak. 1996, 1997）以及（Collins,<br /> 1996, 1997）。<br />本次会议我们提交的论文（张浩、刘群、白硕，2002）详细介绍了我们在概率上下文无关<br />语法方面的一些初步的工作，在前天晚上的自由讨论中也做了演示，该软件的源代码可以<br />在我们的自然语言处理开放平台中下载，这里不再做详细介绍。<br />4) 	基于统计模式识别的句法分析算法<br />（Magerman, 1995）中提出了一个SPATTER句法分析器，其特点是把句法分析的过程理解为<br />一系列的排歧决策的过程：<br /><br /><br /><br />分析从左到右，自底向上地进行。依次决定当前结点是&ldquo;向左、向上、向右&rdquo;进行规约。<br />然后还要决定各结点的句法标记和中心词信息。机器学习采用决策树方法。<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />可以看到，这是一种非常有意思的方法，虽然没有利用任何句法规则，也不采用任何传统<br />的句法分析算法，居然也可以得到很不错的分析效果。不过由于决策树的训练费时费力，<br />这种方法现在使用的并不多。<br />（WONG&amp;WU，1999）使用了另外一种机器学习的算法进行句法分析。这种方法还是采用传统<br />的移进－规约算法，不过，在发生决策表多重入口冲突的时候，使用一棵决策树来决定采<br />用哪一个动作。<br />2.2.4	组块分析算法<br />由于句法分析的效果总是不理想，于是有人开始考虑用&ldquo;分而制之&rdquo;的方法来解决句法分<br />析的问题。其基本思想是将完整的句法分析分为两个过程：<br />(1)	组块的识别：从句子中识别出组块；<br />(2)	组块之间关系的判断：将组块结合成句子。<br />现在一般所说的组块分析、浅层分析等等，都是指的前一个阶段，也就是组块的识别的工<br />作。也有很多人在研究某一类特定组块的识别工作，如基本名词短语等等。<br />组块实际上也就是一种短语。组块的定义，具体到每一种语言都不尽相同。（Abney，199<br />1）中把英语的组块定义为&ldquo;从句范围内的一个非递归的核心成分&rdquo;。这种成分包含中心成<br />分的前置修饰成分，而不包含后置附属结构。这个定义非常明确，不过与一般对于英语短<br />语的解释有一定的冲突。<br />汉语的语法结构与英语差异很大，Abney的组块定义在汉语中显然难以实施。汉语的组块定<br />义也有不同的方式。我个人认为（孙宏林，2001）中使用的&ldquo;实语块（content Chunk）是<br />一种比较好的汉语组块定义方法。<br />英语的组块分析在国际会议CoNLL-2000(Computaional Natural Language Learning)上作<br />为共同任务(shared task)被提出[Eric et al, 2000]。该会议上对组块分析结果进行评测<br />。它的训练和测试语料是Upenn树库的WSJ(Wall Street Journal)。下表列出了2000年参加<br />评测的10个系统的性能，包括各个系统对组块的精确率、召回率和综合指标F&beta;。Baselin<br />e表示只根据词性标注划分组块得到的结果，作为系统性能的底线。系统[KM00][Hal00][T<br />KS00]采用了组合系统，系统[ZST00][Koe00][Osb00][PMP00]采用了统计方法，其他的采用<br />了规则方法，这次评测结果表明了统计方法和机器学习的方法在组块分析中是主流趋势，<br />而基于规则的方法也有着不可忽视的作用。<br /><br />系统名	准确率	召回率	F&beta;=1<br />[KM00]	93.45%	93.51%	93.48<br />[Hal00]	93.13%	93.51%	93.32<br />[TKS00]	94.04%	91.00%	92.50<br />[ZST00]	91.99%	92.25%	92.12<br />[Dej00]	91.87%	91.31%	92.09<br />[Koe00]	92.08%	91.86%	91.97<br />[Osb00]	91.65%	92.23%	91.94<br />[PMP00]	90.63%	89.65%	90.14<br />[Joh00]	86.24%	88.25%	87.23<br />[VD00]	88.82%	82.91%	85.76<br />Baseline	72.58%	82.14%	77.07%<br /><br />我们这里介绍两种做组块分析的典型思路，一种是基于规则的，一种是基于统计的。<br />1) 	基于层叠有限状态自动机的组块分析方法<br />（Abney，1996）提出了用Finite State Cascade的方法进行英语的组块分析。他这里所说<br />的组块分析包括了上面所说的两层意思，也就是组块的识别和组块间关系的判断，实际上<br />可以实现完整的句法分析。<br />这种方法的基本思想是：<br />把句法分析的过程分成很多个层次，每个层次都只输出一个结果，而在每个层次内部只使<br />用简单的有限状态自动机进行分析。<br />例如使用以下层叠有限状态自动机：<br /><br /><br /><br /><br /><br /><br /><br /><br />可以看到，在这个层叠有限状态自动机中，第一层T1可以识别名词短语和动词短语，第二<br />层可以识别介词短语，第三层可以识别句子。<br />下图是采用这个层叠有线状态自动机识别一个句子的过程：<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />层叠有限状态自动机是一种比较有效的句法分析算法，不仅分析效率高，而且可以在不使<br />用概率信息的情况下达到较高的正确率。<br />2) 	基于标注的组块分析方法<br />组块分析的另一种常见的方法就是把组块分析问题转化成类似于词性标注的问题。<br />以句子&ldquo;中国十四个边境开放城市经济建设成就显著&rdquo;为例，词性标注的结果为：<br />中国/NR十四/CD个/M边境/NN开放/NN城市/NN<br />经济/NN建设/NN成就/NN显著/VV<br />我们希望得到的组块结构为：<br />NP(中国) QP(十四个)NP(边境开放城市)NP(经济建设成就)VP(显著)<br />为了得到这个组块分析的结果，我们可以给这些词加上组块标记：<br />中国/NP十四/QP个/QP边境/NP开放/NP城市/NP<br />经济/NP$ 建设/NP成就/NP显著/VP<br />其中NP$表示两个NP相连时后一个NP的起点。通过这些标记，我们可以很容易得到组块分析<br />的结果。这样我们就把组块分析的问题转换成了一个组块标记的问题，这种标记问题可以<br />用类似词性标记中使用的各种成熟的方法加以解决，例如HMM方法、最大熵方法、基于转换<br />的学习方法等等。<br />（周强，1999,2001）采用了另外一种基于标注的组块分析方法，其基本思想是在词与词之<br />间的间隔进行标注，标注类型为组块的左、中、右边界，然后再根据这些边界信息确定组<br />块的划分及类型。<br />结语<br />汉语分析技术是中文信息处理的基础，在机器翻译、信息检索、信息抽取、语音处理等各<br />种应用系统中都有着广泛的应用。全面的了解这些技术，对于从事相关的研究工作是非常<br />重要的。<br />目前，汉语词法分析技术已比较成熟，组块分析技术也得到了越来越广泛的应用。完全句<br />法分析技术虽然的结果还不能令人满意，不过随着各种语言资源的日益丰富，算法研究的<br />逐步深入，相关的研究工作进展也非常快。相信不久的将来，汉语分析技术将为各种中文<br />信息处理的各种应用提供更加有力的支持。<br /><br />参考文献：<br />孙茂松，左正平，黄昌宁，2000，汉语自动分词词典机制的研究实验，中文信息学报，Vo<br />l.14，No.1，2000<br />孙茂松，左正平，邹嘉彦，1999, 高频最大交集型歧义切分字段在汉语自动分词中的作用<br />，中文信息学报，Vol.13，No.1，1999<br />Hong I Ng and Kim Teng Lua, 2002, A Word Finding Automation for Chinese Senten<br />ce Tokenization, submitted to ACM Transaction of Asian Languages Processing. (<br />Can be downloaded from: <a href="http://cslp.comp.nus.edu.sg/luakt/paper/publication.ht" target="_blank"><font color="#014da2">http://cslp.comp.nus.edu.sg/luakt/paper/publication.ht</font></a><br />ml)<br />Aho A.V. and Corasick M.J. Handbook of Theoretical Computer Science, Volume A,<br /> Algorithms and Complexity, The MIT Press, Cambridge, Massachusetts, 1990. 273<br />-278.<br />王显芳，2001，一种基于&ldquo;长词优先&rdquo;原则的能够检测所有交叉歧义的汉语自动分词算法<br /><br />王显芳，2001，利用覆盖歧义检测法和统计语言模型进行汉语自动分词<br />高山，张艳，徐波，宗成庆，韩兆兵，张仰森，2001，基于三元统计模型的汉语分词标注<br />一体化研究，全国第五届计算语言学联合学术会议（JSCL2001）<br />李建华，王晓龙，2000，中文人名自动识别的一种有效方法，高技术通讯，High Technol<br />ogy Letters，Vol.10，No.2，P.46-49 <br />孙茂松，黄昌宁，高海燕等，1995，中文姓名的自动辨识，中文信息学报，Vol.19, No.2<br /><br />张俊盛，陈舜德，郑萦，1992，多语料库做法之中文姓名辨识，中文信息学报，Vol.16, <br />No.3<br />郑家恒，刘开瑛，1993，自动分词系统中性质人名处理策略探讨，陈力为主编，《计算语<br />言学研究与应用》，北京语言学院出版社<br />宋柔，朱宏，潘维桂，尹振海，1993，基于语料库和规则库的人名识别法，陈力为主编，<br />《计算语言学研究与应用》，北京语言学院出版社<br />孙茂松，张维杰，1993，英语姓名译名的自动辨识，陈力为主编，《计算语言学研究与应<br />用》，北京语言学院出版社<br />Rabiner L. R., 1989, A Tutorial on Hidden Markov Models and Selected Applicati<br />ons in Speech Recognition, Proceedings of the IEEE, vol. 77, no. 2, Feb. 1989,<br /> pgs 257 - 285. There is a lot of notation but verbose explanations accompany.<br /> <br />翁富良，王野翊，计算语言学导论，中国社会科学出版社，1998<br />Huaping Zhang, Qun Liu, Hao Zhang,Xueqi Cheng, 2002, Automatic Recognition of <br />Chinese Unknown Words Based on Role Tagging, SigHan Workshop, 19th Internation<br />al Conference on Computational Linguistics.<br />张华平，刘群，2002，基于角色标注的中国人名自动识别研究，第七届研究生学术研讨会<br /><br />白硕，2001，计算语言学教程（讲义）<br />詹卫东，2002，计算语言学概论（讲义）<a href="http://icl.pku.edu.cn/doubtfire/Course/CL/" target="_blank"><font color="#014da2">http://icl.pku.edu.cn/doubtfire/Course/CL/</font></a><br />2001_2002_2.htm<br />白硕，1998，论语义重心偏移，待发表<br />The HTK HMM Toolkit，<br /><a href="http://svr-www.eng.cam.ac.uk/research/projects/HTK_HMM_Toolkit" target="_blank"><font color="#014da2">http://svr-www.eng.cam.ac.uk/research/projects/HTK_HMM_Toolkit</font></a><br />The CMU-Cambridge Statistical Language Modeling toolkit，<a href="http://svr-www.eng.ca/" target="_blank"><font color="#014da2">http://svr-www.eng.ca</font></a><br />m.ac.uk/~prc14/toolkit.html<br />Hiyan Alshawi, Srinivas Bangalore, Shona Douglas, 2000, Learning Dependency Tr<br />anslation Models as Collections of Finite State Head Transducers, Computationa<br />l Linguistics, Vol.26, No.1, Page 45-60<br />Steven Abney (1996).&nbsp; Partial Parsing via Finite-State Cascades.&nbsp; In Proceedin<br />gs of the ESSLLI '96 Robust Parsing Workshop.冯志伟，2000，基于短语结构语法的句<br />法分析方法，当代语言学，Vol.2，No.2<br />白硕，张浩.角色反演算法. 软件学报. 已录用. 2002.<br />张浩，刘群，白硕，2002，结构上下文相关的概率句法分析，第一届学生计算语言学研讨<br />会（SWCL2002）<br />Gerald Gazdar, Chris Mellish, 1989, Natural Language Processing in Lisp, Addis<br />on-Wesley Publishing Company, ISBN 0-201-17825-7, page 181-214<br />Abney Steven, 1991,Parsing by Chunks, In: Robert Berwick, Steven Abney and Car<br />ol Tenny (eds.), Principle-Based Parsing, Kluwer Academic Publishers, 1991, pp<br />.257-278<br />李素建，2002，汉语组块计算的若干研究，中国科学院计算技术研究所博士论文<br />孙宏林，2001，现代汉语非受限文本的实语块分析，北京大学博士论文<br />俞士汶、朱学锋、段慧明，大规模现代汉语标注语料库的加工规范，《中文信息学报》，<br />2000年6期, PP58-64<br />Charniak, E. 1996. Treebank grammars. Technical Report CS-96-02, Department of<br /> Computer Science, Brown University.<br />Charniak, E. 1997. Statistical parsing with a context-free grammar and word st<br />atistics. In Proceedings of NCAI-1997, pp 598&mdash;603<br />Collins, M. J. 1996. A new statistical parser based on bigram lexical dependen<br />cies, In Proceedings of 34th Annual Meeting of the Association for Computation<br />al Linguistics, pages 184-191<br />Collins, M. J. 1997.&nbsp; Three generative, lexicalised models for statistical par<br />sing.&nbsp; In Proceedings of 35th Annual Meeting of the Association for Computatio<br />nal Linguistics, pages 17-23<br />Magerman, D. M. 1995.&nbsp; Parsing as Statistical Pattern Recognition. IBM Technic<br />al Report No. 19443.&nbsp; December 1993.<br />WONG Aboy, WU Dekai, 1999.&nbsp; Are Phrase Structured Grammars Useful in Statistic<br />al Parsing,&nbsp; in Proceedings of 5th Natural Language Processing Pacific Rim Sym<br />posium, Page 120-125<br />Erik F. Tjong Kim Sang and Sabine Buchholz, 2000, Introduction to the CoNLL-20<br />00 Shared Task: Chunking. In: Proceedings of CoNLL-2000 and LLL-2000, Lisbon, <br />Portugal, 2000<br />W.J. Teahan, Yingying Wen, Rodger McNab, Ian H. Witten, 2000, A compression- b<br />ased algorithm for Chinese word segmentation&nbsp; Computational Linguistics, Vol.2<br />6, No.3, Page 375-393<br />周强，2001，汉语句法知识的自动获取研究，中文信息学会二十周年学术会议论文集，北<br />京，156-165.<br />周强，黄昌宁，1999，汉语结构优先关系的自动获取，《软件学报》, 10(2), 149-154. <br /><br />Qiang Zhou, Fuji Ren, 1999, Automatic Inference for Chinese Probabilistic Cont<br />ext-free Grammar, In Proceedings of 5th Natural Language Processing Pacific Ri<br />m Symposium 73-78.]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=21</link>
			<title><![CDATA[Nutch中creativecommons插件的分析[转帖]]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Thu,26 Oct 2006 15:21:23 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=21</guid>	
		<description><![CDATA[Cretivecommons插件的主要作用是从抓取的网页中提取一些特定的或者我们自定义的一些信息(这里的信息必须符合cc机制),为这些信息建立索引,提供查询的功能.举个例子:比如我们正在爬行某招聘网站的网页,我们对某一招聘信息的职位描述感兴趣,那么我们就可以扩展这一插件,筛取出此网页职位描述的信息,建立此网页新Field(Lunene的Document),入索引库.等待查询或者进行别的操作.
<pre>   为了达到目标,creativecommons plugin扩展3个不同的扩展点，它们是：</pre>
<pre>HTMLParser：从meta－tags得到推荐的terms</pre>
<pre>IndexingFilter：增加一个推荐Field在索引中。</pre>
<pre>QueryFilter：增加对索引中新Field的查询能力.</pre>
<pre>插件中一些概念的说明:</pre>
<pre>creative commons:(<u>创作共用</u>) 是网络上的数字作品（文学、美术、音乐等）许可授权机制，它致力于让任何创造性作品都</pre>
<pre>有机会被更多人分享和再创造，共同促进人类知识作品在其生命周期内产生最大价值。Nutch引入这个机制是为了在所索引的网页</pre>
<pre>使用创作公用这个授权机制,对所索引到的内容进行知识保护,这不但能对资源提供者的知识进行保护,也能促进知识资源的良性传播,</pre>
<pre>&nbsp;</pre>
<p>插件的代码分析:</p>
<p>creativecommons插件包括以下四个文件:</p>
<p>CCIndexingFilter:实现了IndexingFilter这个接口</p>
<p>CCParseFilter:实现了HTMLParser这个接口</p>
<p>CCQueryyFilter:实现了QueryFilter这个接口</p>
<p>CCDeleteUnlicnese:删除那些没有在Nutch的creativecommons授权机制中定义的元素</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>一:</p>
<p>CCIndexingFilter代码分析:</p>
<p>核心方法:</p>
<p>public Document filter(Document doc, Parse parse, UTF8 url, CrawlDatum datum, Inlinks inlinks)</p>
<p>此方法是对基类Indexingfiler中的filter的重写,它接收了某网页已经形成的Document,从分析部件对该网页的分析结果Parse中抽取所要索引的信息,为其建立新的lucene field,然后加入Documet中.</p>
<p>参数:</p>
<p>Document&nbsp;&nbsp;&nbsp; Lucene中的Document,详情请见:<a href="http://www.lucene.com.cn/lucene.htm">http://www.lucene.com.cn/lucene.htm</a></p>
<p>Parse:是个接口,这里代表的是对一个网页原始内容(html流)分析的结果,详细分析请见:<a href="http://www.cnblogs.com/abob/archive/2006/10/19/534...">http://www.cnblogs.com/abob/archive/2006/10/19/534...</a></p>
<p>UTF8:以utf-8编码的url</p>
<p>CrawlDatum:描述了Fetcher在抓取网页时的状态,详情请见Fetcher的分析<a href="http://www.cnblogs.com/abob/archive/2006/10/19/534...">http://www.cnblogs.com/abob/archive/2006/10/19/534...</a></p>
<p>Inlinks:这里面存储了inlink的列表,inlink是一个网页中包含的链接.详情请见crawl的分析</p>
<p>方法实现:</p>
<p>Metadata metadata = parse.getData().getParseMeta();</p>
<p>这句代码是从分析结果Parse中获得一个metadata,这个metadata对象,包括了是一个内容丰富的容器,也是一个分析信息结构的语法.详情请见<a href="http://www.cnblogs.com/abob/archive/2006/10/20/534">http://www.cnblogs.com/abob/archive/2006/10/20/534...</a>.,得到的这个metadata对象里包括了该被分析的页面中的所有信息.</p>
<p>&nbsp;</p>
<p>以下的代码是将所要索引的信息,利用CreativeCommons中的字段声明从metadata对象中提取出来,然后添加到Document中.比如第一个我们要处理的是Licneseurl,首先通过代码</p>
<p>String licenseUrl = metadata.get(CreativeCommons.LICENSE_URL);</p>
<p>提取信息,然后判断是否为空,写入日志,<br />if (licenseUrl != null) {<br />if (LOG.isInfoEnabled()) {<br />LOG.info(&quot;CC: indexing &quot; + licenseUrl + &quot; for: &quot; + url.toString());<br />} </p>
<p>添加到lucene的Document中.</p>
<p>// add the entire license as cc:license=xxx<br />addFeature(doc, &quot;license=&quot; + licenseUrl); </p>
<p>// index license attributes extracted of the license url<br />addUrlFeatures(doc, licenseUrl);<br />} </p>
<p>以下关于license location同理可得: </p>
<p>// index the license location as cc:meta=xxx<br />String licenseLocation = metadata.get(CreativeCommons.LICENSE_LOCATION);<br />if (licenseLocation != null) {<br />addFeature(doc, &quot;meta=&quot; + licenseLocation);<br />} </p>
<p>// index the work type cc:type=xxx<br />String workType = metadata.get(CreativeCommons.WORK_TYPE);<br />if (workType != null) {<br />addFeature(doc, workType);<br />} </p>
<p>返回已经修改好得Document. </p>
<p>return doc; </p>
<p>&nbsp;</p>
<p>以上就是对CCIndexingFilter核心代码得基本分析.</p>
<p>&nbsp;</p>
<p>从一我们知道了如何从Parse中筛选出我们想要特别添加的metadata,向lucnene的索引文档Document中添加新的Field.这</p>
<p>里面牵扯到了CC授权机制,其实在整个creativecommons插件中,针对的就是经过creative commons声明的元素.为什么叫这个插件的名字,也就是这个道理了.下面我们要研究的是怎么向Parse添加符合CC授权机制的metadata.</p>
<p>二:</p>
<p>CCParseFilter的代码分析</p>
<p>内部元素和核心方法:</p>
<p>Walker:静态的内部类,主要作用是通过遍历某网页的DOM树,寻找内容中的RDF和节点中Licenses.</p>
<p>WORK_TYPE_NAMES:针对worktype的哈希表.</p>
<p>filter方法:实现了HTMLParseFilter的方法.下面有介绍.这里主要调用了Walker.walk.</p>
<p>首先我们了解一个接口 HtmlParseFilter,请见package org.apache.nutch.parse,在以后的代码分析中也会对它有所介绍.</p>
<p>这个接口是对以DOM树为基础的HTML文档的分析器的扩展点,它允许你向这个HTMLParsers添加metadata.而这里为添加符合CC授权机制的metadata.</p>
<p><br />public interface HtmlParseFilter extends Pluggable, Configurable {<br />/**&nbsp;扩展点的名字 */<br />final static String X_POINT_ID = HtmlParseFilter.class.getName(); </p>
<p>/** 根据一个网页的DOM树,通过此函数对其HTML流的分析结果添加metadata,或者进行修改 */<br />Parse filter(Content content, Parse parse, HTMLMetaTags metaTags, DocumentFragment doc);<br />} </p>
<p>下面我们看类内部的元素: </p>
<p>对于Walker这个静态的内部类,是整个模块代码的核心,如果我们要完成向其添加新metadata的任务,也是要扩展这个类,这个插件要扩展的三个metadata是:CreativeCommons.LICENSE_URL&nbsp;&nbsp;&nbsp; CreativeCommons_LOCATION&nbsp;&nbsp;&nbsp; CreativeCommons_WORKTYPE.&nbsp;&nbsp;&nbsp; Walker的核心方法private void walk(Node node) ,完成了对DOM树的遍历,并找到相关的元素; </p>
<p>下面我们看Filter这个核心方法 </p>
<p>public Parse filter(Content content, Parse parse, HTMLMetaTags metaTags, DocumentFragment doc) </p>
<p>参数: </p>
<p>Content:此类是Nutch一个重要的数据结构,从通过Socket得到某网页的html包,加工成content,再到整个分析,索引的过程都与这个数据结构的操作有密切关系,在分析Protocol的时候还会对这个类做详细论述,这里大家要理解这也是个类似与MetaData一样,是一个内容丰富的容器. </p>
<p>Content的主要字段:</p>
<p>private byte version;<br />private String url;<br />private String base;<br />private byte[] content;<br />private String contentType;<br />private Metadata metadata;<br />private boolean mimeTypeMagic;<br />private MimeTypes mimeTypes;</p>
<p>Parse:是个接口,这里代表的是对一个网页原始内容(html流)分析的结果,详细分析请见:<a href="http://www.cnblogs.com/abob/archive/2006/10/19/534...">http://www.cnblogs.com/abob/archive/2006/10/19/534...</a></p>
<p>HTMLMetaTags:这个类存储了一些从该被分析的网页中提取的HTML meta信息,为了易于访问,这个类里面定义了一些类似与属性操作德函数.</p>
<p>DocumentFragment: 是&ldquo;轻量级&rdquo;或&ldquo;最小&rdquo;<code><font face="Courier New">Document</font></code> 对象。希望能够提取文档树的一部分或创建文档的新片段是很常见的。设想实现像剪切这样的用户命令或通过来回移动片段重新安排文档。需要有一个可以保存此类片段的对象，很自然出于此目要使用一个 Node。当 <code><font face="Courier New">Document</font></code> 对象真正可以完成此职责时，<code><font face="Courier New">Document</font></code> 对象可能为重量级对象，具体取决于基础实现。此操作真正需要的是非常轻量级的对象。<code><font face="Courier New">DocumentFragment</font></code> 就是这样的对象。</p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=20</link>
			<title><![CDATA[转贴：Lucene的特性分析 ]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Fri,13 Oct 2006 23:41:59 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=20</guid>	
		<description><![CDATA[3.1. Lucene核心部分&mdash;&mdash;索引排序 <br />Lucene 的索引排序是使用了倒排序原理。
<p>该结构及相应的生成算法如下： <br />设有两篇文章1和2 <br />文章1的内容为：Tom lives in Guangzhou,I live in Guangzhou too. <br />文章2的内容为：He once lived in Shanghai. </p>
<p>1. 由于lucene是基于关键词索引和查询的，首先我们要取得这两篇文章的关键词，通常我们需要如下处理措施 </p>
<p>a. 我们现在有的是文章内容，即一个字符串，我们先要找出字符串中的所有单词，即分词。英文单词由于用空格分隔，比较好处理。中文单词间是连在一起的需要特殊的分词处理。 </p>
<p>b. 文章中的&rdquo;in&rdquo;, &ldquo;once&rdquo; &ldquo;too&rdquo;等词没有什么实际意义，中文中的&ldquo;的&rdquo;&ldquo;是&rdquo;等字通常也无具体含义， 这些不代表概念的词可以过滤掉，这个也就是在《Lucene详细分析》中所讲的StopTokens </p>
<p>c. 用户通常希望查&ldquo;He&rdquo;时能把含&ldquo;he&rdquo;，&ldquo;HE&rdquo;的文章也找出来，所以所有单词需要统一大小写。 </p>
<p>d. 用户通常希望查&ldquo;live&rdquo;时能把含&ldquo;lives&rdquo;，&ldquo;lived&rdquo;的文章也找出来，所以需要把&ldquo;lives&rdquo;，&ldquo;lived&rdquo;还原成&ldquo;live&rdquo; </p>
<p>e. 文章中的标点符号通常不表示某种概念，也可以过滤掉,在lucene中以上措施由Analyzer类完成,经过上面处理后: </p>
<p>文章1的所有关键词为：[tom] [live] [guangzhou] [live] [guangzhou] <br />文章2的所有关键词为：[he] [live] [shanghai] </p>
<p>2. 有了关键词后，我们就可以建立倒排索引了 </p>
<p>上面的对应关系是：&ldquo;文章号&rdquo;对&ldquo;文章中所有关键词&rdquo;。倒排索引把这个关系倒过来，变成：&ldquo;关键词&rdquo;对&ldquo;拥有该关键词的所有文章号&rdquo;。文章1，2经过倒排后变成 <br />&lt;!--[if !supportLineBreakNewLine]--&gt; </p>
<p><br />关键词 <br />文章号 </p>
<p>guangzhou <br />1 </p>
<p>he <br />2 </p>
<p>i <br />1 </p>
<p>live <br />1,2 </p>
<p>shanghai <br />2 </p>
<p>tom <br />1 </p>
<p>&nbsp;</p>
<p><br />通常仅知道关键词在哪些文章中出现还不够，我们还需要知道关键词在文章中出现次数和出现的位置，通常有两种位置：a)字符位置，即记录该词是文章中第几个字符（优点是关键词亮显时定位快）；b)关键词位置，即记录该词是文章中第几个关键词（优点是节约索引空间、词组（phase）查询快），lucene中记录的就是这种位置。 <br />加上&ldquo;出现频率&rdquo;和&ldquo;出现位置&rdquo;信息后，我们的索引结构变为： </p>
<p>&nbsp;</p>
<p>关键词 <br />文章号[出现频率] <br />出现位置 </p>
<p>guangzhou <br />1[2] <br />3，6 </p>
<p>he <br />2[1] <br />1 </p>
<p>i <br />1[1] <br />4 </p>
<p>live <br />1[2],2[1] <br />2，5，2 </p>
<p>shanghai <br />2[1] <br />3 </p>
<p>tom <br />1[1] <br />1 </p>
<p>&nbsp;</p>
<p><br />以live 这行为例我们说明一下该结构：live在文章1中出现了2次，文章2中出现了一次，它的出现位置为&ldquo;2,5,2&rdquo;这表示什么呢？我们需要结合文章号和出现频率来分析，文章1中出现了2次，那么&ldquo;2,5&rdquo;就表示live在文章1中出现的两个位置，文章2中出现了一次，剩下的&ldquo;2&rdquo;就表示live是文章2中第 2个关键字。 <br />以上就是lucene索引结构中最核心的部分。我们注意到关键字是按字符顺序排列的（lucene没有使用B树结构），因此lucene可以用二元搜索算法快速定位关键词。 <br />实现时 lucene将上面三列分别作为词典文件（Term Dictionary）、频率文件(frequencies)、位置文件 (positions)保存。其中词典文件不仅保存有每个关键词，还保留了指向频率文件和位置文件的指针，通过指针可以找到该关键字的频率信息和位置信息。 </p>
<p>Lucene中使用了field的概念，用于表达信息所在位置（如标题中，文章中，url中），在建索引中，该field信息也记录在词典文件中，每个关键词都有一个field信息(因为每个关键字一定属于一个或多个field)。 <br />为了减小索引文件的大小，Lucene对索引还使用了压缩技术。首先，对词典文件中的关键词进行了压缩，关键词压缩为&lt;前缀长度，后缀&gt;，例如：当前词为&ldquo;阿拉伯语&rdquo;，上一个词为&ldquo;阿拉伯&rdquo;，那么&ldquo;阿拉伯语&rdquo;压缩为&lt;3，语&gt;。其次大量用到的是对数字的压缩，数字只保存与上一个值的差值（这样可以减小数字的长度，进而减少保存该数字需要的字节数）。例如当前文章号是16389（不压缩要用3个字节保存），上一文章号是16382，压缩后保存7（只用一个字节）。 <br />下面我们可以通过对该索引的查询来解释一下为什么要建立索引。 <br />假设要查询单词 &ldquo;live&rdquo;，lucene先对词典二元查找、找到该词，通过指向频率文件的指针读出所有文章号，然后返回结果。词典通常非常小，因而，整个过程的时间是毫秒级的。 <br />而用普通的顺序匹配算法，不建索引，而是对所有文章的内容进行字符串匹配，这个过程将会相当缓慢，当文章数目很大时，时间往往是无法忍受的。 </p>
<p>3.2. Lucene的相关度积分公式 <br />score_d = sum_t(tf_q * idf_t / norm_q * tf_d * idf_t / norm_d_t * boost_t) * coord_q_d </p>
<p>注解： </p>
<p>score_d : 该文档d的得分 </p>
<p>sum_t : 所有项得分的总和 </p>
<p>tf_q : 查询串q中，某个项出项的次数的平方根 </p>
<p>tf_d : 文档d中 ，出现某个项的次数的平方根 </p>
<p>numDocs : 在这个索引里，找到分数大于0的文档的总数 </p>
<p>docFreq_t : 包含项t的文档总数 </p>
<p>idf_t : log(numDocs/docFreq+1)+1.0 </p>
<p>norm_q : sqrt(sum_t((tf_q*idf_t)^2)) </p>
<p>norm_d_t : 在文档d中，与项t相同的域中，所有的项总数的平方根 </p>
<p>boost_t : 项t的提升因子，一般为 1.0 </p>
<p>coord_q_d : 在文档d中，命中的项数量除以查询q的项总数 </p>
<p>3.3. Lucene的其他特性 <br />3.3.1. Boosting特性 <br />luncene对Document和Field提供了一个可以设置的Boosting参数， 这个参数的用处是告诉lucene， 某些记录更重要，在搜索的时候优先考虑他们 比如在搜索的时候你可能觉得几个门户的网页要比垃圾小站更优先考虑 </p>
<p>lucene默认的boosting参数是1.0, 如果你觉得这个field重要,你可以把boosting设置为1.5, 1.2....等, 对Document设置boosting相当设定了它的每个Field的基准boosting，到时候实际Field的boosting就是(Document-boosting*Field-boosting)设置了一遍相同的boosting. </p>
<p>似乎在lucene的记分公式里面有boosting参数,不过我估计一般人是不会去研究他的公式的（复杂）,而且公式也无法给出最佳值，所以我们所能做的只能是一点一点的改变boosting, 然后在实际检测中观察它对搜索结果起到多大的作用来调整 </p>
<p>一般的情况下是没有必要使用boosting的, 因为搞不好你就把搜索给搞乱了, 另外如果是单独对Field来做Bossting, 也可以通过将这个Field提前来起到近似的效果 </p>
<p>3.3.2. Indexing Date <br />日期是lucene需要特殊考虑的地方之一, 因为我们可能需要对日期进行范围搜索, Field.keyword(string,Date)提供了这样的方法,lucene会把这个日期转换为string, 值得注意的是这里的日期是精确到毫秒的,可能会有不必要的性能损失, 所以我们也可以把日期自行转化为YYYYMMDD这样的形势,就不用精确到具体时间了,通过File.keyword(Stirng,String) 来index, 使用PrefixQuery 的YYYY一样能起到简化版的日期范围搜索(小技巧), lucene提到他不能处理1970年以前的时间,似乎是上一代电脑系统遗留下来的毛病 </p>
<p>3.3.3. Indexing 数字 <br />如果数字只是简单的数据, 比如中国有56个民族. 那么可以简单的把它当字符处理 </p>
<p>如果数字还包含数值的意义,比如价格, 我们会有范围搜索的需要(20元到30元之间的商品),那么我们必须做点小技巧, 比如把3,34,100 这三个数字转化为003,034,100 ,因为这样处理以后, 按照字符排序和按照数值排序是一样的,而lucene内部按照字符排序,003-&gt;034-&gt;100 NOT(100-&gt;3-&gt;34) </p>
<p>3.3.4. 排序 <br />Lucene默认按照相关度(score)排序,为了能支持其他的排序方式,比如日期,我们在add Field的时候,必须保证field被Index且不能被tokenized(分词),并且排序的只能是数字,日期,字符三种类型之一 </p>
<p>3.3.5. Lucene的IndexWriter调整 <br />IndexWriter提供了一些参数可供设置，列表如下 </p>
<p><br />属性 <br />默认值 <br />说明 </p>
<p>mergeFactor <br />org.apache.lucene.mergeFactor <br />10 <br />控制index的大小和频率,两个作用 </p>
<p>maxMergeDocs <br />org.apache.lucene.maxMergeDocs <br />Integer.MAX_VALUE <br />限制一个段中的document数目 </p>
<p>minMergeDocs <br />org.apache.lucene.minMergeDocs <br />10 <br />缓存在内存中的document数目，超过他以后会写入到磁盘 </p>
<p>maxFieldLength </p>
<p>1000 <br />一个Field中最大Term数目，超过部分忽略，不会index到field中，所以自然也就搜索不到 </p>
<p>&nbsp;</p>
<p>这些参数的的详细说明比较复杂：mergeFactor有双重作用 </p>
<p>设置每mergeFactor个document写入一个段，比如每10个document写入一个段 </p>
<p>设置每mergeFacotr个小段合并到一个大段，比如10个document的时候合并为1小段，以后有10个小段以后合并到一个大段，有10个大段以后再合并，实际的document数目会是mergeFactor的指数 </p>
<p>简单的来说mergeFactor 越大，系统会用更多的内存，更少磁盘处理，如果要打批量的作index，那么把mergeFactor设置大没错， mergeFactor 小了以后， index数目也会增多，searhing的效率会降低， 但是mergeFactor增大一点一点，内存消耗会增大很多(指数关系),所以要留意不要&quot;out of memory&quot; <br />把maxMergeDocs设置小，可以强制让达到一定数量的document写为一个段，这样可以抵消部分mergeFactor的作用. <br />minMergeDocs相当于设置一个小的cache,第一个这个数目的document会留在内存里面，不写入磁盘。这些参数同样是没有最佳值的， 必须根据实际情况一点点调整。 <br />maxFieldLength可以在任何时刻设置， 设置后，接下来的index的Field会按照新的length截取，之前已经index的部分不会改变。可以设置为Integer.MAX_VALUE </p>
<p>3.3.6. RAMDirectory 和 FSDirectory 转化 <br />RAMDirectory(RAMD)在效率上比FSDirectyr(FSD)高不少, 所以我们可以手动的把RAMD当作FSD的buffer,这样就不用去很费劲的调优FSD那么多参数了,完全可以先用RAM跑好了index， 周期性（或者是别的什么算法）来回写道FSD中。 RAMD完全可以做FSD的buffer。 </p>
<p>3.3.7. 为查询优化索引(index) <br />Indexwriter.optimize()方法可以为查询优化索引（index），之前提到的参数调优是为indexing过程本身优化，而这里是为查询优化，优化主要是减少index文件数，这样让查询的时候少打开文件，优化过程中，lucene会拷贝旧的index再合并，合并完成以后删除旧的index，所以在此期间，磁盘占用增加， IO符合也会增加，在优化完成瞬间，磁盘占用会是优化前的2倍,在optimize过程中可以同时作search。 </p>
<p>3.3.8. 并发操作Lucene和locking机制 <br />v 所有只读操作都可以并发 </p>
<p>v 在index被修改期间，所有只读操作都可以并发 </p>
<p>v 对index修改操作不能并发，一个index只能被一个线程占用 </p>
<p>v index的优化，合并，添加都是修改操作 </p>
<p>v IndexWriter和IndexReader的实例可以被多线程共享，他们内部是实现了同步，所以外面使用不需要同步 </p>
<p>3.3.9. Locing <br />lucence内部使用文件来locking， 默认的locking文件放在java.io.tmpdir,可以通过-Dorg.apache.lucene.lockDir=xxx指定新的dir，有write.lock commit.lock两个文件，lock文件用来防止并行操作index，如果并行操作， lucene会抛出异常，可以通过设置-DdisableLuceneLocks=true来禁止locking，这样做一般来说很危险，除非你有操作系统或者物理级别的只读保证，比如把index文件刻盘到CDROM上。 <br /><br /><strong>4. Lucene文档结构 <br /></strong>Lucene中最基础的概念是索引（index），文档（document．，域（field）和项（term）。 <br />索引包含了一个文档的序列。 <br />&middot; 文档是一些域的序列。 <br />&middot; 域是一些项的序列。 <br />&middot; 项就是一个字串。 <br />存在于不同域中的同一个字串被认为是不同的项。因此项实际是用一对字串表示的，第一个字串是域名，第二个是域中的字串。 </p>
<p>4.1. Lucene概念详细介绍 <br />4.1.1. 域的类型 <br />Lucene中，域的文本可能以逐字的非倒排的方式存储在索引中。而倒排过的域称为被索引过了。域也可能同时被存储和被索引。 <br />域的文本可能被分解许多项目而被索引，或者就被用作一个项目而被索引。大多数的域是被分解过的，但是有些时候某些标识符域被当做一个项目索引是很有用的。 </p>
<p>4.1.2. 段（Segment） <br />Lucene索引可能由多个子索引组成，这些子索引成为段。每一段都是完整独立的索引，能被搜索。索引是这样作成的： <br />1. 为新加入的文档创建新段。 <br />2. 合并已经存在的段。 <br />搜索时需要涉及到多个段和/或者多个索引，每一个索引又可能由一些段组成。 </p>
<p>4.1.3. 文档号（document．nbspNumber） <br />内部的来说，Lucene用一个整形（interger）的文档号来指示文档。第一个被加入到索引中的文档就是0号，顺序加入的文档将得到一个由前一个号码递增而来的号码。 </p>
<p>注意文档号是可能改变的，所以在Lucene外部存储这些号码时必须小心。特别的，号码的改变的情况如下： </p>
<p>&middot; 只有段内的号码是相同的，不同段之间不同，因而在一个比段广泛的上下文环境中使用这些号码时，就必须改变它们。标准的技术是根据每一段号码多少为每一段分配一个段号。将段内文档号转换到段外时，加上段号。将某段外的文档号转换到段内时，根据每段中可能的转换后号码范围来判断文档属于那一段，并减调这一段的段号。例如有两个含5个文档的段合并，那么第一段的段号就是0，第二段段号5。第二段中的第三个文档，在段外的号码就是8。 </p>
<p>&middot; 文档删除后，连续的号码就出现了间断。这可以通过合并索引来解决，段合并时删除的文档相应也删掉了，新合并而成的段并没有号码间断。 </p>
<p>4.1.4. 索引信息 <br />索引段维护着以下的信息： <br />&middot; 域集合。包含了索引中用到的所有的域。 <br />&middot; 域值存储表。每一个文档都含有一个&ldquo;属性－值&rdquo;对的列表，属性即为域名。这个列表用来存储文档的一些附加信息，如标题，url或者访问数据库的一个ID。在搜索时存储域的集合可以被返回。这个表以文档号标识。 <br />&middot; 项字典。这个字典含有所有文档的所有域中使用过的的项，同时含有使用过它的文档的文档号，以及指向使用频数信息和位置信息的指针。 <br />&middot; 项频数信息。对于项字典中的每个项，这些信息包含含有这个项的文档的总数，以及每个文档中使用的次数。 <br />&middot; 项位置信息。对于项字典中的每个项，都存有在每个文档中出现的各个位置。 <br />&middot; 标准化因子。对于文档中的每一个域，存有一个值，用来以后乘以这个这个域的命中数（hits）。 <br />&middot; 被删除的文档信息。这是一个可选文件，用来表明那些文档已经删除了。 <br />接下来的各部分部分详细描述这些信息。 </p>
<p>4.1.5. 文件的命名（File Naming） <br />同属于一个段的文件拥有相同的文件名，不同的扩展名。扩展名由以下讨论的各种文件格式确定。 <br />一般来说，一个索引存放一个目录，其所有段都存放在这个目录里，不这样作，也是可以的，在性能方面较低。 </p>
<p>4.2. Lucene基本数据类型（Primitive Types） <br />4.2.1. 字节Byte <br />最基本的数据类型就是字节（byte，8位）。文件就是按字节顺序访问的。其它的一些数据类型也定义为字节的序列，文件的格式具有字节意义上的独立性。 <br />UInt32 ：32位无符号整数，由四个字节组成，高位优先。UInt32 --&gt; &lt;Byte&gt;4 <br />Uint64 ： 64位无符号整数，由八字节组成，高位优先。UInt64 --&gt; &lt;Byte&gt;8 <br />VInt ： 可变长的正整数类型，每字节的最高位表明还剩多少字节。每字节的低七位表明整数的值。因此单字节的值从0到127，两字节值从128到16,383，等等。 <br />VInt 编码示例 <br />value <br />First byte <br />Second byte <br />Third byte <br />0 <br />00000000 <br />1 <br />00000001 <br />2 <br />00000010 <br />... <br />127 <br />01111111 <br />128 <br />10000000 <br />00000001 <br />129 <br />10000001 <br />00000001 <br />130 <br />10000010 <br />00000001 <br />... <br />16,383 <br />11111111 <br />01111111 <br />16,384 <br />10000000 <br />10000000 <br />00000001 <br />16,385 <br />10000001 <br />10000000 <br />00000001 <br />... 这种编码提供了一种在高效率解码时压缩数据的方法。 </p>
<p>4.2.2. 字符串Chars <br />Lucene输出UNICODE字符序列，使用标准UTF-8编码。 <br />String ：Lucene输出由VINT和字符串组成的字串，VINT表示字串长，字符串紧接其后。 <br />String --&gt; VInt, Chars </p>
<p>4.3. 索引包含的文件（Per-Index Files） <br />4.3.1. Segments文件 <br />索引中活动的段存储在Segments文件中。每个索引只能含有一个这样的文件，名为&quot;segments&quot;.这个文件依次列出每个段的名字和每个段的大小。 <br />Segments --&gt; SegCount, &lt;SegName, SegSize&gt;SegCount <br />SegCount, SegSize --&gt; UInt32 <br />SegName --&gt; String <br />SegName表示该segment的名字，同时作为索引其他文件的前缀。 <br />SegSize是段索引中含有的文档数。 </p>
<p>4.3.2. Lock文件 <br />有一些文件用来表示另一个进程在使用索引。 <br />&middot; 如果存在&quot;commit.lock&quot;文件，表示有进程在写&quot;segments&quot;文件和删除无用的段索引文件，或者表示有进程在读&quot;segments&quot;文件和打开某些段的文件。在一个进程在读取&quot;segments&quot;文件段信息后，还没来得及打开所有该段的文件前，这个Lock文件可以防止另一个进程删除这些文件。 <br />&middot; 如果存在&quot;index.lock&quot;文件，表示有进程在向索引中加入文档，或者是从索引中删除文档。这个文件防止很多文件同时修改一个索引。 </p>
<p>4.3.3. Deleteable文件 <br />名为&quot;deletetable&quot;的文件包含了索引不再使用的文件的名字，这些文件可能并没有被实际的删除。这种情况只存在与Win32平台下，因为Win32下文件仍打开时并不能删除。 <br />Deleteable --&gt; DelableCount, &lt;DelableName&gt;DelableCount <br />DelableCount --&gt; UInt32 <br />DelableName --&gt; String </p>
<p>4.3.4. 段包含的文件（Per-Segment Files） <br />剩下的文件是每段中包含的文件，因此由后缀来区分。 <br />域（Field） <br />域集合信息（Field Info） <br />所有域名都存储在这个文件的域集合信息中，这个文件以后缀.fnm结尾。 </p>
<p>FieldInfos (.fnm) --&gt; FieldsCount, &lt;FieldName, FieldBits&gt;FieldsCount <br />FieldsCount --&gt; VInt <br />FieldName --&gt; String <br />FieldBits --&gt; Byte <br />目前情况下，FieldBits只有使用低位，对于已索引的域值为1，对未索引的域值为0。 <br />文件中的域根据它们的次序编号。因此域0是文件中的第一个域，域1是接下来的，等等。这个和文档号的编号方式相同。 </p>
<p>4.3.5. 域值存储表（Stored Fields） <br />域值存储表使用两个文件表示： <br />1. 域索引（.fdx文件）。 <br />如下，对于每个文档这个文件包含指向域值的指针： <br />FieldIndex (.fdx) --&gt; &lt;FieldvaluesPosition&gt;SegSize <br />FieldvaluesPosition --&gt; Uint64 <br />FieldvaluesPosition指示的是某一文档的某域的域值在域值文件中的位置。因为域值文件含有定长的数据信息，因而很容易随机访问。在域值文件中，文档n的域值信息就存在n*8位置处（The position of document．nbspn's field data is the Uint64 at n*8 in this file.）。 <br />2. 域值（.fdt文件）。 <br />如下，每个文档的域值信息包含： <br />FieldData (.fdt) --&gt; &lt;DocFieldData&gt;SegSize <br />DocFieldData --&gt; FieldCount, &lt;FieldNum, Bits, value&gt;FieldCount <br />FieldCount --&gt; VInt <br />FieldNum --&gt; VInt <br />Bits --&gt; Byte <br />value --&gt; String <br />目前情况下，Bits只有低位被使用，值为1表示域名被分解过，值为0表示未分解过。&divide; </p>
<p>4.3.6. 项字典（Term Dictionary） <br />项字典用以下两个文件表示： <br />1. 项信息（.tis文件）。 <br />TermInfoFile (.tis)--&gt; TermCount, TermInfos <br />TermCount --&gt; UInt32 <br />TermInfos --&gt; &lt;TermInfo&gt;TermCount <br />TermInfo --&gt; &lt;Term, DocFreq, FreqDelta, ProxDelta&gt; <br />Term --&gt; &lt;PrefixLength, Suffix, FieldNum&gt; <br />Suffix --&gt; String <br />PrefixLength, DocFreq, FreqDelta, ProxDelta <br />--&gt; VInt </p>
<p>项信息按项排序。项信息排序时先按项所属的域的文字顺序排序，然后按照项的字串的文字顺序排序。 </p>
<p>项的字前缀往往是共同的，与字的后缀组成字。PrefixLength变量就是表示与前一项相同的前缀的字数。因此，如果前一个项的字是&quot;bone&quot;，后一个是&quot;boy&quot;的话，PrefixLength值为2，Suffix值为&quot;y&quot;。 </p>
<p>FieldNum指明了项属于的域号，而域名存储在.fdt文件中。 </p>
<p>DocFreg表示的是含有该项的文档的数量。 </p>
<p>FreqDelta指明了项所属TermFreq变量在.frq文件中的位置。详细的说，就是指相对于前一个项的数据的位置偏移量（或者是0，表示文件中第一个项）。 </p>
<p>ProxDelta指明了项所属的TermPosition变量在.prx文件中的位置。详细的说，就是指相对于前一个项的数据的位置偏移量（或者是0，表示文件中第一个项）。 </p>
<p>2. 项信息索引（.tii文件）。 </p>
<p>每个项信息索引文件包含.tis文件中的128个条目，依照条目在.tis文件中的顺序。这样设计是为了一次将索引信息读入内存能，然后使用它来随机的访问.tis文件。 <br />这个文件的结构和.tis文件非常类似，只在每个条目记录上增加了一个变量IndexDelta。 <br />TermInfoIndex (.tii)--&gt; IndexTermCount, TermIndices <br />IndexTermCount --&gt; UInt32 <br />TermIndices --&gt; &lt;TermInfo, IndexDelta&gt;IndexTermCount <br />IndexDelta --&gt; VInt <br />IndexDelta表示该项的TermInfo变量值在.tis文件中的位置。详细的讲，就是指相对于前一个条目的偏移量（或者是0，对于文件中第一个项）。 </p>
<p>4.3.7. 项频数（Frequencies） <br />.frq文件包含每一项的文档的列表，还有该项在对应文档中出现的频数。 <br />FreqFile (.frq) --&gt; &lt;TermFreqs&gt;TermCount <br />TermFreqs --&gt; &lt;TermFreq&gt;DocFreq <br />TermFreq --&gt; DocDelta, Freq? <br />DocDelta,Freq --&gt; VInt <br />TermFreqs序列按照项来排序（依据于.tis文件中的项，即项是隐含存在的）。 <br />TermFreq元组按照文档号升序排列。 <br />DocDelta决定了文档号和频数。详细的说，DocDelta/2表示相对于前一文档号的偏移量（或者是0，表示这是TermFreqs里面的第一项）。当DocDelta是奇数时表示在该文档中频数为1，当DocDelta是偶数时，另一个VInt（Freq）就表示在该文档中出现的频数。 <br />例如，假设某一项在文档7中出现一次，在文档11中出现了3次，在TermFreqs中就存在如下的VInts序列： <br />15, 22, 3 </p>
<p>4.3.8. 项位置（Position） <br />.prx文件包含了某文档中某项出现的位置信息的列表。 <br />ProxFile (.prx) --&gt; &lt;TermPositions&gt;TermCount <br />TermPositions --&gt; &lt;Positions&gt;DocFreq <br />Positions --&gt; &lt;PositionDelta&gt;Freq <br />PositionDelta --&gt; VInt <br />TermPositions按照项来排序（依据于.tis文件中的项，即项是隐含存在的）。 <br />Positions元组按照文档号升序排列。 <br />PositionDelta是相对于前一个出现位置的偏移位置（或者为0，表示这是第一次在这个文档中出现）。 <br />例如，假设某一项在某文档第4项出现，在另一个文档中第5项和第9项出现，将存在如下的VInt序列： <br />4, 5, 4 </p>
<p>4.3.9. 标准化因子（Normalization Factor） <br />.nrm文件包含了每个文档的标准化因子，标准化因子用来以后乘以这个这个域的命中数。 <br />Norms (.nrm) --&gt; &lt;Byte&gt;SegSize <br />每个字节记录一个浮点数。位0-2包含了3位的尾数部分，位3-8包含了5位的指数部分。 <br />按如下规则可将这些字节转换为IEEE标准单精度浮点数： <br />1. 如果该字节是0，就是浮点0； <br />2. 否则，设置新浮点数的标志位为0； <br />3. 将字节中的指数加上48后作为新的浮点数的指数； <br />4. 将字节中的尾数映射到新浮点数尾数的高3位；并且 <br />5. 设置新浮点数尾数的低21位为0。 </p>
<p>4.3.10. 被删除的文档（Deleted document） <br />.del文件是可选的，只有在某段中存在删除操作后才存在： <br />Deletions (.del) --&gt; ByteCount,BitCount,Bits <br />ByteSize,BitCount --&gt; Uint32 <br />Bits --&gt; &lt;Byte&gt;ByteCount <br />ByteCount表示的是Bits列表中Byte的数量。典型的，它等于（SegSize/8）+1。 <br />BitCount表示Bits列表中多少个已经被设置过了。 <br />Bits列表包含了一些位（bit），顺序表示一个文档。当对应于文档号的位被设置了，就标志着这个文档已经被删除了。位的顺序是从低到高。因此，如果Bits包含两个字节，0x00和0x02，那么表示文档9已经删除了。 </p>
<p>4.3.11. 局限性（Limitations） <br />在以上的文件格式中，好几处都有限制项和文档的最大个数为32位数的极限，即接近于40亿。今天看来，这不会造成问题，但是，长远的看，可能造成问题。因此，这些极限应该或者换为UInt64类型的值，或者更好的，换为VInt类型的值（VInt值没有上限）。 </p>
<p>有两处地方的代码要求必须是定长的值，他们是： </p>
<p>1. FieldvaluesPosition变量（存储于域索引文件中，.fdx文件）。它已经是一个UInt64型，所以不会有问题。 </p>
<p>2. TermCount变量（存储于项信息文件中，.tis文件）。这是最后输出到文件中的，但是最先被读取，因此是存储于文件的最前端 。索引代码先在这里写入一个0值，然后在其他文件输出完毕后覆盖这个值。所以无论它存储在什么地方，它都必须是一个定长的值，它应该被变成UInt64型。 <br />除此之外，所有的UInt值都可以换成VInt型以去掉限制。 <br /></p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=19</link>
			<title><![CDATA[搜索引擎的工作原理----Google]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Wed,11 Oct 2006 14:40:36 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=19</guid>	
		<description><![CDATA[<p>这篇文章中，我们介绍了google，它是一个大型的搜索引擎（of a large-scale search engine）的原型，搜索引擎在超文本中应用广泛。<a href="http://www.google.com/" target="_blank"><font color="#0000ff">Google</font></a>的设计能够高效地抓网页并建立索引，它的查询结果比其它现有系统都高明。这个原型的全文和超连接的数据库至少包含24000000个网页。我们可以从 下载。</p>
<p>设计搜索引擎是一项富有挑战性的工作。搜索引擎为上亿个网页建立索引，其中包含大量迥然不同的词汇。而且每天要回答成千上万个查询。在网络中，尽管大型搜索引擎非常重要，但是学术界却很少研究它。此外由于技术的快速发展和网页的大量增加，现在建立一个搜索引擎和三年前完全不同。</p>
<p>本文详细介绍了我们的大型搜索引擎，据我们所知，在公开发表的论文中，这是第一篇描述地如此详细。除了把传统数据搜索技术应用到如此大量级网页中所遇到的问题，还有许多新的技术挑战，包括应用超文本中的附加信息改进搜索结果。</p>
<p>本文将解决这个问题，描述如何运用超文本中的附加信息，建立一个大型实用系统。任何人都可以在网上随意发布信息，如何有效地处理这些无组织的超文本集合，也是本文要关注的问题。</p>
<p><strong>关键词</strong> <font color="#0000ff"><strong>World Wide Web，搜索引擎，信息检索，PageRank, Google</strong> </font></p>
<p><strong>1 绪论</strong></p>
<p>Web 给信息检索带来了新的挑战。Web上的信息量快速增长，同时不断有毫无经验的新用户来体验Web这门艺术。人们喜欢用超级链接来网上冲浪，通常都以象Yahoo这样重要的网页或搜索引擎开始。大家认为List(目录)有效地包含了大家感兴趣的主题，但是它具有主观性，建立和维护的代价高，升级慢，不能包括所有深奥的主题。基于关键词的自动搜索引擎通常返回太多的低质量的匹配。使问题更遭的是，一些广告为了赢得人们的关注想方设法误导自动搜索引擎。</p>
<p>我们建立了一个大型搜索引擎解决了现有系统中的很多问题。应用超文本结构，大大提高了查询质量。<strong>我们的系统命名为google，取名自googol的通俗拼法，即10的100次方</strong>，这和我们的目标建立一个大型搜索引擎不谋而合。</p>
<p><strong>1.1网络搜索引擎&mdash;升级换代（scaling up）：</strong></p>
<p>1994-2000 搜索引擎技术不得不快速升级（scale dramatically）跟上成倍增长的web数量。1994年，第一个Web搜索引擎，World Wide Web Worm(WWWW)可以检索到110，000个网页和Web的文件。到1994年11月，顶级的搜索引擎声称可以检索到2&lsquo;000&rsquo;000（WebCrawler）至100&lsquo;000&rsquo;000个网络文件（来自 Search Engine Watch）。可以预见到2000年，可检索到的网页将超过1&lsquo;000&rsquo;000&lsquo;000。同时，搜索引擎的访问量也会以惊人的速度增长。在1997年的三四月份，World Wide Web Worm 平均每天收到1500个查询。</p>
<p>在1997年11月，Altavista 声称它每天要处理大约20&rsquo;000&rsquo;000个查询。随着网络用户的增长，到2000年，自动搜索引擎每天将处理上亿个查询。我们系统的设计目标要解决许多问题，包括质量和可升级性，引入升级搜索引擎技术（scaling search engine technology），把它升级到如此大量的数据上。 </p>
<p><strong>1.2 Google：</strong></p>
<p>跟上Web的步伐（Scaling with the Web）建立一个能够和当今web规模相适应的搜索引擎会面临许多挑战。抓网页技术必须足够快，才能跟上网页变化的速度（keep them up to date）。存储索引和文档的空间必须足够大。索引系统必须能够有效地处理上千亿的数据。处理查询必须快，达到每秒能处理成百上千个查询（hundreds to thousands per second.）。随着Web的不断增长，这些任务变得越来越艰巨。然而硬件的执行效率和成本也在快速增长，可以部分抵消这些困难。</p>
<p>还有几个值得注意的因素，如磁盘的寻道时间（disk seek time），操作系统的效率（operating system robustness）。在设计Google的过程中，我们既考虑了Web的增长速度，又考虑了技术的更新。Google的设计能够很好的升级处理海量数据集。它能够有效地利用存储空间来存储索引。优化的数据结构能够快速有效地存取（参考4.2节）。进一步，我们希望，相对于所抓取的文本文件和HTML网页的数量而言，存储和建立索引的代价尽可能的小（参考附录B）。对于象Google这样的集中式系统，采取这些措施得到了令人满意的系统可升级性（scaling properties）。</p>
<p><strong>1. 3设计目标</strong> </p>
<p><font color="#0000ff"><strong>1.3.1</strong> 提高搜索质量。我们的主要目标是提高Web搜索引擎的质量。</font></p>
<p>1994年，有人认为建立全搜索索引（a complete search index）可以使查找任何数据都变得容易。根据Best of the Web 1994 -- Navigators ，&ldquo;最好的导航服务可以使在Web上搜索任何信息都很容易（当时所有的数据都可以被登录）&rdquo;。然而1997年的Web就迥然不同。近来搜索引擎的用户已经证实索引的完整性不是评价搜索质量的唯一标准。用户感兴趣的搜索结果往往湮没在&ldquo;垃圾结果Junk result&rdquo;中。实际上，到1997年11月为止，四大商业搜索引擎中只有一个能够找到它自己（搜索自己名字时返回的前十个结果中有它自己）。导致这一问题的主要原因是文档的索引数目增加了好几个数量级，但是用户能够看的文档数却没有增加。用户仍然只希望看前面几十个搜索结果。因此，<strong>当集合增大时，我们就需要工具使结果精确</strong>（在返回的前几十个结果中，有关文档的数量）。由于是从成千上万个有点相关的文档中选出几十个，实际上，<font color="#0000ff">相关的概念就是指最好的文档。高精确非常重要，甚至以响应（系统能够返回的有关文档的总数）为代价</font>。令人高兴的是利用超文本链接提供的信息有助于改进搜索和其它应用 。尤其是链接结构和链接文本，为相关性的判断和高质量的过滤提供了大量的信息。Google既利用了链接结构又用到了anchor文本（见2.1和2.2节）。 </p>
<p><font color="#0000ff"><strong>1.3.2</strong> 搜索引擎的学术研究随着时间的流逝，除了发展迅速，Web越来越商业化。</font></p>
<p>1993年，只有1.5%的Web服务是来自.com域名。到1997年，超过了60%。同时，搜索引擎从学术领域走进商业。到现在大多数搜索引擎被公司所有，很少技公开术细节。这就导致搜索引擎技术很大程度上仍然是暗箱操作，并倾向做广告（见附录A）。Google的主要目标是推动学术领域在此方面的发展，和对它的了解。另一个设计目标是给大家一个实用的系统。应用对我们来说非常重要，因为现代网络系统中存在大量的有用数据（us because we think some of the most interesting research will involve leveraging the vast amount of usage data that is available from modern web systems）。例如，每天有几千万个研究。然而，得到这些数据却非常困难，主要因为它们没有商业价值。我们最后的设计目标是建立一个体系结构能够支持新的关于海量Web数据的研究。为了支持新研究，<strong>Google以压缩的形式保存了实际所抓到的文档</strong>。设计Google的目标之一就是要建立一个环境使其他研究者能够很快进入这个领域，处理海量Web数据，得到满意的结果，而通过其它方法却很难得到结果。系统在短时间内被建立起来，已经有几篇论文用到了Google建的数据库，更多的在起步中。我们的另一个目标是建立一个宇宙空间实验室似的环境，在这里研究者甚至学生都可以对我们的海量Web数据设计或做一些实验。 </p>
<p><strong>2. 系统特点</strong> </p>
<p>Google搜索引擎有两个重要特点，有助于得到高精度的搜索结果。<br /><font color="#0000ff">第一点，应用Web的链接结构计算每个网页的Rank值，称为PageRank，将在98页详细描述它。<br />第二点，Google利用超链接改进搜索结果。</font></p>
<p><font color="#0000ff"><strong>2.1</strong> PageRank:给网页排序：</font></p>
<p>Web的引用（链接）图是重要的资源，却被当今的搜索引擎很大程度上忽视了。我们建立了一个包含518000000个超链接的图，它是一个具有重要意义的样本。这些图能够快速地计算网页的PageRank值，它是一个客观的标准，较好的符合人们心目中对一个网页重要程度的评价，建立的基础是通过引用判断重要性。因此在web中，PageRank能够优化关键词查询的结果。对于大多数的主题，在网页标题查询中用PageRank优化简单文本匹配，我们得到了令人惊叹的结果（从google.stanford.edu可以得到演示）。对于Google主系统中的全文搜索，PageRank也帮了不少忙。</p>
<p><strong>2.1.1计算PageRank</strong> </p>
<p><strong>文献检索中的引用理论用到Web中，引用网页的链接数，一定程度上反映了该网页的重要性和质量。PageRank发展了这种思想，网页间的链接是不平等的。</strong></p>
<p><strong>PageRank定义</strong>如下: 我们假设T1&hellip;Tn指向网页A（例如，被引用）。参数d是制动因子，使结果在0，1之间。通常d等于0.85。在下一节将详细介绍d。C（A）定义为网页A指向其它网页的链接数，</p>
<p>网页A的PageRank值由下式给出： <strong>PR(A) = (1-d) + d (PR(T1)/C(T1) + ... + PR(Tn)/C(Tn)) </strong></p>
<p>注意PageRank的形式，分布到各个网页中，因此所有网页的PageRank和是1。 PageRank或PR（A）可以用简单的迭代算法计算，相应规格化Web链接矩阵的主特征向量。中等规模的网站计算26&lsquo;000&rsquo;000网页的PageRank值要花费几小时。还有一些技术细节超出了本文论述的范围。</p>
<p><strong>2.1.2 直觉判断 PageRank被看作用户行为的模型。</strong></p>
<p>我们假设网上冲浪是随机的，不断点击链接，从不返回，最终烦了，另外随机选一个网页重新开始冲浪。<font color="#0000ff">随机访问一个网页的可能性就是它的PageRank值。制动因子d是随机访问一个网页烦了的可能性，随机另选一个网页</font>。对单个网页或一组网页，一个重要的变量加入到制动因子d中。这允许个人可以故意地误导系统，以得到较高的PageRank值。我们还有其它的PageRank算法，见98页。</p>
<p>另外的直觉判断<font color="#0033ff">是一个网页有很多网页指向它，或者一些PageRank值高的网页指向它，则这个网页很重要</font>。直觉地，在Web中，一个网页被很多网页引用，那么这个网页值得一看。一个网页被象Yahoo这样重要的主页引用即使一次，也值得一看。如果一个网页的质量不高，或者是死链接，象Yahoo这样的主页不会链向它。PageRank处理了这两方面因素，并通过网络链接递归地传递。</p>
<p><strong>2.2链接描述文字（Anchor Text）：</strong></p>
<p>我们的搜索引擎对链接文本进行了特殊的处理。<strong>大多数搜索引擎把链接文字和它所链向的网页（the page that the link is on）联系起来</strong>。另外，把它和链接所指向的网页联系起来。这有几点好处。<br /><font color="#0000ff">第一，通常链接描述文字比网页本身更精确地描述该网页。<br />第二，链接描述文字可能链向的文档不能被文本搜索引擎检索到</font>，例如图像，程序和数据库。有可能使返回的网页不能被抓到。注意哪些抓不到的网页将会带来一些问题。在返回给用户前检测不了它们的有效性。这种情况搜索引擎可能返回一个根本不存在的网页，但是有超级链接指向它。然而这种结果可以被挑出来的，所以此类的问题很少发生。链接描述文字是对被链向网页的宣传，这个思想被用在World Wide Web Worm 中，主要因为它有助于搜索非文本信息，能够用少量的已下载文档扩大搜索范围。我们大量应用链接描述文字，因为它有助于提高搜索结果的质量。有效地利用链接描述文字技术上存在一些困难，因为必须处理大量的数据。现在我们能抓到24000000个网页，已经检索到259000000多个链接描述文字。</p>
<p><strong>2.3其它特点除了PageRank和应用链接描述文字外，Google还有一些其它特点。</strong></p>
<p><font color="#0000ff">第一,所有hit都有位置信息，所以它可以在搜索中广泛应用邻近性（proximity）。<br />第二，Google跟踪一些可视化外表细节，例如字号。黑体大号字比其它文字更重要。<br />第三，知识库存储了原始的全文html网页。</font><br /><br /><strong>3 有关工作</strong></p>
<p>Web检索研究的历史简短。World Wide Web Worm（）是最早的搜索引擎之一。后来出现了一些用于学术研究的搜索引擎，现在它们中的大多数被上市公司拥有。与Web的增长和搜索引擎的重要性相比，有关当今搜索引擎技术的优秀论文相当少。根据Michael Mauldin（Lycos Inc的首席科学家）) ，&ldquo;各种各样的服务（包括Lycos）非常关注这些数据库的细节。&rdquo;虽然在搜索引擎的某些特点上做了大量工作。具有代表性的工作有，对现有商业搜索引擎的结果进行传递，或建立小型的个性化的搜索引擎。最后有关信息检索系统的研究很多，尤其在有组织机构集合（well controlled collections）方面。在下面两节，我们将讨论在信息检索系统中的哪些领域需要改进以便更好的工作在Web上。 </p>
<p><strong>3.1信息检索信息检索系统诞生在几年前，并发展迅速。</strong></p>
<p>然而大多数信息检索系统研究的对象是小规模的单一的有组织结构的集合，例如科学论文集，或相关主题的新闻故事。实际上，信息检索的主要基准，（the Text Retrieval Conference），用小规模的、有组织结构的集合作为它们的基准。</p>
<p>大型文集基准只有20GB，相比之下，我们抓到的24000000个网页占147GB。在TREC上工作良好的系统，在Web上却不一定产生好的结果。例如，标准向量空间模型企图返回和查询请求最相近的文档，把查询请求和文档都看作由出现在它们中的词汇组成的向量。在Web环境下，这种策略常常返回非常短的文档，这些文档往往是查询词再加几个字。例如，查询&ldquo;Bill Clinton&rdquo;，返回的网页只包含&ldquo;Bill Clinton Sucks&rdquo;，这是我们从一个主要搜索引擎中看到的。网络上有些争议，用户应该更准确地表达他们想查询什么，在他们的查询请求中用更多的词。我们强烈反对这种观点。如果用户提出象&ldquo;Bill Clinton&rdquo;这样的查询请求，应该得到理想的查询结果，因为这个主题有许多高质量的信息。象所给的例子，我们认为信息检索标准需要发展，以便有效地处理Web数据。</p>
<p><strong>3.2 有组织结构的集合（Well Controlled Collections）与Web的不同点</strong> </p>
<p><strong>Web是完全无组织的异构的大量文档的集合</strong>。Web中的文档无论内在信息还是隐含信息都存在大量的异构性。例如，文档内部就用了不同的语言（既有人类语言又有程序），词汇（email地址，链接，邮政编码，电话号码，产品号），类型（文本，HTML，PDF，图像，声音），有些甚至是机器创建的文件（log文件，或数据库的输出）。可以从文档中推断出来，但并不包含在文档中的信息称为隐含信息。<strong>隐含信息包括来源的信誉，更新频率，质量，访问量和引用</strong>。不但隐含信息的可能来源各种各样，而且被检测的信息也大不相同，相差可达好几个数量级。例如，一个重要主页的使用量，象Yahoo 每天浏览数达到上百万次，于此相比无名的历史文章可能十年才被访问一次。很明显，搜索引擎对这两类信息的处理是不同的。 Web与有组织结构集合之间的另外一个明显区别是，<strong>事实上，向Web上传信息没有任何限制</strong>。灵活利用这点可以发布任何对搜索引擎影响重大的信息，使路由阻塞，加上为牟利故意操纵搜索引擎，这些已经成为一个严重的问题。这些问题还没有被传统的封闭的信息检索系统所提出来。它关心的是元数据的努力，这在Web搜索引擎中却不适用，因为网页中的任何文本都不会向用户声称企图操纵搜索引擎。甚至有些公司为牟利专门操纵搜索引擎。</p>
<p><strong>4 系统分析（System Anatomy）</strong></p>
<p>首先，我们提供高水平的有关体系结构的讨论。然后，详细描述重要的数据结构。最后，主要应用：抓网页，索引，搜索将被严格地检查。 Figure 1. High Level Google Architecture </p>
<p><strong>4.1Google体系结构概述</strong></p>
<p>这一节，我们将看看整个系统是如何工作的（give a high level），见图1。本节不讨论应用和数据结构，在后几节中讨论。为了效率大部分<strong>Google是用c或c++实现的，既可以在Solaris也可以在Linux上运行。</strong></p>
<p>Google系统中，抓网页（下载网页）是由几个分布式crawlers完成的。一个URL服务器负责向crawlers提供URL列表。抓来的网页交给存储服务器storeserver。然后，由存储服务器压缩网页并把它们存到知识库repository中。每个网页都有一个ID，称作docID，当新URL从网页中分析出时，就被分配一个docID。由索引器和排序器负责建立索引index function。索引器从知识库中读取文档，对其解压缩和分析。每个文档被转换成一组词的出现情况，称作<strong>命中hits</strong>。Hits纪录了词，词在文档中的位置，最接近的字号，大小写。索引器把这些hits分配到一组桶barrel中，产生经过部分排序后的索引。索引器的另一个重要功能是分析网页中所有的链接，将有关的重要信息存在链接描述anchors文件中。该文件包含了足够的信息，可以用来判断每个链接链出链入节点的信息，和链接文本。 URL分解器resolver阅读链接描述anchors文件，并把相对URL转换成绝对URL，再转换成docID。为链接描述文本编制索引，并与它所指向的docID关联起来。同时建立由docID对组成的链接数据库。用于计算所有文档的PageRank值。用docID分类后的barrels，送给排序器sorter，再根据wordID进行分类，建立反向索引inverted index。这个操作要恰到好处，以便几乎不需要暂存空间。排序器还给出docID和偏移量列表，建立反向索引。一个叫DumpLexicon的程序把这个列表和由索引器产生的字典结合在一起，建立一个新的字典，供搜索器使用。这个搜索器就是利用一个Web服务器，使用由DumpLexicon所生成的字典，利用上述反向索引以及页面等级PageRank来回答用户的提问。 </p>
<p><strong>4.2 主要数据结构</strong></p>
<p>经过优化的Google数据结构，能够用较小的代价抓取大量文档，建立索引和查询。虽然近几年CPU和输入输出速率迅速提高。磁盘寻道仍然需要10ms。任何时候Google系统的设计都尽可能地避免磁盘寻道。这对数据结构的设计影响很大。</p>
<p><strong>4.2.1 大文件</strong></p>
<p><font color="#0000ff"><strong>大文件BigFiles</strong>是指虚拟文件生成的多文件系统，用长度是64位的整型数据寻址。</font>多文件系统之间的空间分配是自动完成的。BigFiles包也处理已分配和未分配文件描述符。由于操纵系统不能满足我们的需要，BigFiles也支持基本的压缩选项。</p>
<p><strong>4.2.2 知识库</strong></p>
<p><font color="#0000ff">Repository Data Structure <strong>知识库</strong>包含每个网页的全部HTML</font>。<strong>每个网页用zlib（见RFC1950）压缩</strong>。压缩技术的选择既要考虑速度又要考虑压缩率。我们选择zlib的速度而不是压缩率很高的bzip。知识库用bzip的压缩率接近4：1。而用zlib的压缩率是3：1。文档一个挨着一个的存储在知识库中，前缀是docID，长度，URL，见图2。访问知识库不需要其它的数据结构。这有助于数据一致性和升级。用其它数据结构重构系统，我们只需要修改知识库和crawler错误列表文件。</p>
<p><strong>4.2.3 文件索引</strong></p>
<p><font color="#0033ff"><strong>文件索引</strong>保存了有关文档的一些信息。索引以docID的顺序排列，定宽ISAM（Index sequential access mode</font>）。每条记录包括当前文件状态，一个指向知识库的指针，文件校验和，各种统计表。如果一个文档已经被抓到，指针指向docinfo文件，该文件的宽度可变，包含了URL和标题。否则指针指向包含这个URL的URL列表。这种设计考虑到简洁的数据结构，以及在查询中只需要一个磁盘寻道时间就能够访问一条记录。还有一个文件用于把URL转换成docID。它是URL校验和与相应docID的列表，按校验和排序。要想知道某个URL的docID，需要计算URL的校验和，然后在校验和文件中执行二进制查找，找到它的docID。通过对这个文件进行合并，可以把一批URL转换成对应的docID。URL分析器用这项技术把URL转换成docID。这种成批更新的模式是至关重要的，否则每个链接都需要一次查询，假如用一块磁盘，322&lsquo;000&rsquo;000个链接的数据集合将花费一个多月的时间。</p>
<p><strong>4.2.4 词典</strong></p>
<p>词典有几种不同的形式。和以前系统的重要不同是，词典对内存的要求可以在合理的价格内。现在实现的系统，一台256M内存的机器就可以把词典装入到内存中。现在的词典包含14000000词汇（虽然一些很少用的词汇没有加入到词典中）。它执行分两部分&mdash;<strong>词汇表（用null分隔的连续串）和指针的哈希表。</strong>不同的函数，词汇表有一些辅助信息，这超出了本文论述的范围。</p>
<p><strong>4.2.5 hit list</strong></p>
<p><font color="#0000ff"><strong>hit list</strong>是一篇文档中所出现的词的列表，包括位置，字号，大小写。Hit list占很大空间，用在正向和反向索引中。</font>因此，它的表示形式越有效越好。我们考虑了几种方案来编码位置，字号，大小写&mdash;简单编码（3个整型数），紧凑编码（支持优化分配比特位），哈夫曼编码。Hit的详细信息见图3。我们的紧凑编码每个hit用2字节。有两种类型hit，<strong>特殊hit和普通hit</strong>。<font color="#0000ff">特殊hit包含URL，标题，链接描述文字，meta tag。普通hit包含其它每件事。它包括大小写特征位，字号，12比特用于描述词在文档中的位置（所有超过4095的位置标记为4096）。</font>字号采用相对于文档的其它部分的相对大小表示，占3比特(实际只用7个值，因为111标志是特殊hit)。特殊hit由大小写特征位，字号位为7表示它是特殊hit，用4比特表示特殊hit的类型，8比特表示位置。对于anchor hit八比特位置位分出4比特用来表示在anchor中的位置，4比特用于表明anchor出现的哈希表hash of the docID。短语查询是有限的，对某些词没有足够多的anchor。我们希望更新anchor hit的存储方式，以便解决地址位和docIDhash域位数不足的问题。</p>
<p>因为搜索时，你不会因为文档的字号比别的文档大而特殊对待它，所以采用相对字号。 hit表的长度存储在hit前。为节省空间hit表长度，在正向索引中和wordID结合在一起，在反向索引中和docID结合存储。这就限制它相应地只占8到5比特（用些技巧，可以从wordID中借8bit）如果大于这些比特所能表示的长度，用溢出码填充，其后两字节是真正的长度。 Figure 3. Forward and Reverse Indexes and the Lexicon</p>
<p><strong>4.2.6 正向索引</strong></p>
<p><font color="#0033ff">实际上，正向索引已经部分排序。它被存在一定数量的barrel中（我们用64个barrels）。每个barrel装着一定范围的wordID。</font>如果一篇文档中的词落到某个barrel，它的docID将被记录到这个barrel中，紧跟着那些词（文档中所有的词汇，还是落入该barrel中的词汇）对应的hitlist。这种模式需要稍多些的存储空间，因为一个docID被用多次，但是它节省了桶数和时间，最后排序器进行索引时降低编码的复杂度。更进一步的措施是，我们不是存储docID本身，而是存储相对于该桶最小的docID的差。用这种方法，未排序的barrel的docID只需24位，省下8位记录hitlist长。</p>
<p><strong>4.2.7 反向索引</strong></p>
<p><font color="#0000ff">除了反向索引由sorter加工处理之外，它和正向索引包含相同的桶。</font>对每个有效的docID，字典包含一个指向该词所在桶的指针。它指向由docID和它的相应hitlist组成的doclish，这个doclist代表了所有包含该词的文档。 doclist中docID的顺序是一个重要的问题。最简单的解决办法是用doclish排序。这种方法合并多个词时很快。另一个可选方案是用文档中该词出现的次数排序。这种方法回答单词查询，所用时间微不足道。当多词查询时几乎是从头开始。并且当用其它Rank算法改进索引时，非常困难。我们综合了这两种方法，建立两组反向索引barrel，一组barrels的hitlist只包含标题和anchor hit，另一组barrel包含全部的hitlist。我们首先查第一组索引桶，看有没有匹配的项，然后查较大的那组桶。 </p>
<p><strong>4.3 抓网页运行</strong></p>
<p>网络爬行机器人是一项具有挑战性的任务。执行的性能和可靠性甚至更重要，还有一些社会焦点。网络爬行是一项非常薄弱的应用，它需要成百上千的web服务器和各种域名服务器的参与，这些服务器不是我们系统所能控制的。为了覆盖几十亿的网页，Google拥有快速的分布式网络爬行系统。一个URL服务器给若干个网络爬行机器人（我们采用3个）提供URL列表。<strong>URL服务器和网络爬行机器人都是用Python实现的</strong>。每个网络爬行机器人可以同时打开300个链接。抓取网页必须足够快。最快时，用4个网络爬行机器人每秒可以爬行100个网页。速率达每秒600K。执行的重点是找DNS。每个网络爬行机器人有它自己的DNS cache，所以它不必每个网页都查DNS。每一百个连接都有几种不同的状态：<strong>查DNS，连接主机，发送请求，接收回答</strong>。这些因素使网络爬行机器人成为系统比较复杂的部分。<strong>它用异步IO处理事件，若干请求队列从一个网站到另一个网站不停的抓取网页</strong>。运行一个链接到500多万台服务器的网页爬行机器人，产生1千多万登陆口，导致了大量的Email和电话。因为网民众多，总有些人不知道网络爬行机器人是何物，这是他们看到的第一个网络爬行机器人。几乎每天我们都会收到这样的Email&ldquo;哦，你从我们的网站看了太多的网页，你想干什么？&rdquo;还有一些人不知道网络搜索机器人避免协议（the robots exclusion protocol），以为他们的网页上写着&ldquo;版权所有，勿被索引&rdquo;的字样就会被保护不被索引，不必说，这样的话很难被web crawler理解。因为数据量如此之大，还会遇到一些意想不到的事情。例如，我们的系统曾经企图抓一个在线游戏，结果抓到了游戏中的大量垃圾信息。解决这个问题很简单。但是我们下载了几千万网页后才发现了这个问题。因为网页和服务器的种类繁多，实际上不在大部分Internet上运行它就测试一个网页爬行机器人是不可能。总是有几百个隐含的问题发生在整个web的一个网页上，导致网络爬行机器人崩溃，或者更糟，导致不可预测的不正确的行为。能够访问大部分Internet的系统必须精力充沛并精心测试过。由于象crawler这样大型复杂的系统总是产生这样那样的问题，因此花费一些资源读这些Email，当问题发生时解决它，是有必要的。</p>
<p><strong>4.4 Web索引分析</strong></p>
<p><strong>任何运行在整个Web上的分析器必须能够处理可能包含错误的大型集合</strong>。范围从HTML标记到标记之间几K字节的0，非ASCII字符，几百层HTML标记的嵌套，各种各样令人难以想象的错误。为了获得最大的速度，我们没有采用YACC产生上下文无关文法CFG分析器，而是采用灵活的方式产生词汇分析器，它自己配有堆栈。分析器的改进大大提高了运行速度，它的精力如此充沛完成了大量工作。把文档装入barrel建立索引&mdash;分析完一篇文档，之后把该文档装入barrel中，用内存中的hash表&mdash;字典，每个词汇被转换成一个wordID。当hash表字典中加入新的项时，笨拙地存入文件。一旦词汇被转换成wordID，它们在当前文档的出现就转换成hitlist，被写进正向barrel。索引阶段并行的主要困难是字典需要共享。</p>
<p><strong>我们采用的方法是，基本字典中有140万个固定词汇，不在基本字典中的词汇写入日志，而不是共享字典。</strong>这种方法多个索引器可以并行工作，最后一个索引器只需处理一个较小的额外词汇日志。排序&mdash;为了建立反向索引，排序器读取每个正向barrel，以wordID排序，建立只有标题anchor hi t的反向索引barrel和全文反向索引barrel。这个过程一次只处理一个barrel，所以只需要少量暂存空间。排序阶段也是并行的，我们简单地同时运行尽可能多的排序器，不同的排序器处理不同的桶。由于barrel不适合装入主存，排序器进一步依据wordID和docID把它分成若干篮子，以便适合装入主存。然后排序器把每个篮子装入主存进行排序，并把它的内容写回到短反向barrel和全文反向barrel。</p>
<p><strong>4.5搜索</strong></p>
<p>搜索的目标是提供有效的高质量的搜索结果。多数大型商业搜索引擎好像在效率方面花费了很大力气。因此我们的研究以搜索质量为重点，相信我们的解决方案也可以用到那些商业系统中。<br />Google查询评价过程见图4。 </p>
<p><font color="#0000ff">1. 分析查询。 <br />2. 把词汇转换成wordID。<br />3. 在短barrel中查找每个词汇doclist的开头。<br />4. 扫描doclist直到找到一篇匹配所有关键词的文档 <br />5. 计算该文档的rank<br />6. 如果我们在短barrel，并且在所有doclist的末尾，开始从全文barrel的doclist的开头查找每个词，goto 第四步<br />7. 如果不在任何doclist的结尾，返回第四步。<br />8. 根据rank排序匹配文档，返回前k个。图4 Google查询评价在有限的响应时间内，一旦找到一定数量的匹配文档，搜索引擎自动执行步骤8。这意味着，返回的结果是子优化的。我们现在研究其它方法来解决这个问题。过去根据PageRank排序hit，看来能够改进这种状况。</font></p>
<p><br /><strong>4.5.1 Ranking系统</strong> </p>
<p>Google比典型搜索引擎保存了更多的web信息。<strong>每个hitlist包括位置，字号，大小写。另外，我们还考虑了链接描述文字</strong>。Rank综合所有这些信息是困难的。ranking函数设计依据是没有某个因素对rank影响重大。首先，考虑最简单的情况&mdash;单个词查询。为了单个词查询中一个文档的rank，Goole在文档的hitlist中查找该词。Google认为每个hit是几种不同类型（标题，链接描述文字anchor，URL，普通大字号文本，普通小字号文本，&hellip;&hellip;）之一，<strong>每种有它自己的类型权重。类型权重建立了一个类型索引向量</strong>。Google计算hitlist中每种hit的数量。然后每个hit数转换成count-weight。Count-weight开始随hit数线性增加，很快逐渐停止，以至于hit数与此不相关。我们计算count-weight向量和type-weight向量的标量积作为文档的IR值。<font color="#0000ff">最后IR值结合PageRank作为文档的最后rank。</font> 对于多词查询，更复杂些。现在，多词hitlist必须同时扫描，以便关键词出现在同一文档中的权重比分别出现时高。相邻词的hit一起匹配。对每个匹配hit 的集合计算相邻度。<strong>相邻度基于hit在文档中的距离</strong>，分成10个不同的bin值，范围从短语匹配到根本不相关。不仅计算每类hit数，而且要计算每种类型的相邻度，每个类型相似度对，<strong>有一个类型相邻度权type-prox-weight</strong>。Count转换成count-weight，计算count-weight、 type-prox-weight的标量积作为IR值。应用某种debug mode所有这些数和矩阵与查询结果一起显示出来。这些显示有助于改进rank系统。</p>
<p><strong>4.5.2 反馈</strong> </p>
<p>rank函数有很多参数象type-weight和type-prox-weight。指明这些参数的正确值有点黑色艺术black art。为此，我们的搜索引擎有一个用户反馈机制。值得信任的用户可以随意地评价返回的结果。保存反馈。然后，当修改rank函数时，对比以前搜索的rank，我们可以看到修改带来的的影响。虽然不是十全十美，但是它给出了一些思路，当rank函数改变时对搜索结果的影响。</p>
<p><strong>5 执行和结果</strong></p>
<p>搜索结果的质量是搜索引擎最重要的度量标准。完全用户评价体系超出了本文的论述范围，对于大多数搜索，我们的经验说明Google的搜索结果比那些主要的商业搜索引擎好。作为一个应用PageRank，链接描述文字，相邻度的例子，图4给出了Google搜索bill Clinton的结果。它说明了Google的一些特点。服务器对结果进行聚类。这对过滤结果集合相当有帮助。这个查询，相当一部分结果来自whitehouse.gov域，这正是我们所需要的。现在大多数商业搜索引擎不会返回任何来自whitehouse.gov的结果，这是相当不对的。注意第一个搜索结果没有标题。因为它不是被抓到的。Google是根据链接描述文字决定它是一个好的查询结果。同样地，第五个结果是一个Email地址，当然是不可能抓到的。也是链接描述文字的结果。所有这些结果质量都很高，最后检查没有死链接。因为它们中的大部分PageRank值较高。PageRank百分比用红色线条表示。没有结果只含Bill没有Clinton或只含Clinton没有Bill。因为词出现的相近性非常重要。当然搜索引擎质量的真实测试包含广泛的用户学习或结果分析，此处篇幅有限，请读者自己去体验Google，<a href="http://google.stanford.edu/" target="_blank"><font color="#2e3b5c">http://google.stanford.edu/</font></a>。 </p>
<p><strong>5.1存储需求</strong></p>
<p>除了搜索质量，Google的设计可以随着Web规模的增大而有效地增大成本。一方面有效地利用存储空间。表1列出了一些统计数字的明细表和Google存储的需求。由于压缩技术的应用知识库只需53GB的存储空间。是所有要存储数据的三分之一。按当今磁盘价格，知识库相对于有用的数据来说比较便宜。搜索引擎需要的所有数据的存储空间大约55GB。大多数查询请求只需要短反向索引。文件索引应用先进的编码和压缩技术，一个高质量的搜索引擎可以运行在7GB的新PC。 </p>
<p><strong>5.2 系统执行</strong></p>
<p>搜索引擎抓网页和建立索引的效率非常重要。Google的主要操作是抓网页，索引，排序。很难测试抓全部网页需要多少时间，因为磁盘满了，域名服务器崩溃，或者其它问题导致系统停止。总的来说，大约需要9天时间下载26000000网页（包括错误）。然而，一旦系统运行顺利，速度非常快，下载最后11000000网页只需要63小时，平均每天4000000网页，每秒48.5个网页。<strong>索引器和网络爬行机器人同步运行</strong>。索引器比网络爬行机器人快。因为我们花费了大量时间优化索引器，使它不是瓶颈。这些优化包括批量更新文档索引，本地磁盘数据结构的安排。索引器每秒处理54个网页。排序器完全并行，用4台机器，排序的整个过程大概需要24小时。</p>
<p><strong>5.3搜索执行改进</strong></p>
<p>搜索执行不是我们研究的重点。当前版本的Google可以在1到10秒间回答查询请求。时间大部分花费在NFS磁盘IO上（由于磁盘普遍比机器慢）。进一步说，Google没有做任何优化，例如查询缓冲区，常用词汇子索引，和其它常用的优化技术。<font color="#0000ff">我们倾向于通过分布式，硬件，软件，和算法的改进来提高Google的速度</font>。我们的目标是每秒能处理几百个请求。表2有几个现在版本Google响应查询时间的例子。它们说明IO缓冲区对再次搜索速度的影响。 </p>
<p><strong>6 结论</strong></p>
<p>Google设计成可伸缩的搜索引擎。主要目标是在快速发展的World Wide Web上提供高质量的搜索结果。Google应用了一些技术改进搜索质量包括PageRank，链接描述文字，相邻信息。进一步说，<strong>Google是一个收集网页，建立索引，执行搜索请求的完整的体系结构。</strong></p>
<p><strong>6.1 未来的工作</strong></p>
<p>大型Web搜索引擎是个复杂的系统，还有很多事情要做。我们直接的目标是提高搜索效率，覆盖大约100000000个网页。一些简单的改进提高了效率包括请求缓冲区，巧妙地分配磁盘空间，子索引。另一个需要研究的领域是更新。我们必须有一个巧妙的算法来决定哪些旧网页需要重新抓取，哪些新网页需要被抓取。这个目标已经由实现了。受需求驱动，用代理cache创建搜索数据库是一个有前途的研究领域。我们计划加一些简单的已经被商业搜索引擎支持的特征，例如布尔算术符号，否定，填充。然而另外一些应用刚刚开始探索，例如相关反馈，聚类（Google现在支持简单的基于主机名的聚类）。我们还计划支持用户上下文（象用户地址），结果摘要。我们正在扩大链接结构和链接文本的应用。简单的实验证明，通过增加用户主页的权重或书签，PageRank可以个性化。对于链接文本，我们正在试验用链接周围的文本加入到链接文本。Web搜索引擎提供了丰富的研究课题。如此之多以至于我们不能在此一一列举，因此在不久的将来，我们希望所做的工作不止本节提到的。</p>
<p><strong>6.2 高质量搜索</strong></p>
<p>当今Web搜索引擎用户所面临的最大问题是搜索结果的质量。结果常常是好笑的，并且超出用户的眼界，他们常常灰心丧气浪费了宝贵的时间。例如，一个最流行的商业搜索引擎搜索&ldquo;Bill Clillton&rdquo;的结果是the Bill Clinton Joke of the Day: April 14, 1997。Google的 设计目标是随着Web的快速发展提供高质量的搜索结果，容易找到信息。为此，Google大量应用超文本信息包括链接结构和链接文本。Google还用到了相邻性和字号信息。评价搜索引擎是困难的，我们主观地发现Google的搜索质量比当今商业搜索引擎高。<font color="#0000ff">通过PageRank分析链接结构使Google能够评价网页的质量。用链接文本描述链接所指向的网页有助于搜索引擎返回相关的结果（某种程度上提高了质量）。最后，利用相邻性信息大大提高了很多搜索的相关性。 </font></p>
<p><strong>6.3可升级的体系结构</strong></p>
<p>除了搜索质量，Google设计成可升级的。空间和时间必须高效，处理整个Web时固定的几个因素非常重要。实现Google系统，CPU、访存、内存容量、磁盘寻道时间、磁盘吞吐量、磁盘容量、网络IO都是瓶颈。在一些操作中，已经改进的Google克服了一些瓶颈。Google的主要数据结构能够有效利用存储空间。进一步，网页爬行，索引，排序已经足够建立大部分web索引，共24000000个网页，用时不到一星期。我们希望能在一个月内建立100000000网页的索引。 </p>
<p><strong>6.4 研究工具</strong></p>
<p>Google不仅是高质量的搜索引擎，它还是研究工具。Google搜集的数据已经用在许多其它论文中，提交给学术会议和许多其它方式。最近的研究，例如，提出了Web查询的局限性，不需要网络就可以回答。这说明Google不仅是重要的研究工具，而且必不可少，应用广泛。我们希望Google是全世界研究者的资源，带动搜索引擎技术的更新换代。 </p>
<p><strong>7、致谢</strong> </p>
<p>Scott Hassan and Alan Steremberg评价了Google的改进。他们的才智无可替代，作者由衷地感谢他们。感谢Hector Garcia-Molina, Rajeev Motwani, Jeff Ullman, and Terry Winograd和全部WebBase开发组的支持和富有深刻见解的讨论。最后感谢IBM，Intel，Sun和投资者的慷慨支持，为我们提供设备。这里所描述的研究是Stanford综合数字图书馆计划的一部分，由国家科学自然基金支持，合作协议号IRI-9411306。DARPA ，NASA，Interva研究，Stanford数字图书馆计划的工业合作伙伴也为这项合作协议提供了资金。</p>
<p><strong>参考文献。</strong></p>
<ul>
    <li>Best of the Web 1994 -- Navigators <a href="http://botw.org/1994/awards/navigators.html" target="_blank"><font color="#2e3b5c">http://botw.org/1994/awards/navigators.html</font></a> </li>
    <li>Bill Clinton Joke of the Day: April 14, 1997. <a href="http://www.io.com/~cjburke/clinton/970414.html." target="_blank"><font color="#2e3b5c">http://www.io.com/~cjburke/clinton/970414.html.</font></a> </li>
    <li>Bzip2 Homepage <a href="http://www.muraroa.demon.co.uk/" target="_blank"><font color="#2e3b5c">http://www.muraroa.demon.co.uk/</font></a> </li>
    <li>Google Search Engine <a href="http://google.stanford.edu/" target="_blank"><font color="#2e3b5c">http://google.stanford.edu/</font></a> </li>
    <li>Harvest <a href="http://harvest.transarc.com/" target="_blank"><font color="#2e3b5c">http://harvest.transarc.com/</font></a> </li>
    <li>Mauldin, Michael L. Lycos Design Choices in an Internet Search Service, IEEE Expert Interview <a href="http://www.computer.org/pubs/expert/1997/trends/x1008/mauldin.htm" target="_blank"><font color="#2e3b5c">http://www.computer.org/pubs/expert/1997/trends/x1008/mauldin.htm</font></a> </li>
    <li>The Effect of Cellular Phone Use Upon Driver Attention <a href="http://www.webfirst.com/aaa/text/cell/cell0toc.htm" target="_blank"><font color="#2e3b5c">http://www.webfirst.com/aaa/text/cell/cell0toc.htm</font></a> </li>
    <li>Search Engine Watch <a href="http://www.searchenginewatch.com/" target="_blank"><font color="#2e3b5c">http://www.searchenginewatch.com/</font></a> </li>
    <li>RFC 1950 (zlib) <a href="ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html" target="_blank"><font color="#2e3b5c">ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html</font></a> </li>
    <li>Robots Exclusion Protocol: <a href="http://info.webcrawler.com/mak/projects/robots/exclusion.htm" target="_blank"><font color="#2e3b5c">http://info.webcrawler.com/mak/projects/robots/exclusion.htm</font></a> </li>
    <li>Web Growth Summary: <a href="http://www.mit.edu/people/mkgray/net/web-growth-summary.html" target="_blank"><font color="#2e3b5c">http://www.mit.edu/people/mkgray/net/web-growth-summary.html</font></a> </li>
    <li>Yahoo! <a href="http://www.yahoo.com/" target="_blank"><font color="#3d4f7a">http://www.yahoo.com/</font></a> </li>
</ul>
<ul>
    <li>[Abiteboul 97] Serge Abiteboul and Victor Vianu, <em>Queries and Computation on the Web</em>. Proceedings of the International Conference on Database Theory. Delphi, Greece 1997. </li>
    <li>[Bagdikian 97] Ben H. Bagdikian. <em>The Media Monopoly</em>. 5th Edition. Publisher: Beacon, ISBN: 0807061557 </li>
    <li>[Chakrabarti 98] S.Chakrabarti, B.Dom, D.Gibson, J.Kleinberg, P. Raghavan and S. Rajagopalan. <em>Automatic Resource Compilation by Analyzing Hyperlink Structure and Associated Text.</em> Seventh International Web Conference (WWW 98). Brisbane, Australia, April 14-18, 1998. </li>
    <li>[Cho 98] Junghoo Cho, Hector Garcia-Molina, Lawrence Page. <em>Efficient Crawling Through URL ordering.</em> Seventh International Web Conference (WWW 98). Brisbane, Australia, April 14-18, 1998. </li>
    <li>[Gravano 94] Luis Gravano, Hector Garcia-Molina, and A. Tomasic. <em>The Effectiveness of GlOSS for the Text-Database Discovery Problem.</em> Proc. of the 1994 ACM SIGMOD International Conference On Management Of Data, 1994. </li>
    <li>[Kleinberg 98] Jon Kleinberg, <em>Authoritative Sources in a Hyperlinked Environment</em>, Proc. ACM-SIAM Symposium on Discrete Algorithms, 1998. </li>
    <li>[Marchiori 97] Massimo Marchiori. <em>The Quest for Correct Information on the Web: Hyper Search Engines.</em> The Sixth International WWW Conference (WWW 97). Santa Clara, USA, April 7-11, 1997. </li>
    <li>[McBryan 94] Oliver A. McBryan. GENVL and <em>WWWW: Tools for Taming the Web. First International Conference on the World Wide Web. </em>CERN, Geneva (Switzerland), May 25-26-27 1994. <a href="http://www.cs.colorado.edu/home/mcbryan/mypapers/www94.ps" target="_blank"><font color="#2e3b5c">http://www.cs.colorado.edu/home/mcbryan/mypapers/www94.ps</font></a> </li>
    <li>[Page 98] Lawrence Page, Sergey Brin, Rajeev Motwani, Terry Winograd. <em>The PageRank Citation Ranking: Bringing order to the Web. </em>Manuscript in progress. <a href="http://google.stanford.edu/~backrub/pageranksub.ps" target="_blank"><font color="#2e3b5c">http://google.stanford.edu/~backrub/pageranksub.ps</font></a> </li>
    <li>[Pinkerton 94] Brian Pinkerton, <em>Finding What People Want: Experiences with the WebCrawler. </em>The Second International WWW Conference Chicago, USA, October 17-20, 1994. <a href="http://info.webcrawler.com/bp/WWW94.html" target="_blank"><font color="#2e3b5c">http://info.webcrawler.com/bp/WWW94.html</font></a> </li>
    <li>[Spertus 97] Ellen Spertus. <em>ParaSite: Mining Structural Information on the Web. </em>The Sixth International WWW Conference (WWW 97). Santa Clara, USA, April 7-11, 1997. </li>
    <li>[TREC 96] <em>Proceedings of the fifth Text REtrieval Conference (TREC-5). </em>Gaithersburg, Maryland, November 20-22, 1996. Publisher: Department of Commerce, National Institute of Standards and Technology. Editors: D. K. Harman and E. M. Voorhees. Full text at: <a href="http://trec.nist.gov/" target="_blank"><font color="#2e3b5c">http://trec.nist.gov/</font></a> </li>
    <li>[Witten 94] Ian H Witten, Alistair Moffat, and Timothy C. Bell. <em>Managing Gigabytes: Compressing and Indexing Documents and Images. </em>New York: Van Nostrand Reinhold, 1994. </li>
    <li>[Weiss 96] Ron Weiss, Bienvenido Velez, Mark A. Sheldon, Chanathip Manprempre, Peter Szilagyi, Andrzej Duda, and David K. Gifford. <em>HyPursuit: A Hierarchical Network Search Engine that Exploits Content-Link Hypertext Clustering. </em>Proceedings of the 7th ACM Conference on Hypertext. New York, 1996. </li>
</ul>
<p>图片附录：</p>
<p><a title="新窗口打开" onfocus="this.blur()" href="http://blog.itpub.net/UploadFile/2005-8/200582118513333704.gif" target="_blank"></a><img alt="" src="http://blog.itpub.net//resserver.php?blogId=6201&amp;resource=200582118513333704.gif" /></p>
<p><strong>图1 Google系统的工作流程图</strong><br />(注：原图来自Sergey Brin and Lawrence Page, The Anatomy of a Large-Scale Hypertextual. Web Search Engine, 1998.)</p>
<p>①Google使用高速的分布式爬行器(Crawler)系统中的漫游遍历器(Googlebot)定时地遍历网页，将遍历到的网页送到存储服务器(Store Server)中。<br />②存储服务器使用zlib格式压缩软件将这些网页进行无损压缩处理后存入数据库Repository中。Repository获得了每个网页的完全Html代码后，对其压缩后的网页及URL进行分析，记录下网页长度、URL、URL长度和网页内容，并赋予每个网页一个文档号(docID)，以便当系统出现故障的时候，可以及时完整地进行网页的数据恢复。<br />③索引器(Indexer)从Repository中读取数据，以后做以下四步工作：<br />④(a)将读取的数据解压缩后进行分析，它将网页中每个有意义的词进行统计后，转化为关键词(wordID)的若干索引项(Hits)，生成索引项列表，该列表包括关键词、关键词的位置、关键词的大小和大小写状态等。索引项列表被存入到数据桶(Barrels)中，并生成以文档号(docID)部分排序的顺排档索引。</p>
<p>索引项根据其重要程度分为两种：当索引项中的关键词出现在URL、标题、锚文本(Anchor Text)和标签中时，表示该索引项比较重要，称为特殊索引项(Fancy Hits)；其余情况则称为普通索引项(Plain Hits)。在系统中每个Hit用两个字节(byte)存储结构表示：特殊索引项用1位(bit)表示大小写，用二进制代码111(占3位)表示是特殊索引项，其余12位有4位表示特殊索引项的类型(即hit是出现在URL、标题、链接结点还是标签中)，剩下8位表示hit在网页中的具体位置；普通索引项是用1位表示大小写，3位表示字体大小，其余12位表示在网页中的具体位置。<br />顺排档索引和Hit的存储结构如图3所示。</p>
<p><a title="新窗口打开" onfocus="this.blur()" href="http://blog.itpub.net/UploadFile/2005-8/200582118592324125.jpg" target="_blank"></a><img alt="" src="http://blog.itpub.net//resserver.php?blogId=6201&amp;resource=200582118592324125.jpg" /><br /><br /><strong>图3 顺排档索引和Hit的存储结构</strong></p>
<p>值得注意的是，当特殊索引项来自Anchor Text时，特殊索引项用来表示位置的信息（8位）将分为两部分：4位表示Anchor Text出现的具体位置，另4位则用来与表示Anchor Text所链接网页的docID相连接，这个docID是由URL Resolver经过转化存入顺排档索引的。<br />(b)索引器除了对网页中有意义的词进行分析外，还分析网页的所有超文本链接，将其Anchor Text、URL指向等关键信息存入到Anchor文档库中。<br />(c)索引器生成一个索引词表(Lexicon)，它包括两个部分：关键词的列表和指针列表，用于倒排档文档相连接(如图3所示)。<br />(d)索引器还将分析过的网页编排成一个与Repository相连接的文档索引(Document Index)，并记录下网页的URL和标题，以便可以准确查找出在Repository中存储的原网页内容。而且把没有分析的网页传给URL Server，以便在下一次工作流程中进行索引分析。<br />⑤URL分析器（URL Resolver）读取Anchor文档中的信息，然后做⑥中的工作。<br />⑥(a)将其锚文本(Anchor Text)所指向的URL转换成网页的docID；(b)将该docID与原网页的docID形成&ldquo;链接对&rdquo;，存入Link数据库中；(c)将Anchor Text指向的网页的docID与顺排档特殊索引项Anchor Hits相连接。<br />⑦数据库Link记录了网页的链接关系，用来计算网页的PageRank值。<br />⑧文档索引(Document Index)把没有进行索引分析的网页传递给URL Server，URL Server则向Crawler提供待遍历的URL，这样，这些未被索引的网页在下一次工作流程中将被索引分析。<br />⑨排序器（Sorter）对数据桶(Barrels)的顺排档索引重新进行排序，生成以关键词(wordID)为索引的倒排档索引。倒排档索引结构如图4所示：</p>
<p><a title="新窗口打开" onfocus="this.blur()" href="http://blog.itpub.net/UploadFile/2005-8/20058211904567647.jpg" target="_blank"></a><img alt="" src="http://blog.itpub.net//resserver.php?blogId=6201&amp;resource=20058211904567647.jpg" /><br /><br />图4 倒排档索引结构<br />⑩将生成的倒排档索引与先前由索引器产生的索引词表(Lexicon)相连接产生一个新的索引词表供搜索器(Searcher)使用。搜索器的功能是由网页服务器实现的，根据新产生的索引词表结合上述的文档索引(Document Index)和Link数据库计算的网页PageRank值来匹配检索。<br />在执行检索时，Google通常遵循以下步骤（以下所指的是单个检索词的情况）：<br />(1)将检索词转化成相应的wordID；<br />(2)利用Lexicon，检索出包含该wordID的网页的docID；<br />(3)根据与Lexicon相连的倒排档索引，分析各网页中的相关索引项的情况，计算各网页和检索词的匹配程度，必要时调用顺排档索引；<br />(4)根据各网页的匹配程度，结合根据Link产生的相应网页的PageRank情况，对检索结果进行排序；<br />(5)调用Document Index中的docID及其相应的URL，将排序结果生成检索结果的最终列表，提供给检索用户。<br />用户检索包含多个检索词的情况与以上单个检索词的情况类似：先做单个检索词的检索，然后根据检索式中检索符号的要求进行必要的布尔操作或其他操作。</p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=18</link>
			<title><![CDATA[转贴：Google黑板报ＴＦ／ＩＤＦ]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Wed,11 Oct 2006 00:26:45 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=18</guid>	
		<description><![CDATA[<div class="content">[我们已经谈过了<a href="http://googlechinablog.com/2006/05/web-crawlers.html" target="_blank">如何自动下载网页</a>、<a href="http://googlechinablog.com/2006/05/blog-post_10.html" target="_blank">如何建立索引</a>、<a href="http://googlechinablog.com/2006/02/page-rank-google.html" target="_blank">如何衡量网页的质量</a>(Page Rank)。我们今天谈谈如何确定一个网页和某个查询的相关性。了解了这四个方面，一个有一定编程基础的读者应该可以写一个简单的搜索引擎了，比如为您所在的学校或院系建立一个小的搜索引擎。]<br /><br />我们还是看上回的例子，查找关于&ldquo;原子能的应用&rdquo;的网页。我们第一步是在索引中找到包含这三个词的网页（详见关于<a href="http://googlechinablog.com/2006/05/blog-post_10.html" target="_blank">布尔运算</a>的系列）。现在任何一个搜索引擎都包含几十万甚至是上百万个多少有点关系的网页。那么哪个应该排在前面呢？显然我们应该根据网页和查询&ldquo;原子能的应用&rdquo;的相关性对这些网页进行排序。因此，这里的关键问题是如何度量网页和查询的相关性。<br /><br />我们知道，短语&ldquo;原子能的应用&rdquo;可以分成三个关键词：原子能、的、应用。根据我们的直觉，我们知道，包含这三个词多的网页应该比包含它们少的网页相关。当然，这个办法有一个明显的漏洞，就是长的网页比短的网页占便宜，因为长的网页总的来讲包含的关键词要多些。因此我们需要根据网页的长度，对关键词的次数进行归一化，也就是用关键词的次数除以网页的总字数。我们把这个商称为&ldquo;关键词的频率&rdquo;，或者&ldquo;单文本词汇频率&rdquo;（Term Frequency)，比如，在某个一共有一千词的网页中&ldquo;原子能&rdquo;、&ldquo;的&rdquo;和&ldquo;应用&rdquo;分别出现了 2 次、35 次 和 5 次，那么它们的词频就分别是 0.002、0.035 和 0.005。 我们将这三个数相加，其和 0.042 就是相应网页和查询&ldquo;原子能的应用&rdquo;<br />相关性的一个简单的度量。概括地讲，如果一个查询包含关键词 w1,w2,...,wN, 它们在一篇特定网页中的词频分别是: TF1, TF2, ..., TFN。 （TF: term frequency)。 那么，这个查询和该网页的相关性就是:<br />TF1 + TF2 + ... + TFN。<br /><br />读者可能已经发现了又一个漏洞。在上面的例子中，词&ldquo;的&rdquo;站了总词频的 80% 以上，而它对确定网页的主题几乎没有用。我们称这种词叫&ldquo;应删除词&rdquo;（Stopwords)，也就是说在度量相关性是不应考虑它们的频率。在汉语中，应删除词还有&ldquo;是&rdquo;、&ldquo;和&rdquo;、&ldquo;中&rdquo;、&ldquo;地&rdquo;、&ldquo;得&rdquo;等等几十个。忽略这些应删除词后，上述网页的相似度就变成了0.007，其中&ldquo;原子能&rdquo;贡献了0.002，&ldquo;应用&rdquo;贡献了 0.005。<br /><br />细心的读者可能还会发现另一个小的漏洞。在汉语中，&ldquo;应用&rdquo;是个很通用的词，而&ldquo;原子能&rdquo;是个很专业的词，后者在相关性排名中比前者重要。因此我们需要给汉语中的每一个词给一个权重，这个权重的设定必须满足下面两个条件：<br /><br />1. 一个词预测主题能力越强，权重就越大，反之，权重就越小。我们在网页中看到&ldquo;原子能&rdquo;这个词，或多或少地能了解网页的主题。我们看到&ldquo;应用&rdquo;一次，对主题基本上还是一无所知。因此，&ldquo;原子能&ldquo;的权重就应该比应用大。<br /><br />2. 应删除词的权重应该是零。<br /><br />我们很容易发现，如果一个关键词只在很少的网页中出现，我们通过它就容易锁定搜索目标，它的权重也就应该大。反之如果一个词在大量网页中出现，我们看到它仍然不很清楚要找什么内容，因此它应该小。概括地讲，假定一个关键词 ｗ 在 Ｄｗ 个网页中出现过，那么 Ｄｗ 越大，ｗ 的权重越小，反之亦然。在信息检索中，使用最多的权重是&ldquo;逆文本频率指数&rdquo; （Inverse document frequency 缩写为ＩＤＦ），它的公式为ｌｏｇ（Ｄ／Ｄｗ）其中Ｄ是全部网页数。比如，我们假定中文网页数是Ｄ＝１０亿，应删除词&ldquo;的&rdquo;在所有的网页中都出现，即Ｄｗ＝１０亿，那么它的ＩＤＦ＝log(10亿/10亿）= log (1) = ０。假如专用词&ldquo;原子能&rdquo;在两百万个网页中出现，即Ｄｗ＝２００万，则它的权重ＩＤＦ＝log(500) =6.2。又假定通用词&ldquo;应用&rdquo;，出现在五亿个网页中，它的权重ＩＤＦ = log(2)<br />则只有 0.7。也就只说，在网页中找到一个&ldquo;原子能&rdquo;的比配相当于找到九个&ldquo;应用&rdquo;的匹配。利用 IDF，上述相关性计算个公式就由词频的简单求和变成了加权求和，即 TF1*IDF1 +　TF2*IDF2 ＋... + TFN*IDFN。在上面的例子中，该网页和&ldquo;原子能的应用&rdquo;的相关性为 0.0161，其中&ldquo;原子能&rdquo;贡献了 0.0126，而&ldquo;应用&rdquo;只贡献了0.0035。这个比例和我们的直觉比较一致了。<br /><br />ＴＦ／ＩＤＦ（term frequency/inverse document frequency) 的概念被公认为信息检索中最重要的发明。在搜索、文献分类和其他相关领域有广泛的应用。讲起 TF/IDF 的历史蛮有意思。IDF 的概念最早是剑桥大学的斯巴克－琼斯[注：她有两个姓］ (Karen Sparck Jones)提出来的。斯巴克－琼斯 １９７２ 年在一篇题为关键词特殊性的统计解释和她在文献检索中的应用的论文中提出ＩＤＦ。遗憾的是，她既没有从理论上解释为什么权重ＩＤＦ 应该是对数函数 ｌｏｇ（Ｄ／Ｄｗ）（而不是其它的函数，比如平方根），也没有在这个题目上作进一步深入研究，以至于在以后的很多文献中人们提到 ＴＦ／ＩＤＦ 时没有引用她的论文，绝大多数人甚至不知道斯巴克－琼斯的贡献。同年罗宾逊写了个两页纸的解释，解释得很不好。倒是后来康乃尔大学的萨尔顿（Salton)多次写文章、写书讨论 TF/IDF 在信息检索中的用途，加上萨尔顿本人的大名（信息检索的世界大奖就是以萨尔顿的名字命名的）。很多人都引用萨尔顿的书，甚至以为这个信息检索中最重要的概念是他提出的。当然，世界并没有忘记斯巴克－琼斯的贡献，2004年，在纪念文献学学报创刊 60 周年之际，该学报重印了斯巴克-琼斯的大作。罗宾逊在同期期刊上写了篇文章，用香农的信息论解释 IDF，这回的解释是对的，但文章写的并不好、非常冗长（足足十八页），把一个简单问题搞复杂了。其实，信息论的学者们已经发现并指出，其实 IDF 的概念就是一个特定条件下、关键词的概率分布的交叉熵（Kullback-Leibler Divergence)（详见<a href="http://googlechinablog.com/2006/04/4.html" target="_blank">上一系列</a>）。这样，信息检索相关性的度量，又回到了信息论。<br /><br />现在的搜索引擎对 TF/IDF 进行了不少细微的优化，使得相关性的度量更加准确了。当然，对有兴趣写一个搜索引擎的爱好者来讲，使用 TF/IDF 就足够了。 如果我们结合上网页排名(Page Rank)，那么给定一个查询，有关网页综合排名大致由相关性和网页排名乘积决定。</div>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=17</link>
			<title><![CDATA[转贴：向量相似度的计算和向量夹角余旋的关系]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Wed,11 Oct 2006 00:20:53 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=17</guid>	
		<description><![CDATA[<p>在向量空间模型中，文本泛指各种机器可读的记录。用D（Document）表示，特征项（Term，用t表示）是指出现在文档D中且能够代表该文档内容的基本语言单位，主要是由词或者短语构成，文本可以用特征项集表示为D(T1，T2，&hellip;，Tn)，其中Tk是特征项，1&lt;=k&lt;=N。例如一篇文档中有a、b、c、d四个特征项，那么这篇文档就可以表示为D(a，b，c，d)。对含有n个特征项的文本而言，通常会给每个特征项赋予一定的权重表示其重要程度。即D＝D(T1，W1；T2，W2；&hellip;，Tn，Wn)，简记为D＝D(W1，W2，&hellip;，Wn)，我们把它叫做文本D的向量表示。其中Wk是Tk的权重，1&lt;=k&lt;=N。在上面那个例子中，假设a、b、c、d的权重分别为30，20，20，10，那么该文本的向量表示为D(30，20，20，10)。在向量空间模型中，两个文本D1和D2之间的内容相关度Sim(D1，D2)常用向量之间夹角的余弦值表示，公式为：<br /><img alt="" src="http://www.xd-tech.com.cn/blog/attachments/month_0610/n20061011103816.jpg" /><br />其中，W1k、W2k分别表示文本D1和D2第K个特征项的权值，1&lt;=k&lt;=N。<br />在自动归类中，我们可以利用类似的方法来计算待归类文档和某类目的相关度。例如文本D1的特征项为a，b，c，d，权值分别为30，20，20，10，类目C1的特征项为a，c，d，e，权值分别为40，30，20，10，则D1的向量表示为D1(30,20,20,10,0),C1的向量表示为C1（40，0，30，20，10），则根据上式计算出来的文本D1与类目C1相关度是0.86<br /><br />那个相关度0.86是怎么算出来的？&nbsp;</p>
<p>&nbsp;</p>
<p>是这样的，抛开你的前面的赘述<br /><br />在数学当中，n维向量是 V{v1, v2, v3, ..., vn}<br />他的模： |v| = sqrt ( v1*v1 + v2*v2 + ... + vn*vn )<br />两个向量的点击 m*n = n1*m1 + n2*m2 + ...... + nn*mn<br />相似度 ＝ (m*n) /(|m|*|n|)<br />物理意义就是两个向量的空间夹角的余弦数值<br />对于你的例子<br />d1*c1 = 30*40 + 20*0 + 20*30 + 10*20 + 0*10 = 2000<br />|d1| = sqrt(30*30 +20*20 + 20*20 + 10*10 + 0*0) = sqrt(1800)<br />|c1| = sqrt(40*40 + 0*0 + 30*30 + 20*20 + 10*10) = sqrt(3000)<br />相似度 = d1*c1/(|d1|*|c1|)= 2000/sqrt(1800*3000)= 0.86066</p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=16</link>
			<title><![CDATA[主题爬虫的设计]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Wed,11 Oct 2006 00:03:30 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=16</guid>	
		<description><![CDATA[<p><a href="http://www.xd-tech.com.cn/blog/attachments/month_0610/g200610110544.pdf"><img style="MARGIN: 0px 2px -4px 0px" alt="" src="http://www.xd-tech.com.cn/blog/images/download.gif" border="0" />点击下载此文件</a>参考附件的一篇文献</p>
<p>正在研究针对非固定主题的爬虫。</p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=15</link>
			<title><![CDATA[象Google 一样准确]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Mon,09 Oct 2006 00:13:43 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=15</guid>	
		<description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;过几天简单的介绍一下。</p>
<p>&nbsp;&nbsp;&nbsp; 有空在介绍一下竞价排名和分类广告系统。</p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=14</link>
			<title><![CDATA[将查询的响应时间降低到0.5秒以内 ---------10月8日补充]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Tue,03 Oct 2006 23:50:04 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=14</guid>	
		<description><![CDATA[<p>将查询的响应时间降低到0.5秒以内</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Nutch 的索引文档数量在100W以下的时候，怎么处理查询响应都比较的快速，基本上不会超过0.5秒。但是超过200W索引文档 的时候如果不处理，查询的响应时间就会超过这个数字。如果内存足够，甚至可以把200W的索引文档全部加载到内存，这时查询响应时间会小于0.1秒，但内存占用会超过1.5G，这种方式适合数据量比较小的查询系统，例如文献检索等。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当数据量超过200W的时候如果全部加载到内存则不太适合了，因为受JVM最大内存的限制（1.2G到3.6G Linux下），加载超过200W索引页面的时候，JVM会溢出。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 以下介绍通过几种方式实现超过1000W的索引页面查询响应时间降低到0.5秒以内。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1、让索引尽可能的简单，非必要的索引字段尽可能的删除掉，索引的字段需要正确的区分那些Index ；那些Tokenize、那些Store。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2、将 indexer.minMergeDocs 和 indexer.mergeFactor 调整到尽可能的大。如果索引的页面大小平均在10K，JVM可用的内存是2.6G，则可以将indexer.minMergeDocs 设置为30000（根据页面尺寸定），这对查询的效率影响巨大。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3、将尽可能多的 segemts合并到一起，可以让 一个 segment 包含100W个document 并根据实际情况调整一个segment 包含的 document的数量 。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4、将所有的 index 合并到一起，如果创建索引的时候 indexer.minMergeDocs 是&nbsp;足够大，则合并以后的index目录下的文件会很少，这将非常的有利于查询性能的提高（我在我的系统里面把大约400W个document合并到一个segments目录下，然后分成5个segment，最后把400W个索引文档合并到一个index目录下，最后产生的index目录下的文件只有10多个，但文件尺寸非常大）。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5、将索引分布在多个JVM。如果单台服务器的内存很大（超过6G），那么可以在一台计算机上开启多个查询服务器，每个查询服务器启动的JVM内存占用会从400M逐渐增加到2G左右，所以如果单个的查询服务器使用的索引文档超过200W，则需要增加足够的内存以应付查询缓存（查询服务器启动时间越长，缓存的内容越多，内存占用越大）。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6、一般的垂直搜索引擎都需要在Nutch 上再做开发，索引的及时更新都会面临一些问题。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 索引超过3000W个页面的查询效率调整暂时不能公开，按照以上方式处理会超过1秒，但小于5秒。</p>
<p>&nbsp;</p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=13</link>
			<title><![CDATA[继续回到查询]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Tue,03 Oct 2006 00:52:22 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=13</guid>	
		<description><![CDATA[<p>&nbsp;&nbsp;&nbsp; Nutch 初始化完毕之后，查询的所有准备条件已经完成，搜索会执行到一下方法：</p>
<p>public Hits search(Query query, int numHits,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int maxHitsPerDup, String dedupField,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String sortField, boolean reverse)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throws IOException&nbsp; </p>
<p>在NutchBean 中的所有查询 方法最终都会转换到这个方法来。需要注意的是，如果是采用分布的查询服务器，则searcher&nbsp; 是&nbsp;DistributedSearch.Client 类型的，否则 类型就是&nbsp; IndexSearcher ；</p>
<p>IndexSearcher&nbsp; 是 Searcher 接口的一个实现 ，这个接口只有两个查询方法：</p>
<p>Hits search(Query query, int numHits,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String dedupField, String sortField, boolean reverse)<br />&nbsp;&nbsp;&nbsp; throws IOException;</p>
<p>&nbsp;String getExplanation(Query query, Hit hit) throws IOException;</p>
<p>继续进入 IndexSearcher&nbsp;&nbsp; ，从NutchBean 传入的 搜索到达&nbsp; 后&nbsp; 对传入的Query 进行分析 ，重新构造成为一个Lucene的 BooleanQuery ，代码如下：</p>
<p>org.apache.lucene.search.BooleanQuery luceneQuery =<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; QueryFilters.filter(query);</p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=12</link>
			<title><![CDATA[第一次Nutch搜索引擎]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Sun,17 Sep 2006 23:47:29 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=12</guid>	
		<description><![CDATA[<p>Nutch&nbsp; 会在初始化的时候广播查询服务器，代码如下：</p>
<p>/** Construct in a named directory. */<br />&nbsp; public NutchBean(File dir) throws IOException {<br />&nbsp;&nbsp;&nbsp; File servers = new File(dir, &quot;search-servers.txt&quot;);<br />&nbsp;&nbsp;&nbsp; if (servers.exists()) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LOG.info(&quot;searching servers in &quot; + servers.getCanonicalPath());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; init(new DistributedSearch.Client(servers));<br />&nbsp;&nbsp;&nbsp; } else {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; init(new File(dir, &quot;index&quot;), new File(dir, &quot;segments&quot;));<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp; }</p>
<p>也就是说 优先查找的文件是 dir 目录下的 search-servers.txt文件 ， 也就是通过 searcher.dir 配置项指向的目录。如果目录下面没有 search-servers.txt 文件，NutchBean 就认为 searcher.dir 指定的内容是索引文件。</p>
<p>DistributedSearch 是一个分布查询处理程序，超大数据量的时候通过这个分布处理程序将极大的获得查询性能提升，过段时间将会针对这个分布处理程序做详细说明。</p>
<p>加载索引的代码就比较容易明白了。</p>
<p>有一点：如果指定的目录下面同时存在 index 和segments两个目录 ，则NutchBean&nbsp; 优先加载index目录 ，segments将会被忽略掉：</p>
<p>if (indexDir.exists()) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LOG.info(&quot;opening merged index in &quot; + indexDir.getCanonicalPath());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; indexSearcher = new IndexSearcher(indexDir.getCanonicalPath());<br />&nbsp;&nbsp;&nbsp; } else {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LOG.info(&quot;opening segment indexes in &quot; + segmentsDir.getCanonicalPath());</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Vector vDirs=new Vector();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; File [] directories = segmentsDir.listFiles();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i = 0; i &lt; segmentsDir.listFiles().length; i++) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; File indexdone = new File(directories[i], IndexSegment.DONE_NAME);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(indexdone.exists() &amp;&amp; indexdone.isFile()) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vDirs.add(directories[i]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; directories = new File[ vDirs.size() ];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i = 0; vDirs.size()&gt;0; i++) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; directories[i]=(File)vDirs.remove(0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; indexSearcher = new IndexSearcher(directories);<br />&nbsp;&nbsp;&nbsp; }</p>
<p>但我没有针对这点做测试 ， 可能 index的性能要比 segments 要好，因为 收JAVA虚拟机最大内存的限制，索引的时候一个minMergeDocs的数量 不会太大 ，merge 以后的索引文件存放在 index 目录下 ，IndexReader 在读入的时候打开的文件数目相对要少， 在IO处理方面可能比较好一些。</p>
<p>我发现不采用分布的时候 使用在NutchBean 里 可以直接调用Lucene 的IndexSearcher 查询索引， 但使用分布查询之后 Lucene的 IndexSearcher 就不能用了。</p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=11</link>
			<title><![CDATA[搜索引擎入口]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Sun,17 Sep 2006 23:25:51 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=11</guid>	
		<description><![CDATA[<p>有好多天没有更新了， 最近实在是忙。一个字：累。</p>
<p>接着上一篇的内容，继续从搜索开始。</p>
<p>public Hits search(Query query, int numHits,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int maxHitsPerSite, String dedupField,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String sortField, boolean reverse)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这是一个搜索请求的入口，关键在于构造Query ，Nutch&nbsp; 默认的搜索查询分析器是采用一元分词的，为了提高查询精度，所以采用分词。分词需要在原始文档索引之前进行一次，经过分词处理后在索引入库。在查询的时候同样也需要分词，这点可以在yahoo的搜索技术文章里找到更详细的说明。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; numHits 翻页使用。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; maxHitsPerSite :来自同一host的页面在搜索结果中的数量</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dedupField ：去除重复的字段</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sortField：排序字段</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reverse：是否采用倒序排列结果集</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 首先说Query ，其他的结果参数比较简单，不作过多说明。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/** Parse a query from a string. */<br />&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;public static Query parse(String queryString) throws IOException {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return fixup(NutchAnalysis.parseQuery(queryString));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这是Nutch的查询分析器代码 ， 将查询条件进行分词处理，此处可以将NutchAnalysis.parseQuery(String input) 的一元分词程序更换为自己的分词算法。返回的 Query&nbsp; 经过封装 ，主要开放 8个组合查询方法，下面，我将对这8个方法进行注解：</p>
<p>1、public void addRequiredTerm(String term) ，该方法的功能是增加一个查询条件 ， 查询的字段是DEFAULT ， 也就是在 BasicQueryFilter 中定义的 FIELDS 数组的 字段 ，效果相当于 AND</p>
<p>2、public void addRequiredTerm(String term, String field)&nbsp; 指定查询字段是 field ， 其功能同上，但field必须被加载，否则字段验证失败。我在第一次接触Nutch 的时候 曾试图修改代码来加载 Field ， 发现其复杂程度超过想象，后来改用插件的方式，竟然很容易就解决了，所以，增加自定义的查询字段，插件是最好的方法。</p>
<p>3、public void addProhibitedTerm(String term) 增加一个查询条件，字段是Default ， 效果相当于 NOT</p>
<p>4、public void addProhibitedTerm(String term, String field)&nbsp; 指定查询字段是field ，其功能同上。</p>
<p>5、public void addRequiredPhrase(String[] terms) ， 增加一个查询条件，相当于AND，数组terms之间的关系是OR</p>
<p>6、public void addRequiredPhrase(String[] terms, String field) ， 指定查询字段是 field，其功能同上</p>
<p>7、public void addProhibitedPhrase(String[] terms) ， 效果相当于NOT，terms之间的关系是 or，既限制搜索结果中不包含 terms中的任何一个。</p>
<p>8、public void addProhibitedPhrase(String[] terms, String field) ， 指定查询字段 field&nbsp; ，其功能同上</p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=9</link>
			<title><![CDATA[Nutch查询服务器]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Fri,08 Sep 2006 22:58:24 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=9</guid>	
		<description><![CDATA[<p>服务器端的启动命令（当前目录是Nutch的安装目录）： bin/nutch server 9999&nbsp; /indexpath</p>
<p>这样会在本机的 9999 端口开启一个监听器并默认的是启动 10个 handle 来接受查询请求。</p>
<p>indexpath是 服务器上索引文件的 物理路径 ，可以是绝对路径，也可以是相对路径，但需要注意能够在当前目录下找得到。</p>
<p>在客户端就是查询端 ，需要两步，一：添加或者修改search-servers.txt ，其内容为：</p>
<p>xxxxxxxxxxxx port</p>
<p>其中xxxxxxxxxxxx&nbsp; 是启动查询server的服务器 ip地址（最好别使用域名或主机名称，除非必要） ；</p>
<p>二：修改 nutch-site.xml </p>
<p>&nbsp;&lt;property&gt;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&lt;name&gt;searcher.dir&lt;/name&gt;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&lt;value&gt;c:\&lt;/value&gt;<br />&nbsp;&lt;/property&gt;</p>
<p>如果没有searcher.dir的配置项，则增加，value 的值是 search-servers.txt 的目录路径。</p>
<p>然后就可以启动了，如果索引没有问题的话 ，查询的时候tomcat 会有如下提示信息：</p>
<p>060908 225520 23 creating new bean<br />060908 225520 23 searching servers in C:\search-servers.txt<br />060908 225520 23 Client adding server 58.215.74.239:9999<br />060908 225520 24 Client connection to 58.215.74.239:9999: starting<br />060908 225520 23 STATS: 1 servers, 17 segments.</p>
<p>这样就表示 查询服务器和客户端都正常工作了，就可以查询到服务器上的数据了。</p>
<p>一下输出信息是我把 searchserver 和tomcat 启动绑到一起的提示信息：</p>
<p>060908 225455 11 parsing file:/C:/program/WEB-INF/classe<br />s/nutch-default.xml<br />060908 225455 11 parsing file:/C:/program/WEB-INF/classe<br />s/nutch-site.xml<br />060908 225455 11 opening segment indexes in C:\serverindex\segments<br />060908 225458 12 Server listener on port 9999: starting<br />060908 225458 13 Server handler on 9999: starting<br />060908 225458 14 Server handler on 9999: starting<br />060908 225458 15 Server handler on 9999: starting<br />060908 225458 16 Server handler on 9999: starting<br />060908 225458 17 Server handler on 9999: starting<br />060908 225458 18 Server handler on 9999: starting<br />060908 225458 19 Server handler on 9999: starting<br />060908 225458 20 Server handler on 9999: starting<br />060908 225458 21 Server handler on 9999: starting<br />060908 225458 22 Server handler on 9999: starting<br />060908 225502 10 Create Host deployer for direct deployment ( non-jmx )<br />060908 225502 10 Starting Coyote HTTP/1.1 on http-80<br />060908 225502 10 JK2: ajp13 listening on /0.0.0.0:8009<br />060908 225502 10 Jk running ID=0 time=0/80&nbsp; config=C:\server\tomcat\conf\jk2.pro<br />perties</p>
<p>这样在集群的时候通过 web.xml 来配置是否需要启动 searchserver</p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=8</link>
			<title><![CDATA[对Nutch 初学者的建议]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Fri,08 Sep 2006 22:45:14 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=8</guid>	
		<description><![CDATA[<p>&nbsp;&nbsp;&nbsp; Nutch 0.7版本是一个比较稳定的版本，而且从 0.7到 0.8 的代码结果转变比较大，相对来说 ， 0.7要比0.8的学习难度小很多。所以我的博客里介绍的Nutch 版本都是 0.7 。</p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=7</link>
			<title><![CDATA[Nutch 的配置文件]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Fri,08 Sep 2006 22:31:53 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=7</guid>	
		<description><![CDATA[<p>&nbsp;&nbsp;&nbsp; Nutch 的配置文件几乎覆盖了Nutch 所有的功能。以前在网上看到过一个关于Nutch-default.XML&nbsp; 配置项解释，地址我没收藏，和本文配合起来看，会更好一些。这里我也不打算对其配置文件中的每一项做解释，如果在下面的解释里找不到想要的内容，请发表评论，我会回复的。</p>
<p>&lt;property&gt;<br />&nbsp; &lt;name&gt;http.max.delays&lt;/name&gt;<br />&nbsp; &lt;value&gt;20&lt;/value&gt;<br />&nbsp; &lt;description&gt;The number of times a thread will delay when trying to<br />&nbsp; fetch a page.&nbsp; Each time it finds that a host is busy, it will wait<br />&nbsp; fetcher.server.delay.&nbsp; After http.max.delays attepts, it will give<br />&nbsp; up on the page for now.&lt;/description&gt;<br />&lt;/property&gt;</p>
<p>爬虫的网络延时线程等待时间，以秒计时 ， 默认的配时间是3秒，视网络状况而定。如果在爬虫运行的时候发现服务器返回了主机忙消息，则等待时间由fetcher.server.delay 决定，所以在网络状况不太好的情况下fetcher.server.delay 也设置稍大一点的值较好，此外还有一个http.timeout 也和网络状况有关系。</p>
<p>&lt;property&gt;<br />&nbsp; &lt;name&gt;http.content.limit&lt;/name&gt;<br />&nbsp; &lt;value&gt;65536&lt;/value&gt;<br />&nbsp; &lt;description&gt;The length limit for downloaded content, in bytes.<br />&nbsp; If this value is nonnegative (&gt;=0), content longer than it will be truncated;<br />&nbsp; otherwise, no truncation at all.<br />&nbsp; &lt;/description&gt;<br />&lt;/property&gt;</p>
<p>描述爬虫抓取的文档内容长度的配置项。原来的值是 65536 ， 也就是说抓取到的一个文档截取 65KB左右，超过部分将被忽略，对于抓取特定内容的搜索引擎需要修改此项，比如XML文档。</p>
<p>&lt;property&gt;<br />&nbsp; &lt;name&gt;db.default.fetch.interval&lt;/name&gt;<br />&nbsp; &lt;value&gt;30&lt;/value&gt;<br />&nbsp; &lt;description&gt;The default number of days between re-fetches of a page.<br />&nbsp; &lt;/description&gt;<br />&lt;/property&gt;</p>
<p>这个功能对定期自动爬取需求的开发有用，设置多少天重新爬一个页面。</p>
<p>&lt;property&gt;<br />&nbsp; &lt;name&gt;fetcher.server.delay&lt;/name&gt;<br />&nbsp; &lt;value&gt;5.0&lt;/value&gt;<br />&nbsp; &lt;description&gt;The number of seconds the fetcher will delay between <br />&nbsp;&nbsp; successive requests to the same server.&lt;/description&gt;<br />&lt;/property&gt;</p>
<p>&lt;property&gt;<br />&nbsp; &lt;name&gt;fetcher.threads.fetch&lt;/name&gt;<br />&nbsp; &lt;value&gt;10&lt;/value&gt;<br />&nbsp; &lt;description&gt;The number of FetcherThreads the fetcher should use.<br />&nbsp;&nbsp;&nbsp; This is also determines the maximum number of requests that are <br />&nbsp;&nbsp;&nbsp; made at once (each FetcherThread handles one connection).&lt;/description&gt;<br />&lt;/property&gt;</p>
<p>&lt;property&gt;<br />&nbsp; &lt;name&gt;fetcher.threads.per.host&lt;/name&gt;<br />&nbsp; &lt;value&gt;1&lt;/value&gt;<br />&nbsp; &lt;description&gt;This number is the maximum number of threads that<br />&nbsp;&nbsp;&nbsp; should be allowed to access a host at one time.&lt;/description&gt;<br />&lt;/property&gt;</p>
<p>&lt;property&gt;<br />&nbsp; &lt;name&gt;fetcher.verbose&lt;/name&gt;<br />&nbsp; &lt;value&gt;false&lt;/value&gt;<br />&nbsp; &lt;description&gt;If true, fetcher will log more verbosely.&lt;/description&gt;<br />&lt;/property&gt;</p>
<p>&nbsp;</p>
<p>这几个是爬虫线程的配置项，看名称就容易理解。</p>
<p>&lt;property&gt;<br />&nbsp; &lt;name&gt;parser.threads.parse&lt;/name&gt;<br />&nbsp; &lt;value&gt;10&lt;/value&gt;<br />&nbsp; &lt;description&gt;Number of ParserThreads ParseSegment should use.&lt;/description&gt;<br />&lt;/property&gt;</p>
<p>解析爬取到的文档线程数， 和爬虫线程对应，因为爬虫主要的处理类是有很多地方使用到了同步，所以此配置项和爬虫线程保持一直对处理有好处。</p>
<p>&lt;property&gt;<br />&nbsp; &lt;name&gt;fs.default.name&lt;/name&gt;<br />&nbsp; &lt;value&gt;local&lt;/value&gt;<br />&nbsp; &lt;description&gt;The name of the default file system.&nbsp; Either the<br />&nbsp; literal string &quot;local&quot; or a host:port for NDFS.&lt;/description&gt;<br />&lt;/property&gt;</p>
<p><br />分布式文件系统 使用的配置项，默认的是&nbsp; local 表示 使用本地文件系统，如果使用 host:port 的形式表示使用分布式文件系统NDFS，此处的文件系统地址是 nameserver ，也就是通过 bin/nutch namenode xxxx启动的 主机地址和端口号。</p>
<p>&lt;property&gt;<br />&nbsp; &lt;name&gt;ndfs.name.dir&lt;/name&gt;<br />&nbsp; &lt;value&gt;/tmp/nutch/ndfs/name&lt;/value&gt;<br />&nbsp; &lt;description&gt;Determines where on the local filesystem the NDFS name node<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; should store the name table.&lt;/description&gt;<br />&lt;/property&gt;</p>
<p>分布式文件系统namenode 使用的 的存放数据的目录 ，Namenode 会使用此项，另外在启动 namenode 或datanode的时候也可以加上 路径作为参数也可以生效。</p>
<p>&lt;property&gt;<br />&nbsp; &lt;name&gt;ndfs.data.dir&lt;/name&gt;<br />&nbsp; &lt;value&gt;/tmp/nutch/ndfs/data&lt;/value&gt;<br />&nbsp; &lt;description&gt;Determines where on the local filesystem an NDFS data node<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; should store its blocks.&lt;/description&gt;<br />&lt;/property&gt;</p>
<p>分布式文件系统ndatanode 使用的 的存放数据的目录 ，datanode 会使用此项，另外在启动 datanode的时候也可以加上 路径作为参数也可以生效。</p>
<p>&lt;property&gt;<br />&nbsp; &lt;name&gt;indexer.max.tokens&lt;/name&gt;<br />&nbsp; &lt;value&gt;10000&lt;/value&gt;<br />&nbsp; &lt;description&gt;<br />&nbsp; The maximum number of tokens that will be indexed for a single field<br />&nbsp; in a document. This limits the amount of memory required for<br />&nbsp; indexing, so that collections with very large files will not crash<br />&nbsp; the indexing process by running out of memory.</p>
<p>&nbsp; Note that this effectively truncates large documents, excluding<br />&nbsp; from the index tokens that occur further in the document. If you<br />&nbsp; know your source documents are large, be sure to set this value<br />&nbsp; high enough to accomodate the expected size. If you set it to<br />&nbsp; Integer.MAX_VALUE, then the only limit is your memory, but you<br />&nbsp; should anticipate an OutOfMemoryError.<br />&nbsp; &lt;/description&gt;<br />&lt;/property&gt;</p>
<p>这个配置项的功能是限制索引的时候每个文档的单个字段最大10000个Tokens，也就是说在采用默认的一元分词的 情况下，最大的文档字数限制是10000，如果采用其他中文非一元分词系统，则索引的单个文档单个字段将会超过10000个，对内存有影响。</p>
<p>&lt;property&gt;<br />&nbsp; &lt;name&gt;indexer.mergeFactor&lt;/name&gt;<br />&nbsp; &lt;value&gt;200&lt;/value&gt;<br />&nbsp; &lt;description&gt;The factor that determines the frequency of Lucene segment<br />&nbsp; merges. This must not be less than 2, higher values increase indexing<br />&nbsp; speed but lead to increased RAM usage, and increase the number of<br />&nbsp; open file handles (which may lead to &quot;Too many open files&quot; errors).<br />&nbsp; NOTE: the &quot;segments&quot; here have nothing to do with Nutch segments, they<br />&nbsp; are a low-level data unit used by Lucene.<br />&nbsp; &lt;/description&gt;<br />&lt;/property&gt;</p>
<p>合并因子，在建立索引的时候用到，表示索引200个文档的时候回写到存储设备。</p>
<p>&lt;property&gt;<br />&nbsp; &lt;name&gt;indexer.minMergeDocs&lt;/name&gt;<br />&nbsp; &lt;value&gt;50&lt;/value&gt;<br />&nbsp; &lt;description&gt;This number determines the minimum number of Lucene<br />&nbsp; Documents buffered in memory between Lucene segment merges. Larger<br />&nbsp; values increase indexing speed and increase RAM usage.<br />&nbsp; &lt;/description&gt;<br />&lt;/property&gt;</p>
<p><br />这个配置项对内存影响巨大，功能是在建立索引的时候最小的合并文档数量，这个值设置太小一个会影响索引速度，另外一个在需要索引的文档数量很大的时候会出现 Too Many Open files 的错误，这个时候需要调整此配置项，有试验表明1000的时候会有比较快的索引速度，但我把此项值调整到10000 ， 索引的时候最高内存占用到1.8G，索引创建速度是25page/sec ， 并且多次索引的时候有一个衰减。不过对查询的相应时间有很大提升，如果内存足够的话修改较大的值比较好。</p>
<p>&lt;property&gt;<br />&nbsp; &lt;name&gt;indexer.maxMergeDocs&lt;/name&gt;<br />&nbsp; &lt;value&gt;50&lt;/value&gt;<br />&nbsp; &lt;description&gt;This number determines the maximum number of Lucene<br />&nbsp; Documents to be merged into a new Lucene segment. Larger values<br />&nbsp; increase indexing speed and reduce the number of Lucene segments,<br />&nbsp; which reduces the number of open file handles; however, this also<br />&nbsp; increases RAM usage during indexing.<br />&nbsp; &lt;/description&gt;<br />&lt;/property&gt;</p>
<p>这个好像不需要设置，因为默认的值是 Integer.MAX_VALUE ， 不会比这个更大了。</p>
<p>&lt;property&gt;<br />&nbsp; &lt;name&gt;searcher.summary.context&lt;/name&gt;<br />&nbsp; &lt;value&gt;5&lt;/value&gt;<br />&nbsp; &lt;description&gt;<br />&nbsp; The number of context terms to display preceding and following<br />&nbsp; matching terms in a hit summary.<br />&nbsp; &lt;/description&gt;<br />&lt;/property&gt;</p>
<p>这个比较有用，在前面的文章里有介绍。</p>
<p>&lt;property&gt;<br />&nbsp; &lt;name&gt;searcher.summary.length&lt;/name&gt;<br />&nbsp; &lt;value&gt;20&lt;/value&gt;<br />&nbsp; &lt;description&gt;<br />&nbsp; The total number of terms to display in a hit summary.<br />&nbsp; &lt;/description&gt;<br />&lt;/property&gt;</p>
<p>在前面的文章里也有介绍。</p>
<p>&nbsp;</p>
<p><br />&lt;property&gt;<br />&nbsp; &lt;name&gt;plugin.folders&lt;/name&gt;<br />&nbsp; &lt;value&gt;plugins&lt;/value&gt;<br />&nbsp; &lt;description&gt;Directories where nutch plugins are located.&nbsp; Each<br />&nbsp; element may be a relative or absolute path.&nbsp; If absolute, it is used<br />&nbsp; as is.&nbsp; If relative, it is searched for on the classpath.&lt;/description&gt;<br />&lt;/property&gt;</p>
<p>&lt;property&gt;<br />&nbsp; &lt;name&gt;plugin.includes&lt;/name&gt;<br />&nbsp; &lt;value&gt;protocol-httpclient|urlfilter-regex|parse-(text|html|rss)|index-more|query-(basic|site|url)&lt;/value&gt;<br />&nbsp; &lt;description&gt;Regular expression naming plugin directory names to<br />&nbsp; include.&nbsp; Any plugin not matching this expression is excluded.&nbsp; By<br />&nbsp; default Nutch includes crawling just HTML and plain text via HTTP,<br />&nbsp; and basic indexing and search plugins.<br />&nbsp; &lt;/description&gt;<br />&lt;/property&gt;</p>
<p>这两个是配置 插件功能 的配置项 ，plugin.folders制定插件加载路径，plugin.includes表示需要加载的插件列表，关于插件后面会专门做介绍。</p>
<p>&nbsp;</p>
<p>&lt;property&gt;<br />&nbsp; &lt;name&gt;parser.character.encoding.default&lt;/name&gt;<br />&nbsp; &lt;value&gt;windows-1252&lt;/value&gt;<br />&nbsp; &lt;description&gt;The character encoding to fall back to when no other information<br />&nbsp; is available&lt;/description&gt;<br />&lt;/property&gt;</p>
<p>解析文档的时候使用的默认编码windows-1252 好像比较少用到的一种编码，我不太熟悉。</p>
<p>&lt;property&gt;<br />&nbsp; &lt;name&gt;parser.html.impl&lt;/name&gt;<br />&nbsp; &lt;value&gt;neko&lt;/value&gt;<br />&nbsp; &lt;description&gt;HTML Parser implementation. Currently the following keywords<br />&nbsp; are recognized: &quot;neko&quot; uses NekoHTML, &quot;tagsoup&quot; uses TagSoup.<br />&nbsp; &lt;/description&gt;<br />&lt;/property&gt;</p>
<p>制定解析HTML文档的时候使用的解析器， NEKO功能比较强大，后面会有专门的文章介绍Neko 从HTML到 TEXT以及html片断的解析等功能做介绍。</p>
<p><br />&lt;property&gt;<br />&nbsp; &lt;name&gt;extension.clustering.hits-to-cluster&lt;/name&gt;<br />&nbsp; &lt;value&gt;100&lt;/value&gt;<br />&nbsp; &lt;description&gt;Number of snippets retrieved for the clustering extension<br />&nbsp; if clustering extension is available and user requested results<br />&nbsp; to be clustered.&lt;/description&gt;<br />&lt;/property&gt;</p>
<p>聚合功能，对搜索结果有聚合需求的应用可能会用到。</p>
<p>&lt;property&gt;<br />&nbsp; &lt;name&gt;extension.ontology.extension-name&lt;/name&gt;<br />&nbsp; &lt;value&gt;&lt;/value&gt;<br />&nbsp; &lt;description&gt;Use the specified online ontology extension. If empty,<br />&nbsp; the first available extension will be used. The &quot;name&quot; here refers to an 'id'<br />&nbsp; attribute of the 'implementation' element in the plugin descriptor XML<br />&nbsp; file.&lt;/description&gt;<br />&lt;/property&gt;</p>
<p><br />人工智能，这个功能在我以后的开发过程中会逐步深入，等我有相关的经验以后在给大家介绍。◎_◎</p>
<p>&lt;property&gt;<br />&nbsp; &lt;name&gt;query.url.boost&lt;/name&gt;<br />&nbsp; &lt;value&gt;4.0&lt;/value&gt;<br />&nbsp; &lt;description&gt; Used as a boost for url field in Lucene query.<br />&nbsp; &lt;/description&gt;<br />&lt;/property&gt;</p>
<p>&lt;property&gt;<br />&nbsp; &lt;name&gt;query.anchor.boost&lt;/name&gt;<br />&nbsp; &lt;value&gt;2.0&lt;/value&gt;<br />&nbsp; &lt;description&gt; Used as a boost for anchor field in Lucene query.<br />&nbsp; &lt;/description&gt;<br />&lt;/property&gt;</p>
<p><br />&lt;property&gt;<br />&nbsp; &lt;name&gt;query.title.boost&lt;/name&gt;<br />&nbsp; &lt;value&gt;1.5&lt;/value&gt;<br />&nbsp; &lt;description&gt; Used as a boost for title field in Lucene query.<br />&nbsp; &lt;/description&gt;<br />&lt;/property&gt;</p>
<p>&lt;property&gt;<br />&nbsp; &lt;name&gt;query.host.boost&lt;/name&gt;<br />&nbsp; &lt;value&gt;2.0&lt;/value&gt;<br />&nbsp; &lt;description&gt; Used as a boost for host field in Lucene query.<br />&nbsp; &lt;/description&gt;<br />&lt;/property&gt;</p>
<p>&lt;property&gt;<br />&nbsp; &lt;name&gt;query.phrase.boost&lt;/name&gt;<br />&nbsp; &lt;value&gt;1.0&lt;/value&gt;<br />&nbsp; &lt;description&gt; Used as a boost for phrase in Lucene query.<br />&nbsp; Multiplied by boost for field phrase is matched in.<br />&nbsp; &lt;/description&gt;<br />&lt;/property&gt;</p>
<p>以上的几个关于搜索结果排序的分值计算因子在以后的搜索结果排序会专门做介绍，这几个项对垂直搜索的用处不太大。</p>
<p>&lt;property&gt;<br />&nbsp; &lt;name&gt;lang.analyze.max.length&lt;/name&gt;<br />&nbsp; &lt;value&gt;2048&lt;/value&gt;<br />&nbsp; &lt;description&gt; The maximum bytes of data to uses to indentify<br />&nbsp; the language (0 means full content analysis).<br />&nbsp; The larger is this value, the better is the analysis, but the<br />&nbsp; slowest it is.<br />&nbsp; &lt;/description&gt;<br />&lt;/property&gt;</p>
<p>和语言有关系，分词的时候会用到，不过我没用过这个配置项。</p>
<p>还有几个重要的配置项在 nutch-site.xml里面配置。</p>
<p>&nbsp;&lt;property&gt;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&lt;name&gt;searcher.dir&lt;/name&gt;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&lt;value&gt;C:\&lt;/value&gt;<br />&nbsp;&lt;/property&gt;<br />可以有两种方式 ，如果指向的目录下面有 search-servers.txt 文件 ，那么优先处理 search-servers.txt文件中的内容 ，并解析其中复合<br />hostname port<br />格式的内容（即分布式查询请求），解析到后就想该服务器发送查询请求，如果没有则查找 segements 目录 ，segments 是本地索引文件。<br />如果两个都没有找到，她就要报错了。<br />&nbsp;search-servers.txt<br />内容很简单&nbsp; 例如：<br />127.0.0.1 9999 <br />不过需要注意的是 ，这个 9999的端口 启动的 是查询服务器&nbsp; ，是用 bin/nutch server 9999 的命令启动的，<br />和 namenode 启动比较相似 ，我当初接触的时候就以为是 namenode 的地址，郁闷的很久。<br />namenode&nbsp; 和 searchserver 结合不太好 ， 没有提供直接从 namenode 到searchserver 的 文件访问接口，需要自己开发，如果大<br />家知道有可以直接从 namenode 到searchserver 的方法或者现成的程序，请告诉我一下，我需要，要是实在找不到，那就没办法了，自己写。<br />我现在从namenode 到 searchserver的方法比较原始，不值得推荐，所以就不作介绍了。</p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=6</link>
			<title><![CDATA[从搜索开始]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Fri,08 Sep 2006 21:26:30 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=6</guid>	
		<description><![CDATA[<p>&nbsp;&nbsp;&nbsp; 这么长时间对Nutch 的使用，使我积累了不少经验，有很多我在网上没有见到过相关的介绍和解释，官方的文档又少的可怜，在我刚开始接触Nutch 的时候，为了查找一个功能是怎么使用的，经常需要浏览很多网站，查找资料，最痛苦的莫过于翻阅大量的英文邮件列表，可怜我的E文又是那么的烂，所以，刚学习使用Nutch 的痛苦只有经历过的人才能够了解到，有鉴于此，在此后的一段时间里，我将通过博客的形式，将我的Nutch使用和开发经验与所有学习和即将学习、使用和即将使用Nutch的网友一起分享。</p>
<p>&nbsp;&nbsp;&nbsp; 这是一个关于Nutch和Lucene的系列，从搜索开始，逐步分解Nutch的本地搜索部分、分布式搜索部分、索引部分、分布式文件系统、网络机器人。希望通过我的这一个系列，能够让需要Nutch的网友对她 有个比较细致的了解。</p>
<p>&nbsp;&nbsp;&nbsp; 另外，给大家推荐一个邮件列表：<a href="http://www.mail-archive.com">http://www.mail-archive.com</a></p>
<p>这个邮件列表给我的帮助很大，有时候遇到障碍的时候都是通过这个邮件列表找到解决办法的。不过内容太多，比较杂，需要仔细发现，她是一个金矿。</p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=4</link>
			<title><![CDATA[数学之美 系列三 — 隐含马尔可夫模型在语言处理中的应用]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[分词]]></category>
			<pubDate>Thu,07 Sep 2006 22:26:01 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=4</guid>	
		<description><![CDATA[<p class="byline-timestamp"><span id="time114523190259377514">2006年4月17日 上午 08:01:00</span></p>
<p>
<script language="javascript" type="text/javascript"> uT(&#8221;time114523190259377514&#8243;); </script>
</p>
<div class="articlebody">
<div style="CLEAR: both">发表者：吴军，Google 研究员<br /><span style="FONT-STYLE: italic"><br />前言：隐含马尔可夫模型是一个数学模型，到目前为之，它一直被认为是实现快速精确的语音识别系统的最成功的方法。复杂的语音识别问题通过隐含马尔可夫模型能非常简单地被表述、解决，让我不由由衷地感叹数学模型之妙。</span>&nbsp;
<p>&nbsp;</p>
<p>自然语言是人类交流信息的工具。很多自然语言处理问题都可以等同于通信系统中的解码问题 &mdash; 一个人根据接收到的信息，去猜测发话人要表达的意思。这其实就象通信中，我们根据接收端收到的信号去分析、理解、还原发送端传送过来的信息。以下该图就表示了一个典型的通信系统：</p>
<p><img style="BORDER-RIGHT: 1px solid; BORDER-TOP: 1px solid; BORDER-LEFT: 1px solid; BORDER-BOTTOM: 1px solid" alt="" src="http://googlechinablog.com/uploaded_images/channel-712509.jpg" border="0" /></p>
<p>其中 s1，s2，s3&hellip;表示信息源发出的信号。o1, o2, o3 &hellip; 是接受器接收到的信号。通信中的解码就是根据接收到的信号 o1, o2, o3 &hellip;还原出发送的信号 s1，s2，s3&hellip;。</p>
<p>其实我们平时在说话时，脑子就是一个信息源。我们的喉咙（声带），空气，就是如电线和光缆般的信道。听众耳朵的就是接收端，而听到的声音就是传送过来的信号。根据声学信号来推测说话者的意思，就是语音识别。这样说来，如果接收端是一台计算机而不是人的话，那么计算机要做的就是语音的自动识别。同样，在计算机中，如果我们要根据接收到的英语信息，推测说话者的汉语意思，就是机器翻译； 如果我们要根据带有拼写错误的语句推测说话者想表达的正确意思，那就是自动纠错。</p>
<p>那么怎么根据接收到的信息来推测说话者想表达的意思呢？我们可以利用叫做&ldquo;<a href="http://www.google.com/search?hl=zh-CN&amp;q=%E9%9A%90%E5%90%AB%E9%A9%AC%E5%B0%94%E5%8F%AF%E5%A4%AB%E6%A8%A1%E5%9E%8B&amp;btnG=Google+%E6%90%9C%E7%B4%A2&amp;lr=" target="_blank">隐含马尔可夫模型</a>&rdquo;（Hidden Markov Model）来解决这些问题。以语音识别为例，当我们观测到语音信号 o1,o2,o3 时，我们要根据这组信号推测出发送的句子 s1,s2,s3。显然，我们应该在所有可能的句子中找最有可能性的一个。用数学语言来描述，就是在已知 o1,o2,o3,&hellip;的情况下，求使得条件概率<br />P (s1,s2,s3,&hellip;|o1,o2,o3&hellip;.) 达到最大值的那个句子 s1,s2,s3,&hellip;</p>
<p>当然，上面的概率不容易直接求出，于是我们可以间接地计算它。利用贝叶斯公式并且省掉一个常数项，可以把上述公式等价变换成</p>
<p>P(o1,o2,o3,&hellip;|s1,s2,s3&hellip;.) * P(s1,s2,s3,&hellip;)<br />其中<br />P(o1,o2,o3,&hellip;|s1,s2,s3&hellip;.) 表示某句话 s1,s2,s3&hellip;被读成 o1,o2,o3,&hellip;的可能性, 而<br />P(s1,s2,s3,&hellip;) 表示字串 s1,s2,s3,&hellip;本身能够成为一个合乎情理的句子的可能性，所以这个公式的意义是用发送信号为 s1,s2,s3&hellip;这个数列的可能性乘以 s1,s2,s3&hellip;本身可以一个句子的可能性，得出概率。</p>
<p>（读者读到这里也许会问，你现在是不是把问题变得更复杂了，因为公式越写越长了。别着急，我们现在就来简化这个问题。）我们在这里做两个假设：</p>
<p>第一，s1,s2,s3,&hellip; 是一个马尔可夫链，也就是说，si 只由 si-1 决定 (详见<a href="http://googlechinablog.com/2006/04/blog-post.html" target="_blank">系列一</a>)；<br />第二， 第 i 时刻的接收信号 oi 只由发送信号 si 决定（又称为独立输出假设, 即 P(o1,o2,o3,&hellip;|s1,s2,s3&hellip;.) = P(o1|s1) * P(o2|s2)*P(o3|s3)&hellip;。<br />那么我们就可以很容易利用算法 <a href="http://www.comp.leeds.ac.uk/roger/HiddenMarkovModels/html_dev/viterbi_algorithm/s2_pg1.html" target="_blank">Viterbi</a> 找出上面式子的最大值，进而找出要识别的句子 s1,s2,s3,&hellip;。</p>
<p>满足上述两个假设的模型就叫隐含马尔可夫模型。我们之所以用&ldquo;隐含&rdquo;这个词，是因为状态 s1,s2,s3,&hellip;是无法直接观测到的。</p>
<p>隐含马尔可夫模型的应用远不只在语音识别中。在上面的公式中，如果我们把 s1,s2,s3,&hellip;当成中文，把 o1,o2,o3,&hellip;当成对应的英文，那么我们就能利用这个模型解决机器翻译问题； 如果我们把 o1,o2,o3,&hellip;当成扫描文字得到的图像特征，就能利用这个模型解决印刷体和手写体的识别。</p>
<p>P (o1,o2,o3,&hellip;|s1,s2,s3&hellip;.) 根据应用的不同而又不同的名称，在语音识别中它被称为&ldquo;声学模型&rdquo; (Acoustic Model)， 在机器翻译中是&ldquo;翻译模型&rdquo; (Translation Model) 而在拼写校正中是&ldquo;纠错模型&rdquo; (Correction Model)。 而P (s1,s2,s3,&hellip;) 就是我们在系列一中提到的语言模型。</p>
<p>在利用隐含马尔可夫模型解决语言处理问题前，先要进行模型的训练。 常用的训练方法由伯姆（Baum）在60年代提出的，并以他的名字命名。隐含马尔可夫模型在处理语言问题早期的成功应用是语音识别。七十年代，当时 IBM 的 <a href="http://www.clsp.jhu.edu/people/jelinek/" target="_blank">Fred Jelinek</a> (贾里尼克) 和卡内基&middot;梅隆大学的 Jim and Janet Baker <a href="http://www.google.com/search?hl=zh-CN&amp;q=Jim+Janet+Baker+Hidden+Markov+Model&amp;btnG=%E6%90%9C%E7%B4%A2&amp;lr=" target="_blank">(贝克夫妇</a>，李开复的师兄师姐) 分别独立地提出用隐含马尔可夫模型来识别语音，语音识别的错误率相比人工智能和模式匹配等方法降低了三倍 (从 30% 到 10%)。 八十年代李开复博士坚持采用隐含马尔可夫模型的框架， 成功地开发了世界上第一个大词汇量连续语音识别系统 Sphinx。</p>
<p>我最早接触到隐含马尔可夫模型是几乎二十年前的事。那时在《随机过程》（清华&ldquo;著名&rdquo;的一门课）里学到这个模型，但当时实在想不出它有什么实际用途。几年后，我在清华跟随王作英教授学习、研究语音识别时，他给了我几十篇文献。 我印象最深的就是贾里尼克和李开复的文章，它们的核心思想就是隐含马尔可夫模型。复杂的语音识别问题居然能如此简单地被表述、解决，我由衷地感叹数学模型之妙。</p>
</div>
</div>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=3</link>
			<title><![CDATA[Lucene 一个比较准确和高效的分词算法]]></title>
			<author>webmaster@xd-tech.com(admin)</author>
			<category><![CDATA[全文检索]]></category>
			<pubDate>Thu,07 Sep 2006 22:17:00 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=3</guid>	
		<description><![CDATA[<p>词库有三十万&nbsp;，加载词库的代码需要改进，索引以后不区分大小写&nbsp;，保存token&nbsp;的位置信息，<br />后面会陆续发布&nbsp;Nutch&nbsp;&nbsp;搜索引擎和Lucene&nbsp;关键代码&nbsp;的&nbsp;解释文章 ,有需要词库的 可以联系。 <a href="http://www.xd-tech.com/blog/mailto:jaddy0302@126.com" _fcksavedurl="mailto:jaddy0302@126.com">jaddy0302@126.com</a></p>
<p>&nbsp;注：以下代码来自 <a href="http://www.mandarintools.com/segmenter.html" _fcksavedurl="http://www.mandarintools.com/segmenter.html">http://www.mandarintools.com/segmenter.html</a>&nbsp;， 本来的代码在使用过程中有一些缺陷，所以我做了一些修改，主要是切分词部分的代码 tokenize()&nbsp;方法。</p>
<p>&nbsp;</p>
<div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<div><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000">&nbsp;com.xdtech.util.lucene;<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;java.lang.</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">;<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;java.io.</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">;<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;java.util.</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">;<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.apache.lucene.analysis.Analyzer;<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.apache.lucene.analysis.Token;<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.apache.lucene.analysis.Tokenizer;<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;java.nio.CharBuffer;<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" /><br /><img id="_249_280_Open_Image" onclick="this.style.display='none'; document.getElementById('_249_280_Open_Text').style.display='none'; document.getElementById('_249_280_Closed_Image').style.display='inline'; document.getElementById('_249_280_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" /><img id="_249_280_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_249_280_Closed_Text').style.display='none'; document.getElementById('_249_280_Open_Image').style.display='inline'; document.getElementById('_249_280_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" /></span><span id="_249_280_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id="_249_280_Open_Text"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">&nbsp;@author:jaddy0302&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;线点科技<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" /></span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" /><br /><img id="_333_20605_Open_Image" onclick="this.style.display='none'; document.getElementById('_333_20605_Open_Text').style.display='none'; document.getElementById('_333_20605_Closed_Image').style.display='inline'; document.getElementById('_333_20605_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" /><img id="_333_20605_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_333_20605_Closed_Text').style.display='none'; document.getElementById('_333_20605_Open_Image').style.display='inline'; document.getElementById('_333_20605_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;XDChineseTokenizer&nbsp;</span><span style="COLOR: #0000ff">extends</span><span style="COLOR: #000000">&nbsp;Tokenizer&nbsp;</span><span id="_333_20605_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_333_20605_Open_Text"><span style="COLOR: #000000">{<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">private&nbsp;Hashtable&nbsp;zhwords;</span><span style="COLOR: #008000"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" /></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">final</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;IO_BUFFER_SIZE&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">256</span><span style="COLOR: #000000">;<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" /><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">final</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">[]&nbsp;ioBuffer&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">[IO_BUFFER_SIZE];<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" /><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;bufferIndex&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" /><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;dataLen&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" /><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;String&nbsp;tokenType&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&quot;&quot;</span><span style="COLOR: #000000">;<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" /><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;List&nbsp;tokenList&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" /><br /><img id="_664_699_Open_Image" onclick="this.style.display='none'; document.getElementById('_664_699_Open_Text').style.display='none'; document.getElementById('_664_699_Closed_Image').style.display='inline'; document.getElementById('_664_699_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" /><img id="_664_699_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_664_699_Closed_Text').style.display='none'; document.getElementById('_664_699_Open_Image').style.display='inline'; document.getElementById('_664_699_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;XDChineseTokenizer(Reader&nbsp;reader)&nbsp;</span><span id="_664_699_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_664_699_Open_Text"><span style="COLOR: #000000">{<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.input&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;reader;<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;TreeMap&nbsp;zhwords;<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;TreeSet&nbsp;csurname,&nbsp;cforeign,&nbsp;cnumbers,&nbsp;cnotname;<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;InputStream&nbsp;worddata&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br /><img id="_862_1543_Open_Image" onclick="this.style.display='none'; document.getElementById('_862_1543_Open_Text').style.display='none'; document.getElementById('_862_1543_Closed_Image').style.display='inline'; document.getElementById('_862_1543_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" /><img id="_862_1543_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_862_1543_Closed_Text').style.display='none'; document.getElementById('_862_1543_Open_Image').style.display='inline'; document.getElementById('_862_1543_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">static</span><span id="_862_1543_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_862_1543_Open_Text"><span style="COLOR: #000000">{<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;csurname&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;TreeSet();<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cforeign&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;TreeSet();<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cnumbers&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;TreeSet();<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cnotname&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;TreeSet();<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zhwords&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;TreeMap();<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loadset(cnumbers,&nbsp;</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">data/snumbers_u8.txt</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">);<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loadset(cforeign,&nbsp;</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">data/sforeign_u8.txt</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">);<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loadset(csurname,&nbsp;</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">data/ssurname_u8.txt</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">);<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loadset(cnotname,&nbsp;</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">data/snotname_u8.txt</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">);<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loadset(cnumbers,&nbsp;</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">data/tnumbers_u8.txt</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">);<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loadset(cforeign,&nbsp;</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">data/tforeign_u8.txt</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">);<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loadset(csurname,&nbsp;</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">data/tsurname_u8.txt</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">);<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loadset(cnotname,&nbsp;</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">data/tnotname_u8.txt</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">);<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;worddata&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;XDChineseTokenizer.</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">.getResourceAsStream(</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">bothlexu8.txt</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">);<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init();<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;String&nbsp;debugencoding;<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" /><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">boolean</span><span style="COLOR: #000000">&nbsp;debug;<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" /><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Char&nbsp;form</span><span style="COLOR: #008000"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" /></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">final</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;TRAD&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">final</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;SIMP&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">final</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;BOTH&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" /><br /><img id="_1744_1839_Open_Image" onclick="this.style.display='none'; document.getElementById('_1744_1839_Open_Text').style.display='none'; document.getElementById('_1744_1839_Closed_Image').style.display='inline'; document.getElementById('_1744_1839_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" /><img id="_1744_1839_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_1744_1839_Closed_Text').style.display='none'; document.getElementById('_1744_1839_Open_Image').style.display='inline'; document.getElementById('_1744_1839_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="_1744_1839_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id="_1744_1839_Open_Text"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;(non-Javadoc)<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@see&nbsp;org.apache.lucene.analysis.TokenStream#next()<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br /><img id="_1884_2167_Open_Image" onclick="this.style.display='none'; document.getElementById('_1884_2167_Open_Text').style.display='none'; document.getElementById('_1884_2167_Closed_Image').style.display='inline'; document.getElementById('_1884_2167_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" /><img id="_1884_2167_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_1884_2167_Closed_Text').style.display='none'; document.getElementById('_1884_2167_Open_Image').style.display='inline'; document.getElementById('_1884_2167_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;Token&nbsp;next()&nbsp;</span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000">&nbsp;IOException&nbsp;</span><span id="_1884_2167_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_1884_2167_Open_Text"><span style="COLOR: #000000">{<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(tokenList&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;tokenList.size()&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tokenize();<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" /><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(tokenList.size()&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" /><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Token&nbsp;token&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(Token)&nbsp;tokenList.get(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tokenList.remove(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;token;<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;init()<br /><img id="_2204_3759_Open_Image" onclick="this.style.display='none'; document.getElementById('_2204_3759_Open_Text').style.display='none'; document.getElementById('_2204_3759_Closed_Image').style.display='inline'; document.getElementById('_2204_3759_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" /><img id="_2204_3759_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_2204_3759_Closed_Text').style.display='none'; document.getElementById('_2204_3759_Open_Image').style.display='inline'; document.getElementById('_2204_3759_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="_2204_3759_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_2204_3759_Open_Text"><span style="COLOR: #000000">{<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;charform;<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">boolean</span><span style="COLOR: #000000">&nbsp;loadwordfile&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">&nbsp;;<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;count&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br /><img id="_2316_2346_Open_Image" onclick="this.style.display='none'; document.getElementById('_2316_2346_Open_Text').style.display='none'; document.getElementById('_2316_2346_Closed_Image').style.display='inline'; document.getElementById('_2316_2346_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" /><img id="_2316_2346_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_2316_2346_Closed_Text').style.display='none'; document.getElementById('_2316_2346_Open_Image').style.display='inline'; document.getElementById('_2316_2346_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">loadwordfile)&nbsp;</span><span id="_2316_2346_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_2316_2346_Open_Text"><span style="COLOR: #000000">{<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" /><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;newword&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br /><img id="_2392_3660_Open_Image" onclick="this.style.display='none'; document.getElementById('_2392_3660_Open_Text').style.display='none'; document.getElementById('_2392_3660_Closed_Image').style.display='inline'; document.getElementById('_2392_3660_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" /><img id="_2392_3660_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_2392_3660_Closed_Text').style.display='none'; document.getElementById('_2392_3660_Open_Image').style.display='inline'; document.getElementById('_2392_3660_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000">&nbsp;</span><span id="_2392_3660_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_2392_3660_Open_Text"><span style="COLOR: #000000">{<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" /><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" /><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BufferedReader&nbsp;in&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;BufferedReader(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;InputStreamReader(worddata,&nbsp;</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">UTF8</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">));<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">开始载入词库:</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">);<br /><img id="_2586_3583_Open_Image" onclick="this.style.display='none'; document.getElementById('_2586_3583_Open_Text').style.display='none'; document.getElementById('_2586_3583_Closed_Image').style.display='inline'; document.getElementById('_2586_3583_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" /><img id="_2586_3583_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_2586_3583_Closed_Text').style.display='none'; document.getElementById('_2586_3583_Open_Image').style.display='inline'; document.getElementById('_2586_3583_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;((newword&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;in.readLine())&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">)&nbsp;</span><span id="_2586_3583_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_2586_3583_Open_Text"><span style="COLOR: #000000">{<br /><img id="_2664_3569_Open_Image" onclick="this.style.display='none'; document.getElementById('_2664_3569_Open_Text').style.display='none'; document.getElementById('_2664_3569_Closed_Image').style.display='inline'; document.getElementById('_2664_3569_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" /><img id="_2664_3569_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_2664_3569_Closed_Text').style.display='none'; document.getElementById('_2664_3569_Open_Image').style.display='inline'; document.getElementById('_2664_3569_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;((newword.indexOf(</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">#</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;(newword.length()&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">))&nbsp;</span><span id="_2664_3569_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_2664_3569_Open_Text"><span style="COLOR: #000000">{<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" /><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zhwords.put(newword.intern(),&nbsp;</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">);<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" /><br /><img id="_2771_2992_Open_Image" onclick="this.style.display='none'; document.getElementById('_2771_2992_Open_Text').style.display='none'; document.getElementById('_2771_2992_Closed_Image').style.display='inline'; document.getElementById('_2771_2992_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" /><img id="_2771_2992_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_2771_2992_Closed_Text').style.display='none'; document.getElementById('_2771_2992_Open_Image').style.display='inline'; document.getElementById('_2771_2992_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(newword.length()&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">)&nbsp;</span><span id="_2771_2992_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_2771_2992_Open_Text"><span style="COLOR: #000000">{<br /><img id="_2865_2970_Open_Image" onclick="this.style.display='none'; document.getElementById('_2865_2970_Open_Text').style.display='none'; document.getElementById('_2865_2970_Closed_Image').style.display='inline'; document.getElementById('_2865_2970_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" /><img id="_2865_2970_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_2865_2970_Closed_Text').style.display='none'; document.getElementById('_2865_2970_Open_Image').style.display='inline'; document.getElementById('_2865_2970_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(zhwords.containsKey(newword.substring(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">).intern())&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">)&nbsp;</span><span id="_2865_2970_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_2865_2970_Open_Text"><span style="COLOR: #000000">{<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zhwords.put(newword.substring(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">).intern(),&nbsp;</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">);<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" /><br /><img id="_3042_3463_Open_Image" onclick="this.style.display='none'; document.getElementById('_3042_3463_Open_Text').style.display='none'; document.getElementById('_3042_3463_Closed_Image').style.display='inline'; document.getElementById('_3042_3463_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" /><img id="_3042_3463_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_3042_3463_Closed_Text').style.display='none'; document.getElementById('_3042_3463_Open_Image').style.display='inline'; document.getElementById('_3042_3463_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(newword.length()&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">)&nbsp;</span><span id="_3042_3463_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_3042_3463_Open_Text"><span style="COLOR: #000000">{<br /><img id="_3136_3241_Open_Image" onclick="this.style.display='none'; document.getElementById('_3136_3241_Open_Text').style.display='none'; document.getElementById('_3136_3241_Closed_Image').style.display='inline'; document.getElementById('_3136_3241_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" /><img id="_3136_3241_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_3136_3241_Closed_Text').style.display='none'; document.getElementById('_3136_3241_Open_Image').style.display='inline'; document.getElementById('_3136_3241_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(zhwords.containsKey(newword.substring(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">).intern())&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">)&nbsp;</span><span id="_3136_3241_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_3136_3241_Open_Text"><span style="COLOR: #000000">{<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zhwords.put(newword.substring(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">).intern(),&nbsp;</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">);<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br /><img id="_3335_3440_Open_Image" onclick="this.style.display='none'; document.getElementById('_3335_3440_Open_Text').style.display='none'; document.getElementById('_3335_3440_Closed_Image').style.display='inline'; document.getElementById('_3335_3440_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" /><img id="_3335_3440_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_3335_3440_Closed_Text').style.display='none'; document.getElementById('_3335_3440_Open_Image').style.display='inline'; document.getElementById('_3335_3440_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(zhwords.containsKey(newword.substring(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">).intern())&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">)&nbsp;</span><span id="_3335_3440_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_3335_3440_Open_Text"><span style="COLOR: #000000">{<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zhwords.put(newword.substring(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">).intern(),&nbsp;</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">);<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" /><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" /><br /><img id="_3512_3549_Open_Image" onclick="this.style.display='none'; document.getElementById('_3512_3549_Open_Text').style.display='none'; document.getElementById('_3512_3549_Closed_Image').style.display='inline'; document.getElementById('_3512_3549_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" /><img id="_3512_3549_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_3512_3549_Closed_Text').style.display='none'; document.getElementById('_3512_3549_Open_Image').style.display='inline'; document.getElementById('_3512_3549_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(count</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">40000</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)&nbsp;</span><span id="_3512_3549_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_3512_3549_Open_Text"><span style="COLOR: #000000">{&nbsp;System.err.print(</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">count</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">);&nbsp;}</span></span><span style="COLOR: #000000"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" /><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" /><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">载入词库完成</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">);<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in.close();<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" /><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br /><img id="_3692_3753_Open_Image" onclick="this.style.display='none'; document.getElementById('_3692_3753_Open_Text').style.display='none'; document.getElementById('_3692_3753_Closed_Image').style.display='inline'; document.getElementById('_3692_3753_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" /><img id="_3692_3753_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_3692_3753_Closed_Text').style.display='none'; document.getElementById('_3692_3753_Open_Image').style.display='inline'; document.getElementById('_3692_3753_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000">&nbsp;(IOException&nbsp;e)&nbsp;</span><span id="_3692_3753_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_3692_3753_Open_Text"><span style="COLOR: #000000">{<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.err.println(</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">IOException:&nbsp;</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">e);<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" /><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" /><br /><img id="_3767_3801_Open_Image" onclick="this.style.display='none'; document.getElementById('_3767_3801_Open_Text').style.display='none'; document.getElementById('_3767_3801_Closed_Image').style.display='inline'; document.getElementById('_3767_3801_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" /><img id="_3767_3801_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_3767_3801_Closed_Text').style.display='none'; document.getElementById('_3767_3801_Open_Image').style.display='inline'; document.getElementById('_3767_3801_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="_3767_3801_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**&nbsp;*/</span><span id="_3767_3801_Open_Text"><span style="COLOR: #008000">/**</span><span style="COLOR: #008000">&nbsp;Load&nbsp;a&nbsp;set&nbsp;of&nbsp;character&nbsp;data&nbsp;</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br /><img id="_3873_4513_Open_Image" onclick="this.style.display='none'; document.getElementById('_3873_4513_Open_Text').style.display='none'; document.getElementById('_3873_4513_Closed_Image').style.display='inline'; document.getElementById('_3873_4513_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" /><img id="_3873_4513_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_3873_4513_Closed_Text').style.display='none'; document.getElementById('_3873_4513_Open_Image').style.display='inline'; document.getElementById('_3873_4513_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;loadset(TreeSet&nbsp;targetset,&nbsp;String&nbsp;sourcefile)&nbsp;</span><span id="_3873_4513_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_3873_4513_Open_Text"><span style="COLOR: #000000">{<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;dataline;<br /><img id="_3912_4380_Open_Image" onclick="this.style.display='none'; document.getElementById('_3912_4380_Open_Text').style.display='none'; document.getElementById('_3912_4380_Closed_Image').style.display='inline'; document.getElementById('_3912_4380_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" /><img id="_3912_4380_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_3912_4380_Closed_Text').style.display='none'; document.getElementById('_3912_4380_Open_Image').style.display='inline'; document.getElementById('_3912_4380_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000">&nbsp;</span><span id="_3912_4380_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_3912_4380_Open_Text"><span style="COLOR: #000000">{<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InputStream&nbsp;setdata&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;XDChineseTokenizer.</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">.getResourceAsStream(sourcefile);<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BufferedReader&nbsp;in&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;BufferedReader(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;InputStreamReader(setdata,&nbsp;</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">UTF-8</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">));<br /><img id="_4154_4346_Open_Image" onclick="this.style.display='none'; document.getElementById('_4154_4346_Open_Text').style.display='none'; document.getElementById('_4154_4346_Closed_Image').style.display='inline'; document.getElementById('_4154_4346_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" /><img id="_4154_4346_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_4154_4346_Closed_Text').style.display='none'; document.getElementById('_4154_4346_Open_Image').style.display='inline'; document.getElementById('_4154_4346_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;((dataline&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;in.readLine())&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">)&nbsp;</span><span id="_4154_4346_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_4154_4346_Open_Text"><span style="COLOR: #000000">{<br /><img id="_4234_4282_Open_Image" onclick="this.style.display='none'; document.getElementById('_4234_4282_Open_Text').style.display='none'; document.getElementById('_4234_4282_Closed_Image').style.display='inline'; document.getElementById('_4234_4282_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" /><img id="_4234_4282_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_4234_4282_Closed_Text').style.display='none'; document.getElementById('_4234_4282_Open_Image').style.display='inline'; document.getElementById('_4234_4282_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;((dataline.indexOf(</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">#</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;(dataline.length()&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">))&nbsp;</span><span id="_4234_4282_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_4234_4282_Open_Text"><span style="COLOR: #000000">{<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">continue</span><span style="COLOR: #000000">;<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;targetset.add(dataline.intern());<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in.close();<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br /><img id="_4410_4506_Open_Image" onclick="this.style.display='none'; document.getElementById('_4410_4506_Open_Text').style.display='none'; document.getElementById('_4410_4506_Closed_Image').style.display='inline'; document.getElementById('_4410_4506_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" /><img id="_4410_4506_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_4410_4506_Closed_Text').style.display='none'; document.getElementById('_4410_4506_Open_Image').style.display='inline'; document.getElementById('_4410_4506_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000">&nbsp;(Exception&nbsp;e)&nbsp;</span><span id="_4410_4506_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_4410_4506_Open_Text"><span style="COLOR: #000000">{<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.err.println(</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">Exception&nbsp;loading&nbsp;data&nbsp;file</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;sourcefile&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;e);<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" /><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" /><br /><img id="_4561_5000_Open_Image" onclick="this.style.display='none'; document.getElementById('_4561_5000_Open_Text').style.display='none'; document.getElementById('_4561_5000_Closed_Image').style.display='inline'; document.getElementById('_4561_5000_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" /><img id="_4561_5000_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_4561_5000_Closed_Text').style.display='none'; document.getElementById('_4561_5000_Open_Image').style.display='inline'; document.getElementById('_4561_5000_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">boolean</span><span style="COLOR: #000000">&nbsp;isNumber(String&nbsp;testword)&nbsp;</span><span id="_4561_5000_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_4561_5000_Open_Text"><span style="COLOR: #000000">{<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">boolean</span><span style="COLOR: #000000">&nbsp;result&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br /><img id="_4646_4808_Open_Image" onclick="this.style.display='none'; document.getElementById('_4646_4808_Open_Text').style.display='none'; document.getElementById('_4646_4808_Closed_Image').style.display='inline'; document.getElementById('_4646_4808_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" /><img id="_4646_4808_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_4646_4808_Closed_Text').style.display='none'; document.getElementById('_4646_4808_Open_Image').style.display='inline'; document.getElementById('_4646_4808_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;testword.length();&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;</span><span id="_4646_4808_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_4646_4808_Open_Text"><span style="COLOR: #000000">{<br /><img id="_4729_4798_Open_Image" onclick="this.style.display='none'; document.getElementById('_4729_4798_Open_Text').style.display='none'; document.getElementById('_4729_4798_Closed_Image').style.display='inline'; document.getElementById('_4729_4798_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" /><img id="_4729_4798_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_4729_4798_Closed_Text').style.display='none'; document.getElementById('_4729_4798_Open_Image').style.display='inline'; document.getElementById('_4729_4798_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(cnumbers.contains(testword.substring(i,&nbsp;i</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">).intern())&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">)&nbsp;</span><span id="_4729_4798_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_4729_4798_Open_Text"><span style="COLOR: #000000">{<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" /><br /><img id="_4830_4970_Open_Image" onclick="this.style.display='none'; document.getElementById('_4830_4970_Open_Text').style.display='none'; document.getElementById('_4830_4970_Closed_Image').style.display='inline'; document.getElementById('_4830_4970_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" /><img id="_4830_4970_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_4830_4970_Closed_Text').style.display='none'; document.getElementById('_4830_4970_Open_Image').style.display='inline'; document.getElementById('_4830_4970_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(debug)&nbsp;</span><span id="_4830_4970_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_4830_4970_Open_Text"><span style="COLOR: #000000">{<br /><img id="_4848_4923_Open_Image" onclick="this.style.display='none'; document.getElementById('_4848_4923_Open_Text').style.display='none'; document.getElementById('_4848_4923_Closed_Image').style.display='inline'; document.getElementById('_4848_4923_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" /><img id="_4848_4923_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_4848_4923_Closed_Text').style.display='none'; document.getElementById('_4848_4923_Open_Image').style.display='inline'; document.getElementById('_4848_4923_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000">&nbsp;</span><span id="_4848_4923_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_4848_4923_Open_Text"><span style="COLOR: #000000">{System.out.println(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;String(testword.getBytes(</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">UTF-8</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">))&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;result);}</span></span><span style="COLOR: #000000"><br /><img id="_4957_4959_Open_Image" onclick="this.style.display='none'; document.getElementById('_4957_4959_Open_Text').style.display='none'; document.getElementById('_4957_4959_Closed_Image').style.display='inline'; document.getElementById('_4957_4959_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" /><img id="_4957_4959_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_4957_4959_Closed_Text').style.display='none'; document.getElementById('_4957_4959_Open_Image').style.display='inline'; document.getElementById('_4957_4959_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000">&nbsp;(Exception&nbsp;a)&nbsp;</span><span id="_4957_4959_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_4957_4959_Open_Text"><span style="COLOR: #000000">{&nbsp;}</span></span><span style="COLOR: #000000">;<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" /><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;result;<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" /><br /><img id="_5052_5329_Open_Image" onclick="this.style.display='none'; document.getElementById('_5052_5329_Open_Text').style.display='none'; document.getElementById('_5052_5329_Closed_Image').style.display='inline'; document.getElementById('_5052_5329_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" /><img id="_5052_5329_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_5052_5329_Closed_Text').style.display='none'; document.getElementById('_5052_5329_Open_Image').style.display='inline'; document.getElementById('_5052_5329_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">boolean</span><span style="COLOR: #000000">&nbsp;isAllForeign(String&nbsp;testword)&nbsp;</span><span id="_5052_5329_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_5052_5329_Open_Text"><span style="COLOR: #000000">{<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">boolean</span><span style="COLOR: #000000">&nbsp;result&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br /><img id="_5137_5299_Open_Image" onclick="this.style.display='none'; document.getElementById('_5137_5299_Open_Text').style.display='none'; document.getElementById('_5137_5299_Closed_Image').style.display='inline'; document.getElementById('_5137_5299_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" /><img id="_5137_5299_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_5137_5299_Closed_Text').style.display='none'; document.getElementById('_5137_5299_Open_Image').style.display='inline'; document.getElementById('_5137_5299_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;testword.length();&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;</span><span id="_5137_5299_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_5137_5299_Open_Text"><span style="COLOR: #000000">{<br /><img id="_5220_5289_Open_Image" onclick="this.style.display='none'; document.getElementById('_5220_5289_Open_Text').style.display='none'; document.getElementById('_5220_5289_Closed_Image').style.display='inline'; document.getElementById('_5220_5289_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" /><img id="_5220_5289_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_5220_5289_Closed_Text').style.display='none'; document.getElementById('_5220_5289_Open_Image').style.display='inline'; document.getElementById('_5220_5289_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(cforeign.contains(testword.substring(i,&nbsp;i</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">).intern())&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">)&nbsp;</span><span id="_5220_5289_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_5220_5289_Open_Text"><span style="COLOR: #000000">{<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" /><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;result;<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" /><br /><img id="_5377_5685_Open_Image" onclick="this.style.display='none'; document.getElementById('_5377_5685_Open_Text').style.display='none'; document.getElementById('_5377_5685_Closed_Image').style.display='inline'; document.getElementById('_5377_5685_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" /><img id="_5377_5685_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_5377_5685_Closed_Text').style.display='none'; document.getElementById('_5377_5685_Open_Image').style.display='inline'; document.getElementById('_5377_5685_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">boolean</span><span style="COLOR: #000000">&nbsp;isNotCJK(String&nbsp;testword)&nbsp;</span><span id="_5377_5685_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_5377_5685_Open_Text"><span style="COLOR: #000000">{<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">boolean</span><span style="COLOR: #000000">&nbsp;result&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br /><img id="_5462_5655_Open_Image" onclick="this.style.display='none'; document.getElementById('_5462_5655_Open_Text').style.display='none'; document.getElementById('_5462_5655_Closed_Image').style.display='inline'; document.getElementById('_5462_5655_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" /><img id="_5462_5655_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_5462_5655_Closed_Text').style.display='none'; document.getElementById('_5462_5655_Open_Image').style.display='inline'; document.getElementById('_5462_5655_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;testword.length();&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;</span><span id="_5462_5655_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_5462_5655_Open_Text"><span style="COLOR: #000000">{<br /><img id="_5576_5645_Open_Image" onclick="this.style.display='none'; document.getElementById('_5576_5645_Open_Text').style.display='none'; document.getElementById('_5576_5645_Closed_Image').style.display='inline'; document.getElementById('_5576_5645_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" /><img id="_5576_5645_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_5576_5645_Closed_Text').style.display='none'; document.getElementById('_5576_5645_Open_Image').style.display='inline'; document.getElementById('_5576_5645_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(Character.UnicodeBlock.of(testword.charAt(i))&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS)&nbsp;</span><span id="_5576_5645_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_5576_5645_Open_Text"><span style="COLOR: #000000">{<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" /><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;result;<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" /><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" /><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" /><br /><img id="_5730_7745_Open_Image" onclick="this.style.display='none'; document.getElementById('_5730_7745_Open_Text').style.display='none'; document.getElementById('_5730_7745_Closed_Image').style.display='inline'; document.getElementById('_5730_7745_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" /><img id="_5730_7745_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_5730_7745_Closed_Text').style.display='none'; document.getElementById('_5730_7745_Open_Image').style.display='inline'; document.getElementById('_5730_7745_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;String&nbsp;stemWord(String&nbsp;word)&nbsp;</span><span id="_5730_7745_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_5730_7745_Open_Text"><span style="COLOR: #000000">{<br /><img id="_5771_5800_Open_Image" onclick="this.style.display='none'; document.getElementById('_5771_5800_Open_Text').style.display='none'; document.getElementById('_5771_5800_Closed_Image').style.display='inline'; document.getElementById('_5771_5800_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" /><img id="_5771_5800_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_5771_5800_Closed_Text').style.display='none'; document.getElementById('_5771_5800_Open_Image').style.display='inline'; document.getElementById('_5771_5800_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String[]&nbsp;prefix&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;String[]&nbsp;</span><span id="_5771_5800_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_5771_5800_Open_Text"><span style="COLOR: #000000">{</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">第</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">副</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">不</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">;<br /><img id="_5842_5991_Open_Image" onclick="this.style.display='none'; document.getElementById('_5842_5991_Open_Text').style.display='none'; document.getElementById('_5842_5991_Closed_Image').style.display='inline'; document.getElementById('_5842_5991_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" /><img id="_5842_5991_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_5842_5991_Closed_Text').style.display='none'; document.getElementById('_5842_5991_Open_Image').style.display='inline'; document.getElementById('_5842_5991_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String[]&nbsp;suffix&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;String[]&nbsp;</span><span id="_5842_5991_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_5842_5991_Open_Text"><span style="COLOR: #000000">{</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">了</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">的</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">地</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">下</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">上</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">中</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">里</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">,<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">到</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">内</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">外</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">们</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">;<br /><img id="_6033_6052_Open_Image" onclick="this.style.display='none'; document.getElementById('_6033_6052_Open_Text').style.display='none'; document.getElementById('_6033_6052_Closed_Image').style.display='inline'; document.getElementById('_6033_6052_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" /><img id="_6033_6052_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_6033_6052_Closed_Text').style.display='none'; document.getElementById('_6033_6052_Open_Image').style.display='inline'; document.getElementById('_6033_6052_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String[]&nbsp;infix&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;String[]&nbsp;</span><span id="_6033_6052_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_6033_6052_Open_Text"><span style="COLOR: #000000">{</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">得</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">不</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">;<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i;<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" /><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringBuffer&nbsp;unstemmed&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;StringBuffer(word);<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" /><br /><img id="_6173_6673_Open_Image" onclick="this.style.display='none'; document.getElementById('_6173_6673_Open_Text').style.display='none'; document.getElementById('_6173_6673_Closed_Image').style.display='inline'; document.getElementById('_6173_6673_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" /><img id="_6173_6673_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_6173_6673_Closed_Text').style.display='none'; document.getElementById('_6173_6673_Open_Image').style.display='inline'; document.getElementById('_6173_6673_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;prefix.length;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;</span><span id="_6173_6673_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_6173_6673_Open_Text"><span style="COLOR: #000000">{<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(unstemmed.substring(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">).equals(prefix[i])&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(zhwords.get(unstemmed.substring(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,&nbsp;unstemmed.length()).intern())&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000"><br /><img id="_6382_6663_Open_Image" onclick="this.style.display='none'; document.getElementById('_6382_6663_Open_Text').style.display='none'; document.getElementById('_6382_6663_Closed_Image').style.display='inline'; document.getElementById('_6382_6663_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" /><img id="_6382_6663_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_6382_6663_Closed_Text').style.display='none'; document.getElementById('_6382_6663_Open_Image').style.display='inline'; document.getElementById('_6382_6663_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unstemmed.length()&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">))&nbsp;</span><span id="_6382_6663_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_6382_6663_Open_Text"><span style="COLOR: #000000">{<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">Stemmed&nbsp;prefix</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">);<br /><img id="_6458_6536_Open_Image" onclick="this.style.display='none'; document.getElementById('_6458_6536_Open_Text').style.display='none'; document.getElementById('_6458_6536_Closed_Image').style.display='inline'; document.getElementById('_6458_6536_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" /><img id="_6458_6536_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_6458_6536_Closed_Text').style.display='none'; document.getElementById('_6458_6536_Open_Image').style.display='inline'; document.getElementById('_6458_6536_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" _fcksave
