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,但并不是算法上的专业人士。怎么办?