Lucene.net试用

【简介】
    lucene.net好多人都知道的吧,反正我是最近才好好的看了一下,别笑我拿历史当新闻哦,不太了解Lucence的朋友先听我说两句哦。Lucene的知识主要分为索引、搜索、分析器、性能优化几个部分。索引和搜索没啥可说的,看几个例子就会了,来回那一套儿,按部就班做几个实验就熟悉了。分析器是Lucence的精华,又分为分词和过滤两部分,而且中文分词更是难点,我的例子里是用从博客园程序中提取出来的Lucene.Net.Analysis.Cn.dll来实现中文分词的,谁有中科院的那套中科院ICTCLAS分词工具的C#版麻烦提供一下哦。性能优化也很重要,因为如果要索引的文件比较大的话,建立索引的性能就会很大的下降,你可以调整IndexWriter的几个参数来优化索引性能,还有可以用IndexWriter.Optimize()方法(这个方法主要是优化查询速度,反而使索引性能有所下降),另外就是可以用多线程来分别对不同的内容进行索引并保存到RAMDirectory里,然后再把所有的内存索引合并到FSDirectory里,甚至可以让多台服务器分别处理内容的各个部分,然后把索引结果放到一个队列里,再有一台机器去读取索引结果队列并合并索引结果。
    做这个示例主要是为了演示一下Lucene.net的功能,它可以对你指定的目录里的.txt,.htm,.html文件进行全文索引,然后对其进行查询。由于如果要索引的目录里文件特别多特别大的话,建立索引需要花费很长的过程,所以我在示例程序里使用了异步编程,以便在建立索引的时候不阻塞界面线程。
  【内容】
  1、先看一个简单例子
  public void Test1()
  {
   //建立一个内存目录
   Lucene.Net.Store.RAMDirectory ramDir = new Lucene.Net.Store.RAMDirectory();
  
   //建立一个索引书写器
   IndexWriter ramWriter = new IndexWriter(ramDir,new ChineseAnalyzer(), true);
  
   //要索引的词,这就相当于一个个的要索引的文件
   string[] words = {"中华人民共和国", "人民共和国", "人民","共和国"};
  
   //循环数组,创建文档,给文档添加字段,并把文档添加到索引书写器里
   Document doc = null;
   for (int i = 0; i < words.Length; i++)
   {
   doc = new Document();
   doc.Add(Field.Text("contents", words[i]));
   ramWriter.AddDocument(doc);
   }
  
   //索引优化
   ramWriter.Optimize();
  
   //关闭索引读写器,一定要关哦,按理说应该把上面的代码用try括主,在finally里关闭索引书写器
   ramWriter.Close();
  
   //构建一个索引搜索器
   IndexSearcher searcher = new IndexSearcher(ramDir);
  
   //用QueryParser.Parse方法实例化一个查询
   Query query = QueryParser.Parse("中华人民","contents",new ChineseAnalyzer());
  
   //获取搜索结果
   Hits hits = searcher.Search(query);
  
   //判断是否有搜索到的结果,当然你也可以遍历结果集并输出
   if (hits.Length() != 0)
   MessageBox.Show("有");
   else
   MessageBox.Show("没有");
  }
  2、其它的具体看下载代码吧。
    下载的文件里有个doc的文件夹,里面有4个文本文件,大家可以试着给那个目录建立索引,然后搜索一下“人民”,“中华”等几个关键字,看看能出来搜索结果吗?简单说一下示例程序,就是遍历一个目录,找出所有文本和网页的文件,建立Lucene的Document文件,并索引了文件的目录和内容,然后添加到索引器里,最后在程序执行目录的Index子目录里建立索引,这一部分的调用使用了异步委托。搜索的时候就是在Index目录里检索符合某个关键字的条目。
  【注意】

查看原文 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值