⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testindexwriter.java

📁 Lucene a java open-source SearchEngine Framework
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
          // add one document & close writer          IndexWriter writer = new IndexWriter(dir, new WhitespaceAnalyzer(), true);          addDoc(writer);          writer.close();          // now open reader:          IndexReader reader = IndexReader.open(dir);          assertEquals("should be one document", reader.numDocs(), 1);          // now open index for create:          writer = new IndexWriter(dir, new WhitespaceAnalyzer(), true);          assertEquals("should be zero documents", writer.docCount(), 0);          addDoc(writer);          writer.close();          assertEquals("should be one document", reader.numDocs(), 1);          IndexReader reader2 = IndexReader.open(dir);          assertEquals("should be one document", reader2.numDocs(), 1);          reader.close();          reader2.close();        } finally {          rmDir(indexDir);        }    }    // Same test as above, but use IndexWriter constructor    // that takes File:    public void testCreateWithReader2() throws IOException {        String tempDir = System.getProperty("java.io.tmpdir");        if (tempDir == null)            throw new IOException("java.io.tmpdir undefined, cannot run test");        File indexDir = new File(tempDir, "lucenetestindexwriter");        try {          // add one document & close writer          IndexWriter writer = new IndexWriter(indexDir, new WhitespaceAnalyzer(), true);          addDoc(writer);          writer.close();          // now open reader:          IndexReader reader = IndexReader.open(indexDir);          assertEquals("should be one document", reader.numDocs(), 1);          // now open index for create:          writer = new IndexWriter(indexDir, new WhitespaceAnalyzer(), true);          assertEquals("should be zero documents", writer.docCount(), 0);          addDoc(writer);          writer.close();          assertEquals("should be one document", reader.numDocs(), 1);          IndexReader reader2 = IndexReader.open(indexDir);          assertEquals("should be one document", reader2.numDocs(), 1);          reader.close();          reader2.close();        } finally {          rmDir(indexDir);        }    }    // Same test as above, but use IndexWriter constructor    // that takes String:    public void testCreateWithReader3() throws IOException {        String tempDir = System.getProperty("tempDir");        if (tempDir == null)            throw new IOException("java.io.tmpdir undefined, cannot run test");        String dirName = tempDir + "/lucenetestindexwriter";        try {          // add one document & close writer          IndexWriter writer = new IndexWriter(dirName, new WhitespaceAnalyzer(), true);          addDoc(writer);          writer.close();          // now open reader:          IndexReader reader = IndexReader.open(dirName);          assertEquals("should be one document", reader.numDocs(), 1);          // now open index for create:          writer = new IndexWriter(dirName, new WhitespaceAnalyzer(), true);          assertEquals("should be zero documents", writer.docCount(), 0);          addDoc(writer);          writer.close();          assertEquals("should be one document", reader.numDocs(), 1);          IndexReader reader2 = IndexReader.open(dirName);          assertEquals("should be one document", reader2.numDocs(), 1);          reader.close();          reader2.close();        } finally {          rmDir(new File(dirName));        }    }    // Simulate a writer that crashed while writing segments    // file: make sure we can still open the index (ie,    // gracefully fallback to the previous segments file),    // and that we can add to the index:    public void testSimulatedCrashedWriter() throws IOException {        Directory dir = new RAMDirectory();        IndexWriter writer = null;        writer  = new IndexWriter(dir, new WhitespaceAnalyzer(), true);        // add 100 documents        for (int i = 0; i < 100; i++) {            addDoc(writer);        }        // close        writer.close();        long gen = SegmentInfos.getCurrentSegmentGeneration(dir);        assertTrue("segment generation should be > 1 but got " + gen, gen > 1);        // Make the next segments file, with last byte        // missing, to simulate a writer that crashed while        // writing segments file:        String fileNameIn = SegmentInfos.getCurrentSegmentFileName(dir);        String fileNameOut = IndexFileNames.fileNameFromGeneration(IndexFileNames.SEGMENTS,                                                                   "",                                                                   1+gen);        IndexInput in = dir.openInput(fileNameIn);        IndexOutput out = dir.createOutput(fileNameOut);        long length = in.length();        for(int i=0;i<length-1;i++) {          out.writeByte(in.readByte());        }        in.close();        out.close();        IndexReader reader = null;        try {          reader = IndexReader.open(dir);        } catch (Exception e) {          fail("reader failed to open on a crashed index");        }        reader.close();        try {          writer  = new IndexWriter(dir, new WhitespaceAnalyzer(), true);        } catch (Exception e) {          fail("writer failed to open on a crashed index");        }        // add 100 documents        for (int i = 0; i < 100; i++) {            addDoc(writer);        }        // close        writer.close();    }    // Simulate a corrupt index by removing last byte of    // latest segments file and make sure we get an    // IOException trying to open the index:    public void testSimulatedCorruptIndex1() throws IOException {        Directory dir = new RAMDirectory();        IndexWriter writer = null;        writer  = new IndexWriter(dir, new WhitespaceAnalyzer(), true);        // add 100 documents        for (int i = 0; i < 100; i++) {            addDoc(writer);        }        // close        writer.close();        long gen = SegmentInfos.getCurrentSegmentGeneration(dir);        assertTrue("segment generation should be > 1 but got " + gen, gen > 1);        String fileNameIn = SegmentInfos.getCurrentSegmentFileName(dir);        String fileNameOut = IndexFileNames.fileNameFromGeneration(IndexFileNames.SEGMENTS,                                                                   "",                                                                   1+gen);        IndexInput in = dir.openInput(fileNameIn);        IndexOutput out = dir.createOutput(fileNameOut);        long length = in.length();        for(int i=0;i<length-1;i++) {          out.writeByte(in.readByte());        }        in.close();        out.close();        dir.deleteFile(fileNameIn);        IndexReader reader = null;        try {          reader = IndexReader.open(dir);          fail("reader did not hit IOException on opening a corrupt index");        } catch (Exception e) {        }        if (reader != null) {          reader.close();        }    }    public void testChangesAfterClose() throws IOException {        Directory dir = new RAMDirectory();        IndexWriter writer = null;        writer  = new IndexWriter(dir, new WhitespaceAnalyzer(), true);        addDoc(writer);        // close        writer.close();        try {          addDoc(writer);          fail("did not hit AlreadyClosedException");        } catch (AlreadyClosedException e) {          // expected        }    }      // Simulate a corrupt index by removing one of the cfs    // files and make sure we get an IOException trying to    // open the index:    public void testSimulatedCorruptIndex2() throws IOException {        Directory dir = new RAMDirectory();        IndexWriter writer = null;        writer  = new IndexWriter(dir, new WhitespaceAnalyzer(), true);        // add 100 documents        for (int i = 0; i < 100; i++) {            addDoc(writer);        }        // close        writer.close();        long gen = SegmentInfos.getCurrentSegmentGeneration(dir);        assertTrue("segment generation should be > 1 but got " + gen, gen > 1);        String[] files = dir.list();        for(int i=0;i<files.length;i++) {          if (files[i].endsWith(".cfs")) {            dir.deleteFile(files[i]);            break;          }        }        IndexReader reader = null;        try {          reader = IndexReader.open(dir);          fail("reader did not hit IOException on opening a corrupt index");        } catch (Exception e) {        }        if (reader != null) {          reader.close();        }    }    /*     * Simple test for "commit on close": open writer with     * autoCommit=false, so it will only commit on close,     * then add a bunch of docs, making sure reader does not     * see these docs until writer is closed.     */    public void testCommitOnClose() throws IOException {        Directory dir = new RAMDirectory();              IndexWriter writer = new IndexWriter(dir, new WhitespaceAnalyzer(), true);        for (int i = 0; i < 14; i++) {          addDoc(writer);        }        writer.close();        Term searchTerm = new Term("content", "aaa");                IndexSearcher searcher = new IndexSearcher(dir);        Hits hits = searcher.search(new TermQuery(searchTerm));        assertEquals("first number of hits", 14, hits.length());        searcher.close();        IndexReader reader = IndexReader.open(dir);        writer = new IndexWriter(dir, false, new WhitespaceAnalyzer());        for(int i=0;i<3;i++) {          for(int j=0;j<11;j++) {            addDoc(writer);          }          searcher = new IndexSearcher(dir);          hits = searcher.search(new TermQuery(searchTerm));          assertEquals("reader incorrectly sees changes from writer with autoCommit disabled", 14, hits.length());          searcher.close();          assertTrue("reader should have still been current", reader.isCurrent());        }        // Now, close the writer:        writer.close();        assertFalse("reader should not be current now", reader.isCurrent());        searcher = new IndexSearcher(dir);        hits = searcher.search(new TermQuery(searchTerm));        assertEquals("reader did not see changes after writer was closed", 47, hits.length());        searcher.close();    }    /*     * Simple test for "commit on close": open writer with     * autoCommit=false, so it will only commit on close,     * then add a bunch of docs, making sure reader does not     * see them until writer has closed.  Then instead of     * closing the writer, call abort and verify reader sees     * nothing was added.  Then verify we can open the index     * and add docs to it.     */    public void testCommitOnCloseAbort() throws IOException {      Directory dir = new RAMDirectory();            IndexWriter writer = new IndexWriter(dir, new WhitespaceAnalyzer(), true);      writer.setMaxBufferedDocs(10);      for (int i = 0; i < 14; i++) {        addDoc(writer);      }      writer.close();      Term searchTerm = new Term("content", "aaa");              IndexSearcher searcher = new IndexSearcher(dir);      Hits hits = searcher.search(new TermQuery(searchTerm));      assertEquals("first number of hits", 14, hits.length());      searcher.close();      writer = new IndexWriter(dir, false, new WhitespaceAnalyzer(), false);      writer.setMaxBufferedDocs(10);      for(int j=0;j<17;j++) {        addDoc(writer);      }      // Delete all docs:      writer.deleteDocuments(searchTerm);      searcher = new IndexSearcher(dir);      hits = searcher.search(new TermQuery(searchTerm));      assertEquals("reader incorrectly sees changes from writer with autoCommit disabled", 14, hits.length());      searcher.close();      // Now, close the writer:      writer.abort();      assertNoUnreferencedFiles(dir, "unreferenced files remain after abort()");      searcher = new IndexSearcher(dir);      hits = searcher.search(new TermQuery(searchTerm));      assertEquals("saw changes after writer.abort", 14, hits.length());      searcher.close();                // Now make sure we can re-open the index, add docs,      // and all is good:      writer = new IndexWriter(dir, false, new WhitespaceAnalyzer(), false);      writer.setMaxBufferedDocs(10);      for(int i=0;i<12;i++) {        for(int j=0;j<17;j++) {          addDoc(writer);        }        searcher = new IndexSearcher(dir);        hits = searcher.search(new TermQuery(searchTerm));        assertEquals("reader incorrectly sees changes from writer with autoCommit disabled", 14, hits.length());        searcher.close();      }      writer.close();      searcher = new IndexSearcher(dir);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -