`

Lucence例子

 
阅读更多
我们先给出一个Lucene建立索引的例子:

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Date;

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.DateTools;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.SimpleFSDirectory;
import org.apache.lucene.util.Version;

public class  Index{

	/**
	 * @param args
	 * @throws IOException
	 */
	public static void main(String[] args) throws IOException {
		// 保存索引文件的地方
		String indexDir = "C:\\Users\\ZEQ\\Desktop\\ZZUluceneTest1\\index";
		// 将要搜索TXT文件的地方
		String dateDir = "C:\\Users\\ZEQ\\Desktop\\ZZUluceneTest1\\data";
		IndexWriter indexWriter = null;
		// 创建Directory对象 ,FSDirectory代表待索引的文件存在磁盘上
		Directory dir = new SimpleFSDirectory(new File(indexDir));
		// 创建IndexWriter对象,第一个参数是Directory,第二个是分词器,第三个表示是否是创建,如果为false为在此基础上面修改,第四表示表示分词的最大值,比如说new
		// MaxFieldLength(2),就表示两个字一分,一般用IndexWriter.MaxFieldLength.LIMITED
		indexWriter = new IndexWriter(dir, new StandardAnalyzer(
				Version.LUCENE_30), true, IndexWriter.MaxFieldLength.UNLIMITED);
		
		
		File[] files = new File(dateDir).listFiles();
		for (int i = 0; i < files.length; i++) {
			Document doc = new Document();
			// 创建Field对象,并放入doc对象中
			
			doc.add(new Field("id", i+"", Field.Store.YES,
					Field.Index.NOT_ANALYZED));
			doc.add(new Field("contents", new FileReader(files[i])));
			
			doc.add(new Field("path", files[i].getAbsolutePath(), Field.Store.YES,
					Field.Index.ANALYZED));
			doc.add(new Field("indexDate", DateTools.dateToString(new Date(),
					DateTools.Resolution.DAY), Field.Store.YES,
					Field.Index.NOT_ANALYZED));
			// 写入IndexWriter
			indexWriter.addDocument(doc);
		}
		// 查看IndexWriter里面有多少个索引
		System.out.println("总共------》" + indexWriter.numDocs());
		
		indexWriter.close();

	}

}


以上是给txt文档建立索引的一个例子,我们通过这个例子来理解Lucene建立索引的核心过程~

在这里呢有必要说一下,Lucene各个版本不一样,有较大的差异~~~在这里能我们用的是Lucene3.0版本

我们通过上面的例子可以看出,执行索引的类关键有以下几个:

1,IndexWriter

2,Directory

3,Analyzer

3,Document

4,Field


我们来看一下,建立索引的过程:

下面我们将分别对各个类进行详细介绍。



IndexWriter

   IndexWriter(写索引)是索引过程的核心组件。这个类负责创建新索引和打开已有索引,以及向索引中添加,删除和更新被索引的信息。可以把IndexWriter看作这样一个对象:他为你提供针对索引文件的写入操作,但不能用于读取或搜索索引。IndexWriter需要开辟一定的空间来存储索引,该功能可由Directory完成。

Directory

   Directory类描述了索引存放的位置。他是一个抽象类,他的子类负责具体指定索引的存储路径。在以上的例子中,我们使用FSDirectory.open方法获取真实文件的文件系统的存储路径,然后将它们依次传递给IndexWriter类构造方法。
Lucene中包含大量的有趣的Directory实现,具体的请参考了类文档说明,IndexWriter不能直接索引文本,需要先由Analyzer将文本分成独立的单才行!

Analyzer

    文本文件再被索引之前,需要先被Analyzer(分析器)进行处理。Analyzer是由IndexWriter的构造方法来制定的,他负责从被索引文本文件中提取语汇单元,并提出剩下的无用信息。如果被索引内容不是纯文本,那就需要将其转换为文本文档。Tika可以从常用的媒体格式文件中提取文本内容。Analyzer是一个抽象类,而Lucene提供了几个类来实现它,比如:StandardAnalyzer,SimpleAnalyzer等,除此之外呢,还可以用第三方的分析器IKAnalyzer使用,IKAnalyzer提供了强大的中文分析词,相关介绍将会在以后博文中进行详细介绍。这些类有的用于跳过停用词(stop words)(指一些常用的且不能帮助区分文档的词,如:an ,a,the ,in, on等等)用的用于把语汇单元转换成小写形式,以使搜索过程中忽略大小写区别;除此之外还有一些其他的类。Analyzer是Lucene中很重要的一项,它的功能不仅仅是过滤输入这一项。选择什么样的Analyzer是很关键的一步,当然可以使用第三方的IKAnalyzer。想写的Analyzer介绍,请查看网上相关的文档。

Document

     Document(文档)对象代表一些域(Field)的集合。你可以将Document对象理解为虚拟文档-----比如:web页面,E-mail信息,或者文本文件--------然后,你可以从中取回大量数据,文档的域代表文档或者和文档相关的元数据。文档的数据(比如数据库记录,word文档,书中的某一章)对于Lucene来说是无关紧要的。Lucene只处理从二进制文档中提取的以Field实例形式出现的文本。上述例子中的的元数据(path,contents)都作为文档的不同域单独存储并索引。Document对象的结构比较简单,为一个包含多个Field对象的容器,Field是指包含能被索引的文本内容。

Field

     索引中的每个文档都包含一个或多个不同命名的域,这些域包含在Field类中。每个域都有一个域名和域值,以及一组选项来精确控制Lucen,索引操作各个域值。文档可以拥有不止一个同名的域。在这种情况下,域的值就按照索引操作顺序添加进去。在搜索时,所有域的文本就好像连接在一起,作为一个文本域来处理。

     在使用Lucene进行索引操作时,上述几个类是最常用的,为了实现最基本的搜索功能,你需要熟悉同样小而且简单的Lucene搜索类。

    好了,到此为止,我们已经了解了Lucene创建索引的一些核心类。接下来,我们同样会给出一个Lucene搜索的例子,来为大家讲解Lucene搜索的核心类。

通过上述搜索索引的例子可以看出,很简单,涉及到的核心类如下:

1,IndexSearcher

2,QueryParser

3,Query

4,TopDocs


     

IndexSearcher

     IndexSearcher类用于搜索由IndexWriter创建的索引:这几个类公开了几个搜索方法,它是连接索引的中心环节。可以将IndexSearcher类看作一个以只读方式打开索引的类。他需要利用Directory实例来掌控前期创建的索引,然后才能提供大量的搜索方法,其中一些方法在他的抽象父类Query中实现,最简单的搜索方法是将当个Query对象和int topN 计数作为该方法的参数,并返回TopDocs对象。用法如下:

以上代码是一种搜索的方式,以下也是一种:

Directory dir=FSDirectory.open("c:/index");//打开索引目录

IndexSearcher searcher=new IndexSearcher(dir);//创建查找索引对象

Query query=new TermQuery(new Term("contents","lucene"));//在contents域中查找lucene关键字

TopDocs  hits=searcher.searcher(query,10);//取出前10条记录

for(ScoreDoc scoreDoc:hits.scoreDocs){
Document doc=searcher.doc(scoredoc.doc);
System.out.Println(doc.get("contents"));//获取包含关键字lucene的contents域的值
}


Query

    Lucene包含很多具体的Query子类,到目前为止,Lucene的基本的Query子类 :TermQuery类。还有其他的类:BooleanQuery,PhraseQuery ,PrefixQuuery,PhrasePrefixQuery,TermRangeQuery,NumericRangeQuery,FilteredQuery和SpanQuery。Query是他们的所有共同的父类,

TopDocs

    TopDocs类是一个简单的指针容器,指针一般指向前N个排名的搜索结果,搜索结果即匹配查询条件的文档。TopDocs会记录前N个结果中每个结果的int docID(可以用来恢复文档)和浮点型分数。


参考:http://blog.csdn.net/zeqblog/article/details/16807547
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    lucene例子(一个完整的,lucene例子)(lucenetest.rar,lucene,全文检索,lucene例子)

    lucenetest.rar,lucene,全文检索,lucene例子 lucenetest.rar,lucene,全文检索,lucene例子lucenetest.rar,lucene,全文检索,lucene例子

    Lucene例子

    这个“Lucene例子”压缩包提供了一个可以直接运行的示例,帮助我们快速理解和掌握Lucene的基本用法。 **核心概念** 1. **索引(Index)**: 在Lucene中,索引是将文档内容转换为可搜索的形式。它类似于传统数据库中...

    lucene 例子以及所需jar包

    在这个名为 "lucene 例子以及所需jar包" 的压缩文件中,包含了一个使用 Lucene 实现的完整示例,以及相关的依赖库。 首先,让我们详细了解一下 Lucene 的核心概念和功能: 1. **索引**:Lucene 的工作原理是先构建...

    lucene例子手写

    这个"lucene 例子"可能是通过以下步骤创建的: 1. **引入依赖**:在 Java 项目中,你需要添加 Lucene 的相关依赖库,例如通过 Maven 或 Gradle。 2. **创建索引**: - 实例化 `Directory` 对象,如 `FSDirectory....

    lucene例子

    Lucene 是一个开源、高度可扩展的搜索引擎库,可以从 Apache Software Foundation 获取。您可以将 Lucene 用于商业和开源应用程序。Lucene 强大的 API 主要关注文本索引和搜索。它可以用于为各种应用程序构建搜索...

    lucene3 例子

    【标题】:“Lucene3 实例解析” 在深入探讨Lucene3这个主题之前,我们先来了解一下Lucene是什么。Lucene是一个开源的全文检索库,由Apache软件基金会开发,广泛应用于各种信息检索系统中,包括搜索引擎、内容管理...

    lucene 例子 原理分析 大作业 信息检索

    但基本的怎么使用lucene以及对其 原理的分析都很清楚。里面还有一个能跑的工程。 包括源码和一个发布的工程。两者可能有点点不一致。 (less than 1%) 如果在使用过程中有问题可以qq我:125475832 保留版权。勿用于...

    lucene入门小例子

    这个“lucene入门小例子”很可能是为了帮助初学者理解并掌握Lucene的基本用法而设计的一系列示例代码。 Lucene的核心概念包括索引、文档、字段和查询。首先,你需要理解索引的概念,它类似于传统数据库中的索引,但...

    Lucene 例子

    **Lucene 知识点详解** Lucene 是一个开源全文搜索引擎库,由 Apache 软件基金会开发。它提供了一个可扩展的、高性能的搜索框架,使得开发者能够快速地在大量数据中实现全文检索功能。Lucene 的核心功能包括文本...

    lucene 例子

    Lucene 是一个高性能、全文本搜索库,由Apache软件基金会开发。它允许开发人员在他们的应用程序中集成强大的搜索功能,支持多种数据源的索引和检索。Lucene 提供了一个简单但功能强大的API,用于索引文本数据并执行...

    lucene与quartz例子

    lucene quartz 例子lucene quartz 例子lucene quartz 例子lucene quartz 例子lucene quartz 例子lucene quartz 例子lucene quartz 例子lucene quartz 例子lucene quartz 例子lucene quartz 例子

    lucene实例lucene实例

    《Lucene实战:深入解析与应用》 Lucene,作为Apache软件基金会的开源全文检索库,是Java领域中广泛使用的搜索引擎框架。它提供了强大的文本分析、索引和搜索功能,被许多大型项目采用,如Elasticsearch、Solr等。...

    lucene3.0 例子

    lucene3.0 例子lucene3.0 例子 lucene3.0 例子 ,很好的学习,只有原代原,jar 包自己加上去就OK了

    一个基于LUCENE搜索引擎项目例子

    在这个项目例子中,我们将深入探讨如何利用Lucene进行索引构建、查询处理以及结果排序,从而创建一个功能完善的搜索引擎。 首先,我们需要了解Lucene的基本概念。Lucene的核心功能包括文本分析、索引构建和搜索。...

    lucene文档例子

    lucene文档例子

Global site tag (gtag.js) - Google Analytics