// tests storing "id" and "field2" fields as pulsing codec, // whose term sort is backwards unicode code point, and // storing "field1" as a custom entirely-in-RAM codec public virtual void TestPerFieldCodec() { int NUM_DOCS = atLeast(173); if (VERBOSE) { Console.WriteLine("TEST: NUM_DOCS=" + NUM_DOCS); } BaseDirectoryWrapper dir = newDirectory(); dir.CheckIndexOnClose = false; // we use a custom codec provider IndexWriter w = new IndexWriter(dir, newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random())).setCodec(new CustomPerFieldCodec()).setMergePolicy(newLogMergePolicy(3))); Document doc = new Document(); // uses default codec: doc.Add(newTextField("field1", "this field uses the standard codec as the test", Field.Store.NO)); // uses pulsing codec: Field field2 = newTextField("field2", "this field uses the pulsing codec as the test", Field.Store.NO); doc.Add(field2); Field idField = newStringField("id", "", Field.Store.NO); doc.Add(idField); for (int i = 0;i < NUM_DOCS;i++) { idField.StringValue = "" + i; w.addDocument(doc); if ((i + 1) % 10 == 0) { w.commit(); } } if (VERBOSE) { Console.WriteLine("TEST: now delete id=77"); } w.deleteDocuments(new Term("id", "77")); IndexReader r = DirectoryReader.Open(w, true); Assert.AreEqual(NUM_DOCS - 1, r.NumDocs()); IndexSearcher s = newSearcher(r); Assert.AreEqual(NUM_DOCS - 1, s.Search(new TermQuery(new Term("field1", "standard")), 1).TotalHits); Assert.AreEqual(NUM_DOCS - 1, s.Search(new TermQuery(new Term("field2", "pulsing")), 1).TotalHits); r.Close(); if (VERBOSE) { Console.WriteLine("\nTEST: now delete 2nd doc"); } w.deleteDocuments(new Term("id", "44")); if (VERBOSE) { Console.WriteLine("\nTEST: now force merge"); } w.forceMerge(1); if (VERBOSE) { Console.WriteLine("\nTEST: now open reader"); } r = DirectoryReader.Open(w, true); Assert.AreEqual(NUM_DOCS - 2, r.MaxDoc()); Assert.AreEqual(NUM_DOCS - 2, r.NumDocs()); s = newSearcher(r); Assert.AreEqual(NUM_DOCS - 2, s.Search(new TermQuery(new Term("field1", "standard")), 1).TotalHits); Assert.AreEqual(NUM_DOCS - 2, s.Search(new TermQuery(new Term("field2", "pulsing")), 1).TotalHits); Assert.AreEqual(1, s.Search(new TermQuery(new Term("id", "76")), 1).TotalHits); Assert.AreEqual(0, s.Search(new TermQuery(new Term("id", "77")), 1).TotalHits); Assert.AreEqual(0, s.Search(new TermQuery(new Term("id", "44")), 1).TotalHits); if (VERBOSE) { Console.WriteLine("\nTEST: now close NRT reader"); } r.Close(); w.Dispose(); dir.Dispose(); }