Lucene.Net 2.3.1开发介绍 —— 一、接触Lucene.Net
原文:Lucene.Net 2.3.1开发介绍 —— 一、接触Lucene.Net
1、引用Lucene.Net类库
找到Lucene.Net的源代码,在“C#\src\Lucene.Net”目录。打开Visual Studio,我的版本是2008,而Lucene.Net默认的是2005。先创建一个项目,简单起见,创建一个C#控制台程序。

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

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

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

图1.5
图1.6
点确定后就可以了。这时候,就可以在TestLucene项目中使用Lucene.Net的API了。
2、简单示例
对Lucene.Net的操作分为建立索引,和搜索两部分。
2.1 建立索引
通过代码 2.1.1,就可以简单地建立一个索引了。代码 2.1.1将在应用程序目录下建立一个IndexDirectory目录,并在目录下创建索引文件。
代码 2.1.1
Code 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;1314 class Program15 {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 }2526 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
Code 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;1516 class Program17 {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();2627 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);3132 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();3839 Console.ReadKey();40 }4142 //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的更多相关文章
- Lucene.Net 2.3.1开发介绍 —— 四、搜索(三)
原文:Lucene.Net 2.3.1开发介绍 -- 四.搜索(三) Lucene有表达式就有运算符,而运算符使用起来确实很方便,但另外一个问题来了. 代码 4.3.4.1 Analyzer anal ...
- Lucene.Net 2.3.1开发介绍 —— 四、搜索(二)
原文:Lucene.Net 2.3.1开发介绍 -- 四.搜索(二) 4.3 表达式用户搜索,只会输入一个或几个词,也可能是一句话.输入的语句是如何变成搜索条件的上一篇已经略有提及. 4.3.1 观察 ...
- Lucene.Net 2.3.1开发介绍 —— 四、搜索(一)
原文:Lucene.Net 2.3.1开发介绍 -- 四.搜索(一) 既然是内容筛选,或者说是搜索引擎,有索引,必然要有搜索.搜索虽然与索引有关,那也只是与索引后的文件有关,和索引的程序是无关的,因此 ...
- Lucene.Net 2.3.1开发介绍 —— 三、索引(七)
原文:Lucene.Net 2.3.1开发介绍 -- 三.索引(七) 5.IndexWriter 索引这部分最后讲的是IndexWriter.如果说前面提到的都是数据的结构,那么IndexWriter ...
- Lucene.Net 2.3.1开发介绍 —— 三、索引(六)
原文:Lucene.Net 2.3.1开发介绍 -- 三.索引(六) 2.2 Field的Boost 如果说Document的Boost是一条线,那么Field的Boost则是一个点.怎么理解这个点呢 ...
- Lucene.Net 2.3.1开发介绍 —— 三、索引(五)
原文:Lucene.Net 2.3.1开发介绍 -- 三.索引(五) 话接上篇,继续来说权重对排序的影响.从上面的4个测试,只能说是有个直观的理解了.“哦,是!调整权重是能影响排序了,但是好像没办法来 ...
- Lucene.Net 2.3.1开发介绍 —— 三、索引(四)
原文:Lucene.Net 2.3.1开发介绍 -- 三.索引(四) 4.索引对搜索排序的影响 搜索的时候,同一个搜索关键字和同一份索引,决定了一个结果,不但决定了结果的集合,也确定了结果的顺序.那个 ...
- Lucene.Net 2.3.1开发介绍 —— 三、索引(三)
原文:Lucene.Net 2.3.1开发介绍 -- 三.索引(三) 3.Field配置所产生的效果 索引数据,简单的代码,只要两个方法就搞定了,而在索引过程中用到的一些类里最简单,作用也不小的就是F ...
- Lucene.Net 2.3.1开发介绍 —— 三、索引(二)
原文:Lucene.Net 2.3.1开发介绍 -- 三.索引(二) 2.索引中用到的核心类 在Lucene.Net索引开发中,用到的类不多,这些类是索引过程的核心类.其中Analyzer是索引建立的 ...
- Lucene.Net 2.3.1开发介绍 —— 三、索引(一)
原文:Lucene.Net 2.3.1开发介绍 -- 三.索引(一) 在说索引之前,先说说索引是什么?为什么要索引?怎么索引? 先想想看,假如现在有一个文本,我们会怎么去搜索.比如,有一个string ...
随机推荐
- CreateFile函数使用方法详细介绍
CreateFileThe CreateFile function creates or opens the following objects and returns a handle that c ...
- sequence2(高精度dp)
sequence2 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total ...
- sizeof与strlen的区别 浅谈
1.sizeof operator sizeof是C语言的一种单目操作符,如C语言的其他操作符++.- - 等,它并不是函数. Queries size of the object or type. ...
- BZOJ 1537: [POI2005]Aut- The Bus(dp + BIT)
对y坐标离散化, 然后按x坐标排序, dp. 一个点(x, y), 设到达这个点接到的最多乘客数为t, 那么t可以用来更新y'>=y的所有点.用树状数组维护最大值. -------------- ...
- 【转】如何在CentOS/RHEL中安装基于Web的监控系统 linux-das
Linux-dash是一款为Linux设计的基于Web的轻量级监控面板.这个程序会实时显示各种不同的系统属性,比如CPU负载.RAM使用率.磁盘使用率.网速.网络连接.RX/TX带宽.登录用户.运行的 ...
- CentOS6.5 搭建基础PHP环境(yum安装)
转载:闲来无事 » CentOS6.5 搭建基础PHP环境(yum安装) yum安装php环境只需要几条简单的命令就可以实现,OK,各位客官,菜来了.首先确保你的yum源可用,或者网络是通的,不然下载 ...
- 动态规划之一ones
n给一个整数n,要你找一个值为n的表达式,这个表达式只有1 + * ( ) 够成.并且1不能连续,比如11+1就不合法. n输入n,(1<=n<=10000) n输出最少需要多少个1才能构 ...
- 在win8.1上用Bitvise SSH Server 6.24(原名winsshd)搭建SSH2服务器
注意:此SSH是指运维领域的 SSH,不是指JavaWeb框架中的SSH. 运维领域:SSH=Secure Shell安全外壳协议 JavaWeb框架:SSH=Spring+Struts+Hibern ...
- UTL_RAW
The UTL_RAW package provides SQL functions for manipulating RAW data types. 该包的功能其实可以用来加密: SELECT ...
- CH BR13数学(啥?-a^b≡a^b mod phi(p)+phi(p)(mod p)(b>=phi(p))公式)
啥? Beta Round #13 (数学专场) 背景 有人写了一个RSA加密给我玩. 描述 我赌5毛前面两题的内容也就开头几句话平时会用到. 还是做点具体的东西吧. 求c^d Mod N 输入格式 ...