仿造百度实现基于Lucene.net全文检索(1)

作者:   出处:互联网   2015-07-06 11:06:14   阅读:2

Lucene.Net


 

Lucene.net是Lucene的.net移植版本,是一个开源的全文检索引擎开发包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,是一个Library.你也可以把它理解为一个将索引,搜索功能封装的很好的一套简单易用的API(提供了完整的查询引擎和索引引擎)。利用这套API你可以做很多有关搜索的事情,而且很方便.。开发人员可以基于Lucene.net实现全文检索的功能。


 

注意:Lucene.Net只能对文本信息进行检索。如果不是文本信息,要转换为文本信息,比如要检索Excel文件,就要用NPOI把Excel读取成字符串,然后把字符串扔给Lucene.Net。Lucene.Net会把扔给它的文本切词保存,加快检索速度。


 

更多概念性的知识可以参考这篇:http://blog.csdn.net/xiucool/archive/2008/11/28/3397182.aspx


 

这个小Demo样例展示:


 

ok,接下来就细细详解下士怎样一步一步实现这个效果的。


 

Lucene.Net 核心 分词算法(Analyzer)


 

学习Lucune.Net,分词是核心。当然最理想状态下是能自己扩展分词,但这要很高的算法要求。Lucene.Net中不同的分词算法就是不同的类。所有分词算法类都从Analyzer类继承,不同的分词算法有不同的优缺点。


 

内置的StandardAnalyzer是将英文按照空格、标点符号等进行分词,将中文按照单个字进行分词,一个汉字算一个词


 

Analyzer analyzer = new StandardAnalyzer();  TokenStream tokenStream = analyzer.TokenStream( ,new StringReader( Hello Lucene.Net,1爱1你China ));  Lucene.Net.Analysis.Token token = null;  while ((token = tokenStream.Next()) != null)  {  Console.WriteLine(token.TermText());  } 


 

分词后结果:


 

二元分词算法,每两个汉字算一个单词, 爱你China 会分词为 爱 爱你 china ,点击查看二元分词算法CJKAnalyzer。


 

Analyzer analyzer = new CJKAnalyzer();  TokenStream tokenStream = analyzer.TokenStream( , new StringReader( 爱你中国China中华人名共和国 ));  Lucene.Net.Analysis.Token token = null;  while ((token = tokenStream.Next()) != null)  {  Response.Write(token.TermText()+ br/ );  } 


 

这时,你肯定在想,上面没有一个好用的,二元分词算法乱枪打鸟,很想自己扩展Analyzer,但并不是算法上的专业人士。怎么办?

Copyright© 2006-2015 ComponentCN.com all rights reserved.重庆磐岩科技有限公司(控件中国网) 版权所有 渝ICP备12000264号 法律顾问:元炳律师事务所
客服软件
live chat