`
chenhua_1984
  • 浏览: 1251211 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

lucene+nutch学习笔记五:创建一个简单的索引

阅读更多
package chapter5;

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

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.SimpleAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexCommitPoint;

import org.apache.lucene.store.LockObtainFailedException;

public class LuceneIndexTest {

	/**
	 * @param args
	 */
	private static String dest_Index_Path = "D:\\workshop\\TextIndex";
	static protected String[] keywords = { "001", "002", "003" };
	static protected String[] textdetail = { "记录一", "记录二", "记录三" };

	public static void main(String[] args) {
		Date start = new Date();
		Analyzer 


textAnalyzer = new SimpleAnalyzer();
		try {
			IndexWriter 


textIndex = new IndexWriter(dest_Index_Path,
					textAnalyzer, true);//true or false menus create or update
			for (int i = 0; i < 3; i++) {
				Document 

document = new Document();
				Field 

field_id = new Field("id", keywords[i], Field.Store.YES,
						
Field.Index.UN_TOKENIZED

);
				document.add(field_id);
				Field field_content = new Field("content", textdetail[i],
						Field.Store.YES, Field.Index.TOKENIZED

);
				document.add(field_content);

			}
			textIndex.optimize();// 不关闭索引只保存在内存里面。
			
textIndex.close();


			Date end = new Date();
			long index_tm = end.getTime() - start.getTime();
			System.out.println("Total Time :(ms)");
			System.out.println(index_tm);

		} catch (CorruptIndexException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (LockObtainFailedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println("Index Success!");

	}

}

 注意,测试代码的版本是lucene2.3.jar

A

IndexWriter 

textIndex = new IndexWriter(dest_Index_Path,
					textAnalyzer, true);//true or false menus create or update

表示的是索引创建器,3个参数是,路径,分析器,是否重建。第3个参数为true,表示重新建立索引(假若存在则删除原文件),假若为false,那么在原来的基础上更改,这就是创建增量索引。

还有一个构造函数参数是一个目录,可以用以下方法取得。

            Directory dir=FSDirectory.getDirectory(dir_name);
            Analyzer textAnalyzer=new StandardAnalyzer();
            IndexWriter indexWriter=new IndexWriter(dir,textAnalyzer,false);

B Analyzer textAnalyzer = new SimpleAnalyzer();

Analyzer是索引分析器,每个域的数据在添加时都会使用它来进行分析。

 

C

 

Document 

document = new Document();
				Field 

field_id = new Field("id", keywords[i], Field.Store.YES,
						
Field.Index.UN_TOKENIZED

);

 

这里的Document并不是真正意识的文档,而是一个抽象的概念,可以理解为一个要被索引的内容的一个容器,有不同的Field组成的Document .

 

 D 另外就是索引管理器IndexReader ,用来管理索引的强大工具。可以用它来删除索引

	File indexDir=new File("D:\\workshop\\TextIndex");
		try {
			IndexReader indexReader=IndexReader.open(indexDir);

//准备索引文件的目录,生成对象读取索引内容
			Term term=new Term("name","xx.txt");//创建要删除的对象的索引项的表示(Term)


			indexReader.deleteDocuments

(term);//删除符合索引项的文档
			indexReader.close

();//关闭,实现物力删除
		} catch (CorruptIndexException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

 下面贴一个给文本文件建立索引的代码,一共参考:

package chapter5;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
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.index.IndexWriter;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;

public class LunceneIndexManager {

	/**
	 * @param args
	 */
	private static String dest_Index_Path = "D:\\workshop\\TextIndex";
	private static String text_File_Path = "D:\\largeData\\xx.txt";
	
	
	public static void main(String[] args) throws IOException {
		
		Date start=new Date();
		File file=new File(text_File_Path);
		
		try {
			FileReader fileReader=new FileReader(file);
			String dir_name=dest_Index_Path;
			
			Directory dir=FSDirectory.getDirectory(dir_name);
			Analyzer textAnalyzer=new StandardAnalyzer();
			IndexWriter indexWriter=new IndexWriter(dir,textAnalyzer,false);
			
			Document document=new Document();
			
			Field field_name=new Field("name",file.getName(),Field.Store.YES,Field.Index.UN_TOKENIZED);
			document.add(field_name);
			
			InputStream inputStream=new FileInputStream(file);
			int leng=inputStream.available();
			byte[] by=new byte[leng];
			inputStream.read(by);
			inputStream.close();
			
			String content=new String(by);
			
			Field field_content=new Field("content",content,Field.Store.YES,Field.Index.TOKENIZED);
			document.add(field_content);
			
			indexWriter.addDocument(document);
			indexWriter.optimize();
			indexWriter.close();
			Date end=new Date();
			long ss=end.getTime()-start.getTime();
			System.out.println("Total Time:(ms)");
			System.out.println(ss);
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println("Index Sucess!");
		

	}

}
 

 

分享到:
评论

相关推荐

    lucene2.4+nutch学习笔记三:lucene 在多个文本文档里找出包含一些关键字的文档

    《Lucene 2.4与Nutch学习笔记:在多文档中搜索关键词》 Lucene是一个高性能、全文检索库,而Nutch则是一个开源的网络爬虫项目,两者结合使用,能够实现对大量文本文档的高效搜索和索引。这篇学习笔记主要探讨如何...

    基于lucene和nutch的开源搜索引擎资料集合

    一个例子学懂搜索引擎(lucene).doc 中文搜索引擎技术揭密.doc 九大开源搜索引擎介绍.txt 基于Nutch的搜索引擎技术.pdf 基于开源工具搭建小型搜索引擎.pdf 整合开源工具的小型搜索引擎构建.pdf 用_Hadoop_进行分布式...

    Nutch全文搜索学习笔记

    ### Nutch全文搜索学习笔记 #### 一、Nutch安装与配置 **1. Linux环境下的JDK安装** 为了能够顺利地安装并运行Nutch,首先确保系统中已安装Java Development Kit (JDK) 并且正确配置了`JAVA_HOME`环境变量。如果...

    Nutch 0.8笔记NUTCHNUTCH

    Nutch 是一个开源的、基于 Lucene 的网络搜索引擎项目,它提供了一套完整的搜索引擎解决方案,包括网页抓取、索引和搜索功能。Nutch 0.8 版本尤其值得关注,因为它完全使用 Hadoop 进行了重写,从而充分利用了 ...

    Lucene学习笔记

    这个学习笔记主要涵盖了Lucene的基本概念,包括索引、文档、域和项,以及安装配置和索引的基本过程。 1. **基本概念** - **索引(Index)**:索引是Lucene的核心,它是由一系列文档组成的。每个索引包含了对文档...

    lucene笔记

    - **Nutch**: 是一个开源网络爬虫,结合了Lucene用于网页抓取和索引。 ### 5. 学习资源 - 官方文档: Apache Lucene的官方文档是学习Lucene的好起点。 - "Lucene in Action"书籍: 一本深入介绍Lucene的书籍,适合...

    Hadoop数据分析平台学习笔记

    ### Hadoop数据分析平台学习笔记 #### 一、Hadoop概述 **Hadoop**是一个开源软件框架,用于分布式存储和处理大型数据集。它的设计灵感来源于Google的论文,其中包括Google文件系统(GFS)和MapReduce计算模型。...

    Hadoop阶段初识学习笔记

    - **2006年**:在Google发布的关于GFS和MapReduce的研究报告启发下,他们开始着手创建Hadoop项目,目的是为了提供一个低成本的解决方案来构建大规模的数据处理算法。 #### 四、Hadoop的技术架构 1. **HDFS...

    Hadoop学习笔记

    【Hadoop学习笔记】 Hadoop 是一个开源框架,主要用于处理和存储大数据。它源自于解决互联网公司面临的海量数据处理问题,特别是Google发布的三篇技术论文,即GFS(Google File System)、MapReduce以及BigTable。...

    ElasticSearch笔记

    Elasticsearch的诞生可以追溯到Doug Cutting的工作,他最初创建了Lucene,一个用于文本搜索的Java函数库。随着需求的增长,Cutting与Mike Cafarella合作,开发了Nutch,一个基于Lucene的开源搜索引擎项目,旨在提供...

    hadoop笔记2.pdf

    Hadoop的发展与Lucene框架有着密切的联系,后者由Doug Cutting创建,最初是Apache基金会的一个子项目。在2003至2004年间,Google公开了GFS(Google File System)和MapReduce的细节,启发了Doug Cutting等人开发了...

Global site tag (gtag.js) - Google Analytics