IndexFile.java用于将目录下的文件进行索引
(需要导入lucene-core-3.0.3.jar包)
package cn.edu.uestc.lucene;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Date;
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.CorruptIndexException;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.store.LockObtainFailedException;
import org.apache.lucene.util.Version;
public class IndexFile {
private static String sourceFilePath = "C:\\source";
private static String indexFilePath = "C:\\index";
//索引filePath目录下的所有文件
public static void indexDox(IndexWriter writer, String filePath)
throws CorruptIndexException, IOException {
if (null == filePath || null == writer)
return;
File file = new File(filePath);
if (file.exists() && file.canRead() && file.isDirectory()) {
File files[] = file.listFiles();
for (File f : files) {
Document doc = new Document();
//索引文档的存放路径
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));
//索引文档的内容
doc.add(new Field("contents", new FileReader(f)));
//向索引中添加文档
writer.addDocument(doc);
}
}
}
public static void main(String[] args) {
IndexWriter writer = null;
long startTime = 0l, endTime = 0l;
try {
//1.创建索引写入对象writer
//指定创建索引存放位置FSDirectory.open(new File(sourceFilePath)
//指定创建索引过程使用的StandAnalyzer分词器进行分词
//指定创建新的索引true, false为覆盖已有的索引
//指定writer最大的分词数为IndexWriter.MaxFieldLength.LIMITED
writer = new IndexWriter(FSDirectory.open(new File(sourceFilePath)),
new StandardAnalyzer(Version.LUCENE_30),
true, IndexWriter.MaxFieldLength.LIMITED);
System.out.println("Indexing to directory '" +sourceFilePath+ "'...");
startTime = new Date().getTime();
//2.添加文件进行索引
indexDox(writer, indexFilePath);
System.out.println("Optimizing...");
//3.对索引过程进行优化处理
writer.optimize();
//4.索引完成后关闭IndexWriter
writer.close();
} catch (CorruptIndexException e) {
e.printStackTrace();
} catch (LockObtainFailedException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
endTime = new Date().getTime();
System.out.println("It takes " + (endTime - startTime)
+ " milliseconds to create index for the files in directory "
+ sourceFilePath);
}
}
SearchFile.java在索引中搜索查询词[/b]
package cn.edu.uestc.lucene;
import java.io.File;
import java.io.IOException;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.queryParser.ParseException;
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.FSDirectory;
import org.apache.lucene.util.Version;
public class SearchFile {
private static String indexFilePath = "C:\\index";
private static String queryString = "lucene";
public static void main(String[] args) {
IndexSearcher searcher = null;
QueryParser parser = null;
Query query = null;
TopDocs hits = null;
long startTime = 0L, endTime = 0L;
try {
//1.打开索引文件,索引文件的位置是磁盘文件系统上的indexFilePath
searcher = new IndexSearcher(FSDirectory.open(new File(indexFilePath)));
//2.指定StandardAnalyzer解析查询字符串,查询的Field的域是"contents",而查询的字符串是queryString
parser = new QueryParser(Version.LUCENE_30,
"contents",
new StandardAnalyzer(Version.LUCENE_30));
query = parser.parse(queryString);
//3.搜索索引,返回结果保存在TopDocs当中
startTime = System.currentTimeMillis();
hits = searcher.search(query, 5);
endTime = System.currentTimeMillis();
} catch (CorruptIndexException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
//4.显示结果,打印匹配文档的路径
System.out.println("Found "+hits.totalHits+" documents (in "+(endTime - startTime)
+" milliseconds) that match query '"+queryString+"':");
for(ScoreDoc tdoc:hits.scoreDocs){
Document doc = null;
try {
doc = searcher.doc(tdoc.doc);
} catch (CorruptIndexException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(doc.get("path"));
}
//5.完成搜索后关闭IndexSearch
try {
searcher.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
分享到:
相关推荐
**Lucene 3.0 入门实例** Lucene 是一个高性能、全文本搜索库,由 Apache 软件基金会开发。它提供了完整的搜索功能,包括索引、查询解析、排序以及高级的文本分析能力。在 Lucene 3.0 版本中,开发者可以利用其强大...
**Lucene 3.0 入门实例及关键知识点** Lucene 是一个开源的全文搜索引擎库,由 Apache 软件基金会开发。它为开发者提供了在应用程序中实现文本搜索功能的强大工具。本实例主要针对 Lucene 3.0 版本,这个版本虽然...
**Lucene 3.0 全文检索入门实例** Lucene 是一个开源的全文检索库,由 Apache 软件基金会开发。它提供了一个高级、灵活的搜索功能框架,允许开发者在自己的应用中轻松地集成全文检索功能。本文将重点介绍如何使用 ...
这个入门实例将引导我们了解如何使用Lucene 3.0版本进行基本的索引和搜索操作。以下是对Lucene 3.0关键知识点的详细讲解: 1. **Lucene的架构**: Lucene的核心组件包括文档(Document)、字段(Field)、索引...
《Lucene 3.0 完成入门》 Lucene 是一个开源的全文检索库,由 Apache 软件基金会维护。它为开发者提供了一种高级的文本搜索功能,允许他们在应用程序中集成强大的搜索引擎。本篇文章将围绕 Lucene 3.0 版本,详细...
【Lucene3.0 使用教程】是针对Java开发者的一个指南,旨在教授如何利用Apache Lucene 3.0.1版本实现全文检索功能。Lucene是一个高性能、可伸缩的开源全文检索库,它提供了文本分析、索引创建、文档检索等核心功能。...
《Lucene 3.0 入门:搜索引擎开发的基础指南》 Lucene 是一个高性能、全文本搜索库,由 Apache 软件基金会维护。它为开发者提供了在各种应用程序中实现全文索引和搜索功能的强大工具。Lucene 3.0 版本是其历史上的...
**全文搜索引擎Lucene入门** 全文搜索引擎Lucene是Apache软件基金会的一个开放源代码项目,它为Java开发者提供了一个高性能、可扩展的信息检索库。Lucene以其强大的文本搜索功能和高效的索引能力,在各种需要全文...
自2006年12月发布1.0版以来,IK Analyzer 经历了多次升级,3.0版已演变为独立于 Lucene 的通用分词组件,同时也为 Lucene 提供了优化的集成。 1. **IK Analyzer 3.0 结构设计** - IK Analyzer 3.0 的设计旨在提高...
##### Lucene用户快速入门 对于Lucene用户而言,使用IKAnalyzer进行分词操作可以通过以下步骤实现: 1. 导入必要的包,例如`Analyzer`、`Document`、`Field`、`IndexWriter`、`IndexSearcher`、`Query`等。 2. ...
##### 2.3 Lucene用户快速入门 对于使用Lucene的开发者来说,IKAnalyzer提供了简便的集成方式。下面是一个简单的代码示例,展示了如何使用IKAnalyzer进行文本分词: ```java public class IKAnalyzerDemo { ...
- **EJB**:如《Enterprise JavaBeans 3.0》(第五版),深入讲解EJB,适用于大规模分布式系统开发。 **搜索技术** - **《Lucene in action》**:经典之作,介绍了Lucene的基本原理,虽版本较低但仍具有参考价值。 ...
- **简介**:本书深入介绍了面向对象编程的核心概念,并提供了大量实例来帮助读者理解和掌握Java编程。 - **适用人群**:适合已有一定Java基础的学习者,用于加深对Java编程的理解。 3. **《Java JDK实例宝典》**...