`
cevin15
  • 浏览: 25908 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

IndexWriter.DeleteDocument与IndexReader.DeleteDocument区别

 
阅读更多
转自http://www.cnblogs.com/zengen/archive/2011/04/18/2019669.html

IndexReader删除
IndexReader.DeleteDocument(int docNum)——根据Document的docId删除单个Document
IndexReader.DeleteDocuments(Term term)——根据Term来删除单个或多个Document
使用IndexReader进行Document删除操作时,文档并不会立即被删除,而是把这个删除动作缓存起来,直到调用IndexReader.Close()时,删除操作才会被真正执行。
注:使用IndexReader进行删除时,必须关闭所有已经打开的IndexWriter;当使用当前的IndexReader进行搜索时,即使在不关闭IndexReader的情况下,被删除的Document也不会再出现在搜索结果中。
IndexWriter删除
IndexWriter.DeleteDocuments(Query query)——根据Query条件来删除单个或多个Document
IndexWriter.DeleteDocuments(Query[] queries)——根据Query条件来删除单个或多个Document
IndexWriter.DeleteDocuments(Term term)——根据Term来删除单个或多个Document
IndexWriter.DeleteDocuments(Term[] terms)——根据Term来删除单个或多个Document
IndexWriter.DeleteAll()——删除所有的Document
使用IndexWriter进行Document删除操作时,文档并不会立即被删除,而是把这个删除动作缓存起来,当IndexWriter.Commit()或IndexWriter.Close()时,删除操作才会被真正执行。
总结:
建议使用IndexWriter来进行删除,除非
你必须按照DocId来删除;
删除后搜索要立即看到删除的效果,即删除的数据在搜索的结果中不再出现
你需要知道执行删除操作删除的Document的数量
使用IndexReader进行删除时可能存在以下问题
当有一个IndexWriter打开的时候,IndexReader的删除操作是不能够进行的,否则会报LockObtainFailedException
当IndexReader被多个线程使用的时候,一个线程用其进行删除,会使得另一个线程看到的索引有所改变,使得另一个线程的结果带有不确定性。
对于更新操作,在Lucene中是先删除,再添加的,然而删除的被立刻看到的,而添加却不能够立刻看到,造成了数据的不一致性。
即便以上问题可以通过锁来解决,然而背后的操作影响到了搜索的速度,是我们不想看到的。
使用IndexWriter与IndexReader进行Document删除时唯一的不同是:IndexReader.DeleteDocuments()可以返回被删除的文档数目。
Document一旦被删除,就不会存在于termDocs和termPositions以及任何搜索结果中出现了,当强行载入此文档时会报异常,但是该文档依然会影响docFreq,从而影响搜索评分,这个问题会在包含被删除的Document所在的段(Segment)合并时得到纠正,即当调用IndexWriter.Optimize()时得以纠正。
分享到:
评论

相关推荐

    与lucene3.0兼容的庖丁jar包

    在使用lucene3与paoding集成的时候可能会出现以下错误: Exception in thread "main" java.lang.AbstractMethodError: org.apache.lucene.analysis.TokenStream.incrementToken()Z at org.apache.lucene.index....

    Lucene3.1使用教程.doc

    6. IndexWriter.getReader 被 IndexReader.open(IndexWriter) 所替换. 7. 废弃了 MultiSearcher;ParallelMultiSearcher被直接吸收到 IndexReader 类中 8. 在 64位的Windows 和 Solaris JVMs, MMapDirectory 作为...

    Apache Lucene全文检索和IKAnalyzer分词工具类

    indexWriter.updateDocument(term, doc); /**optimize()方法是对索引进行优化 **/ indexWriter.optimize(); indexWriter.close(); } /** * 创建索引(多个) * @param list * @throws Exception ...

    基于JAVA的搜索引擎 lucene-2.2.0

    当构造完一个索引器IndexWriter之后,就可以向其中添加Document了。 在前面Lucene-2.2.0 源代码阅读学习(1)中,根据Lucene提供的一个Demo,详细分析研究一下索引器org.apache.lucene.index.IndexWriter类,看看它是...

    LuceneUitl

    IndexWriter indexWriter; try { long startTime = new Date().getTime(); // 获取创建开始的时刻 indexWriter = new IndexWriter(indexDir, luceneAnalyzer, false); indexWriter.setMaxBufferedDocs...

    lucene2.9.1所有最新开发包及源码及文档

    对索引进行读取和删除操作的IndexReader类。 3) store模块:负责索引的存储。提供索引的各种存储类:FSDirectory,RAMDirectory等。 4) document模块:索引文件内部的基础存储结构封装。如:Document类和Field类等...

    lucene,lucene教程,lucene讲解

    org.apache.lucene.document.Document public final class Field org.apache.lucene.document.Field Directory类代表一个Lucene索引的位置。它是一个抽象类. 其中的两个实现: 第一个是 FSDirectory,它表示一...

    Lucene中文分词组件 JE-Analysis 1.4.0

    分词效率: 第一次分词需要1-2秒(读取词典),之后速度基本与Lucene自带分词持平 运行环境: Lucene 1.9+ 内存消耗: 30M+ 1.4.0 —— 2006-08-21 增加词典的动态扩展能力 1.3.3 —— 2006-07...

    【分享:lucene学习资料】---<下载不扣分,回帖加1分,欢迎下载,童叟无欺>

    4.1. Document文档类 4 4.1.1. 常用方法 4 4.1.2. 示例 4 4.2. Field字段类 4 4.2.1. 构造方法 4 4.2.2. Store类 5 4.2.3. Index类 5 4.2.4. 示例 5 4.3. IndexWriter类 5 4.3.1. 构造方法 5 4.3.2. 添加文档 5 ...

    luncene源代码

    import java.io.FileReader; import java.io.Reader; import java.util.Date; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis....import org.apache.lucene.index.IndexWriter;

    lucene2.9.1完整DEMO及开发文档

    //把Document存放到IndexWriter中 iwriter.optimize(); //对索引进行优化 } catch (IOException e) { e.printStackTrace(); } finally { if (iwriter != null) { try { iwriter.close(); //关闭...

    lucene.net搜索技术,附带学习资料

    性能优化也很重要,因为如果要索引的文件比较大的话,建立索引的性能就会很大的下降,你可以调整IndexWriter的几个参数来优化索引性能,还有可以用IndexWriter.Optimize()方法(这个方法主要是优化查询速度,反而使...

    基于lucene的搜索引擎总结

    不允许使用多个IndexWriter或IndexReader实例同时对一个索引进行修改 IndexWriter和IndexReader是线程安全的,可以被多线程共享 全文索引/搜索 中文分词器 最大匹配法(机械分词):按照一定的策略将待分析的汉字串...

    learn-lucene:lucene学习

    lucene_learnlucene学习day_01:索引创建的步骤:创建directory创建IndexWriter创建Document为Document添加Field通过IdexUriter添加文档到索引中搜索的步骤:创建directory创建IndexReader根据IndexReader创建...

    Lucene 详细教案

    IndexWriter writer = null; writer = new IndexWriter("c:\\index", new CJKAnalyzer(), true); 这段代码就时建立一个索引前所必须的操作,先声明这个 IndexWriter ,实例化它你必须传入三个参数。他们分别代表...

    Lucene5 工具类

    工具类对IndexWriter,IndexReader,IndexSearcher,Analyzer,QueryParser等Lucene这些常用操作对象的获取进行了封装,其中IndexWriter采用了单例模式,确保始终只有一个对象实例,因为Lucene限制了索引写操作是阻塞的...

    jsp探针 ver0.1

    Class.forName("org.apache.lucene.index.IndexWriter"); supportLucene = true; } catch (ClassNotFoundException ex) { } try { Class.forName("org.dom4j.Document"); supportDom4j = true; } catch ...

    solr基础知识介绍

    3.3.3 Document 6 3.3.4 Field 6 3.3.5 IndexWriter 6 3.3.6 IndexSearcher 6 3.3.7 Directory 6 3.3.8 Segment 7 3.3.9 QueryParser 7 3.3.10 Hits 7 4.应用示例 7 4.1 创建索引 7 4.1 删除索引 7 4.1 索引查询 8 5...

    SearchEngineDemo:学习搜索引擎的一些demo

    luceneIndexDetail Lucene索引详解(IndexWriter详解、Document详解、索引更新)博客学习地址: luceneSearchDetail Lucene搜索详解(Lucene搜索流程详解、搜索核心API详解、基本查询详解、QueryParser详解)博客...

    中文分词工具word-1.0,Java实现的中文分词组件多种基于词典的分词算法

    IndexWriter indexWriter = new IndexWriter(directory, config); 4、利用word分析器查询Lucene索引 QueryParser queryParser = new QueryParser(Version.LUCENE_47, "text", analyzer); Query query = queryParser...

Global site tag (gtag.js) - Google Analytics