package cn.lucene.tramp;
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.CorruptIndexException;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
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.store.LockObtainFailedException;
import org.apache.lucene.store.RAMDirectory;
import org.apache.lucene.util.Version;
/**
* ClassName:HelloLucene <br/>
* Function: TODO ADD FUNCTION. <br/>
* Reason: TODO ADD REASON. <br/>
* Date: 2014年2月5日 下午12:59:10 <br/>
* @author zhangzhaoyu
* @version
* @since JDK 1.7
* @see
*/
public class HelloLucene {
/**
*
* index:<br />
* 建立索引
*
* @author zhangzhaoyu
*/
public void index() {
IndexWriter writer = null;
try {
// 1. 创建 directory
// Directory directory = new RAMDirectory(); // 建立在内存中
Directory directory = FSDirectory.open(new File("E:\\BaiduYunDownload\\lucene\\index01"));
// 2. 创建 IndexWriter
IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_35, new StandardAnalyzer(Version.LUCENE_35));
writer = new IndexWriter(directory, config);
// 3. 创建Document 对象
Document document = null;
// 4. 为Document 添加Field
File f = new File("E:\\BaiduYunDownload\\lucene\\example");
System.out.println("filesize: " + f.listFiles().length);
for (File file : f.listFiles()) {
document = new Document();
document.add(new Field("content", new FileReader(file)));
document.add(new Field("filename", file.getName(), Field.Store.YES, Field.Index.NOT_ANALYZED));
document.add(new Field("path", file.getAbsolutePath(), Field.Store.YES, Field.Index.NOT_ANALYZED));
// 5. 通过IndexWriter 添加文档到索引中
writer.addDocument(document);
}
} catch (CorruptIndexException e) {
e.printStackTrace();
} catch (LockObtainFailedException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (writer != null) {
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
*
* searcher:<br />
* 搜索
*
* @author zhangzhaoyu
*/
public void searcher() {
try {
// 1. 创建 Directory
Directory directory = FSDirectory.open(new File("E:\\BaiduYunDownload\\lucene\\index01"));
// 2. 创建 IndexReader
IndexReader reader = IndexReader.open(directory);
// 3. 根据 IndexReader 创建 IndexSearcher
IndexSearcher searcher = new IndexSearcher(reader);
// 4. 创建搜索的 Query
// 创建parser 来确定搜索文件的内容,第二个参数表示搜索的域
QueryParser parser = new QueryParser(Version.LUCENE_35, "content", new StandardAnalyzer(Version.LUCENE_35));
// 创建 query, 表示搜索域为content中包含的java 文档
Query query = parser.parse("dojo");
// 5. 根据 searcher搜索并返回 TopDocs
TopDocs topDocs = searcher.search(query, 10);
// 6. 根据 TopDocs 获取 SocreDoc 对象
ScoreDoc[] sds = topDocs.scoreDocs;
for (ScoreDoc sd : sds) {
// 7. 根据 searcher 和 SocreDoc对象获取具体的 Document对象
Document d = searcher.doc(sd.doc);
// 8. 根据 Document 对象获取需要的值
System.out.println(d.get("filename") + ": " + d.get("path"));
}
} catch (CorruptIndexException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
public class TestLucene {
@Ignore
public void testIndex() {
HelloLucene lucene = new HelloLucene();
lucene.index();
}
@Test
public void testSearch() {
HelloLucene lucene = new HelloLucene();
lucene.searcher();
}
}
分享到:
相关推荐
标题与描述:“Lucene简单入门程序实例”这一标题与描述明确指出文章将引导读者通过一个实际的示例来了解和掌握Lucene的基本操作。Lucene是一个高性能、全功能的文本搜索引擎库,它允许用户对文档进行索引和搜索。本...
NULL 博文链接:https://kylinsoong.iteye.com/blog/719415
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 是一个开源全文搜索引擎库,由 Apache 软件基金会维护。它提供了一个可扩展的、高性能的搜索框架,使得开发者能够快速地在大量文本数据中实现全文检索功能。这个入门实例将帮助我们...
《Lucene 3.6 入门实例教程》是一份专为初学者设计的指南,旨在帮助用户快速掌握Apache Lucene 3.6版本的基本概念和应用。Lucene是一个高性能、全文检索库,广泛用于构建搜索功能强大的应用程序。这份教程通过完整的...
【Lucene 入门教程】 Lucene 是一个由Apache软件基金会开发的开源全文检索引擎工具包,它并非一个完整的搜索引擎,而是提供了一个强大的架构,允许开发人员轻松地在他们的应用程序中集成全文检索功能。Lucene 支持...
**Lucene 3.0 入门实例及关键知识点** Lucene 是一个开源的全文搜索引擎库,由 Apache 软件基金会开发。它为开发者提供了在应用程序中实现文本搜索功能的强大工具。本实例主要针对 Lucene 3.0 版本,这个版本虽然...
`lucene入门小实例.txt` 文件中可能包含了一个简单的Lucene使用示例,例如: 1. 创建 `Directory` 对象,比如使用 `FSDirectory.open()` 打开一个文件系统的目录来存储索引。 2. 实例化 `Analyzer`,如使用 `...
lucene实例是一个比较详细的例子,包括lucene的入门到高级实例,代码里有比较详细的实例,所有的实例都是通过junit来测试的。实例包括各种搜索:如通配符查询、模糊查询、查询结果的分页、中文分词器、自定义分词器...
这个入门实例将引导我们了解如何使用Lucene 3.0版本进行基本的索引和搜索操作。以下是对Lucene 3.0关键知识点的详细讲解: 1. **Lucene的架构**: Lucene的核心组件包括文档(Document)、字段(Field)、索引...
Java搜索工具——Lucene实例总结(一) 在Java开发中,搜索引擎已经成为不可或缺的一部分,而Apache Lucene正是一个强大的全文搜索引擎库。这篇博文将带你深入理解Lucene的基本概念和使用方式,帮助你快速入门并掌握...
《最新全文检索 Lucene-5.2.1 入门经典实例》 Lucene是一个开源的全文检索库,由Apache软件基金会开发,广泛应用于各种信息检索系统。在5.2.1版本中,Lucene提供了更为高效和强大的搜索功能,为开发者提供了构建...
【标题】:“第一个Lucene 3.6 (3.X) 入门实例” 【内容详解】 Lucene是一个高性能、全文本搜索库,由Apache软件基金会开发。它为Java开发者提供了强大的文本检索功能,广泛应用于搜索引擎、信息检索系统等场景。...
**Lucene 3.0 全文检索入门实例** Lucene 是一个开源的全文检索库,由 Apache 软件基金会开发。它提供了一个高级、灵活的搜索功能框架,允许开发者在自己的应用中轻松地集成全文检索功能。本文将重点介绍如何使用 ...
以上是Lucene入门的基本知识和关键概念,通过深入学习和实践,你可以掌握如何利用Lucene构建强大的全文搜索引擎。记住,实践中遇到的问题往往是最好的学习资源,不断尝试和解决,你将逐渐成为Lucene的专家。
**Lucene 3.6 入门案例** Lucene 是一个高性能、全文本搜索库,由 Apache 软件基金会开发。它提供了完整的搜索功能,包括索引、查询、评分等,广泛应用于各种项目和产品中。在这个入门案例中,我们将深入理解如何...
**Lucene 入门教程** Lucene 是一个高性能、全文本搜索库,由 Apache 软件基金会开发。...通过实践“Lucene入门demo”,你可以亲手创建并测试一个简单的 Lucene 搜索应用,进一步加深对 Lucene 工作原理的理解。
这个压缩包中的源码很可能是演示了如何构建和使用Lucene索引进行搜索的简单实例,对于初学者来说是一份很好的学习资料。通过阅读源码,你可以了解如何实际操作Lucene,从而加深对Lucene的理解。同时,实践是最好的...