RAMDirectory中的内容转到FSDirectory

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.document.Field.Index;

import org.apache.lucene.document.Field.Store;

import org.apache.lucene.index.CorruptIndexException;

import org.apache.lucene.index.IndexWriter;

import org.apache.lucene.index.Term;

import org.apache.lucene.search.Hits;

import org.apache.lucene.search.IndexSearcher;

import org.apache.lucene.search.TermQuery;

import org.apache.lucene.store.Directory;

import org.apache.lucene.store.FSDirectory;

import org.apache.lucene.store.LockObtainFailedException;

import org.apache.lucene.store.RAMDirectory;

 

/**

 * @author Vincnet

 * @version 2.3

 * 

 */

public class Test {

public static void main(String[] args) throws CorruptIndexException,

LockObtainFailedException, IOException {

long data1 = System.currentTimeMillis();

/**

* 分别创建两个对象

* */

FSDirectory fsDir = FSDirectory.getDirectory("E://Lucene//Index2//");

RAMDirectory ramDir = new RAMDirectory();

IndexWriter ramwriter = new IndexWriter(ramDir, new StandardAnalyzer(),true);

IndexWriter fsdwriter = new IndexWriter(fsDir, new StandardAnalyzer(),true);

Document document = new Document();

/**

* Field(String name, String value, Field.Store store, Field.Index index)

         * Create a field by specifying its name, value and how it will be saved in the index.

*

*/

document.add(new Field("name","Vincnet",Store.YES,Index.TOKENIZED));

document.add(new Field("age","18",Store.YES,Index.UN_TOKENIZED));

document.add(new Field("note","this is a test data",Store.YES,Index.TOKENIZED));

ramwriter.addDocument(document);

fsdwriter.addDocument(document);

ramwriter.flush();

//将fsd里面的索引和ram的索引合并成同一个所以 关键一句 

fsdwriter.addIndexes(new Directory[]{ramDir});

ramwriter.close();

fsdwriter.flush();

fsdwriter.close();

IndexSearcher searcher = new IndexSearcher(ramDir);

Hits hits = searcher.search(new TermQuery(new Term("name","vincnet")));

for(int i = 0 ; i < hits.length() ; i++){

System.out.println(hits.length()+"   "+hits.doc(i).get("name"));

}

searcher.close();

System.out.println("运行时间 : "+(System.currentTimeMillis() - data1)+" ms");

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,你需要用到以下几个库: 1. Apache PDFBox:用于解析PDF文件 2. Apache Lucene:用于全文搜索 首先,你需要在项目引入这两个库的依赖。 然后,你可以按照以下步骤编写代码: 1. 使用PDFBox解析PDF文件,获取其的文本内容。 ```java PDDocument document = PDDocument.load(new File("example.pdf")); PDFTextStripper stripper = new PDFTextStripper(); String text = stripper.getText(document); document.close(); ``` 2. 使用Lucene创建一个全文搜索的索引。 ```java Directory index = new RAMDirectory(); Analyzer analyzer = new StandardAnalyzer(); IndexWriterConfig config = new IndexWriterConfig(analyzer); IndexWriter writer = new IndexWriter(index, config); Document doc = new Document(); doc.add(new TextField("text", text, Field.Store.YES)); writer.addDocument(doc); writer.close(); ``` 3. 搜索关键字并返回匹配的结果。 ```java IndexReader reader = DirectoryReader.open(index); IndexSearcher searcher = new IndexSearcher(reader); QueryParser parser = new QueryParser("text", analyzer); Query query = parser.parse("关键字"); TopDocs results = searcher.search(query, 10); for (ScoreDoc result : results.scoreDocs) { Document document = searcher.doc(result.doc); System.out.println(document.get("text")); } reader.close(); ``` 将以上三部分代码整合起来,就可以实现PDF文件的关键字搜索了。 完整示例代码如下: ```java import java.io.File; import java.io.IOException; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.document.TextField; import org.apache.lucene.index.DirectoryReader; import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriterConfig; import org.apache.lucene.queryparser.classic.ParseException; import org.apache.lucene.queryparser.classic.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.RAMDirectory; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.text.PDFTextStripper; public class PDFKeywordSearch { public static void main(String[] args) { try { // 使用PDFBox解析PDF文件 PDDocument document = PDDocument.load(new File("example.pdf")); PDFTextStripper stripper = new PDFTextStripper(); String text = stripper.getText(document); document.close(); // 使用Lucene创建全文搜索索引 Directory index = new RAMDirectory(); Analyzer analyzer = new StandardAnalyzer(); IndexWriterConfig config = new IndexWriterConfig(analyzer); IndexWriter writer = new IndexWriter(index, config); Document doc = new Document(); doc.add(new TextField("text", text, Field.Store.YES)); writer.addDocument(doc); writer.close(); // 搜索关键字并返回匹配的结果 IndexReader reader = DirectoryReader.open(index); IndexSearcher searcher = new IndexSearcher(reader); QueryParser parser = new QueryParser("text", analyzer); Query query = parser.parse("关键字"); TopDocs results = searcher.search(query, 10); for (ScoreDoc result : results.scoreDocs) { Document hitDoc = searcher.doc(result.doc); System.out.println(hitDoc.get("text")); } reader.close(); } catch (IOException | ParseException e) { e.printStackTrace(); } } } ``` 请将代码的 "example.pdf" 替换为你要搜索的PDF文件的路径,将 "关键字" 替换为你要搜索的关键字。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值