lucene mysql 更新_Lucene更新文档操作

更新文档是另一个重要的操作,它是索引处理的一部分。此操作用于当已经索引内容被更新和索引变为无效。该操作也被称为重新编制索引。

我们更新文档包含IndexWriter字段,IndexWriter用于更新索引。

现在,我们将展示一个循序渐进的过程,以得到更新文档的理解,开始使用一个基本的例子。

更新文件的索引

创建更新从更新的文本文件 Lucene 文档的方法

privatevoidupdateDocument(Filefile)throwsIOException{Documentdocument=newDocument();//update indexes for file contentswriter.updateDocument(newTerm(LuceneConstants.CONTENTS,newFileReader(file)),document);writer.close();}

创建IndexWriter

IndexWriter类作为它在索引过程中创建/更新索引的核心组成部分

创建 IndexWriter 对象

创建其应指向位置,其中索引是存储一个lucene的目录

初始化索引目录,有标准的分析版本信息和其他所需/可选参数创建的 IndexWricrter 对象

privateIndexWriterwriter;publicIndexer(StringindexDirectoryPath)throwsIOException{//this directory will contain the indexesDirectoryindexDirectory=FSDirectory.open(newFile(indexDirectoryPath));//create the indexerwriter=newIndexWriter(indexDirectory,newStandardAnalyzer(Version.LUCENE_36),true,IndexWriter.MaxFieldLength.UNLIMITED);}

更新文档并开始重建索引过程

下面的两个是方式更新文档。

updateDocument(Term, Document) - 删除包含该词条的文档,并添加使用默认的分析文档(在创建索引时,指定写入器)

updateDocument(Term, Document,Analyzer) - 删除包含该词条的文档,并使用提供的分析仪中添加的文件。

privatevoidindexFile(Filefile)throwsIOException{System.out.println("Updating index for "+file.getCanonicalPath());updateDocument(file);}

应用程序示例

让我们创建一个测试Lucene的应用程序来测试索引处理

步骤

描述

1

创建一个LuceneFirstApplication在包packagecom.yiibai.lucene下。也可以使用EJB创建的项目

2

创建LuceneConstants.java,TextFileFilter.java和Indexer.java。保持其它的文件不变。

3

创建 LuceneTester.java 如下所述

4

清理和构建应用程序,以确保按要求处理业务逻辑

LuceneConstants.java

这个类是用来提供可应用于示例应用程序中使用的各种常量。

packagecom.yiibai.lucene;publicclassLuceneConstants{publicstaticfinalStringCONTENTS="contents";publicstaticfinalStringFILE_NAME="filename";publicstaticfinalStringFILE_PATH="filepath";publicstaticfinalintMAX_SEARCH=10;}

TextFileFilter.java

此类用于为.txt文件过滤器

packagecom.yiibai.lucene;importjava.io.File;importjava.io.FileFilter;publicclassTextFileFilterimplementsFileFilter{@Overridepublicbooleanaccept(Filepathname){returnpathname.getName().toLowerCase().endsWith(".txt");}}

Indexer.java

这个类是用于索引的原始数据,这样我们就可以使用 Lucene 库,使其可搜索。

packagecom.yiibai.lucene;importjava.io.File;importjava.io.FileFilter;importjava.io.FileReader;importjava.io.IOException;importorg.apache.lucene.analysis.standard.StandardAnalyzer;importorg.apache.lucene.document.Document;importorg.apache.lucene.document.Field;importorg.apache.lucene.index.CorruptIndexException;importorg.apache.lucene.index.IndexWriter;importorg.apache.lucene.store.Directory;importorg.apache.lucene.store.FSDirectory;importorg.apache.lucene.util.Version;publicclassIndexer{privateIndexWriterwriter;publicIndexer(StringindexDirectoryPath)throwsIOException{//this directory will contain the indexesDirectoryindexDirectory=FSDirectory.open(newFile(indexDirectoryPath));//create the indexerwriter=newIndexWriter(indexDirectory,newStandardAnalyzer(Version.LUCENE_36),true,IndexWriter.MaxFieldLength.UNLIMITED);}publicvoidclose()throwsCorruptIndexException,IOException{writer.close();}privatevoidupdateDocument(Filefile)throwsIOException{Documentdocument=newDocument();//update indexes for file contentswriter.updateDocument(newTerm(LuceneConstants.FILE_NAME,file.getName()),document);writer.close();}privatevoidindexFile(Filefile)throwsIOException{System.out.println("Updating index: "+file.getCanonicalPath());updateDocument(file);}publicintcreateIndex(StringdataDirPath,FileFilterfilter)throwsIOException{//get all files in the data directoryFile[]files=newFile(dataDirPath).listFiles();for(Filefile:files){if(!file.isDirectory()&&!file.isHidden()&&file.exists()&&file.canRead()&&filter.accept(file)){indexFile(file);}}returnwriter.numDocs();}}

LuceneTester.java

这个类是用来测试 Lucene 库的索引能力。

packagecom.yiibai.lucene;importjava.io.IOException;publicclassLuceneTester{StringindexDir="E:\Lucene\Index";StringdataDir="E:\Lucene\Data";Indexerindexer;publicstaticvoidmain(String[]args){LuceneTestertester;try{tester=newLuceneTester();tester.createIndex();}catch(IOExceptione){e.printStackTrace();}}privatevoidcreateIndex()throwsIOException{indexer=newIndexer(indexDir);intnumIndexed;longstartTime=System.currentTimeMillis();numIndexed=indexer.createIndex(dataDir,newTextFileFilter());longendTime=System.currentTimeMillis();indexer.close();}}

数据和索引目录的创建

使用10个文件从 record1.txt 到 record10.txt 的文本文件包含简单的名称以及学生的其他细节,并把它们放在目录 E:LuceneData。这些数据用于测试。索引目录路径应创建为E:LuceneIndex。运行此程序后,就可以看到该文件夹中创建的索引文件的列表。

运行程序:

一旦创建源,创造了原始数据,数据目录和索引目录来完成,准备好这一步是编译和运行程序。要做到这一点,在LuceneTester.Java文件选项卡中使用Eclipse IDE 的Run选项,或使用Ctrl+ F11来编译和运行应用程序LuceneTester。如果应用程序一切正常,将在Eclipse IDE控制台打印以下消息:

Updating index for E:LuceneDataecord1.txt

Updating index for E:LuceneDataecord10.txt

Updating index for E:LuceneDataecord2.txt

Updating index for E:LuceneDataecord3.txt

Updating index for E:LuceneDataecord4.txt

Updating index for E:LuceneDataecord5.txt

Updating index for E:LuceneDataecord6.txt

Updating index for E:LuceneDataecord7.txt

Updating index for E:LuceneDataecord8.txt

Updating index for E:LuceneDataecord9.txt

10 File indexed, time taken: 109 ms

一旦成功地运行程序,将有以下的索引目录中的内容:

9db7b79840ed8b328d524a7535882f74.png

¥ 我要打赏

纠错/补充

收藏

加QQ群啦,易百教程官方技术学习群

注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值