Example #1
0
        public virtual void  TestDocCount()
        {
            Directory dir = new RAMDirectory();

            IndexWriter writer = null;
            IndexReader reader = null;
            int         i;

            try
            {
                writer = new IndexWriter(dir, new WhitespaceAnalyzer(), true);

                // add 100 documents
                for (i = 0; i < 100; i++)
                {
                    AddDoc(writer);
                }
                Assert.AreEqual(100, writer.DocCount());
                writer.Close();

                // delete 40 documents
                reader = IndexReader.Open(dir);
                for (i = 0; i < 40; i++)
                {
                    reader.Delete(i);
                }
                reader.Close();

                // test doc count before segments are merged/index is optimized
                writer = new IndexWriter(dir, new WhitespaceAnalyzer(), false);
                Assert.AreEqual(100, writer.DocCount());
                writer.Close();

                reader = IndexReader.Open(dir);
                Assert.AreEqual(100, reader.MaxDoc());
                Assert.AreEqual(60, reader.NumDocs());
                reader.Close();

                // optimize the index and check that the new doc count is correct
                writer = new IndexWriter(dir, new WhitespaceAnalyzer(), false);
                writer.Optimize();
                Assert.AreEqual(60, writer.DocCount());
                writer.Close();

                // check that the index reader gives the same numbers.
                reader = IndexReader.Open(dir);
                Assert.AreEqual(60, reader.MaxDoc());
                Assert.AreEqual(60, reader.NumDocs());
                reader.Close();
            }
            catch (System.IO.IOException e)
            {
                System.Console.Error.WriteLine(e.StackTrace);
            }
        }
Example #2
0
        public virtual void  TestBasicDelete()
        {
            Directory dir = new RAMDirectory();

            IndexWriter writer     = null;
            IndexReader reader     = null;
            Term        searchTerm = new Term("content", "aaa");

            //  add 100 documents with term : aaa
            writer = new IndexWriter(dir, new WhitespaceAnalyzer(), true);
            for (int i = 0; i < 100; i++)
            {
                AddDoc(writer, searchTerm.Text());
            }
            writer.Close();

            // OPEN READER AT THIS POINT - this should fix the view of the
            // index at the point of having 100 "aaa" documents and 0 "bbb"
            reader = IndexReader.Open(dir);
            Assert.AreEqual(100, reader.DocFreq(searchTerm), "first docFreq");
            AssertTermDocsCount("first reader", reader, searchTerm, 100);

            // DELETE DOCUMENTS CONTAINING TERM: aaa
            int deleted = 0;

            reader  = IndexReader.Open(dir);
            deleted = reader.Delete(searchTerm);
            Assert.AreEqual(100, deleted, "deleted count");
            Assert.AreEqual(100, reader.DocFreq(searchTerm), "deleted docFreq");
            AssertTermDocsCount("deleted termDocs", reader, searchTerm, 0);
            reader.Close();

            // CREATE A NEW READER and re-test
            reader = IndexReader.Open(dir);
            Assert.AreEqual(100, reader.DocFreq(searchTerm), "deleted docFreq");
            AssertTermDocsCount("deleted termDocs", reader, searchTerm, 0);
            reader.Close();
        }
Example #3
0
        private void  DeleteReaderReaderConflict(bool optimize)
        {
            Directory dir = GetDirectory(true);

            Term searchTerm1 = new Term("content", "aaa");
            Term searchTerm2 = new Term("content", "bbb");
            Term searchTerm3 = new Term("content", "ccc");

            //  add 100 documents with term : aaa
            //  add 100 documents with term : bbb
            //  add 100 documents with term : ccc
            IndexWriter writer = new IndexWriter(dir, new WhitespaceAnalyzer(), true);

            for (int i = 0; i < 100; i++)
            {
                AddDoc(writer, searchTerm1.Text());
                AddDoc(writer, searchTerm2.Text());
                AddDoc(writer, searchTerm3.Text());
            }
            if (optimize)
            {
                writer.Optimize();
            }
            writer.Close();

            // OPEN TWO READERS
            // Both readers get segment info as exists at this time
            IndexReader reader1 = IndexReader.Open(dir);

            Assert.AreEqual(100, reader1.DocFreq(searchTerm1), "first opened");
            Assert.AreEqual(100, reader1.DocFreq(searchTerm2), "first opened");
            Assert.AreEqual(100, reader1.DocFreq(searchTerm3), "first opened");
            AssertTermDocsCount("first opened", reader1, searchTerm1, 100);
            AssertTermDocsCount("first opened", reader1, searchTerm2, 100);
            AssertTermDocsCount("first opened", reader1, searchTerm3, 100);

            IndexReader reader2 = IndexReader.Open(dir);

            Assert.AreEqual(100, reader2.DocFreq(searchTerm1), "first opened");
            Assert.AreEqual(100, reader2.DocFreq(searchTerm2), "first opened");
            Assert.AreEqual(100, reader2.DocFreq(searchTerm3), "first opened");
            AssertTermDocsCount("first opened", reader2, searchTerm1, 100);
            AssertTermDocsCount("first opened", reader2, searchTerm2, 100);
            AssertTermDocsCount("first opened", reader2, searchTerm3, 100);

            // DELETE DOCS FROM READER 2 and CLOSE IT
            // delete documents containing term: aaa
            // when the reader is closed, the segment info is updated and
            // the first reader is now stale
            reader2.Delete(searchTerm1);
            Assert.AreEqual(100, reader2.DocFreq(searchTerm1), "after delete 1");
            Assert.AreEqual(100, reader2.DocFreq(searchTerm2), "after delete 1");
            Assert.AreEqual(100, reader2.DocFreq(searchTerm3), "after delete 1");
            AssertTermDocsCount("after delete 1", reader2, searchTerm1, 0);
            AssertTermDocsCount("after delete 1", reader2, searchTerm2, 100);
            AssertTermDocsCount("after delete 1", reader2, searchTerm3, 100);
            reader2.Close();

            // Make sure reader 1 is unchanged since it was open earlier
            Assert.AreEqual(100, reader1.DocFreq(searchTerm1), "after delete 1");
            Assert.AreEqual(100, reader1.DocFreq(searchTerm2), "after delete 1");
            Assert.AreEqual(100, reader1.DocFreq(searchTerm3), "after delete 1");
            AssertTermDocsCount("after delete 1", reader1, searchTerm1, 100);
            AssertTermDocsCount("after delete 1", reader1, searchTerm2, 100);
            AssertTermDocsCount("after delete 1", reader1, searchTerm3, 100);


            // ATTEMPT TO DELETE FROM STALE READER
            // delete documents containing term: bbb
            try
            {
                reader1.Delete(searchTerm2);
                Assert.Fail("Delete allowed from a stale index reader");
            }
            catch (System.IO.IOException e)
            {
                /* success */
            }

            // RECREATE READER AND TRY AGAIN
            reader1.Close();
            reader1 = IndexReader.Open(dir);
            Assert.AreEqual(100, reader1.DocFreq(searchTerm1), "reopened");
            Assert.AreEqual(100, reader1.DocFreq(searchTerm2), "reopened");
            Assert.AreEqual(100, reader1.DocFreq(searchTerm3), "reopened");
            AssertTermDocsCount("reopened", reader1, searchTerm1, 0);
            AssertTermDocsCount("reopened", reader1, searchTerm2, 100);
            AssertTermDocsCount("reopened", reader1, searchTerm3, 100);

            reader1.Delete(searchTerm2);
            Assert.AreEqual(100, reader1.DocFreq(searchTerm1), "deleted 2");
            Assert.AreEqual(100, reader1.DocFreq(searchTerm2), "deleted 2");
            Assert.AreEqual(100, reader1.DocFreq(searchTerm3), "deleted 2");
            AssertTermDocsCount("deleted 2", reader1, searchTerm1, 0);
            AssertTermDocsCount("deleted 2", reader1, searchTerm2, 0);
            AssertTermDocsCount("deleted 2", reader1, searchTerm3, 100);
            reader1.Close();

            // Open another reader to confirm that everything is deleted
            reader2 = IndexReader.Open(dir);
            Assert.AreEqual(100, reader2.DocFreq(searchTerm1), "reopened 2");
            Assert.AreEqual(100, reader2.DocFreq(searchTerm2), "reopened 2");
            Assert.AreEqual(100, reader2.DocFreq(searchTerm3), "reopened 2");
            AssertTermDocsCount("reopened 2", reader2, searchTerm1, 0);
            AssertTermDocsCount("reopened 2", reader2, searchTerm2, 0);
            AssertTermDocsCount("reopened 2", reader2, searchTerm3, 100);
            reader2.Close();

            dir.Close();
        }
Example #4
0
        private void  DeleteReaderWriterConflict(bool optimize)
        {
            //Directory dir = new RAMDirectory();
            Directory dir = GetDirectory(true);

            Term searchTerm  = new Term("content", "aaa");
            Term searchTerm2 = new Term("content", "bbb");

            //  add 100 documents with term : aaa
            IndexWriter writer = new IndexWriter(dir, new WhitespaceAnalyzer(), true);

            for (int i = 0; i < 100; i++)
            {
                AddDoc(writer, searchTerm.Text());
            }
            writer.Close();

            // OPEN READER AT THIS POINT - this should fix the view of the
            // index at the point of having 100 "aaa" documents and 0 "bbb"
            IndexReader reader = IndexReader.Open(dir);

            Assert.AreEqual(100, reader.DocFreq(searchTerm), "first docFreq");
            Assert.AreEqual(0, reader.DocFreq(searchTerm2), "first docFreq");
            AssertTermDocsCount("first reader", reader, searchTerm, 100);
            AssertTermDocsCount("first reader", reader, searchTerm2, 0);

            // add 100 documents with term : bbb
            writer = new IndexWriter(dir, new WhitespaceAnalyzer(), false);
            for (int i = 0; i < 100; i++)
            {
                AddDoc(writer, searchTerm2.Text());
            }

            // REQUEST OPTIMIZATION
            // This causes a new segment to become current for all subsequent
            // searchers. Because of this, deletions made via a previously open
            // reader, which would be applied to that reader's segment, are lost
            // for subsequent searchers/readers
            if (optimize)
            {
                writer.Optimize();
            }
            writer.Close();

            // The reader should not see the new data
            Assert.AreEqual(100, reader.DocFreq(searchTerm), "first docFreq");
            Assert.AreEqual(0, reader.DocFreq(searchTerm2), "first docFreq");
            AssertTermDocsCount("first reader", reader, searchTerm, 100);
            AssertTermDocsCount("first reader", reader, searchTerm2, 0);


            // DELETE DOCUMENTS CONTAINING TERM: aaa
            // NOTE: the reader was created when only "aaa" documents were in
            int deleted = 0;

            try
            {
                deleted = reader.Delete(searchTerm);
                Assert.Fail("Delete allowed on an index reader with stale segment information");
            }
            catch (System.IO.IOException e)
            {
                /* success */
            }

            // Re-open index reader and try again. This time it should see
            // the new data.
            reader.Close();
            reader = IndexReader.Open(dir);
            Assert.AreEqual(100, reader.DocFreq(searchTerm), "first docFreq");
            Assert.AreEqual(100, reader.DocFreq(searchTerm2), "first docFreq");
            AssertTermDocsCount("first reader", reader, searchTerm, 100);
            AssertTermDocsCount("first reader", reader, searchTerm2, 100);

            deleted = reader.Delete(searchTerm);
            Assert.AreEqual(100, deleted, "deleted count");
            Assert.AreEqual(100, reader.DocFreq(searchTerm), "deleted docFreq");
            Assert.AreEqual(100, reader.DocFreq(searchTerm2), "deleted docFreq");
            AssertTermDocsCount("deleted termDocs", reader, searchTerm, 0);
            AssertTermDocsCount("deleted termDocs", reader, searchTerm2, 100);
            reader.Close();

            // CREATE A NEW READER and re-test
            reader = IndexReader.Open(dir);
            Assert.AreEqual(100, reader.DocFreq(searchTerm), "deleted docFreq");
            Assert.AreEqual(100, reader.DocFreq(searchTerm2), "deleted docFreq");
            AssertTermDocsCount("deleted termDocs", reader, searchTerm, 0);
            AssertTermDocsCount("deleted termDocs", reader, searchTerm2, 100);
            reader.Close();
        }
 protected internal override void  DoDelete(int n)
 {
     in_Renamed.Delete(n);
 }