`

lucene入门代码一

阅读更多
本代码涉及到的关键类有:
IndexWriter 
Directory
Analyzer
Document
Field
IndexSearcher
Term
Query
TermQuery
TopDocs


代码示例:
package com.yale.lucene;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStreamReader;

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;
import org.apache.lucene.util.Version;

/**
 * 创建一个索引
 * 
 * 
 * 
 */
public class Indexer
{
	public static void main(String[] args) throws Exception
	{
		// 创建索引放在这个目录
		String indexDir = "F://新建文件夹//luceneTest//indexFile";
		// 要索引的文件存在的目录
		String dataDir = "F://新建文件夹//luceneTest//dataSource";
		long start = System.currentTimeMillis();
		Indexer indexer = new Indexer(indexDir);
		int numIndexed;
		try
		{
			numIndexed = indexer.index(dataDir, new TextFilesFilter());
		}
		finally
		{
			indexer.close();
		}
		long end =System.currentTimeMillis();
		System.out.println("Indexing " + numIndexed + " files took "
				+ (end - start) + " milliseconds");

	}

	private IndexWriter writer;

	public Indexer(String indexDir) throws Exception
	{
		Directory dir = FSDirectory.open(new File(indexDir));
		// 创建IndexWriter
		writer = new IndexWriter(dir, new StandardAnalyzer(Version.LUCENE_30),
				true, IndexWriter.MaxFieldLength.LIMITED);

	}

	// 关闭IndexWriter
	public void close() throws Exception
	{
		writer.close();
	}

	// 开始索引
	public int index(String dir, FileFilter filter) throws Exception
	{
		File[] files = new File(dir).listFiles();
		for (File f : files)
		{
			if (!f.isDirectory() && !f.isHidden() && f.exists() && f.canRead()
					&& (filter == null || filter.accept(f)))
			{
				indexFile(f);
			}
		}
		return writer.numDocs();
	}

	// 索引文件
	private void indexFile(File f) throws Exception
	{
		System.out.println("Indexing " + f.getCanonicalPath());
		Document doc = getDocument(f);
		writer.addDocument(doc);

	}

	// 文档设置
	private Document getDocument(File f) throws Exception
	{
		Document doc = new Document();
		doc.add(new Field("contents", File2Reader(f), Field.Store.YES,
				Field.Index.ANALYZED));
		doc.add(new Field("filename", f.getName(), Field.Store.YES,
				Field.Index.NOT_ANALYZED));
		doc.add(new Field("fullpath", f.getCanonicalPath(), Field.Store.YES,
				Field.Index.NOT_ANALYZED));

		return doc;
	}

	public static String File2Reader(File f) throws Exception
	{
		BufferedReader bf = new BufferedReader(new InputStreamReader(
				new FileInputStream(f)));
		StringBuffer sb = new StringBuffer();
		for (String line = null; (line = bf.readLine()) != null;)
		{
			sb.append(line).append("\n");
		}
		return sb.toString();
	}

	// 文件类型过滤
	private static class TextFilesFilter implements FileFilter
	{
		@Override
		public boolean accept(File pathname)
		{

			return pathname.getName().toLowerCase().endsWith(".txt");
		}
	}
}


package com.yale.lucene;

import java.io.File;

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;

public class Searcher
{
	public static void main(String[] args) throws Exception
	{
		// 索引放在这个目录
		String indexDir = "F://新建文件夹//luceneTest//indexFile";
		// 要查询的字符串
		String queryString = "Apache";
		search(indexDir, queryString);
	}
//开始搜索
	public static void search(String indexDir, String queryString)
			throws Exception
	{
		Directory dir = FSDirectory.open(new File(indexDir));

		IndexSearcher is = new IndexSearcher(dir);

		QueryParser parser = new QueryParser(Version.LUCENE_30, "contents",
				new StandardAnalyzer(Version.LUCENE_30));

		Query query = parser.parse(queryString);

		long start = System.currentTimeMillis();
		TopDocs hits = is.search(query, 10);
		long end = System.currentTimeMillis();
		System.err.println("找到   " + hits.totalHits + "个文件 在" + (end - start)
				+ "毫秒匹配 要查询的字符串	'" + queryString + "'");
		
		for(ScoreDoc scoreDoc :hits.scoreDocs)
		{
			Document doc = is.doc(scoreDoc.doc);
			
			System.out.println(doc.get("fullpath"));
			
			System.out.println(doc.get("filename"));
			
			System.out.println(doc.get("contents"));
		}
		is.close();
	}
}

分享到:
评论
1 楼 object_object 2012-07-02  
不错,学习了。。。

相关推荐

    lucene入门代码示例

    最受欢迎的java开源全文搜索引擎开发工具包。 提供了完整的查询引擎和... Lucene的目的是为软件开发人员提供一个简单易用的工具包, 以方便在目标系统中实现全文检索功能, 或者是以此为基础建立起完整的全文检索引擎。

    lucene 入门

    `lucene入门小实例.txt` 文件中可能包含了一个简单的Lucene使用示例,例如: 1. 创建 `Directory` 对象,比如使用 `FSDirectory.open()` 打开一个文件系统的目录来存储索引。 2. 实例化 `Analyzer`,如使用 `...

    lucene入门小例子

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

    Lucene 的入门 实例 代码

    1. **开放源代码**:Lucene 的源代码可供学习和定制,允许开发者根据实际需求创建更适合的应用。 2. **灵活的架构**:Lucene 的面向对象架构易于扩展,可以轻松处理各种文本格式,如HTML和PDF。 3. **社区支持**:...

    lucene 入门资料包

    以上是Lucene入门的基本知识和关键概念,通过深入学习和实践,你可以掌握如何利用Lucene构建强大的全文搜索引擎。记住,实践中遇到的问题往往是最好的学习资源,不断尝试和解决,你将逐渐成为Lucene的专家。

    lucene3.6的入门案例

    **Lucene 3.6 入门案例** Lucene 是一个高性能、全文本搜索库,由 Apache 软件基金会开发。它提供了完整的搜索功能,包括索引、查询、评分等,广泛应用于各种项目和产品中。在这个入门案例中,我们将深入理解如何...

    lucene搜索的简单入门例子源代码

    本篇将通过一个简单的入门例子,带你了解如何使用Lucene进行搜索。 首先,我们要知道Lucene的核心组件包括文档(Document)、字段(Field)、索引(Index)和查询(Query)。在Lucene中,信息是以文档的形式存储,...

    Lucene入门与使用

    ### Lucene 入门与使用详解 #### 一、Lucene 简介及历史背景 1. **Lucene 的定义**: - **Lucene** 是一款纯 Java 编写的全文检索工具包,由资深全文索引/检索专家 Doug Cutting 创建。 - 它最初在 Doug Cutting...

    全文搜索引擎lucene入门

    **全文搜索引擎Lucene入门** 全文搜索引擎Lucene是Apache软件基金会的一个开放源代码项目,它为Java开发者提供了一个高性能、可扩展的信息检索库。Lucene以其强大的文本搜索功能和高效的索引能力,在各种需要全文...

    lucene入门到项目开发.docx

    《Lucene入门到项目开发》 Lucene是一个高性能、全文本搜索库,由Apache软件基金会开发,被广泛应用于各种搜索引擎的构建。它提供了一个简单但功能强大的API,可以帮助开发者快速实现对文本数据的检索和分析。 一...

    Lucene 简单入门程序实例

    标题与描述:“Lucene简单入门程序实例”这一标题与描述明确指出文章将引导读者通过一个实际的示例来了解和掌握Lucene的基本操作。Lucene是一个高性能、全功能的文本搜索引擎库,它允许用户对文档进行索引和搜索。本...

    一个经典Lucene入门模块及例子解析

    在这个经典Lucene入门模块中,我们将深入理解如何使用Lucene进行索引创建和搜索操作。 首先,我们来看Lucene如何建立数据的索引。这通常涉及以下几个步骤: 1. **索引创建**:使用 `IndexWriter` 对象来创建或更新...

    lucene入门基础教程

    ### Lucene 入门基础教程知识点详解 #### 一、Lucene简介 - **定义**:Lucene是一款高性能、全功能的文本搜索引擎库,由Java编写而成,属于Apache项目的一部分。 - **适用场景**:适合于任何需要进行全文检索的应用...

    apache lucene 4.10.0入门单元测试代码demo

    1.建立索引 2.通过IKAnalyzer搜索中文关键词 3.复杂的多字段搜索 4.多线程并发搜索,通过contiperf测试,详见:contiperf_百度百科 5.分页搜索 注意:lucene4.10.0需要jdk1.7以上版本,1.6版本以下明确不再支持...

    lucene 入门一

    总结起来,Lucene入门涉及理解其索引和查询机制,掌握如何在Java项目中创建、管理和使用索引,以及如何执行有效的查询。CargoSearchServiceImpl.java和ManageCargoIndexServiceImpl.java代表了具体实现这些功能的...

    【大搜集:lucene学习资料】---<下载不扣分,回帖加1分,欢迎下载,童叟无欺>

    lucene入门实战.txt Lucene 的学习 .txt Lucene-2.0学习文档 .txt Lucene入门与使用 .txt lucene性能.txt 大富翁全文索引和查询的例子程序.txt 关于lucene2.0的创建、检索和删除功能的完整实现.doc web...

    lucene 3.0 入门实例

    doc.add(new Field("title", "Lucene入门", Field.Store.YES, Field.Index.ANALYZED)); doc.add(new Field("content", "这是Lucene 3.0的实例", Field.Store.YES, Field.Index.ANALYZED)); ``` 3. **查询...

    Lucene 3.0完成入门

    1. **Lucene 3.0 的基础概念** - **索引**:Lucene 的核心是索引,它是一种预处理步骤,将文档内容转换为便于快速搜索的数据结构。 - **分词**:Lucene 使用分词器(Tokenizer)将文档拆分为单独的词汇项(Tokens...

Global site tag (gtag.js) - Google Analytics