📄 documentdeletetest.cs
字号:
using System;
using Lucene.Net.Index;
using Lucene.Net.Search;
using NUnit.Framework;
namespace dotLucene.inAction.Index
{
[TestFixture]
public class DocumentDeleteTest : BaseIndexingTestCase
{
[Test]
public void testDeleteBeforeIndexMerge()
{
IndexReader reader = IndexReader.Open(dir); //当前索引中有两个Document
Assert.AreEqual(2, reader.MaxDoc()); //文档从0开始计数,MaxDoc表示下一个文档的序号
Assert.AreEqual(2, reader.NumDocs()); //NumDocs表示当前索引中文档的个数
reader.Delete(1); //对标号为1的文档标记为待删除,逻辑删除
Assert.IsTrue(reader.IsDeleted(1)); //检测某个序号的文档是否被标记删除
Assert.IsTrue(reader.HasDeletions()); //检测索引中是否有Document被标记删除
Assert.AreEqual(2, reader.MaxDoc()); //当前下一个文档序号仍然为2
Assert.AreEqual(1, reader.NumDocs()); //当前索引中文档数变成1
reader.Close(); //此时真正从物理上删除之前被标记的文档
reader = IndexReader.Open(dir);
Assert.AreEqual(2, reader.MaxDoc());
Assert.AreEqual(1, reader.NumDocs());
reader.Close();
}
[Test]
public void DeleteAfterIndexMerge() //在索引重排之后
{
IndexReader reader = IndexReader.Open(dir);
Assert.AreEqual(2, reader.MaxDoc());
Assert.AreEqual(2, reader.NumDocs());
reader.Delete(1);
reader.Close();
IndexWriter writer = new IndexWriter(dir, GetAnalyzer(), false);
writer.Optimize(); //索引重排
writer.Close();
reader = IndexReader.Open(dir);
Assert.IsFalse(reader.IsDeleted(1));
Assert.IsFalse(reader.HasDeletions());
Assert.AreEqual(1, reader.MaxDoc()); //索引重排后,下一个文档序号变为1
Assert.AreEqual(1, reader.NumDocs());
reader.Close();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -