`
xiyuliuguang
  • 浏览: 32640 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

Lucene

阅读更多
public void appendIndex(TInformationBmsVO informationVO, String path) throws IOException {
String indexFile = path + "file\\temp\\upload\\data\\index";
String scourceFile = path + informationVO.getFFilepathInformation();
String fileContent = "";
IndexWriter writer=null;    
try {    
Analyzer analyzer = new IKAnalyzer();
Directory directory=FSDirectory.open(new File(indexFile));    
IndexWriterConfig iwc=new IndexWriterConfig(Version.LUCENE_36,analyzer);
iwc.setOpenMode(OpenMode.APPEND);
writer=new IndexWriter(directory, iwc);
Document doc=null;    
File file = new File(scourceFile); 
if(file.isFile()){
if(file.getName() != null && (file.getName().trim().toLowerCase().endsWith(".doc") || file.getName().trim().toLowerCase().endsWith(".docx") || file.getName().trim().toLowerCase().endsWith(".xls") || file.getName().trim().toLowerCase().endsWith(".xlsx") || file.getName().trim().toLowerCase().endsWith(".txt") || file.getName().trim().toLowerCase().endsWith(".ppt") || file.getName().trim().toLowerCase().endsWith(".pptx") || file.getName().trim().toLowerCase().endsWith(".pdf"))){
fileContent = this.readAllFileType(scourceFile);
}
doc=new Document();
doc.add(new Field("id",String.valueOf(System.currentTimeMillis()), Field.Store.YES,Field.Index.ANALYZED));
doc.add(new Field("content",file.getName() + fileContent, Field.Store.YES,Field.Index.ANALYZED));
doc.add(new Field("fileName",file.getName(),Field.Store.YES,Field.Index.ANALYZED));
doc.add(new Field("path",file.getAbsolutePath(),Field.Store.YES,Field.Index.NOT_ANALYZED));
writer.addDocument(doc);
}
} catch (CorruptIndexException e) {   
e.printStackTrace();    
} catch (LockObtainFailedException e) {    
e.printStackTrace();    
} catch (IOException e) {    
e.printStackTrace();    
}finally{    
try { 
if(writer!=null){
writer.close();
}
} catch (CorruptIndexException e) {       
e.printStackTrace();        
} catch (IOException e) {        
e.printStackTrace();        
}    
}

}


List<String> fileNameList = new Vector<String>();
String indexFile = informationVO.getTemp_field11() + "\\index";
IndexReader reader = null;
Directory directory = null;
try {    
Analyzer analyzer = new IKAnalyzer();
directory=FSDirectory.open(new File(indexFile));
reader =IndexReader.open(directory);    
IndexSearcher searcher=new IndexSearcher(reader);    
QueryParser parser=new QueryParser(Version.LUCENE_36,"content",analyzer);
parser.setDefaultOperator(QueryParser.AND_OPERATOR);
Query query=parser.parse(informationVO.getTemp_field10().trim());
TopDocs tds=searcher.search(query,100);
ScoreDoc[] sds=tds.scoreDocs; 
for(ScoreDoc sd:sds){
  Document d = searcher.doc(sd.doc);
  if(!fileNameList.contains(d.get("fileName"))){
  fileNameList.add(d.get("fileName"));
  }
}    
} catch (CorruptIndexException e) {
e.printStackTrace();    
} catch (IOException e) {   
e.printStackTrace();   
    } catch (ParseException e) {   
       e.printStackTrace();
    }
    finally{    
try { 
reader.close();
directory.close();
} catch (CorruptIndexException e) {       
e.printStackTrace();        
} catch (IOException e) {        
e.printStackTrace();        
}    
}
   
    return fileNameList;





/**
* 删除索引
* @param informationVO
* @throws IOException
*/
public void deleteIndex(TInformationBmsVO informationVO, String path)throws IOException{
String deleteFileName = informationVO.getFFilepathInformation();
deleteFileName = deleteFileName.substring(deleteFileName.lastIndexOf("\\") + 1);
String indexFile = path + "file\\temp\\upload\\data\\index";
IndexReader reader= IndexReader.open(FSDirectory.open(new File(indexFile)), false);
Document doc = null;
int sum = reader.numDocs();
String indexFileName = "";
for(int i = 0; i < sum; i ++){
doc = reader.document(i);
indexFileName = doc.get("fileName");
if(deleteFileName != null && indexFileName != null && deleteFileName.equals(indexFileName)){
Term term1=new Term("id",doc.get("id"));
reader.deleteDocuments(term1);
}
}
reader.close();


/**
* 更新索引
* @param informationVO
* @param path 工程绝对路径
* @throws IOException
*/
@SuppressWarnings("deprecation")
public void updateIndex(TInformationBmsVO informationVO, String path, String sourceFileName)throws IOException{
//索引路径
Document doc = null;
IndexWriter writer = null;
String indexFile = path + "file\\temp\\upload\\data\\index";
String newFileName = informationVO.getFFilepathInformation();
File file = new File(newFileName);
String fileContent = "";
Analyzer analyzer = new IKAnalyzer();
try {                      
Directory directory = FSDirectory.open(new File(indexFile));                         
IndexWriterConfig writerConfig = new IndexWriterConfig(Version.LUCENE_36, analyzer);
writerConfig.setOpenMode(OpenMode.APPEND);
writer = new IndexWriter(directory, writerConfig); 
String sourceId = this.queryIdBySourceFile(path, sourceFileName);
doc = new Document();
fileContent = this.readAllFileType(path + "file\\temp\\upload\\data\\" + file.getName());
doc.add(new Field("id", String.valueOf(System.currentTimeMillis()), Field.Store.YES,Field.Index.ANALYZED));
doc.add(new Field("content",file.getName() + fileContent, Field.Store.YES,Field.Index.ANALYZED));
doc.add(new Field("fileName",file.getName(),Field.Store.YES,Field.Index.ANALYZED));
doc.add(new Field("path",file.getAbsolutePath(),Field.Store.YES,Field.Index.NOT_ANALYZED));
Term term = new Term("id", sourceId);                          
writer.updateDocument(term, doc);
writer.optimize();
writer.close();
directory.close();
} catch (Exception e) {            
e.printStackTrace();        
} finally{    
try { 
if(writer!=null){
writer.close();
}
} catch (CorruptIndexException e) {       
e.printStackTrace();        
} catch (IOException e) {        
e.printStackTrace();        
}    
}
}

/**
* 通过原文件名查找索引id
* @param fileName
* @return
*/
public String queryIdBySourceFile(String path, String fileName){

fileName = fileName.substring(fileName.lastIndexOf("\\") + 1);
String indexFile = path + "file\\temp\\upload\\data\\index";
IndexReader reader;
try {
reader = IndexReader.open(FSDirectory.open(new File(indexFile)), false);
Document doc = null;
int sum = reader.numDocs();
String indexFileName = "";
for(int i = 0; i < sum; i ++){
doc = reader.document(i);
indexFileName = doc.get("fileName");
if(fileName != null && indexFileName != null && fileName.equals(indexFileName)){
reader.close();
return doc.get("id");
}
}
reader.close();
} catch (CorruptIndexException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return "";
}
0
5
分享到:
评论

相关推荐

    lucene,lucene教程,lucene讲解

    lucene,lucene教程,lucene讲解。 为了对文档进行索引,Lucene 提供了五个基础的类 public class IndexWriter org.apache.lucene.index.IndexWriter public abstract class Directory org.apache.lucene.store....

    Lucene时间区间搜索

    Lucene是一款强大的全文搜索引擎库,广泛应用于各种数据检索场景。在C#环境下,利用Lucene进行时间区间搜索是提高数据检索效率和精确度的重要手段。本篇将深入探讨如何在C#中实现Lucene的时间区间查询匹配,以及涉及...

    lucene-4.7.0全套jar包

    【Lucene 4.7.0 全套JAR包详解】 Lucene是一个开源全文搜索引擎库,由Apache软件基金会开发并维护。它提供了一个高级、灵活的文本搜索API,允许开发者轻松地在应用程序中实现复杂的搜索功能。这次提供的“lucene-...

    Lucene3.5源码jar包

    本压缩包包含的是Lucene 3.5.0版本的全部源码,对于想要深入理解Lucene工作原理、进行二次开发或者进行搜索引擎相关研究的开发者来说,是一份非常宝贵的学习资源。 Lucene 3.5.0是Lucene的一个重要版本,它在3.x...

    lucene in action 2nd edition, lucene in action 第二版 PDF

    《Lucene in Action 第二版》是一本深入探讨Apache Lucene全文检索库的专业书籍,它在Java开发领域具有很高的权威性。这本书详细介绍了如何利用Lucene进行高效的文本搜索和索引构建,是Java开发者和信息检索爱好者的...

    Lucene示例 BM25相似度计算

    在IT领域,搜索引擎技术是至关重要的,而Lucene作为一个开源全文搜索引擎库,广泛应用于各种文本检索系统中。本文将深入探讨Lucene示例中的BM25相似度计算,旨在帮助初学者理解如何利用Lucene 4.7.1版本构建索引、...

    Lucene与关系型数据库对比

    《Lucene与关系型数据库对比:深度解析与应用探索》 在信息爆炸的时代,数据管理和检索成为了企业乃至个人日常工作中不可或缺的部分。随着技术的发展,不同的数据处理方式应运而生,其中Lucene与关系型数据库作为两...

    lucene-core-7.2.1-API文档-中文版.zip

    赠送jar包:lucene-core-7.2.1.jar; 赠送原API文档:lucene-core-7.2.1-javadoc.jar; 赠送源代码:lucene-core-7.2.1-sources.jar; 赠送Maven依赖信息文件:lucene-core-7.2.1.pom; 包含翻译后的API文档:lucene...

    lucene.NET 中文分词

    **Lucene.NET 中文分词技术详解** Lucene.NET 是一个高性能、全文检索库,它是Apache Lucene项目在.NET平台上的实现。作为一个开源的搜索引擎框架,Lucene.NET为开发者提供了强大的文本搜索功能。而在处理中文文档...

    lucene-core-7.7.0-API文档-中文版.zip

    赠送jar包:lucene-core-7.7.0.jar; 赠送原API文档:lucene-core-7.7.0-javadoc.jar; 赠送源代码:lucene-core-7.7.0-sources.jar; 赠送Maven依赖信息文件:lucene-core-7.7.0.pom; 包含翻译后的API文档:lucene...

    lucene所有的jar包

    《全面解析Lucene jar包:从基础到应用》 在信息技术高速发展的今天,搜索引擎已经成为我们获取信息不可或缺的工具。在Java领域,Lucene作为一个强大的全文搜索引擎库,深受开发者喜爱。本文将详细介绍“lucene所有...

    Lucene 5 主要jar包

    Apache Lucene是一个开源全文搜索引擎库,它为Java开发者提供了强大的文本搜索功能。在这个"Lucene 5 主要jar包"中,我们找到了一系列与Lucene 5.0.0相关的jar文件,这些文件是构建和运行基于Lucene的搜索应用程序的...

    Lucene的原理完整版pdf

    **Lucene原理详解** Lucene是一个高性能、全文检索库,由Apache软件基金会开发并维护,是Java编程语言中广泛使用的搜索引擎库。它提供了一个简单但功能强大的API,用于索引和搜索文本数据,使得开发者可以轻松地在...

    Lucene中的FST算法描述

    在信息检索和存储系统中,Lucene是一个开源的全文搜索引擎库,广泛应用于各种需要全文搜索功能的软件项目中。为了高效地处理和检索存储的词项(term),Lucene使用了FST(有限状态转换器,Finite State Transducer)...

    基于lucene技术的增量索引

    **基于Lucene技术的增量索引** 在信息技术领域,全文搜索引擎是处理大量数据查询的关键工具。Apache Lucene是一个开源的全文检索库,被广泛应用于构建高效、可扩展的搜索功能。本文将深入探讨如何利用Lucene实现...

    C#调用Lucene方法-实现快速搜索

    为了在C#中使用Lucene,我们需要借助.NET上的Lucene.NET,这是一个与Java Lucene兼容的.NET框架版本。 接下来,我们探讨C#调用Lucene的步骤: 1. **引入Lucene库**:在C#项目中,首先需要添加对Lucene.NET的引用。...

    lucene 对 xml建立索引

    ### Lucene对XML文档建立索引的技术解析与实践 #### 一、引言 随着互联网技术的迅猛发展,非结构化数据(如XML文档)在企业和组织中的应用日益广泛。如何高效地处理这些非结构化的数据,特别是进行快速检索成为了一...

    lucene的jar包,欢迎下载

    【标题】"lucene的jar包,欢迎下载"所涉及的知识点主要集中在Lucene这个开源全文搜索引擎库上。Lucene是Apache软件基金会的顶级项目,它是一个高性能、全文本搜索库,提供了完整的搜索功能,包括索引、查询、排序等...

Global site tag (gtag.js) - Google Analytics