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

📄 testindexwriter.java

📁 lucene2.2.0版本
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
                fail(testName + ": method did not throw exception but docFreq('aaa') is " + result + " instead of expected " + START_COUNT + " [autoCommit = false]");              }            } else {              // On hitting exception we still may have added              // all docs:              if (result != START_COUNT && result != END_COUNT) {                err.printStackTrace(System.out);                fail(testName + ": method did throw exception but docFreq('aaa') is " + result + " instead of expected " + START_COUNT + " or " + END_COUNT);              }            }            searcher = new IndexSearcher(reader);            try {              hits = searcher.search(new TermQuery(searchTerm));            } catch (IOException e) {              e.printStackTrace(System.out);              fail(testName + ": exception when searching: " + e);            }            int result2 = hits.length();            if (success) {              if (result2 != result) {                fail(testName + ": method did not throw exception but hits.length for search on term 'aaa' is " + result2 + " instead of expected " + result);              }            } else {              // On hitting exception we still may have added              // all docs:              if (result2 != result) {                err.printStackTrace(System.out);                fail(testName + ": method did throw exception but hits.length for search on term 'aaa' is " + result2 + " instead of expected " + result);              }            }            searcher.close();            reader.close();            if (debug) {              System.out.println("  count is " + result);            }            if (done || result == END_COUNT) {              break;            }          }          if (debug) {            System.out.println("  start disk = " + startDiskUsage + "; input disk = " + inputDiskUsage + "; max used = " + dir.getMaxUsedSizeInBytes());          }          if (done) {            // Javadocs state that temp free Directory space            // required is at most 2X total input size of            // indices so let's make sure:            assertTrue("max free Directory space required exceeded 1X the total input index sizes during " + methodName +                       ": max temp usage = " + (dir.getMaxUsedSizeInBytes()-startDiskUsage) + " bytes; " +                       "starting disk usage = " + startDiskUsage + " bytes; " +                       "input index disk usage = " + inputDiskUsage + " bytes",                       (dir.getMaxUsedSizeInBytes()-startDiskUsage) < 2*(startDiskUsage + inputDiskUsage));          }          writer.close();          dir.close();          // Try again with 2000 more bytes of free space:          diskFree += 2000;        }      }      startDir.close();    }    /*     * Make sure IndexWriter cleans up on hitting a disk     * full exception in addDocument.     */    public void testAddDocumentOnDiskFull() throws IOException {      for(int pass=0;pass<3;pass++) {        boolean autoCommit = pass == 0;        boolean doAbort = pass == 2;        long diskFree = 200;        while(true) {          MockRAMDirectory dir = new MockRAMDirectory();          dir.setMaxSizeInBytes(diskFree);          IndexWriter writer = new IndexWriter(dir, autoCommit, new WhitespaceAnalyzer(), true);          boolean hitError = false;          try {            for(int i=0;i<200;i++) {              addDoc(writer);            }          } catch (IOException e) {            // e.printStackTrace();            hitError = true;          }          if (hitError) {            if (doAbort) {              writer.abort();            } else {              try {                writer.close();              } catch (IOException e) {                // e.printStackTrace();                dir.setMaxSizeInBytes(0);                writer.close();              }            }            assertNoUnreferencedFiles(dir, "after disk full during addDocument with autoCommit=" + autoCommit);            // Make sure reader can open the index:            IndexReader.open(dir).close();            dir.close();            // Now try again w/ more space:            diskFree += 500;          } else {            dir.close();            break;          }        }      }        }                                                   public void assertNoUnreferencedFiles(Directory dir, String message) throws IOException {      String[] startFiles = dir.list();      SegmentInfos infos = new SegmentInfos();      infos.read(dir);      IndexFileDeleter d = new IndexFileDeleter(dir, new KeepOnlyLastCommitDeletionPolicy(), infos, null);      String[] endFiles = dir.list();      Arrays.sort(startFiles);      Arrays.sort(endFiles);      if (!Arrays.equals(startFiles, endFiles)) {        fail(message + ": before delete:\n    " + arrayToString(startFiles) + "\n  after delete:\n    " + arrayToString(endFiles));      }    }    /**     * Make sure optimize doesn't use any more than 1X     * starting index size as its temporary free space     * required.     */    public void testOptimizeTempSpaceUsage() throws IOException {          MockRAMDirectory dir = new MockRAMDirectory();      IndexWriter writer  = new IndexWriter(dir, new WhitespaceAnalyzer(), true);      for(int j=0;j<500;j++) {        addDocWithIndex(writer, j);      }      writer.close();      long startDiskUsage = 0;      String[] files = dir.list();      for(int i=0;i<files.length;i++) {        startDiskUsage += dir.fileLength(files[i]);      }      dir.resetMaxUsedSizeInBytes();      writer  = new IndexWriter(dir, new WhitespaceAnalyzer(), false);      writer.optimize();      writer.close();      long maxDiskUsage = dir.getMaxUsedSizeInBytes();      assertTrue("optimized used too much temporary space: starting usage was " + startDiskUsage + " bytes; max temp usage was " + maxDiskUsage + " but should have been " + (2*startDiskUsage) + " (= 2X starting usage)",                 maxDiskUsage <= 2*startDiskUsage);      dir.close();    }    private String arrayToString(String[] l) {      String s = "";      for(int i=0;i<l.length;i++) {        if (i > 0) {          s += "\n    ";        }        s += l[i];      }      return s;    }    // Make sure we can open an index for create even when a    // reader holds it open (this fails pre lock-less    // commits on windows):    public void testCreateWithReader() 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 {          Directory dir = FSDirectory.getDirectory(indexDir);          // 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 {

⌨️ 快捷键说明

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