﻿<?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/category/8631.html</link><description>在搜索的天空下振翅翱翔 
</description><language>zh-cn</language><lastBuildDate>Thu, 01 Mar 2007 02:35:21 GMT</lastBuildDate><pubDate>Thu, 01 Mar 2007 02:35:21 GMT</pubDate><ttl>60</ttl><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>0</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>