`

Lucene .net的学习之旅

阅读更多

What’s Lucene
Lucene是一个信息检索的函数库(Library),利用它你可以为你的应用加上索引和搜索的功能.

Lucene的使用者不需要深入了解有关全文检索的知识,仅仅学会使用库中的一个类,你就为你的应用实现全文检索的功能.

不过千万别以为Lucene是一个象google那样的搜索引擎,Lucene甚至不是一个应用程序,它仅仅是一个工具,一个Library.你也可以把它理解为一个将索引,搜索功能封装的很好的一套简单易用的API.利用这套API你可以做很多有关搜索的事情,而且很方便.

What Can Lucene Do

Lucene可以对任何的数据做索引和搜索. Lucene不管数据源是什么格式,只要它能被转化为文字的形式,就可以被Lucene所分析利用.也就是说不管是MS word, Html ,pdf还是其他什么形式的文件只要你可以从中抽取出文字形式的内容就可以被Lucene所用.你就可以用Lucene对它们进行索引以及搜索.

How To Use Lucene --- A Simple Example
示例介绍:

为作为输入参数的文件夹下的所有txt类型的文件做索引,做好的索引文件放入index文件夹.

然后在索引的基础上对文件进行全文搜索.

1. 建立索引

IndexWriterwriter=newIndexWriter("index",newStandardAnalyzer(),true);
IndexDocs(writer,
newSystem.IO.FileInfo(args[0]));
writer.Optimize();
writer.Close();

IndexWriter是对索引进行写操作的一个类,利用它可以创建一个索引对象然后往其中添加文件.需要注意它并不是唯一可以修改索引的类.在索引建好后利用其他类还可以对其进行修改.

构造函数第一个参数是建立的索引所要放的文件夹的名字.第二个参数是一个分析对象,主要用于从文本中抽取那些需要建立索引的内容,把不需要参与建索引的文本内容去掉.比如去掉一些a the之类的常用词,还有决定是否大小写敏感.不同的选项通过指定不同的分析对象控制.第三个参数用于确定是否覆盖原有索引的.

第二步就是利用这个writer往索引中添加文件.具体后面再说.

第三步进行优化.

第四步关闭writer.

下面具体看看第二步:

publicstaticvoidIndexDirectory(IndexWriterwriter,FileInfofile)
{
if(Directory.Exists(file.FullName))
{
String[]files
=Directory.GetFileSystemEntries(file.FullName);
//anIOerrorcouldoccur
if(files!=null)
{
for(inti=0;i<files.Length;i++)
{
IndexDirectory(writer,
newFileInfo(files[i]));//这里是一个递归
}

}

}

elseif(file.Extension==".txt")
{
IndexFile(file,writer);
}

}




privatestaticvoidIndexFile(FileInfofile,IndexWriterwriter)
{
Console.Out.WriteLine(
"adding"+file);
try
{
Documentdoc
=newDocument();
doc.Add(Field.Keyword(
"filename",file.FullName));

doc.Add(Field.Text(
"contents",newStreamReader(file.FullName)));

writer.AddDocument(doc);
}


catch(FileNotFoundExceptionfnfe)
{

}

}


主要就是两个函数一个用于处理文件夹(不是为文件夹建立索引),一个用于真正为文件建立索引.

因此主要集中看一下IndexFile这个方法.首先建立Document对象,然后为Document对象添加一些属性Field.你可以把Document对象看成是虚拟文件,将来将从此获取信息.而Field则看成是描述此虚拟文件的元数据(metadata).

其中Field包括四个类型:

Keywork

该类型的数据将不被分析,而会被索引并保存保存在索引中.
UnIndexed
该类型的数据不会被分析也不会被索引,但是会保存在索引.
UnStored
和UnIndexed刚好相反,被分析被索引,但是不被保存.
Text
和UnStrored类似.如果值的类型为string还会被保存.如果值的类型为Reader就不会被保存和UnStored一样.

最后将每一个Document添加到索引当中.

需要注意的是索引不仅可以建立在文件系统上,也可以建立在内存中.

例如

IndexWriter writer = new IndexWriter("index", new StandardAnalyzer(), true);

在第一个参数不是指定文件夹的名字而是使用Directory对象,并使用它的子类RAMDirectory,就可以将索引建立在内存当中.

2. 对索引进行搜索

IndexSearcherindexSearcher=newIndexSearcher(indexDir);
Queryquery
=QueryParser.Parse(queryString,"contents",newStandardAnalyzer());
Hitshits
=indexSearcher.Search(query);

第一步利用IndexSearcher打开索引文件用于后面搜索,其中的参数是索引文件的路径.

第二步使用QueryParser将可读性较好的查询语句(比如查询的词lucene ,以及一些高级方式lucene AND .net)转化为Lucene内部使用的查询对象.

第三步执行搜索.并将结果返回到hits集合.需要注意的是Lucene并不是一次将所有的结果放入hits中而是采取一次放一部分的方式.出于空间考虑.

至此,本文演示了如何从一个文件夹下的所有txt文件中查找特定的词。并围绕该个实例介绍了lucene.net的索引的建立以及如何针对索引进行搜索.最后给出源代码供大家学习.

分享到:
评论

相关推荐

    Lucene.net学习帮助文档

    **Lucene.net学习帮助文档** Lucene.net是一个开源全文搜索引擎库,它是Apache Lucene项目的一部分,专门针对.NET Framework进行了优化。这个压缩包包含了Lucene.net的源码和中文学习文档,旨在帮助开发者深入理解...

    lucene.NET 中文分词

    **Lucene.NET 中文分词技术详解** Lucene.NET 是一个高性能、全文检索库,它是Apache Lucene项目在.NET平台上的实现。作为一个开源的搜索引擎框架,Lucene.NET为开发者提供了强大的文本搜索功能。而在处理中文文档...

    Lucene.Net

    **Lucene.Net** 是一个基于Java的全文搜索引擎库,它被移植到了.NET平台,为.NET开发者提供了...不同版本的Lucene.Net在功能和性能上有所提升,特别是2.9.2和2.9.4版本,附带的Demo和文档使得学习和使用变得更加便捷。

    Lucene.Net的DLL

    在描述中提到的“快速搜索”是Lucene.Net的关键特性之一。通过高效的倒排索引机制,Lucene.Net能够快速地对大量文本数据进行查找,从而实现毫秒级的搜索响应时间。这种快速搜索能力得益于其内部的索引结构,包括词项...

    lucene.net 2.9.1 源码

    《深入剖析Lucene.NET 2.9.1:源码解析与应用...总结,Lucene.NET 2.9.1的源码不仅是一份学习资料,也是实践中的宝贵工具。深入理解其工作机制,将有助于提升.NET平台上的搜索技术能力,实现高效、精准的全文检索功能。

    Lucene.Net_2_9_1.zip

    《深入探索Lucene.Net 2.9.1:搜索引擎的核心技术》 Lucene.Net是一个开源、高性能、全文检索库,它是Apache Lucene项目在.NET平台上的实现。此官方版的Lucene.Net_2_9_1.zip包含了丰富的实例,为我们提供了深入...

    Lucene.Net.dll

    首先,我们要理解Lucene.Net.dll的核心组件之一——索引。在Lucene.Net中,索引是数据存储和检索的基础。它通过分词、建立倒排索引等过程,将原始文本转化为可快速查询的数据结构。分词器(Analyzer)负责将文本分解...

    Lucene.Net +盘古分词 搜索引擎

    在VS2012环境下开发Lucene.Net + 盘古分词的搜索引擎,首先需要安装Lucene.Net的NuGet包,并确保与项目的.NET版本兼容。然后,导入盘古分词库,可以通过下载源码编译或寻找预编译的DLL文件。在项目中,你需要创建...

    Lucene.Net2.3源码,最新版

    通过深入学习和理解这些源代码文件,开发者可以更好地掌握 Lucene.Net 的核心功能,如索引构建、查询解析、搜索排序、分词和性能优化。这有助于在实际项目中实现高效、精确的全文搜索引擎。同时,研究源码也能提升对...

    Lucene.net 2.0 API + DLL 下载

    另外,`Lucene.Net-2.0.doc.zip`文件可能包含的是关于Lucene.NET 2.0的文档资料,可能包括API参考、用户指南、示例代码等,对于学习和掌握这个版本的API非常有帮助。通过阅读这些文档,开发者可以理解如何初始化搜索...

    自己修改的基于lucene.net 2.9和highlighter插件的简单例子

    标题"自己修改的基于lucene.net 2.9和highlighter插件的简单例子"表明这是一个示例项目,演示了如何在Lucene.NET 2.9版本上结合Highlighter插件进行操作。Lucene.NET是Apache Lucene搜索引擎库的.NET版本,用于实现...

    lucene.net 2.9.2 实现索引生成,修改,查询,删除实例

    通过阅读和运行这些代码,你可以更深入地理解Lucene.NET 2.9.2的工作原理,并学习如何在实际项目中应用。 总结来说,Lucene.NET 2.9.2是一个强大的全文检索库,提供了一套完善的API来处理索引管理、查询和结果处理...

    Lucene.net 学习

    主要包含Lucene.net 学习笔记和 Lucene.net 系列的代码,一直一些简单的程序

    SQLServer+Lucene.Net例子

    本文将深入探讨如何结合SQL Server数据库与Lucene.NET,实现高效、灵活的全文搜索功能。Lucene.NET是一个强大的、开源的全文检索库,它为.NET开发者提供了构建高效搜索引擎的工具。 首先,让我们了解SQL Server。...

    Lucene.Net 2.0 源码+文档

    总的来说,"Lucene.Net 2.0 源码+文档"是学习和研究全文检索技术的宝贵资料,无论是对.NET开发人员还是对信息检索感兴趣的人员,都能从中获益匪浅。通过深入研究源码和文档,你可以掌握如何利用Lucene.Net构建高效...

    Lucene.Net.rar 2.0 ver asp.net 组件

    **Lucene.Net 2.0 for ASP.NET组件详解** Lucene.Net是一款开源全文搜索引擎库,是Apache软件基金会Lucene项目的.NET版本。这个压缩包“Lucene.Net.rar 2.0 ver”包含了适用于ASP.NET开发的组件,使得在.NET环境中...

    lucene.net2.9.4源码版

    总结,Lucene.NET 2.9.4源码版为.NET开发者提供了宝贵的资源,通过阅读源码,我们可以学习到全文搜索引擎的设计思想,理解其内部工作流程,从而在实际项目中更加自如地运用Lucene.NET,提高搜索功能的效率和用户体验...

    Lucene.net 3.03 最新版本下载

    Lucene.net下载 Lucene.net3.03,最新版的Lucene.net下载。

    lucene.net完整源码

    《深入剖析Lucene.NET:基于C#的全文检索框架》 Lucene.NET是一个开源的、高性能的全文检索库,它是Apache Lucene项目在.NET平台上的实现。这个库为.NET开发者提供了一个强大的工具,用于在各种应用程序中实现全文...

    lucene.net 完全入门教程

    lucene.net 完全入门教程,包括 lucene.net 介绍, lucene.net工作模式, lucene.net分词方法和中文分词方法, lucene.net索引的建立详解, lucene.net搜索详解, lucene.net的下载方法, lucene.net搜索结果实现...

Global site tag (gtag.js) - Google Analytics