`

Lucene 3.0 初步1(创建索引)

 
阅读更多
初次接触Lucene,一步一步来,要实现全文检索,第一步就得先创建索引,请直接看代码:
package cn.com.alei.lucene;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Date;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.Field.Index;
import org.apache.lucene.document.Field.Store;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.LockObtainFailedException;
import org.apache.lucene.store.SimpleFSDirectory;
import org.apache.lucene.util.Version;

/**
 * @author alei
 * @version 创建时间:2012-4-14 下午03:19:09
 * 类说明
 */
public class Indexer {
  
	 public static void main(String[] args) throws CorruptIndexException, LockObtainFailedException, IOException {
		 //被索引文件夹的位置
		 File path = new File("D:\\framework\\luceneDir");
		 
		 
		 /*存放索引文件的位置*/
		 File fileindex = new File("D:\\framework\\luceneIndex");
		 
		//创建Directory对象
		 Directory directory = new SimpleFSDirectory(fileindex);
		 
		 //Analyzer主要负责对各种输入的数据源数据进行分析,包括过滤,分词等各种功能,StandardAnalyzer是Lucene里自带的Analyzer子类实现
		 Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_30);
		 
		 /*/创建IndexWriter对象,第一个参数是Directory,第二个参数为分词器,第三个参数表示是否创建,
		   false表示修改,第四个表示分词的最大值,比如new MaxFieldLength(2)
		      表示两个字一分,一般用IndexWriter.MaxFieldLength.UNLIMITED
		      */
		 IndexWriter indexwriter = new IndexWriter(directory,analyzer,true,IndexWriter.MaxFieldLength.UNLIMITED);
		 
		 File[] files = path.listFiles();
		 
		 long startTime = new Date().getTime();
		 
		 //增加Document到索引中去
		 for(int i = 0 ; i<files.length ; i++){
			 if(files[i].isFile()&&files[i].getName().endsWith(".txt")){
				 System.out.println("File: " + files[i].getCanonicalPath() + " 正在被索引...");
				 String fileContent = readFile(files[i],"GB2312");
				 System.out.println(fileContent);
				 
				 Document document = new Document();
				 Field fieldcontent = new Field("content" , fileContent , Store.NO , Index.ANALYZED);
				 Field filedpath = new Field("path" , files[i].getCanonicalPath() , Field.Store.NO , Field.Index.NOT_ANALYZED);
				 document.add(fieldcontent);
				 document.add(filedpath);
				 indexwriter.addDocument(document);
			 }
		 }
		 //对索引进行优化
		 indexwriter.optimize();
		 
		 indexwriter.close();
		 
		 long endTime = new Date().getTime();
		 System.out.println("花费了 :" + (endTime - startTime) + "毫秒把文档加到索引中去!!!");
		 
	}
	
	 public static String readFile(File file , String charset) throws IOException{
		 BufferedReader bufferedReader = new BufferedReader(
				                         new InputStreamReader(
				                         new FileInputStream(file),charset));
		 StringBuilder sb = new StringBuilder();
		 String str ; 
		 while((str=bufferedReader.readLine())!= null){
			 sb.append(str);
		 }
		 bufferedReader.close();
		 return sb.toString();
	 }

}


分享到:
评论

相关推荐

    lucene3.0 lucene3.0

    lucene3.0 lucene3.0 lucene3.0 lucene3.0 lucene3.0

    Lucene3.0创建索引

    ### Lucene3.0创建索引 在Lucene3.0中创建索引是一个关键功能,可以帮助用户快速地检索和管理大量的文本数据。本篇文章将详细介绍如何使用Lucene3.0来创建索引,并通过一个具体的例子来演示整个过程。 #### 一、...

    lucene 3.0 API 中文帮助文档 chm

    lucene 3.0 API中文帮助,学习的人懂得的

    lucene3.0庖丁+索引搜索程序

    1. 文档索引:Lucene通过分词器(Tokenizer)将输入的文本分解成一系列的词语(Term),并为每个词语创建一个文档频率(Document Frequency, DF)。同时,使用Term频率-逆文档频率(Term Frequency-Inverse Document...

    Lucene3.0之查询类型详解

    【Lucene3.0查询类型详解】 在Lucene3.0中,查询处理是一个关键环节,涉及多种查询方式和理论模型。以下是对这些概念的详细解释: 1. **查询方式**: - **顺序查询**:是最简单的查询方式,直接遍历索引,效率较...

    Lucene3.0 使 用 教 程

    Lucene是一个高性能、可伸缩的开源全文检索库,它提供了文本分析、索引创建、文档检索等核心功能。本教程将深入讲解如何在各种应用场景中运用Lucene,包括站内搜索、BBS和博客文章搜索、网上商店的商品搜索等。 ...

    Lucene 3.0 原理与代码分析完整版

    《Lucene 3.0 原理与代码分析完整版》是一本深入解析Lucene 3.0搜索引擎库的专业书籍。Lucene是Apache软件基金会的开源项目,它为Java开发者提供了一个高性能、全文检索的工具包,广泛应用于各种信息检索系统。这...

    lucene3.0核心jar包

    1. **索引结构**:Lucene 使用倒排索引作为其核心数据结构,这种结构能够快速地定位到包含特定词的文档。在 Lucene 3.0 中,索引过程包括分词、字段处理、文档ID分配等步骤,生成的索引文件包括词典、Posting List、...

    lucene3.0 分词器

    lucene3.0 中文分词器, 庖丁解牛

    lucene3.0 实例

    生成索引的类通常会读取文件内容,创建 Lucene 文档,然后将这些文档添加到索引中。这个过程包括以下几个步骤: 1. 初始化索引目录:使用 `FSDirectory.open()` 创建指向索引存储位置的目录对象。 2. 创建索引...

    lucene3.0全文检索入门实例

    在 Lucene 3.0 中,使用 `IndexWriter` 类来写入文档到索引中。相比于 2.0 版本,3.0 引入了更高级的分析器(Analyzer)和文档(Document)处理,使得对文本的预处理更为精细,支持更多的语言和特性。 ```java ...

    Lucene3.0全文信息检索

    2. **多线程支持**:在3.0版本中,Lucene增强了多线程处理能力,允许在并发环境中更有效地创建和更新索引。 3. **内存管理优化**:Lucene 3.0改进了内存使用策略,降低了内存占用,同时提升了索引和搜索的性能。 4...

    lucene3.0资料包

    总结,Lucene3.0是全文检索领域的一个强大工具,其索引构建、分词、查询解析、搜索算法等功能在当时具有很高的技术水平,并且具有高度的灵活性和扩展性。通过深入学习和应用Lucene3.0,开发者可以构建出高效、智能的...

    lucene3.0使用介绍及实例

    在这个例子中,我们创建了一个索引,包含一个文档,然后搜索包含"Lucene 3.0"的文档。这个简单的示例展示了Lucene的基本用法,实际应用中可以根据需要扩展,例如添加更多的文档字段、实现更复杂的查询逻辑,或者使用...

    lucene3.0-highlighter.jar

    lucene3.0-highlighter.jar lucene3.0的高亮jar包,从lucene3.0源码中导出来的

    lucene 3.0 入门实例

    1. **创建索引(Creating an Index)**: 首先,我们需要创建一个 IndexWriter 对象,配置相应的目录(Directory)和索引设置。然后,通过添加 Document 对象到 IndexWriter 来索引文档。 2. **索引字段(Indexing ...

    lucene3.0英文API

    1. **改进的性能**:Lucene 3.0引入了更高效的内存管理,优化了索引和搜索速度。 2. **多线程支持**:增加了对并发写入和读取的支持,提升了多用户环境下的性能。 3. **新的分析器**:提供了更多针对特定语言的...

    lucene 2.0 api以及lucene 3.0 api

    1. **索引构建**: Lucene 2.0 提供了 `IndexWriter` 类,用于创建和更新索引。开发者可以使用 `Document` 类来封装待索引的数据,然后通过 `addDocument()` 方法添加到索引中。 2. **查询构造**: 通过 `QueryParser...

Global site tag (gtag.js) - Google Analytics