lucene3.0.0 一个子目录及其子目录的文件转换成Document对象 并添加多索引库中进行查询
package com.txt.test2;
import java.io.File;
import java.io.FileReader;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.Field.Index;
import org.apache.lucene.document.Field.Store;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriter.MaxFieldLength;
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.SimpleFSDirectory;
import org.apache.lucene.util.Version;
import org.junit.Test;
//一个子目录及其子目录的文件转换成Document对象 并添加多索引库中进行查询
public class LuceneTest2 {
private String path = "f:"+File.separator+"cd";
private File storeFile = new File("f:"+File.separator+"indexDir7");
private Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_30);
private IndexWriter writer;
@Test
public void create () throws Exception {
Directory directory = new SimpleFSDirectory(storeFile);
writer = new IndexWriter(directory, analyzer,true, MaxFieldLength.LIMITED);
File file = new File(path);
showFile(file);
writer.close();
}
//获取file目录下的文件及其子目录
public void showFile(File file) throws Exception{
if (file == null) {
return ;
}else if (file.isDirectory()) {
File[] files = file.listFiles();
for (int i = 0; i < files.length; i++) {
//递归
showFile(files[i]);
}
}else {
System.out.println(file.getAbsolutePath());
//建立索引 将文件转换成doc..对象
Document document = new Document();
document.add(new Field("fileName", file.getName(), Store.YES, Index.ANALYZED));
document.add(new Field("filePath", file.getAbsolutePath(), Store.YES, Index.ANALYZED));
//不做存储
document.add(new Field("content", new FileReader(file)));
writer.addDocument(document);
}
}
//查询
@Test
public void serach() throws Exception{
Directory directory = new SimpleFSDirectory(storeFile);
IndexSearcher searcher = new IndexSearcher(directory,true);
QueryParser parser = new QueryParser(Version.LUCENE_30, "filePath", analyzer);
String key = "笔记";
Query query = parser.parse(key);
TopDocs tdDocs = searcher.search(query, 100);
System.out.println("查询的内容是:"+key);
System.out.println("一共命中了多少次:"+tdDocs.totalHits);
System.out.println();
if (tdDocs.scoreDocs != null) {
for (int i = 0; i < tdDocs.scoreDocs.length; i++) {
ScoreDoc sDoc = tdDocs.scoreDocs[i];
System.out.println("文档编号的索引:"+sDoc.doc);
System.out.println("得分:"+sDoc.score);
Document document = searcher.doc(sDoc.doc);
System.out.println("fileName名称是:"+document.get("fileName"));
System.out.println("filePath路径是:"+document.get("filePath"));
System.out.println("content内容是:"+document.get("content"));
}
}else {
System.out.println("没有要查找的内容...");
}
searcher.close();
}
}
分享到:
相关推荐
3. **多线程支持**:在3.0.0版本中,Lucene加强了多线程处理能力,支持并发索引和查询,使得在多核环境下性能得以充分利用。 4. **改进的内存管理**:对内存使用进行了优化,降低了内存占用,减轻了对系统资源的...
3. 读取 "documents" 目录中的每个文件,创建一个Document对象,为每个文件的每个字段添加Field。 4. 使用Analyzer分析文档内容,将内容添加到对应的Field。 5. 将Document对象写入索引,通过调用IndexWriter的...
1. 索引创建:Document对象用于存储文档信息,Field对象代表文档中的字段,两者结合定义了索引的基本单位。IndexWriter类负责读取这些信息并构建倒排索引。 2. 倒排索引:每个词项都有一个对应的 postings list,...
- 要对多个目录进行索引,需要遍历每个目录及其子目录,为每个文件创建一个Document对象,并添加到IndexWriter。 - 使用Directory类的open方法指定每个目录路径,然后使用IndexWriter添加Document。 3. **相关库...
The new version is mostly a cleanup release without any new features. All deprecations targeted to be removed in version 3.0 were removed.
《Java全文搜索引擎Lucene 3.0.0源码及库文件详解》 Java全文搜索引擎Lucene是一款开源的、高性能的文本分析和检索库,它为开发者提供了在Java应用程序中实现全文搜索功能的能力。本篇将深入探讨Lucene 3.0.0版本的...
而 `lucene3.0.0` jar 包则是 Lucene 的一个重要版本,发布于2009年,它提供了丰富的文本分析、索引构建和搜索功能。此版本引入了一些新的特性,优化了性能,并修复了一些已知问题。 在 Lucene 3.0.0 中,主要包含...
4. **并行索引**:每个线程独立地读取分配的子目录中的文件,使用Analyzer处理文本,然后添加到相应的IndexWriter中。 5. **合并索引**:所有线程完成索引后,使用IndexWriter的`addIndexes()`方法将所有子索引合并...
你可以添加多个Field对象到Document中,每个Field对应记录的一个属性。 5. **创建Field对象**:Field是文档中的一个字段,具有名称和值。例如,`Field.Store.YES`表示该字段会被存储,以便在查询结果中返回;`Field...
在Java开发领域,Lucene是一个不可或缺的全文搜索引擎库,它为开发者提供了强大的文本分析、索引和搜索功能。这里我们关注的是Lucene 3.0.0版本,它是Lucene历史上的一个重要里程碑,为后续版本的发展奠定了坚实的...
- **文档(Document)**:在Lucene中,一个文档代表你要索引的信息单元,它可以包含多个字段(Field)。 - **字段(Field)**:字段是文档的组成部分,每个字段都有特定的类型(如文本、日期等),并可以被索引或...
查询阶段,用户输入查询字符串,Lucene将这个字符串转换为查询对象,然后与索引进行匹配。查询操作通常包括以下步骤: - 查询分析(Query Parsing):将用户的输入转换为查询语法,可能涉及短语查询、布尔查询等。 ...
一个Lucene索引是由多个文件组成的,包括但不限于 segments文件、.del文件(删除文档标记)、.tii和.tis文件(Term Info Index和Term Info postings)、.frx、.fdx、.fdt、.fdt(Field Data)等。这些文件共同构成了...
- 对于每个XML文档中的元素,可以创建一个`Document`对象,并将其添加到`IndexWriter`中。 3. **索引文档元素** - 在SAX处理器中,对于每个元素的开始和结束事件,可以捕获元素的信息,并将其添加到Lucene的文档...
如果使用Lucene-3.0.0版本并在执行Web查询时报错,需要对`results.jsp`文件中的`QueryParser`构造方法进行更新,以适应Lucene的新版本。具体操作是在`results.jsp`文件中找到`QueryParser qp = new QueryParser(...
最新的lucene api手册, 感觉看这个比一堆html方便。。。 支持开源
4. 添加文档到索引:使用IndexWriter对象将Document对象添加到索引目录中。IndexWriter负责管理写入过程,包括合并段(Segment)以优化空间和性能。 5. 关闭资源:完成索引后,记得关闭IndexWriter,释放资源。 三...
4. **遍历并添加文档**:逐个读取源目录中的文本文件,并将其添加到索引中。 5. **关闭`IndexWriter`**:确保所有更改被提交。 #### 三、具体实现 下面是具体的代码实现: ```java // 指定源文件夹路径 String ...
lucene3.0.0的学习资料,里边有lucene的jar包,具体的入门讲解:http://blog.csdn.net/lengyuhong/archive/2010/11/17/6014597.aspx