索引的删除,纠结了很久,看到一篇总结不错的文章,转载过来好好学习
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()时得以纠正。
转自:http://www.cnblogs.com/zengen/archive/2011/04/18/2019669.html
另外还有一篇参考:http://www.blogjava.net/huangfox/articles/332845.html
分享到:
相关推荐
C# Lucene.Net .Analysis.Cn.dll和Lucene.Net.dll两个文件
Lucene.Net中文分词组件 Lucene.Net.Analysis.Cn
Lucene.Net.NLS.rar Lucene.net的中文分词器组建 源码
Lucene.Net-2.0.doc 更多信息请查看 www.iubang.com
lucene.NET 中文分词 高亮 lucene.NET 中文分词 高亮 lucene.NET 中文分词 高亮 lucene.NET 中文分词 高亮
基于Lucene.net的四个版本(更新至2018.1.26 ) ------------------------------- Lucene.Net.2.9.2.2-支持.net2.0和4.0; Lucene.Net.2.9.4.1 仅支持.net4.0; Lucene.Net.3.0.3 z支持3.5和4.0; Lucene.Net.4.8.0-...
lucene.net 2.9.2 实现索引生成,修改,查询,删除实例
在使用lucene3与paoding集成的时候可能会出现以下错误: Exception in thread "main" java.lang.AbstractMethodError: org.apache.lucene.analysis.TokenStream.incrementToken()Z at org.apache.lucene.index....
lucene.net-1.4.3.final-004-21Nov05.bin
Lucene.Net 包含Lucene.Net1.3.2.1到最新版Lucene.Net2.9.4多有DLL,并且Lucene.Net2.9.2和Lucene.Net2.9.4提供Demo和功能文档
Lucene.Net.dll 版本2.9.2
Lucene.Net2.0 类MSDN操作文档
做全文搜索引擎lucene.net包的完整dll,包括:App_Licenses.dll、DictSeg.dll、FredCK.FCKeditorV2.dll、FreeTextBox.dll、FTAlgorithm.dll、FTAlgorithm.pdb、Highlighter.Net.dll、Lucene.China.dll、Lucene.Net....
3.使用了较新的Lucene.net,目前是3.0版本 4.使用了最后一版盘古分词(2016年版本) 5.使用Winform+webBrowser实现(webBrowser负责显示结果) 使用方式: 1.新建数据库,然后在新建的数据库中执行附件根目录的sql...
lucene.net.dll(3.0.3.0)
检索 lucene C# lucene.net 2.9.1.002版本
Lucene.Net.dll 2.1 Lucene.Net,.net 的开源 全文搜索框架!
Lucene.Net.dll 2.9.2