日期:2014-05-19  浏览次数:20704 次

网上找的html文件建立搜索源代码、文档说明,调试出错,那位大侠帮看看
using   System;
using   System.Collections.Generic;
using   System.Text;
using   System.IO;
using   System.Text.RegularExpressions;
using   Lucene.Net.Analysis.Standard;
using   Lucene.Net.Documents;
using   Lucene.Net.Index;
/*
  DotLucene搜索引擎Demo之:创建索引  
DotLucene的官方网站这样介绍:DotLucene是一个专门为NET设计的功能强大的搜索引擎!他上面也有一个在线demo,搜索3.5GB的文本数据所花费的时间在0.1秒左右!大家可以点这里测试。我也记得在我的一个网站  
99收藏夹(注1)里面有个在线帮助,他是用StreamReader来读文本数据的,其他的是读数据库,我发现不管是读数据库还是一xml的形式读xml文档,不管你的数据库如何优化,也不管你的机器培植如何之高,读的速度与读文本数据的速度是不可比的,大家也可到http://www.99scj.com测试下。点在线帮助,一闪就出来了。  
本文是按照DotLucene官方网站的一个demo   写的,本同点在于,  
1,本文的demo采用了DotLucene最新稳定版1.4.3  
2,开发环境是vs2005。  
3,demo被我划成了两个部分,一个部分是一个console程序,就是本文所讲的,主要就是怎么样创建索引,另  
            一个部分是个web程序,关键说的是搜索这个部分所建立的索引。  
4,源代码将在下个部分提供下载,因为这两个部分同属一个解决方案。  
好了,我们现在开始进入怎么用DotLucene来创建索引了。  
什么是索引呢?我也不太明白,我是这样理解的,索引就是用来加快查询数据的速度的,比如我们小时候读书的时候课本前面有那个第一课:什么什么的。。。。。。第几页,这应该就是索引吧。用DotLucene创建索引也就是说把某些文件内容编入某个目录下的索引。
首先运行vs2005,选择文件--新建项目,在弹出的对话框选:其他项目类型里的Visual   Studio解决方案,选右边的空白解决方案,输入名字:SearchDemo,位置选D:\确定。
再在解决方案SearchDemo右键选添加---再选---新建解决方案文件夹,输入文件夹名字为Indexer.我再找到d:\SearchDemo,再这个文件夹里面新建个目录,叫wwwroot,大家就知道这个目录是放weB   程序的,我们在iis管理器里面新建设个虚拟目录,指向d:\SearchDemo\wwwroot目录,名字叫SearchDemo.
我们再在vs的解决方案SearchDemo单季右键选添加--新建解决方案文件夹,输入文件夹名字为web,其实这两个文件夹名都是vs虚拟的,其实并不存在。我们然后在第一个项目Indexer上右键选:添加==新建项目,再弹出的面板左边选v   c#--windows--右边选控制台应用程序,输入名字Indexer,确定,这个时候vs会在d:\searchdemo目录下添加个Indexer目录,然后我们再在新添加的名为web项目上右建--添加---现有网站---选择我们刚刚建立的SearchDemo就是。
现在我们建设好了两个项目,一个console控制台项目和一个SearchDemo的web项目,我们这部分只讲第一个项目怎么样建立索引,要建立索引,我们首先必须明白索引应该建立在什么地方?为了方便我把索引建立在D:\SearchDemo\wwwroot目录下新建一个index目录下;还有我们必须明白哪些文件将被编入索引?也为了方便,我把要被编入索引的文件放在d:\SearchDemo\wwwroot目录下新建个documents目录下,也就是说documents目录下的所有文件都将被我编入索引。因为我们这个demo   演示的是搜索DotLucene的帮助文档,文艺我们把所有下载来的帮助文档文件全部拷入d:\SearchDemo\wwwroot\documents目录下。同时我们还必须赋予index目录写的权利。
我们现在给Indexer控制台项目添加引用Lucene.Net.dll
我们现在在Indexer控制台项目里添加个类:IntrnetIndexer.cs;
先说明下doc.Add(Field.UnStored( "text ",   ParseHtml(html)));
                        doc.Add(Field.Keyword( "path ",   relativePath));
                        doc.Add(Field.Text( "title ",   GetTitle(html)));
索引是由Docuemnt对象组成,而Docuemnt对象又是由字段对象组成.
Field.UnStored方法在其官方网站上的说明是:Constructs   a   String-valued   Field   that   is   tokenized   and   indexed,   but   that   is   not   stored   in   the   index.   Term   vector   will   not   be   stored   for   this   Field.搜价110的Eunge帮忙翻译下成这样:构造一个String类型的字段,它将被分词和索引,但是它不会被存储在索引中。关于这个字段的词向量不会被存储,我一直都未能够理解关于这个字段的词向量不会被存储的含义,汗。
代码如下:


*/

namespace   Indexer
{
        public   class   IntranetIndexer
        {
                //索引写入器
                private   IndexWriter   writer;
                //要写入索引的文件的根目录
                private   string   docRootDirectory;
                //要匹配的文件格式
                private   string   pattern;
&