string synonyms[] = String {"quick", "rapid", "speedy"};
Document doc = new Document();
doc.Add(Field.Text("word", baseWord));
for (int i = 0; i < synonyms.length; i++)
doc.Add(Field.Text("word", synonyms[i]));
reader.Delete(new Term("city", "Amsterdam"));
reader.Close();
以上所有TestCase的源代碼下載.
public class DocumentUpdateTest : BaseIndexingTestCase
{
[Test]
public void Update()
{
Assert.AreEqual(1, GetHitCount("city", "Amsterdam"));
IndexReader reader = IndexReader.Open(dir);
reader.Delete(new Term("city", "Amsterdam"));
reader.Close();
Assert.AreEqual(0, GetHitCount("city", "Amsterdam"));
IndexWriter writer = new IndexWriter(dir, GetAnalyzer(),false);
Document doc = new Document();
doc.Add(Field.Keyword("id", "1"));
doc.Add(Field.UnIndexed("country", "Netherlands"));
doc.Add(Field.UnStored("contents","Amsterdam has lots of bridges"));
doc.Add(Field.Text("city", "Haag"));
writer.AddDocument(doc);
writer.Optimize();
writer.Close();
Assert.AreEqual(1, GetHitCount("city", "Haag"));
}
protected override Analyzer GetAnalyzer()
{
return new WhitespaceAnalyzer(); //注意此處如果用SimpleAnalyzer搜索會失敗
}
private int GetHitCount(String fieldName, String searchString)
{
IndexSearcher searcher = new IndexSearcher(dir);
Term t = new Term(fieldName, searchString);
Query query = new TermQuery(t);
Hits hits = searcher.Search(query);
int hitCount = hits.Length();
searcher.Close();
return hitCount;
}
}
public class DocumentDeleteTest : BaseIndexingTestCase // BaseIndexingTestCase中的SetUp方法 //建立了索引其中加入了兩個Document
{
[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();
}
}
doc.Add(Field.Text("contents", new StreamReader(file.FullName)));