Lucene.net学习随笔

来源:互联网 发布:自动发微博淘宝客软件 编辑:程序博客网 时间:2024/05/21 06:34

 今天看了一下一直想学的Lucene.net,一直以来都仰慕它强大的检索功能,今天上网查了些资料,学习了一下基础的,适合一点也不知道Lucene.net的大虾,纯属自我了解,自我心得,有疏漏和不妥之处,还望各位资深人士多多点拨。

Lucene.net是Lucene的.net版本,是用于实现全文检索的一组API,简单理解就是那些专家写的实现全文检索功能的一些函数封装起来,供其他需要使用全文检索功能的开发人员调用。

了解了它是什么,下面看下他的用法:

一、既然是检索全文,那么就要涉及到索引的创建了

1、首先通过Analyzer分析数据,比如说分割单词(ANALYZED),过滤无效词(的、in),优化关键词(搜索he、统配her等)。

/// <summary>           /// 建立索引字段           /// </summary>           /// <param name="writer"></param>           /// <param name="title"></param>           /// <param name="content"></param>           protected void AddDocument(IndexWriter writer, string title, string content)        {            Document document = new Document();            document.Add(new Field("title", title, Field.Store.NO, Lucene.Net.Documents.Field.Index.TOKENIZED));            document.Add(new Field("content", content, Field.Store.NO, Field.Index.TOKENIZED));            writer.AddDocument(document);        }

2、Lucene是把分析好的数据存储到文件中,使用IndexWriter类写入;lucene使用Field的对关键字的描述(相当于数据表的字段),比如,关键字的出现的频率,位置等,而使用document存放每一条检索到的数据(相当于数据表的Row),最后把document逐行写入文件,索引创建完成。

/// <summary>           /// 创建索引           /// </summary>           protected void CreatedIndex()        {            //全文分析:由于lucene是基于关键词索引和查询的,首先我们要取得这两篇文章的关键词,通常我们需要如下处理措施                                                  a.我们现在有的是文章内容,即一大串字符串,我们先要找出全文字符串中的所有单词,即分词。英文单词由于用空格分隔,比较好处理。中文单词间是连在一起的需要特殊的分词处理。(中文通常用词典的方式比较准确)                                         b.文章中的”in”, “once” “too”等词没有什么实际意义,中文中的“的”“是”等字通常也无具体含义,这些不代表概念的词可以过滤掉,即分词解析中的过滤                                                                        c.用户通常希望查“He”时能把含“he”,“HE”的文章也找出来,所以所有单词需要统一大小写。即解析过程中的额外处理(用户可以根据自己需要增加多重处理)。                                                                                                                    d.用户通常希望查“live”时能把含“lives”,“lived”的文章也找出来,所以需要把“lives”,“lived”还原成“live”即进一步优化处理(可以更人性更友好)          e.文章中的标点符号通常不表示某种概念,也可以过滤掉    Analyzer analyzer = new StandardAnalyzer();            string path = Server.MapPath("~/IndexDir");  //设置索引存储的路径            IndexWriter writer = new IndexWriter(path, analyzer, true);            AddDocument(writer, "SQL Server 2008 的发布", "SQL Server 2008 的新特性");            AddDocument(writer, "SQL Server 2012 的发布", "SQL Server 2012 的新特性");            AddDocument(writer, "ASP.Net MVC框架配置与分析", "而今,微软推出了新的MVC开发框架,也就是Microsoft ASP.NET 3.5 Extensions");            writer.Optimize();              writer.Close();        }

二、开始搜索

正在研究,研究好就和大家分享。

原创粉丝点击