Lucene.Net 2.3.1开发介绍 —— 一、接触Lucene.Net

转载 2012年03月27日 17:18:18

1、引用Lucene.Net类库

找到Lucene.Net的源代码,在“C#\src\Lucene.Net”目录。打开Visual Studio,我的版本是2008,而Lucene.Net默认的是2005。先创建一个项目,简单起见,创建一个C#控制台程序。

1_vs_create.jpg
图 1.1

然后添加Lucene.Net进项目,如图 1.2 - 1.3。

1_vs_2.jpg
图 1.2

1_vs_3.jpg
图 1.3

这个过程要进行一个VS2005到2008的转换。添加后,解决方案就有Lucene.Net项目了,如图1.4。

1_vs_4.jpg
图 1.4

然后把Lucene.Net引入TestLucene项目。如图1.5 -1.6:

1_vs_5.jpg
图1.5

1_vs_6.jpg
图1.6

点确定后就可以了。这时候,就可以在TestLucene项目中使用Lucene.Net的API了。

2、简单示例
对Lucene.Net的操作分为建立索引,和搜索两部分。

2.1 建立索引

通过代码 2.1.1,就可以简单地建立一个索引了。代码 2.1.1将在应用程序目录下建立一个IndexDirectory目录,并在目录下创建索引文件。

代码 2.1.1

 


 1using System;
 2using System.Collections.Generic;
 3using System.Text;
 4
 5
 6namespace TestLucene
 7{
 8    using Lucene.Net.Index;
 9    using Lucene.Net.Store;
10    using Lucene.Net.Analysis;
11    using Lucene.Net.Analysis.Standard;
12    using Lucene.Net.Documents;
13
14    class Program
15    {
16        static void Main(string[] args)
17        {
18            Analyzer analyzer = new StandardAnalyzer();
19            IndexWriter writer = new IndexWriter("IndexDirectory", analyzer, true);
20            AddDocument(writer, "SQL Server 2008 的发布""SQL Server 2008 的新特性");
21            AddDocument(writer, "ASP.Net MVC框架配置与分析""而今,微软推出了新的MVC开发框架,也就是Microsoft ASP.NET 3.5 Extensions");
22            writer.Optimize();
23            writer.Close();
24        }

25
26        static void AddDocument(IndexWriter writer, string title, string content)
27        {
28            Document document = new Document();
29            document.Add(new Field("title", title, Field.Store.YES, Field.Index.TOKENIZED));
30            document.Add(new Field("content", content, Field.Store.YES, Field.Index.TOKENIZED));
31            writer.AddDocument(document);
32        }

33    }

34}

35

 

2.2 搜索索引

代码2.2.1就可以搜索刚才建立的索引。

 

代码 2.2.1

 


 1using System;
 2using System.Collections.Generic;
 3using System.Text;
 4
 5
 6namespace TestLucene
 7{
 8    using Lucene.Net.Index;
 9    using Lucene.Net.Store;
10    using Lucene.Net.Analysis;
11    using Lucene.Net.Analysis.Standard;
12    using Lucene.Net.Documents;
13    using Lucene.Net.Search;
14    using Lucene.Net.QueryParsers;
15
16    class Program
17    {
18        static void Main(string[] args)
19        {
20            Analyzer analyzer = new StandardAnalyzer();
21            //IndexWriter writer = new IndexWriter("IndexDirectory", analyzer, true);
22            //AddDocument(writer, "SQL Server 2008 的发布", "SQL Server 2008 的新特性");
23            //AddDocument(writer, "ASP.Net MVC框架配置与分析", "而今,微软推出了新的MVC开发框架,也就是Microsoft ASP.NET 3.5 Extensions");
24            //writer.Optimize();
25            //writer.Close();
26
27            IndexSearcher searcher = new IndexSearcher("IndexDirectory");
28            MultiFieldQueryParser parser = new MultiFieldQueryParser(new string[] "title""content" }, analyzer);
29            Query query = parser.Parse("sql");
30            Hits hits = searcher.Search(query);
31
32            for (int i = 0; i < hits.Length(); i++)
33            {
34                Document doc = hits.Doc(i);
35                Console.WriteLine(string.Format("title:{0} content:{1}", doc.Get("title"), doc.Get("content")));
36            }

37            searcher.Close();
38
39            Console.ReadKey();
40        }

41
42        //static void AddDocument(IndexWriter writer, string title, string content)
43        //{
44        //    Document document = new Document();
45        //    document.Add(new Field("title", title, Field.Store.YES, Field.Index.TOKENIZED));
46        //    document.Add(new Field("content", content, Field.Store.YES, Field.Index.TOKENIZED));
47        //    writer.AddDocument(document);
48        //}
49    }

50}

51

 

运行后输出:

 

title:SQL Server 2008 的发布 content:SQL Server 2008 的新特性

 

2.3 疑问

2.1,2.2小节介绍了最简单的建立和搜索索引的方式。虽然代码很短,使用也很简单,但是理解起来却不是太容易。

代码 2.1.1中,先是建立了一个分词器。什么是分词器?为什么要有分词器?分词器是怎么工作的?这些问题真让人头疼。接着建立一个IndexWriter的实例,这个类是负责创建索引的,有很多构造函数,这里使用的是其中的一个。三个参数分别是:索引建立到哪个目录,用什么分词器,还有就是是否创建。如果是否创建为false,那么就是以增量的方式来创建。再下来调用了AddDocument方法,在AddDocument方法中,先组织一个Docuement对象,然后把这个对象交给IndexWriter。然后再调用Optimize优化索引,最后关闭创建过程。这里面又有什么是Document,Document是怎么往存储器里写入的?Optimize方法能干什么?问题真多。

 

代码2.2.1则相对简单,先是创建IndexSearcher对象实例,并指定其搜索的目录,然后构造了一个查询Query,然后查出Hits,这样就得到想要的结果了。但是这个查询的过程是什么样的呢?这个Query代表什么?Hits是怎么得出来的?结果的顺序是怎么决定的?这些又是留下来的问题。

 

这么多问题,不能一次说完,欲知后事如何,下面一一道来。


Lucene.Net 2.3.1开发介绍 —— 一、接触Lucene.Net

1、引用Lucene.Net类库 找到Lucene.Net的源代码,在“C#\src\Lucene.Net”目录。打开Visual Studio,我的版本是2008,而Lucene.Net默认的...
  • CsethCRM
  • CsethCRM
  • 2013年09月09日 10:07
  • 852

lucene.NET详细使用与优化详解

lucene.NET详细使用与优化详解 1 lucene简介 1.1 什么是lucene Lucene是一个全文搜索框架,而不是应用产品。因此它并不像www.baidu.com 或者google ...
  • lybwwp
  • lybwwp
  • 2016年11月02日 15:25
  • 1372

lucene.net 3.0.3、结合盘古分词进行搜索的小例子(分页功能)

更新:2013-12-25 //封装类 using System; using System.Collections.Generic; using System.Linq; using Syst...
  • pukuimin1226
  • pukuimin1226
  • 2013年12月25日 16:46
  • 16843

使用Lucene.Net实现全文检索

目录 一 Lucene.Net概述 二 分词 三 索引 四 搜索 五 实践中的问题   一 Lucene.Net概述   Lucene.Net是一个C#开发的开源全文索引库,其源码包括“核心”与“外围...
  • mss359681091
  • mss359681091
  • 2016年04月06日 11:41
  • 3506

Lucene.Net 2.3.1开发介绍 —— 二、分词(一)

Lucene.Net中,分词是核心库之一,当然,也可以将它独立出来。目前Lucene.Net的分词库很不完善,实际应用价值不高。唯一能用在实际场合的StandardAnalyzer类,效果也不是很好。...
  • CsethCRM
  • CsethCRM
  • 2013年09月09日 10:11
  • 720

lucene、lucene.NET详细使用与优化详解

lucene、lucene.NET详细使用与优化详解  1 lucene简介 1.1 什么是lucene Lucene是一个全文搜索框架,而不是应用产品。因此它并不像www.baidu....
  • huwei2003
  • huwei2003
  • 2016年11月30日 17:14
  • 1674

借助 Lucene.Net 构建站内搜索引擎(上)

借助 Lucene.Net 构建站内搜索引擎(上) 前言:最近翻开了之前老杨(杨中科)的Lucene.Net站内搜索项目的教学视频,于是作为老杨脑残粉的我又跟着复习了一遍,学习途中做了一些笔记也...
  • mss359681091
  • mss359681091
  • 2016年07月31日 13:13
  • 1081

lucene.net 3.0.3、结合盘古分词进行搜索的小例子(分页功能)

转自:http://blog.csdn.net/pukuimin1226/article/details/17558247 //封装类 [csharp] view plaincopyp...
  • wingahi
  • wingahi
  • 2015年04月23日 20:46
  • 1266

Lucene.Net学习心得(转载)

http://kb.cnblogs.com/page/52642/ 一、Lucene点滴    (发音为['lusen]),我经常就读鹿神,是头活蹦乱跳的好鹿,研究它吧,保证感觉它很神!L...
  • itstt
  • itstt
  • 2013年09月11日 15:29
  • 2393

Lucene.net站内搜索2—Lucene.Net简介和分词

Lucene.Net简介 Lucene.Net是由Java版本的Lucene(卢思银)移植过来的,所有的类、方法都几乎和Lucene一模一样,因此使用时参考Lucene 即可。Lucene.Net只...
  • zouyujie1127
  • zouyujie1127
  • 2015年03月07日 18:19
  • 2611
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Lucene.Net 2.3.1开发介绍 —— 一、接触Lucene.Net
举报原因:
原因补充:

(最多只允许输入30个字)