//主类
package org.se.lucene;
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.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.util.Version;
import org.apache.lucene.search.Query;
public class hellowLucene {
public void index()
{
IndexWriter writer=null;
try {
//1.创建directory
Directory directory=FSDirectory.open(new File("f:/lucene/Index03"));
//2.创建IndexWriter
writer=new IndexWriter(directory,new IndexWriterConfig(Version.LUCENE_35,
new StandardAnalyzer(Version.LUCENE_35)));
//3.创建Document对象
Document document=null;
//4.为Document添加Field
File f=new File("f:/lucene/lucenes");
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();
// TODO: handle exception
}catch (LockObtainFailedException e) {
e.printStackTrace();
// TODO: handle exception
}catch (IOException e) {
e.printStackTrace();
// TODO: handle exception
}finally{
try {
if(writer!=null)
writer.close();
}catch (CorruptIndexException e2) {
e2.printStackTrace();
// TODO: handle exception
}catch (IOException e2) {
e2.printStackTrace();
// TODO: handle exception
}
}
}
public void search()
{
try {
//1.创建Directroy
Directory directory = FSDirectory
.open(new File("f:/lucene/Index03"));
//2.创建IndexReader
IndexReader reader = IndexReader.open(directory);
//3.根据IndexReader创建IndexSearcher
IndexSearcher searcher = new IndexSearcher(reader);
//4.创建搜索的Query
QueryParser parser = new QueryParser(Version.LUCENE_35, "content",
new StandardAnalyzer(Version.LUCENE_35));
Query query=parser.parse("ask");
//5.根据qurey搜索并返回TopDocs
TopDocs tds = searcher.search(query, 10);
//6.根据TopDocs获取Scoredoc对象
ScoreDoc[] sDoc = tds.scoreDocs;
for (ScoreDoc sds : sDoc) {
//7.根据searcher和scoredoc对象获取具体Document
Document document = searcher.doc(sds.doc);
//8.根据Document获取具体的值
System.out.println(document.get("filename") + "["
+ document.get("path") + "]");
}
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
//测试类
package org.se.lucene;
import org.junit.Test;
public class LuceneTest {
@Test
public void test_Index()
{
hellowLucene hLucene=new hellowLucene();
hLucene.index();
}
@Test
public void test_Search()
{
hellowLucene hLucene=new hellowLucene();
hLucene.search();
}
}
分享到:
相关推荐
一步一步跟我学习lucene是对近期做lucene索引的总结,大家有问题的话联系本人的Q-Q: 891922381,同时本人新建Q-Q群:106570134(lucene,solr,netty,hadoop),如蒙加入,不胜感激,大家共同探讨,本人争取每日一博,...
这个“lucene 小资源”可能包含了作者在学习和使用Lucene过程中积累的一些资料和经验,对于初学者或者想要深入理解Lucene的人来说,是非常宝贵的资源。 Lucene的核心功能包括文档索引、搜索以及相关的文本处理。它...
在这个“lucene的小案例”中,我们结合了其他几个框架,如iBatis、Spring和Struts2,构建了一个完整的搜索解决方案。 首先,让我们深入了解Lucene的核心概念: 1. **索引(Index)**:在Lucene中,索引是预处理...
这个“lucene入门小例子”很可能是为了帮助初学者理解并掌握Lucene的基本用法而设计的一系列示例代码。 Lucene的核心概念包括索引、文档、字段和查询。首先,你需要理解索引的概念,它类似于传统数据库中的索引,但...
**Lucene检索小例子** Lucene是一个开源的全文搜索引擎库,由Apache软件基金会开发并维护。这个"lucene检索小例子"程序展示了如何利用Lucene的强大功能来构建索引和执行搜索操作。Lucene的核心特性包括文本分析、...
lucene,lucene教程,lucene讲解。 为了对文档进行索引,Lucene 提供了五个基础的类 public class IndexWriter org.apache.lucene.index.IndexWriter public abstract class Directory org.apache.lucene.store....
6. **Searcher**:执行查询并返回结果的组件。主要有两种Searcher,一是IndexSearcher,用于在已经建立的索引中查找匹配的文档;另一种是RealTimeSearcher,它能直接访问内存中的最新索引,适用于高并发环境。 7. *...
Lucene中的Filter可以对搜索结果进行过滤,从而获得更小范围内更精确的结果。下面是一个示例代码: ```java filter filter = new DateFilter(fielddate, datetime.parse("2005-10-1"), datetime.parse("2005-10-30...
在这个小案例中,我们将了解Lucene的基本概念,以及如何构建一个简单的全文检索系统。 首先,让我们了解Lucene的核心组件。Lucene主要包括以下几个部分: 1. **索引(Index)**:Lucene通过将文本数据转换为可搜索...
6. **倒排索引的优化**:在`MergePolicy`和`MergeScheduler`中,你可以看到Lucene如何决定何时和如何合并索引段,以保持索引的效率和空间利用率。 7. **近实时搜索(NRT)**:从3.0版本开始,Lucene引入了NRT机制,...
6. **高可用性**:Lucene可以与其他Java项目无缝集成,支持多线程和分布式环境。 使用Lucene的基本步骤包括: 1. **创建索引**:首先,需要将要搜索的数据(如文件内容)读取并分词,然后使用Lucene API创建索引。 ...
lucene3.0 lucene3.0 lucene3.0 lucene3.0 lucene3.0
《Lucene索引小示例解析》 Lucene是一个高性能、全文检索库,它由Apache软件基金会开发并维护。在Java编程环境中,Lucene被广泛应用于构建搜索功能,特别是对于大量文本数据的高效检索。本篇文章将通过一个简单的小...
在项目中,`02_lucene_searcher`可能涵盖了附件搜索的实现。附件搜索是指对文件(如PDF、DOC等)内容的检索。这需要将附件内容读取并提取成可搜索的文本,通常通过第三方库(如Apache Tika)进行解析。 **5. 全文...
4. **分析器(Analyzer)**: Lucene 2.0 提供了多种预定义的分析器,如 `StandardAnalyzer`,处理文本分词、大小写转换等预处理工作。 5. **内存索引与磁盘索引**: `RAMDirectory` 用于内存中的索引,而 `FSDirectory...
6. 搜索器(Searcher):执行搜索操作,返回最相关的文档列表。 二、Lucene工作流程 1. 创建索引:首先,使用IndexWriter创建一个索引,将文档的字段添加到索引中。这个过程中,分词器会对文档内容进行处理。 2. ...
Lucene是一款强大的全文搜索引擎库,广泛应用于各种数据检索场景。在C#环境下,利用Lucene进行时间区间搜索是提高数据检索效率和精确度的重要手段。本篇将深入探讨如何在C#中实现Lucene的时间区间查询匹配,以及涉及...
《Annotated Lucene 中文版 Lucene源码剖析》是一本深入探讨Apache Lucene的书籍,专注于源码解析,帮助读者理解这个强大的全文搜索引擎库的工作原理。Lucene是一款开源的Java库,它提供了高效的文本搜索功能,被...
6. **Searcher**: 执行查询并返回结果的组件,使用倒排索引来找到包含指定查询词项的文档。 ### 文件检索系统开发步骤 1. **初始化索引**: 创建一个Directory对象(如FSDirectory),表示存储索引的物理位置。然后...
2. **Lucene API**:详细讲解了Lucene的各个核心组件,如Analyzer(分析器)用于处理文本,Document(文档)用于存储数据,IndexWriter(索引写入器)用于创建和更新索引,以及Searcher(搜索器)用于执行查询。...