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

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

转载于:https://blog.51cto.com/huang1231932/610714

Lucene.net试用相关推荐

  1. Lucene.Net无障碍学习和使用:索引篇

    项目中可能需要再次用到Lucene.Net,利用空闲时间写了个demo,主要涉及到索引的创建.删除.更新和一个简单查询.在本文示例中,Lucene.Net的版本是2.4.0,某些类和方法与最新版本或者 ...

  2. 使用lucene进行group操作

    2019独角兽企业重金招聘Python工程师标准>>> 近来用lucene进行查询,需要对结果进行group操作,结果发现核心包里面没有提供这个功能. 如果在内存里面对结果再自己用代 ...

  3. Lucene 的索引文件锁原理

    Lucene 的索引文件锁原理 2016/11/24 · IT技术 · lucene 环境 Lucene 6.0.0 Java "1.8.0_111" OS Windows 7 U ...

  4. 11大Java开源中文分词器的使用方法和分词效果对比,当前几个主要的Lucene中文分词器的比较...

    本文的目标有两个: 1.学会使用11大Java开源中文分词器 2.对比分析11大Java开源中文分词器的分词效果 本文给出了11大Java开源中文分词的使用方法以及分词结果对比代码,至于效果哪个好,那 ...

  5. 阿翔编程学-Lucene入门与使用

    Lucene入门与使用 本文主要面向具体使用,适用于已熟悉java编程的lucene初学者. 1. Lucene的简介 1.1 Lucene 历史 org.apache.lucene包是纯java语言 ...

  6. Lucene分词器之庖丁解牛

    注意:这里配置环境变量要重新启动系统后生效 我现在测试用的Lucene版本是lucene-2.4.0,它已经能够支持中文分词,但它是采用一元分词(逐字拆分)的方法,即把每一个汉字当作是一个词,这样会使 ...

  7. 2021年大数据ELK(四):Lucene的美文搜索案例

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 美文搜索案例 一.需求 二.准备工作 1.创建IDEA项目 2. ...

  8. 2021年大数据ELK(三):Lucene全文检索库介绍

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 一.什么是全文检索 1.结构化数据与非结构化数据 2.搜索结构化 ...

  9. qt工程在linux系统里颜色显示错误_【飞凌嵌入式RK3399开发板试用体验】+QT开发环境搭建测试(二)...

    作者:飞扬的青春 在拿到开发板之后,已经体验了Android操作系统,接下来就是体验Linux下的开发,本次以QT的一个小案例来测试下. 首先是自己先搭建了一个Ubuntu18.04的虚拟机,使用真机 ...

  10. lucene.net mysql_用Lucene[1].net对数据库建立索引及搜索+

    cs代码 using System; using System.Collections; using System.ComponentModel; using System.Data; using S ...

最新文章

  1. java arcengine_在Java程序中调用ArcEngine
  2. php判断前端传的多个字段与数据库匹配
  3. python 高级使用实例_Python中的高级函数map/reduce使用实例
  4. Windows系统高质量Gif录制工具推荐:LICEcap录屏软件,非常小巧好用,只有200k
  5. Expect 在网络管理中发挥着重要作用
  6. 高斯赛尔德、牛顿拉尔逊matlab潮流计算
  7. 【Lucene4.8教程之二】索引
  8. Tomcat配置虚拟主机的两种方式
  9. Flask爱家租房--城区信息
  10. python爬取qq音乐评论_教你用Python爬去QQ音乐评论
  11. 罗永浩的公司被收购,还清债务指日可待
  12. jmter测试jmeter参数化(必须掌握)
  13. php 字符串合并,如何在PHP中将两个字符串组合在一起?
  14. 深度报告:移动边缘计算,站在5G“中央”
  15. 无线通信基础知识14:数字通信之调制
  16. java开发微信抢红包挂_java实现微信抢红包算法
  17. nuvoton uboo2013引导流程 2 - spl
  18. java计算机毕业设计软考刷题系统源码+mysql数据库+系统+lw文档+部署
  19. 气象数据分析之EMD方法介绍及python的实现
  20. 汉字从拼音到文字的完整映射表

热门文章

  1. 士林变频器面板如何调速度_工业电气设计|变频器在应用中的故障处理实例分享...
  2. python-gui-pyqt5的使用方法-8--实际案例可参考使用
  3. 双方确认函_影片份额转让合同约定第一出品方出具确认函后合同生效,未出具而受让方支付投资款的,合同也生效...
  4. c 语言打印沙漏图形,PAT乙级 1027打印沙漏 [图形输出]
  5. win10必须禁用的服务_关闭这几个系统服务,让你的电脑不再卡!
  6. Pytorch 入门之数据处理 -- Dataset、Sampler、DataLoader
  7. 团队作业4——beta阶段冲刺4
  8. 云计算虚拟化之Docker上如何安装Mongodb?
  9. html5 命运之轮生产
  10. wxPython控件学习之TextCtrl(二)多行及样式文本框