`

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入门模块及例子解析

    在这个经典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