﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-搜索引擎 </title><link>http://www.blogjava.net/xinyi309/</link><description>在搜索的天空下振翅翱翔 
</description><language>zh-cn</language><lastBuildDate>Sun, 12 Apr 2026 07:54:43 GMT</lastBuildDate><pubDate>Sun, 12 Apr 2026 07:54:43 GMT</pubDate><ttl>60</ttl><item><title>（转）四条黄金忠告</title><link>http://www.blogjava.net/xinyi309/archive/2006/03/19/36021.html</link><dc:creator>Search Engine </dc:creator><author>Search Engine </author><pubDate>Sun, 19 Mar 2006 02:56:00 GMT</pubDate><guid>http://www.blogjava.net/xinyi309/archive/2006/03/19/36021.html</guid><wfw:comment>http://www.blogjava.net/xinyi309/comments/36021.html</wfw:comment><comments>http://www.blogjava.net/xinyi309/archive/2006/03/19/36021.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xinyi309/comments/commentRss/36021.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xinyi309/services/trackbacks/36021.html</trackback:ping><description><![CDATA[
		<font size="2">Steven Weinberg：四条黄金忠告<br />　　　　<br />Steven Weinberg 现在得克萨斯大学物理系。本文以他 2003年6月在麦克基尔大学科学大会上的讲话为基础。<br />　　　　<br />　　　　当我得到大学学位的时候 － 那是百八十年前的事了 －物理文献在我眼里就象一个未经探索的汪洋大海，我必须在勘测了它的每一个部分之后才能开始自己的研究。做任何事情之前怎么能不先了解所有已经做过了的工作呢？万幸的是，在我做研究生的第一年，我碰到了一些资深的物理学家，他们不顾我忧心忡忡的反对，坚持我应该开始进行研究，而在研究的过程中学习所需的东西。这可是生死悠关的事。我惊讶地发现他们的意见是可行的。我设法很快就拿到了一个博士学位 －虽然我拿到博士学位时对物理学还几乎是一无所知。不过，我的确得到了一个很大的教益：<br /><br />没有人了解所有的知识，你也不必。<br />~~~~~~~~~~~~~~~~~~~~~~~~~~~<br /><br />　　　　另一个忠告就是，如果继续用我的海洋学的比喻的话，当你在大海中搏击而不是沉没时，应该到波涛汹涌的地方去。19世纪60年代末，我在麻省理工大学教书时，一个学生找我说，他想去做广义相对论领域的研究，而不愿意做我所在的领域－基本粒子物理学－方向的研究，原因是前者的原理已经很清楚，而后者在他看来则是一团乱麻。而在我看来这正是做相反决定的绝好理由。粒子物理学是一个还可以做创造性工作的领域。它在那个时候的确是乱麻一团，但是，从那时起，许多理论物理学家、试验物理学家的工作把这团乱麻梳理出来，将所有的（嗯，几乎所有的）知识纳入一个叫做标准模型的美丽的理论之中。我的忠告是：<br /><br />到混乱的地方去，那里才是行动所在的地方。<br />~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br />　　　　<br />　　　　我的第三个忠告可能是最难被接受的。这就是要原谅自己虚掷时光。要求学生们解决的问题都是教授们知道可以得到解决的问题（除非教授非常地残酷）。而且，这些问题在科学上是否重要是无关紧要的，－必须解决他们以通过考试。但是在现实生活中，知道哪些问题重要是非常困难的，而且在历史某一特定时刻你根本无从知道某个问题是否有解。二十世纪初，几个重要的物理学家，包括 Lorentz 和 Abraham, 想创立一种电子理论。部分原因是为了理解为什么探测地球相对以太运动的所有尝试都失败了。我们现在知道，他们研究的问题不对。在当时，没有人能够创立一个成功的电子理论，因为量子力学尚未发现。需要到1905年，天才的爱因斯坦认识到正确的问题是运动在时间空间测量上的效应。沿着这条路线，他创立了相对论。因为你总也不能肯定哪个才是要研究的正确问题，你在实验室里，在书桌前的大部分时间是会虚掷的。<br /><br />如果你想要有创造性，你就必须习惯于大量时间不是创造性的，习惯于在科学知识的海洋上停滞不前。<br />~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br />　　　　<br />　　　　最后，学一点科学史，起码你所研究的学科的历史。至少学习科学史可能在你自己的科学研究中有点用。比如，科学家会不时因相信从培根到库恩、玻普这些哲学家所提出的过分简化的科学模型而受到桎梏。<br /><br />科学史的知识是科学哲学的最好解毒剂。<br />~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br />　　　　<br />　　　　更重要的是，科学史的知识可以使你觉得自己的工作更有意义。作为一个科学家，你很可能不会太富裕，你的朋友和亲人可能也不理解你正在做的事情。而如果你研究的是象基本粒子物理学这样的领域，你甚至没有是在从事一种马上就有用的工作所带来的满足。但是，认识到你进行的科学工作是历史的一部分则可以给你带来极大的满足。<br />　　　　<br />　　　　看看100年前，1903年。谁是1903年大英帝国的首相、谁是1903年美利坚合众国的总统在现在看来有多重要呢？真正凸现出重要性的是 1903年Ernest Rutherford 和Frederick Soddy 在Mxxxxll 大学揭示了放射性的本质。这一工作（当然！）有实际的应用，但更加重要的是其文化含义。对放射性的理解使物理学家能够解释为什么几百万年以后太阳和地心仍是滚烫的。这样，就清除了许多地质学家和古生物学家认为地球和太阳存在了很长年代的最后一个科学上的障碍。从此以后，基督教徒和犹太教徒就不得不或者放弃圣经的直接真理性或者放弃理性。这只是从加利略到牛顿、达尔文，直到现在削弱宗教教条主义桎梏的一系列步伐中的一步。只要读读今天的任何一张报纸，你都会知道这一工作还没有完成。但是，这是一个文明化的工作，对这一工作科学家是可以感到骄傲的。</font>
		<br />
<img src ="http://www.blogjava.net/xinyi309/aggbug/36021.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xinyi309/" target="_blank">Search Engine </a> 2006-03-19 10:56 <a href="http://www.blogjava.net/xinyi309/archive/2006/03/19/36021.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>（转）做科研应该养成的好习惯 </title><link>http://www.blogjava.net/xinyi309/archive/2006/03/19/36019.html</link><dc:creator>Search Engine </dc:creator><author>Search Engine </author><pubDate>Sun, 19 Mar 2006 02:29:00 GMT</pubDate><guid>http://www.blogjava.net/xinyi309/archive/2006/03/19/36019.html</guid><wfw:comment>http://www.blogjava.net/xinyi309/comments/36019.html</wfw:comment><comments>http://www.blogjava.net/xinyi309/archive/2006/03/19/36019.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xinyi309/comments/commentRss/36019.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xinyi309/services/trackbacks/36019.html</trackback:ping><description><![CDATA[
		<font size="2">1.思考的习惯.大多数的人没有这种习惯,或是只在实验室的时候思考.可是很多的有创造性的idea是在空闲的时候想到的.<br /><br />2.乐观的习惯.有一些人是天生的乐天派,一些小事可以让他忘记很多的烦恼.做试验的时候有时侯会出现意想不到的困难,乐观是我们继续前进的动力之一.<br /><br />3.持之以恒的习惯.一些好的小的事情多坚持几次,就形成了好的习惯.<br /><br />4.交朋友的习惯.多交一些朋友,很多原本很困难的事情会因为朋友的帮助迎刃而解,其实交朋友只要遵循一定的原则就可以了,比如说在别人有困难的时候伸出援助之手,在实验室的一些小事上多帮助别人,多与人交流,心胸尽量开阔一些,请别人吃一下饭之类.<br /><br />5.创新的习惯.很多人没有这种习惯,总是认为别人是如何如何了不起,平时看书,看文献也是我们应该认识到别人方法的优点与缺点,找准突破口,创新也不是很难的事情,哪怕是一点点的改进呢.<br /><br />6.找到学科前沿的习惯.找一片篇最近发表的好文献仔细研读,根据参考文献找到这方面研究的前前后后,不难找到别人是如何作科研的和现在的难题之所在,别人解决不了的关键问题就是学科的前沿.<br />  所有的习惯不是一次就能形成的,正如富兰克林所做的,一段时间内只注意养成一个好的习惯,当然过程有时候很痛苦,很难坚持.希望大家成功,实现自己的梦想!</font>
		<br />
<img src ="http://www.blogjava.net/xinyi309/aggbug/36019.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xinyi309/" target="_blank">Search Engine </a> 2006-03-19 10:29 <a href="http://www.blogjava.net/xinyi309/archive/2006/03/19/36019.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Nutch-开源搜索引擎</title><link>http://www.blogjava.net/xinyi309/archive/2005/12/21/24988.html</link><dc:creator>Search Engine </dc:creator><author>Search Engine </author><pubDate>Wed, 21 Dec 2005 11:57:00 GMT</pubDate><guid>http://www.blogjava.net/xinyi309/archive/2005/12/21/24988.html</guid><wfw:comment>http://www.blogjava.net/xinyi309/comments/24988.html</wfw:comment><comments>http://www.blogjava.net/xinyi309/archive/2005/12/21/24988.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/xinyi309/comments/commentRss/24988.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xinyi309/services/trackbacks/24988.html</trackback:ping><description><![CDATA[1.介绍<br />nutch是一个完全开源的搜索引擎包,它的效率可以和商业搜索引擎相媲美.作为一个研究平台,nutch有开放灵活的架构,用户可以制定个性化的搜索引擎.nutch的建立目的是增加web搜索的透明性.<br />2.架构<br />nutch有高质量,模块化的架构特点允许使用插件来进行,media-type解析,html分析,数据检索协议和查询.有四个主要的模块:<br />searcher:<br />给一个查询,必需快速的找到最小的相关结果子集,然后呈现他们.发现一个比较大的相关子集工作是建立一个文档集的倒排索引,排序以产生最相关的文档.<br />indexer:<br />创建倒排索引,使用lucene存储倒排索引.<br />数据库:<br />为索引存储文档内容,以及为搜索存储摘要.伴随着像文档的链接结构这样的信息.<br />Fetcher:<br />请求web页面,解析他们,抽取链接.<br /><br /><br /><img src ="http://www.blogjava.net/xinyi309/aggbug/24988.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xinyi309/" target="_blank">Search Engine </a> 2005-12-21 19:57 <a href="http://www.blogjava.net/xinyi309/archive/2005/12/21/24988.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>google 的PR算法 </title><link>http://www.blogjava.net/xinyi309/archive/2005/11/12/19447.html</link><dc:creator>Search Engine </dc:creator><author>Search Engine </author><pubDate>Sat, 12 Nov 2005 02:43:00 GMT</pubDate><guid>http://www.blogjava.net/xinyi309/archive/2005/11/12/19447.html</guid><wfw:comment>http://www.blogjava.net/xinyi309/comments/19447.html</wfw:comment><comments>http://www.blogjava.net/xinyi309/archive/2005/11/12/19447.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/xinyi309/comments/commentRss/19447.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xinyi309/services/trackbacks/19447.html</trackback:ping><description><![CDATA[此算法被用作googlePR算法的一部分<BR><BR>假设一个概率q：为用户进入一个随机抽取的网页的概率 （取值为0.15）<BR><BR>1-q： 为用户进入当前网页后点当前网页超链接的概率<BR><BR>进一步假设用户不回溯先前访问的网页，这个过程可以通过构造马尔可夫链来实现。于是每个访问的网页的概率就可以算出来。<BR><BR>设C（a）为a网页包含的超链接数量，也就是outing link .<BR><BR>设p1&nbsp;&nbsp;到pn&nbsp;&nbsp;为指向网页a的网页标识 。<BR><BR>于是网页a的PR值为：<BR><BR>PR（a）=q+ (1-q){ 西格玛i从1到n [PR(Pi)/C(Pi)] } <BR><BR>通过公式可以看出C(Pi)的值是已知的，也就是说前人已经算好了 。&nbsp;&nbsp;<BR><BR>网页的PR值作用是：Crawling可以根据网页的PR值去抓优质的网页。<BR><BR>所以可以看出网页设计者应该设计描述性强的网页标题，头信息，原数据，和好的超链接。<BR><BR>这是我翻译的一篇文献的一部分，希望能给大家提供一些帮助。 <BR><!-- the post be hidden --><img src ="http://www.blogjava.net/xinyi309/aggbug/19447.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xinyi309/" target="_blank">Search Engine </a> 2005-11-12 10:43 <a href="http://www.blogjava.net/xinyi309/archive/2005/11/12/19447.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转载 lucene 二 </title><link>http://www.blogjava.net/xinyi309/archive/2005/11/10/19083.html</link><dc:creator>Search Engine </dc:creator><author>Search Engine </author><pubDate>Thu, 10 Nov 2005 00:45:00 GMT</pubDate><guid>http://www.blogjava.net/xinyi309/archive/2005/11/10/19083.html</guid><wfw:comment>http://www.blogjava.net/xinyi309/comments/19083.html</wfw:comment><comments>http://www.blogjava.net/xinyi309/archive/2005/11/10/19083.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xinyi309/comments/commentRss/19083.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xinyi309/services/trackbacks/19083.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Lucene建立Index的过程: 1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 抽取文本. 比如将PDF以及Word中的内容以纯文本的形式提取出来.Lucene所支持的类型主要为String,为了方便同时也支持Date 以及Reader.其实如果使用这两个类型lucene会自动进行类型转换. 2.&nbsp;&nbsp;&nbsp;&nbs...&nbsp;&nbsp;<a href='http://www.blogjava.net/xinyi309/archive/2005/11/10/19083.html'>阅读全文</a><img src ="http://www.blogjava.net/xinyi309/aggbug/19083.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xinyi309/" target="_blank">Search Engine </a> 2005-11-10 08:45 <a href="http://www.blogjava.net/xinyi309/archive/2005/11/10/19083.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转载lucene 一</title><link>http://www.blogjava.net/xinyi309/archive/2005/11/10/19082.html</link><dc:creator>Search Engine </dc:creator><author>Search Engine </author><pubDate>Thu, 10 Nov 2005 00:43:00 GMT</pubDate><guid>http://www.blogjava.net/xinyi309/archive/2005/11/10/19082.html</guid><wfw:comment>http://www.blogjava.net/xinyi309/comments/19082.html</wfw:comment><comments>http://www.blogjava.net/xinyi309/archive/2005/11/10/19082.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xinyi309/comments/commentRss/19082.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xinyi309/services/trackbacks/19082.html</trackback:ping><description><![CDATA[<TABLE class=contentpaneopen>
<TBODY>
<TR>
<TD class=contentheading width="100%">Lucene.Net 系列一 </TD>
<TD class=buttonheading align=right width="100%"><A title=PDF文档 href="javascript:void window.open('http://www.alphatom.com/index2.php?option=com_content&amp;do_pdf=1&amp;id=115', 'win2', 'status=no,toolbar=no,scrollbars=yes,titlebar=no,menubar=no,resizable=yes,width=640,height=480,directories=no,location=no');"><IMG alt=PDF文档 src="http://www.alphatom.com/images/M_images/pdf_button.png" align=middle border=0 name=image><FONT color=#008000> </FONT></A></TD>
<TD class=buttonheading align=right width="100%"><A title=打印 href="javascript:void window.open('http://www.alphatom.com/index2.php?option=com_content&amp;task=view&amp;id=115&amp;Itemid=69&amp;pop=1&amp;page=0', 'win2', 'status=no,toolbar=no,scrollbars=yes,titlebar=no,menubar=no,resizable=yes,width=640,height=480,directories=no,location=no');"><FONT color=#008000><IMG alt=打印 src="http://www.alphatom.com/images/M_images/printButton.png" align=middle border=0 name=image> </FONT></A></TD>
<TD class=buttonheading align=right width="100%"><A title=E-mail href="javascript:void window.open('http://www.alphatom.com/index2.php?option=com_content&amp;task=emailform&amp;id=115', 'win2', 'status=no,toolbar=no,scrollbars=yes,titlebar=no,menubar=no,resizable=yes,width=400,height=250,directories=no,location=no');"><FONT color=#008000><IMG alt=E-mail src="http://www.alphatom.com/images/M_images/emailButton.png" align=middle border=0 name=image> </FONT></A></TD></TR></TBODY></TABLE>
<TABLE class=contentpaneopen>
<TBODY>
<TR>
<TD vAlign=top align=left width="70%" colSpan=2><SPAN class=small><FONT color=#3366c0>作者 idior </FONT></SPAN>&nbsp;&nbsp; </TD></TR>
<TR>
<TD class=createdate vAlign=top colSpan=2>2005-03-16 22:36 </TD></TR>
<TR>
<TD vAlign=top colSpan=2>
<P>本文介绍了什么是Lucene,Lucene能做什么.</P>
<P>如何从一个文件夹下的所有txt文件中查找特定的词?</P>
<P>本文将围绕该个实例介绍了lucene.net的索引的建立以及如何针对索引进行搜索.最后还将给出源代码供大家学习.</P><STRONG>
<P><A href="http://www.alphatom.com/component/option,com_docman/task,doc_download/gid,5/lang,/" target=_blank><FONT face=Verdana color=#008000>源代码下载</FONT></A></P></STRONG>
<P><STRONG>What’s Lucene</STRONG><BR>Lucene是一个信息检索的函数库(Library),利用它你可以为你的应用加上索引和搜索的功能.</P>
<P>Lucene的使用者不需要深入了解有关全文检索的知识,仅仅学会使用库中的一个类,你就为你的应用实现全文检索的功能.</P>
<P>不过千万别以为Lucene是一个象google那样的搜索引擎,Lucene甚至不是一个应用程序,它仅仅是一个工具,一个Library.你也可以把它理解为一个将索引,搜索功能封装的很好的一套简单易用的API.利用这套API你可以做很多有关搜索的事情,而且很方便.</P>
<P><STRONG>What Can Lucene Do</STRONG></P>
<P>Lucene可以对任何的数据做索引和搜索. Lucene不管数据源是什么格式,只要它能被转化为文字的形式,就可以被Lucene所分析利用.也就是说不管是MS word, Html ,pdf还是其他什么形式的文件只要你可以从中抽取出文字形式的内容就可以被Lucene所用.你就可以用Lucene对它们进行索引以及搜索.</P>
<P><STRONG>How To Use Lucene --- A Simple Example<BR></STRONG>示例介绍:</P>
<P>为作为输入参数的文件夹下的所有txt类型的文件做索引,做好的索引文件放入index文件夹.</P>
<P>然后在索引的基础上对文件进行全文搜索.</P><STRONG>1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 建立索引<BR></STRONG><SPAN class=code><STRONG><FONT face="Courier New" color=#3366ff>IndexWriter writer = new IndexWriter("index", new StandardAnalyzer(), true);<BR>IndexDocs(writer, new System.IO.FileInfo(args[0]));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>writer.Optimize();<BR>writer.Close();</FONT></STRONG></SPAN> 
<P>IndexWriter是对索引进行写操作的一个类,利用它可以创建一个索引对象然后往其中添加文件.需要注意它并不是唯一可以修改索引的类.在索引建好后利用其他类还可以对其进行修改.</P>
<P>构造函数第一个参数是建立的索引所要放的文件夹的名字.第二个参数是一个分析对象,主要用于从文本中抽取那些需要建立索引的内容,把不需要参与建索引的文本内容去掉.比如去掉一些a the之类的常用词,还有决定是否大小写敏感.不同的选项通过指定不同的分析对象控制.第三个参数用于确定是否覆盖原有索引的.</P>
<P>第二步就是利用这个writer往索引中添加文件.具体后面再说.</P>
<P>第三步进行优化.</P>
<P>第四步关闭writer.</P>
<P>&nbsp;</P>
<P>下面具体看看第二步:</P>&nbsp;&nbsp;&nbsp;<FONT color=#3366ff><STRONG><FONT face="Courier New"><SPAN class=code>public static void IndexDirectory(IndexWriter writer, FileInfo file)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (Directory.Exists(file.FullName))<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;&nbsp;&nbsp; String[] files = Directory.GetFileSystemEntries(file.FullName);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // an IO error could occur<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (files != null)<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; files.Length; i++)<BR>&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; IndexDirectory(writer, new FileInfo(files[i]));&nbsp; //这里是一个递归</SPAN><BR></FONT></STRONG></FONT><SPAN class=code><FONT face="Courier New" color=#3366ff><STRONG>&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; }<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; else if (file.Extension == ".txt")<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;&nbsp;&nbsp; IndexFile(file, writer);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR></STRONG></FONT></SPAN>
<P>&nbsp;</P>
<P><SPAN class=code><FONT face="Courier New" color=#3366ff><STRONG>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private static void IndexFile(FileInfo file, IndexWriter writer)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.Out.WriteLine("adding " + file);<BR>&nbsp;&nbsp;&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; {<BR>&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;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doc.Add(Field.Keyword("filename", file.FullName));</STRONG></FONT></SPAN></P>
<P><SPAN class=code><FONT face="Courier New" color=#3366ff><STRONG>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doc.Add(Field.Text("contents", new StreamReader(file.FullName)));</STRONG></FONT></SPAN></P>
<P><SPAN class=code><STRONG><FONT face="Courier New" color=#3366ff>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writer.AddDocument(doc);<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; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (FileNotFoundException fnfe)<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;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR></FONT></STRONG></SPAN><SPAN class=code><STRONG><FONT face="Courier New" color=#3366ff>&nbsp;&nbsp;&nbsp;&nbsp; }<BR></FONT></STRONG></SPAN></P>
<P>主要就是两个函数一个用于处理文件夹(不是为文件夹建立索引),一个用于真正为文件建立索引.</P>
<P>因此主要集中看一下IndexFile这个方法.首先建立Document对象,然后为Document对象添加一些属性Field.你可以把Document对象看成是虚拟文件,将来将从此获取信息.而Field则看成是描述此虚拟文件的元数据(metadata).</P>
<P>其中Field包括四个类型:</P>
<TABLE cellSpacing=0 cellPadding=0 border=1>
<TBODY>
<TR>
<TD width=91>
<P>Keywork<BR></P></TD>
<TD width=477>该类型的数据将不被分析,而会被索引并保存保存在索引中.<BR></TD></TR>
<TR>
<TD width=91>UnIndexed<BR></TD>
<TD width=477>该类型的数据不会被分析也不会被索引,但是会保存在索引.<BR></TD></TR>
<TR>
<TD width=91>UnStored<BR></TD>
<TD width=477>和UnIndexed刚好相反,被分析被索引,但是不被保存.<BR></TD></TR>
<TR>
<TD width=91>Text<BR></TD>
<TD width=477>和UnStrored类似.如果值的类型为string还会被保存.如果值的类型Reader就不会被保存和UnStored一样.<BR></TD></TR></TBODY></TABLE>
<P>&nbsp;</P>
<P>最后将每一个Document添加到索引当中.</P>
<P>需要注意的是索引不仅可以建立在文件系统上,也可以建立在内存中.</P>
<P>例如</P>
<P><SPAN class=code><STRONG><FONT face="Courier New" color=#3366ff>IndexWriter writer = new IndexWriter("index", new StandardAnalyzer(), true);</FONT></STRONG></SPAN></P>在第一个参数不是指定文件夹的名字而是使用Directory对象,并使用它的子类RAMDirectory,就可以将索引建立在内存当中.<BR><STRONG>
<P>&nbsp;</P></STRONG>
<P><STRONG>2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </STRONG><STRONG>对索引进行搜索</STRONG></P><STRONG><FONT color=#3366ff><FONT face="Courier New"><SPAN class=code>IndexSearcher indexSearcher= new IndexSearcher(indexDir);<BR>Query query = QueryParser.Parse(queryString, "contents",new StandardAnalyzer());<BR>Hits hits = indexSearcher.Search(query);</SPAN><BR></FONT></FONT></STRONG>
<P>&nbsp;第一步利用IndexSearcher打开索引文件用于后面搜索,其中的参数是索引文件的路径.</P>
<P>第二步使用QueryParser将可读性较好的查询语句(比如查询的词lucene ,以及一些高级方式lucene AND .net)转化为Lucene内部使用的查询对象.</P>
<P>第三步执行搜索.并将结果返回到hits集合.需要注意的是Lucene并不是一次将所有的结果放入hits中而是采取一次放一部分的方式.出于空间考虑.</P></TD></TR></TBODY></TABLE><img src ="http://www.blogjava.net/xinyi309/aggbug/19082.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xinyi309/" target="_blank">Search Engine </a> 2005-11-10 08:43 <a href="http://www.blogjava.net/xinyi309/archive/2005/11/10/19082.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>索引技术</title><link>http://www.blogjava.net/xinyi309/archive/2005/11/09/19051.html</link><dc:creator>Search Engine </dc:creator><author>Search Engine </author><pubDate>Wed, 09 Nov 2005 13:27:00 GMT</pubDate><guid>http://www.blogjava.net/xinyi309/archive/2005/11/09/19051.html</guid><wfw:comment>http://www.blogjava.net/xinyi309/comments/19051.html</wfw:comment><comments>http://www.blogjava.net/xinyi309/archive/2005/11/09/19051.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/xinyi309/comments/commentRss/19051.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xinyi309/services/trackbacks/19051.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 当文本信息库的容量很大时，如果要快速有效的获取文本，那么就需要使用特定的索引技术，一种简单而且常用的文本索引结构是倒排文件。如果搜索过程是以简单的单词匹配实施的，那么基于倒排文件的索引结构就能满足这回总需求。这种基于单词匹配的查询方式在目前的信息获取系统中用得比较普遍。<BR>&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; 一个典型的倒排文件由如下几部分组成：<BR><BR>（1）一个包含信息库中的文本中所有不同单词（也叫作词汇表）的向量；<BR><BR>（2）对于词汇表中的每个单词，有一种包含这个单词的所有文档（用文档号来标识）组成的列表。每个列表中的文档根据文档号的大小升序排列。查询执行的时间与访问索引所需要的时间密切相关。 <img src ="http://www.blogjava.net/xinyi309/aggbug/19051.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xinyi309/" target="_blank">Search Engine </a> 2005-11-09 21:27 <a href="http://www.blogjava.net/xinyi309/archive/2005/11/09/19051.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>