`

Lucene简单入门示例

阅读更多

Lucene自带示例精简,只留下了主要代码。以备查看
对文件夹生成索引
package zhch.illq.lucene;

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

import net.paoding.analysis.analyzer.PaodingAnalyzer;

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.DateTools;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;

public class LuceneIndex {

	static final File INDEX_DIR = new File("d:\\temp\\index");

	// 主要代码 索引docDir文件夹下文档,索引文件在INDEX_DIR文件夹中
	public static void main(String[] args) {
		File docDir = new File("d:\\temp\\neirong");
		try {
			IndexWriter standardWriter = new IndexWriter(FSDirectory.open(INDEX_DIR), new StandardAnalyzer(
					Version.LUCENE_CURRENT), true, IndexWriter.MaxFieldLength.LIMITED);
			// 如果是索引中文内容,可以使用Paoding中文分词器
			IndexWriter writer = new IndexWriter(FSDirectory.open(INDEX_DIR), new PaodingAnalyzer(), true,
					IndexWriter.MaxFieldLength.LIMITED);
			String[] files = docDir.list();
			for (String fileStr : files) {
				File file = new File(docDir, fileStr);
				if (!file.isDirectory()) {
					writer.addDocument(document(file));
				}
			}
			writer.optimize();
			writer.close();

		} catch (IOException e) {
			System.out.println(" caught a " + e.getClass() + "\n with message: " + e.getMessage());
		}
	}

	public static Document document(File f) throws java.io.FileNotFoundException {

		Document doc = new Document();

		// 添加path,索引(可查询)但不切词
		doc.add(new Field("path", f.getPath(), Field.Store.YES, Field.Index.NOT_ANALYZED));

		// 添加最后修改日期
		doc.add(new Field("modified", DateTools.timeToString(f.lastModified(), DateTools.Resolution.MINUTE),
				Field.Store.YES, Field.Index.NOT_ANALYZED));

		// 添加内容,指定一个Reader,文件内容解析但不存储,这里的Reader使用系统默认的编码读入
		doc.add(new Field("contents", new FileReader(f)));
		return doc;
	}
}


对索引进行查询
package zhch.illq.lucene;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;

import net.paoding.analysis.analyzer.PaodingAnalyzer;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexReader;
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.Searcher;
import org.apache.lucene.search.TopScoreDocCollector;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;

public class LuceneSearch {

	/** Simple command-line based search demo. */
	public static void main(String[] args) throws Exception {

		String index = "d:\\temp\\index";
		String field = "contents";
		String queries = null;
		boolean raw = false;
		// 要显示条数
		int hitsPerPage = 10;

		// searching, so read-only=true
		IndexReader reader = IndexReader.open(FSDirectory.open(new File(index)), true); // only

		Searcher searcher = new IndexSearcher(reader);
		Analyzer standardAnalyzer = new StandardAnalyzer(Version.LUCENE_CURRENT);
		// 如果是索引中文内容,可以使用Paoding中文分词器
		Analyzer analyzer = new PaodingAnalyzer();

		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		QueryParser parser = new QueryParser(field, analyzer);
		while (true) {
			if (queries == null) // prompt the user
				System.out.println("Enter query: ");

			String line = in.readLine();

			if (line == null || line.length() == -1)
				break;

			line = line.trim();
			if (line.length() == 0)
				break;

			Query query = parser.parse(line);
			System.out.println("Searching for: " + query.toString(field));

			doPagingSearch(in, searcher, query, hitsPerPage, raw, queries == null);
		}
		reader.close();
	}

	public static void doPagingSearch(BufferedReader in, Searcher searcher, Query query, int hitsPerPage, boolean raw,
			boolean interactive) throws IOException {

		TopScoreDocCollector collector = TopScoreDocCollector.create(hitsPerPage, false);
		searcher.search(query, collector);
		ScoreDoc[] hits = collector.topDocs().scoreDocs;

		int end, numTotalHits = collector.getTotalHits();
		System.out.println(numTotalHits + " total matching documents");

		int start = 0;

		end = Math.min(hits.length, start + hitsPerPage);

		for (int i = start; i < end; i++) {
			Document doc = searcher.doc(hits[i].doc);
			String path = doc.get("path");
			if (path != null) {
				System.out.println((i + 1) + ". " + path);
				System.out.println("   modified: " + doc.get("modified"));

			} else {
				System.out.println((i + 1) + ". " + "No path for this document");
			}

		}

	}

}


分享到:
评论
3 楼 fehly 2010-07-13  
还是用的庖丁解牛的那个插件
2 楼 xredman 2010-06-07  
好东西,我看看,呵呵
1 楼 lyndon.lin 2010-01-06  
呵呵,好久没看这些了。果然是最简单的入门例子。

相关推荐

    lucene入门代码示例

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

    Lucene5学习之创建索引入门示例

    **Lucene5学习之创建索引入门示例** 在IT领域,搜索引擎的开发与优化是一项关键技术,而Apache Lucene作为一款高性能、全文本搜索库,是许多开发者进行文本检索的首选工具。本文将深入探讨如何使用Lucene5来创建一...

    Lucene入门示例

    本文将从一个简单的Lucene入门示例出发,帮助初学者理解其基本概念和操作流程。 首先,我们需要了解Lucene的主要组件: 1. **Analyzer**: 分析器是Lucene中的关键部分,它负责将输入的文本分解为可搜索的词项...

    lucene 入门

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

    Lucene 4.8全文检索引擎入门示例文档

    《Lucene 4.8 全文检索引擎入门详解》 Lucene 是一款开源的全文检索库,由 Apache 软件基金会维护。在版本 4.8 中,Lucene 提供了强大的文本分析、索引构建和搜索功能,使得开发者能够轻松地在应用程序中集成高效的...

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

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

    lucene3.0.0 入门DEMO

    在这个"lucene3.0.0 入门DEMO"中,我们将探讨如何使用 Lucene 3.0.0 版本进行基本操作。 首先,让我们了解Lucene的核心概念: 1. **索引**:在Lucene中,索引是文档内容的预处理结果,类似于数据库中的索引,用于...

    lucene3.6入门实例教程

    这份教程通过完整的代码示例,为学习者提供了实践操作的机会,从而深入理解Lucene的核心机制。 首先,了解Lucene的基本架构至关重要。Lucene的核心组件包括索引器(Indexer)、查询解析器(Query Parser)和搜索器...

    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简单实例记录

    ### Lucene的入门实例 #### 建立索引 1. **包导入**:首先,需要导入Lucene相关的包,包括`java.io`用于文件操作,`org.apache.lucene.analysis`用于文本分析,`org.apache.lucene.document`用于创建文档对象,...

    lucene学习入门程序

    - "sample.dw.paper.lucene1.0"可能是项目或示例代码的目录,包含了Lucene的实现代码和可能的测试数据。在这个目录下,你可能会找到源码文件(如.java)、配置文件(如.xml)以及测试数据。 通过这个入门程序,你...

    lucene入门小例子

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

    Lucene3.0入门实例含jar包

    5. **使用示例**:"Lucene_self01" 文件可能包含了创建索引和查询的基本代码示例,例如: - 初始化 Analyzer 和 Directory(如 RAMDirectory 或 FSDirectory)。 - 创建 IndexWriter 并添加 Document。 - 关闭 ...

    Lucene 2.4 入门例子

    **Lucene 2.4 入门例子** Lucene 是一个高性能、...虽然示例简单,但涵盖了Lucene的核心概念和常用操作。随着深入学习,你可以掌握更高级的特性,如分面搜索、近实时搜索、复杂查询构造等,以适应更复杂的搜索需求。

    Lucene 3.0完成入门

    本篇文章将围绕 Lucene 3.0 版本,详细介绍其入门知识,并通过提供的文档列表,帮助你深入了解并实现简单的搜索功能。 1. **Lucene 3.0 的基础概念** - **索引**:Lucene 的核心是索引,它是一种预处理步骤,将...

    lucene 入门资料包

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

Global site tag (gtag.js) - Google Analytics