`
Clayz
  • 浏览: 298553 次
  • 性别: Icon_minigender_1
  • 来自: 东京
社区版块
存档分类
最新评论

Lucene初学备注

阅读更多

1,检索文件目录,创建index

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

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;

/**
 * @author Clay Zhong - Email: zjclay@gmail.com
 * @date Sep 7, 2008
 */
public class Indexer {
	public static int index(File indexDir, File dataDir) throws IOException {
		if (!dataDir.exists() || !dataDir.isDirectory()) {
			throw new IOException(dataDir + " does not exists or is not a directory");
		}

		IndexWriter writer = new IndexWriter(indexDir, new StandardAnalyzer(), true);
		writer.setUseCompoundFile(false);
		indexDirectory(writer, dataDir);

		int indexNbr = writer.docCount();
		writer.optimize();
		writer.close();

		return indexNbr;
	}

	private static void indexDirectory(IndexWriter writer, File dir) throws IOException {
		File[] files = dir.listFiles();

		for (int i = 0; i < files.length; i++) {
			File f = files[i];
			if (f.isDirectory()) {
				indexDirectory(writer, f);
			}
			else {
				indexFile(writer, f);
			}
		}
	}

	private static void indexFile(IndexWriter writer, File file) throws IOException {
		if (!file.exists() || file.isHidden() || !file.canRead()) {
			return;
		}

		System.out.println("Index: " + file.getCanonicalPath());

		Document doc = new Document();
		doc.add(new Field("path", file.getCanonicalPath(), Field.Store.COMPRESS,
				Field.Index.UN_TOKENIZED));
		doc.add(new Field("content", new FileReader(file)));

		writer.addDocument(doc);
	}
}

 

2,检索index目录,查找文档对象

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

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;

/**
 * @author Clay Zhong - Email: zjclay@gmail.com
 * @date Sep 7, 2008
 */
public class Searcher {
	public static void search(File indexDir, String queryString) throws IOException, ParseException {
		IndexReader reader = IndexReader.open(indexDir);
		org.apache.lucene.search.Searcher searcher = new IndexSearcher(reader);
		QueryParser parser = new QueryParser("content", new StandardAnalyzer());
		Query query = parser.parse(queryString);

		long start = new Date().getTime();
		Hits hits = searcher.search(query);
		long end = new Date().getTime();

		System.out.println("Found " + hits.length() + " document(s) (in " + (end - start)
				+ " milliseconds) that matched query: '" + queryString + "'");

		for (int i = 0; i < hits.length(); i++) {
			Document doc = hits.doc(i);
			System.out.println(hits.id(i) + " - " + hits.score(i) + " - " + doc.get("path"));
		}
	}
}

 

3,运行Demo,查看索引结果

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

/**
 * @author Clay Zhong - Email: zjclay@gmail.com
 * @date Sep 6, 2008
 */
public class Demo {
	public static void main(String[] args) {
		try {
			if (true) {
				long start = new Date().getTime();
				int indexingNbr = Indexer.index(new File("/home/clay/work/lucene/index"), new File(
						"/home/clay/work/lucene/data"));
				long end = new Date().getTime();

				System.out.println("Indexing:" + indexingNbr + " files, took " + (end - start)
						+ " milliseconds");
			}
			else {
				Searcher.search(new File("/home/clay/work/lucene/index"), "junit");
			}
		}
		catch (Exception e) {
			e.printStackTrace();
		}
	}
}
 
分享到:
评论

相关推荐

    供lucene初学者学习的几个类

    在IT领域,Lucene是一个非常重要的全文搜索引擎库,由Apache软件基金会开发并维护。它为开发者提供了在Java应用程序中实现全文检索和分析功能的高级工具。对于初学者来说,掌握几个核心类的理解和使用是至关重要的。...

    lucene 4.3.1 初学小工程

    **Lucene 4.3.1 初学小工程** Lucene 是一个开源的全文搜索引擎库,由Apache软件基金会开发并维护。它提供了一个高级的、可扩展的搜索功能,使得开发者能够在自己的应用程序中轻松地实现全文检索。版本4.3.1是...

    lucene,lucene教程,lucene讲解

    lucene,lucene教程,lucene讲解。 为了对文档进行索引,Lucene 提供了五个基础的类 public class IndexWriter org.apache.lucene.index.IndexWriter public abstract class Directory org.apache.lucene.store....

    Lucene搜索引擎开发权威经典随书资源7-10

    本书适合从Lucene初学者到高级开发人员之间的一切Lucene爱好者。  内容精练实用,书中所列代码可以搭建一座中型搜索平台,完整实例再现,让读者紧跟作者构建思路,Lucene搜索引擎技术完美演绎。

    lucene3.0 lucene3.0

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

    Lucene3.5源码jar包

    **正文** Lucene是一个高性能、全文...这份源码不仅适用于初学者,也是经验丰富的开发者的宝贵参考资料。通过阅读和理解这些源码,你可以提升自己的搜索引擎开发能力,更好地利用Lucene构建高效、精准的信息检索系统。

    Lucene示例 BM25相似度计算

    本文将深入探讨Lucene示例中的BM25相似度计算,旨在帮助初学者理解如何利用Lucene 4.7.1版本构建索引、执行查询,并比较默认的TF-IDF相似度与BM25相似度的区别。 首先,我们需要了解什么是Lucene。Lucene是一个由...

    Lucene搜索引擎开发权威经典随书资源1-6章

    本书适合从Lucene初学者到高级开发人员之间的一切Lucene爱好者。  内容精练实用,书中所列代码可以搭建一座中型搜索平台,完整实例再现,让读者紧跟作者构建思路,Lucene搜索引擎技术完美演绎。

    Lucene资料大全(包括Lucene_in_Action书等)

    这份PPT可能包含对Lucene基础知识的快速概览,如Lucene的主要特点、基本用法,以及适合初学者的示例代码。它可能以简洁易懂的方式解释Lucene的关键概念,对于快速入门Lucene是非常有价值的资源。 总的来说,这个...

    lucene in action源码

    《Lucene in Action》是关于Apache Lucene的权威指南,这本书深入浅出地介绍了全文搜索引擎的构建和优化。源码的提供使得读者...对于初学者而言,这是一个很好的起点,可以帮助他们快速上手并逐步掌握全文检索技术。

    lucene in action 2nd edition, lucene in action 第二版 PDF

    《Lucene in Action 第二版》是一本深入探讨Apache Lucene全文检索库的专业书籍,它在Java开发领域具有很高的权威性。这本书详细介绍了如何利用Lucene进行高效的...无论是初学者还是有经验的开发者,都能从中受益匪浅。

    lucene搜索引擎项目

    这对于初学者来说,是一个极好的实践平台。 通过深入研究这个项目,开发者可以了解Lucene的工作原理,掌握搜索引擎的构建技巧,并且能够灵活运用到实际的项目中,提高数据检索的效率和用户体验。无论你是Java开发者...

    lucene in action 第二版

    初学者可以通过这些实例快速理解和掌握Lucene的基础知识和应用技巧。 ### 标签知识点: “java lucene教程”标签说明了这本书的读者对象主要是使用Java语言的程序员,并且这本书是专注于Lucene的教程。对于Java...

    lucene-4.7.0全套jar包

    【Lucene 4.7.0 全套JAR包详解】 Lucene是一个开源全文搜索引擎库,由Apache软件基金会开发并维护。它提供了一个高级、灵活的文本搜索API,允许开发者轻松地在应用程序中实现复杂的搜索功能。这次提供的“lucene-...

    lucene-2.2.0zip

    对于初学者来说,从老版本开始学习,逐步了解其核心原理,再过渡到新版本,可以更好地掌握Lucene这一强大的搜索引擎开发工具。在实际项目中,选择适合版本的Lucene,根据需求进行定制和优化,将有助于构建出高效、...

    lucene 数据库

    作者分享了在实际操作中遇到的问题和解决方法,对于初学者来说,这是一份宝贵的实战经验总结。 接着是《Lucene的系统结构.doc》。该文档详细阐述了Lucene的架构设计,包括其核心组件如Analyzer(分析器)、Document...

    lucene in action英文版 lucene 3.30包

    《Lucene in Action》是关于Apache Lucene的权威指南,这本书深入浅出地介绍了全文搜索引擎的构建和优化。Lucene是一个高性能、全文本搜索库,它允许开发人员在应用程序中轻松实现复杂的搜索功能。这本书主要面向...

    Lucene时间区间搜索

    Lucene是一款强大的全文搜索引擎库,广泛应用于各种数据检索场景。在C#环境下,利用Lucene进行时间区间搜索是提高数据检索效率和精确度的重要手段。本篇将深入探讨如何在C#中实现Lucene的时间区间查询匹配,以及涉及...

    Lucene简介.介绍

    【Lucene 简介】 Lucene 是一个强大的开源全文搜索库,由 Java 编写,主要用于为应用程序添加全文检索功能。它不是一个完整的全文搜索引擎应用,而是一个工具包,允许开发者将其集成到自己的软件中,以实现高效、...

Global site tag (gtag.js) - Google Analytics