Lucene.net试用

【简介】
lucene.net好多人都知道的吧,反正我是最近才好好的看了一下,别笑我拿历史当新闻哦,不太了解Lucence的朋友先听我说两句哦。Lucene的知识主要分为索引、搜索、分析器、性能优化几个部分。索引和搜索没啥可说的,看几个例子就会了,来回那一套儿,循序渐进作几个实验就熟悉了。分析器是Lucence的精华,又分为分词和过滤两部分,并且中文分词更是难点,个人例子里是用从博客园程序中提取出来的Lucene.Net.Analysis.Cn.dll来实现中文分词的,谁有中科院的那套中科院ICTCLAS分词工具的C#版麻烦提供一下哦。性能优化也很重要,由于若是要索引的文件比较大的话,创建索引的性能就会很大的降低,你能够调整IndexWriter的几个参数来优化索引性能,还有能够用IndexWriter.Optimize()方法(这个方法主要是优化查询速度,反而使索引性能有所降低),另外就是能够用多线程来分别对不一样的内容进行索引并保存到RAMDirectory里,而后再把全部的内存索引合并到FSDirectory里,甚至可让多台服务器分别处理内容的各个部分,而后把索引结果放到一个队列里,再有一台机器去读取索引结果队列并合并索引结果。
作这个示例主要是为了演示一下Lucene.net的功能,它能够对你指定的目录里的.txt,.htm,.html文件进行全文索引,而后对其进行查询。因为若是要索引的目录里文件特别多特别大的话,创建索引须要花费很长的过程,因此我在示例程序里使用了异步编程,以便在创建索引的时候不阻塞界面线程。
【内容】
一、先看一个简单例子
public void Test1()
{
 //创建一个内存目录
 Lucene.Net.Store.RAMDirectory ramDir = new Lucene.Net.Store.RAMDirectory();html

 //创建一个索引书写器
 IndexWriter ramWriter = new IndexWriter(ramDir,new ChineseAnalyzer(), true);java

 //要索引的词,这就至关于一个个的要索引的文件
 string[] words = {"×××", "人民共和国", "人民","共和国"}; linux

 //循环数组,建立文档,给文档添加字段,并把文档添加到索引书写器里
 Document doc = null; 
 for (int i = 0; i < words.Length; i++)
 {
  doc = new Document();
  doc.Add(Field.Text("contents", words[i]));
  ramWriter.AddDocument(doc);
 }c++

 //索引优化
 ramWriter.Optimize();程序员

 //关闭索引读写器,必定要关哦,按理说应该把上面的代码用try括主,在finally里关闭索引书写器
 ramWriter.Close();ajax

 //构建一个索引搜索器
 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("没有");
}
二、其它的具体看下载代码吧。
下载的文件里有个doc的文件夹,里面有4个文本文件,你们能够试着给那个目录创建索引,而后搜索一下“人民”,“中华”等几个关键字,看看能出来搜索结果吗?简单说一下示例程序,就是遍历一个目录,找出全部文本和网页的文件,创建Lucene的Document文件,并索引了文件的目录和内容,而后添加到索引器里,最后在程序执行目录的Index子目录里创建索引,这一部分的调用使用了异步委托。搜索的时候就是在Index目录里检索符合某个关键字的条目。
【注意】
一、创建完索引后必定要调用IndexWriter的Close方法,不然若是你要索引的目录里的文件少于minMergeDocs的话,是不能创建索引的。
二、Field.Text的静态方法有两个重载版本,若是第二个参数是string的话那么这个字段既索引也存储,若是是TextReader的话只索引不存储,这点要搞清楚,另外在构建TextReader的时候要注意使用合适的编码格式,不然有的文件读出来是乱码,创建的索引确定也是按乱码创建的咯。
【小节】
其实lucene你们谁也是学学就会,关键要是整一个像google,baidu这样的搜索引擎就难了,好歹这搜索引擎也是一个行业呢,因此谁有兴趣,好好钻研一下搜索行业的相关技术,没准靠这个还能创业呢,是吧。
再问一下,《lucence实战》有中文版吗?或者其它关于Lucence的中午图书,给推荐一本。
最后借贵地和你们讨论一个问题:从长远考虑,程序员学那项技术比较有前途?作程序也好几年了,想找一个领域好好深刻一下,之后作一个行业的领域专家。那样才不会太累,要不什么都鼓捣,太累了,并且还不容易出成绩。我列举了几个方向,你们帮忙分析分析,谢谢。
一、linux+oracle(走数据库管理的路线)
二、汇编、c底层驱动开发(听说很简单,就那么几个指令,学一年就精通了,不像.NET,得老跟着走)
三、ec++,kjava嵌入式开发(包括手机游戏,路由固件等开发)
四、即时通信行业(网络编程,包括网络游戏的服务端编程这些)
五、搜索行业(不太了解)
六、OA、工做流(本身作一套不用编程,拖拖拽拽画画就能实现企业业务流程的电子化,infopath,OSS,formserver,WF的那一套)
七、.net网站开发(范围很大,要掌握的东西太多,会的人不少,深刻的不多)
八、流媒体开发(3G时代这玩意儿不知道能不能派上用场)
【参考】
idior的《Lucene.net系列》
李刚、宋伟、邱哲的《ajax+lucene构建搜索引擎》性能优化

下载地址:
http://files.cnblogs.com/onlytiancai/WawaSearch.rar

相关文章
相关标签/搜索