最近要用到lucene,看了一下文档,动手写个小例子。
电脑中有N多pdf文档,不方便查找,索性写个搜索这个的小工具。
建索引的类:
import java.io.File;
import java.io.FileInputStream;
import java.util.Date;
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.index.IndexWriter;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
import org.apache.pdfbox.cos.COSDocument;
import org.apache.pdfbox.pdfparser.PDFParser;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.util.PDFTextStripper;
public class LuceneMain {
public static void main(String[] args) throws Exception {
File fileDir = new File("C:\\Documents and Settings\\zhanglu\\桌面\\pdf文档");
File indexDir = new File("C:\\index");
Analyzer luceneAnalyzer = new StandardAnalyzer(Version.LUCENE_CURRENT);
IndexWriter indexWriter = new IndexWriter(FSDirectory.open(indexDir),luceneAnalyzer,true,IndexWriter.MaxFieldLength.UNLIMITED);
File[] textFiles = fileDir.listFiles();
long start = new Date().getTime();
for(File f:textFiles){
if(f.isFile()&&f.getName().endsWith(".pdf")){
String temp = FileReaderAll(f.getCanonicalPath(),"GBK");
Document document = new Document();
Field FieldPath = new Field("path",f.getPath(),Field.Store.YES,Field.Index.NO);
Field FieldBody = new Field("body",temp,Field.Store.YES,Field.Index.ANALYZED,Field.TermVector.WITH_POSITIONS_OFFSETS);
document.add(FieldPath);
document.add(FieldBody);
indexWriter.addDocument(document);
}
}
indexWriter.optimize();
indexWriter.close();
long end = new Date().getTime();
System.out.println("time waste "+(end-start));
}
public static String FileReaderAll(String path,String charset) throws Exception{
// BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(path)));
// String s = "";
// StringBuffer sb = new StringBuffer(s);
// while((s=br.readLine())!=null){
// System.out.println(s);
// sb.append(s);
// }
// br.close();
// return sb.toString();
String docText = "";
PDFParser parser = new PDFParser(new FileInputStream(path));
parser.parse();
COSDocument cosDoc = parser.getDocument();
if(!cosDoc.isEncrypted()){
PDFTextStripper stripper = new PDFTextStripper();
PDDocument pdd = new PDDocument(cosDoc);
docText = stripper.getText(pdd);
// System.out.println(docText);
pdd.close();
}
cosDoc.close();
return docText;
}
}
查找类:
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.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.TopScoreDocCollector;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
public class TestQuery {
public static void main(String[] args) throws CorruptIndexException, IOException, ParseException {
TopScoreDocCollector collector = TopScoreDocCollector.create(100,true);
String queryString = "socket";
Query query = null;
IndexSearcher searcher = new IndexSearcher(FSDirectory.open(new File("C:\\index")));
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_CURRENT);
QueryParser qp = new QueryParser(Version.LUCENE_CURRENT,"body",analyzer);
query = qp.parse(queryString);
if(searcher!=null){
searcher.search(query,collector);
}
ScoreDoc[] hits= collector.topDocs().scoreDocs;
if(hits.length>0){
System.out.println("共找到"+hits.length+"个结果");
for(int i = 0;i<hits.length;i++){
System.out.println(searcher.doc(hits[i].doc).getField("path").stringValue());
}
}
}
}
运行结果:
共找到3个结果
C:\Documents and Settings\zhanglu\桌面\pdf文档\java socket(IBM).pdf
C:\Documents and Settings\zhanglu\桌面\pdf文档\Apache_Mina_Server_2.0中文参考手册V1.0.pdf
C:\Documents and Settings\zhanglu\桌面\pdf文档\JavaEye论坛热点推荐_-_2009年10月_-_总第17期.pdf
用到Lucene3.0核心包,pdfbox(操纵pdf文档的开源工具)。
分享到:
相关推荐
### Lucene对XML文档建立索引的技术解析与实践 #### 一、引言 随着互联网技术的迅猛发展,非结构化数据(如XML文档)在企业和组织中的应用日益广泛。如何高效地处理这些非结构化的数据,特别是进行快速检索成为了一...
在本例中,MyBatis3用于从数据库中检索数据,这些数据可能需要被索引到Lucene中,或者根据用户的搜索条件从Lucene索引中查找匹配的数据。 三、Lucene4.7在Web应用中的集成步骤 1. 配置依赖:首先,需要在项目中引入...
以一个简单的博客搜索引擎为例,可以使用Lucene 8.6.1建立博客文章的索引,通过查询解析器处理用户输入的关键词,然后利用搜索功能找到相关度最高的文章。在这个过程中,分析器将处理文章内容,提取关键词;索引构建...
以《lucene-2.0.CHM》为例,这是一个Lucene 2.0版本的帮助文档,我们可以用这些工具对文档中的中文文本进行分词,观察不同分词器的效果,并根据结果调整分词策略。 七、总结 理解并熟练掌握Lucene中的中文分词技术...
《深入理解Lucene-Analyzers-3.3.0:jar包与源码...通过深入学习和实践,我们可以更好地利用Lucene来构建高效、精准的全文检索系统,满足各种复杂的应用场景。无论是初学者还是经验丰富的开发者,都能从中受益匪浅。
通过学习和实践,我们可以加深对Lucene全文检索机制的理解,掌握WebMagic的网页抓取技巧,并了解到如何利用Bootstrap构建响应式的用户界面。这对于提升我们的IT技能,特别是信息检索和网络爬虫方面的能力,有着极大...
【Lucene简介】 Lucene是一个基于Java的全文检索库,它是Apache Jakarta项目的一部分,目前作为一个独立的开源项目活跃发展。...通过深入理解和实践,开发者可以充分利用Lucene的特性,提升应用程序的搜索体验。
《基于Lucene 3.0的搜索器源程序解析与应用》 在信息化时代,搜索引擎已经成为数据检索的重要工具。...通过深入学习和实践,我们可以充分利用Lucene的强大功能,为各种信息检索场景打造定制化的解决方案。
利用hadoop的mapreduce和Hbase,基于lucene做的简单的搜索引擎 基本介绍 InjectDriver 将本地的url注入到hbase数据库中等待下一步执行 FetchDriver 负责抓取url对应的网页内容 ParserUrlDriver 解析所抓取网页内容...
在本例中,结果显示在界面上方,包括找到的文档数量和具体内容。 #### 二、文档相似度比较 接下来介绍如何计算文档之间的相似度,以及如何根据相似度进行文档分类。 1. **相似度计算方法**: - **余弦相似度**:...
全文检索技术则是基于全文内容进行搜索,提高了检索效率和准确度,例如Lucene和Solr。 三、高校教育现实需求 高校教学中常见的非结构数据包括电子实验报告、演示文稿、音视频文件等。这些数据不仅内容复杂、分类较...
Elasticsearch是一个开源的、基于Lucene的搜索服务器,它提供了一个分布式、多租户的全文搜索,以及实时分析功能。在安装完成后,需要根据具体需求进行基本的配置,例如设置内存分配、网络绑定等。 同时,为了支持...
在本例中,我们使用Lucene进行信息的索引和存储。 6. **索引建立**:Lucene提供了强大的API来创建索引,使得搜索效率大大提高。页面内容被分词,然后建立倒排索引,这样可以快速查找含有特定关键词的文档。 7. **...
在ASP中实现站内模糊搜索,通常涉及到SQL查询语句的编写,比如使用LIKE运算符进行模糊匹配,或者利用全文搜索引擎如Lucene等。 【源码分析】 这个"基于ASP的站内模糊搜索例范源码 v1.0.zip"包含了一个简单的模糊...
《深入理解分词器:以je-analysis-1.5.3.jar为例》 在信息技术领域,数据处理是一项至关重要的任务,而在这个过程中,文本分词是基石。分词器是将连续的文本流分解成有意义的词语单元,是自然语言处理(NLP)中的...
这个"ASP实例开发源码——ASP站内模糊搜索例范源码 v1.0.zip"文件包含了一个具体的实例,展示了如何在ASP环境中实现站内模糊搜索功能。在网页应用中,模糊搜索允许用户输入不完全或含有错误的关键词,系统仍能返回...
总的来说,"索引查询范例下载包"为我们提供了一个实践平台,通过学习和实验,我们可以深入了解索引的创建、查询的构建以及如何在Java环境中利用Lucene这一强大的工具进行高效的信息检索。这个过程不仅涵盖了理论知识...
架构设计与虚拟化实践 本文将从架构设计和虚拟化两个方面对百万PV项目进行分析和总结。我们将讨论项目的架构设计、虚拟化的必要性、虚拟化后的服务器数量和资源分配,以及虚拟化注意事项。 架构设计 本项目的架构...
接着,你需要一个 Java 中间件来运行 Solr,这里以 Apache Tomcat 为例。下载并解压 Tomcat 最新版本,然后将 Solr 的 WAR 文件部署到 Tomcat 的 webapps 目录下。Solr 的 WAR 文件可以在 Apache Solr 的官方网站上...