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

📄 testindexreader.java

📁 Lucene a java open-source SearchEngine Framework
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
          if (i == 1)            _TestUtil.rmDir(fileDir);        }      }    }    public void testVersion() throws IOException {      assertFalse(IndexReader.indexExists("there_is_no_such_index"));      Directory dir = new MockRAMDirectory();      assertFalse(IndexReader.indexExists(dir));      IndexWriter writer  = new IndexWriter(dir, new WhitespaceAnalyzer(), true);      addDocumentWithFields(writer);      assertTrue(IndexReader.isLocked(dir));		// writer open, so dir is locked      writer.close();      assertTrue(IndexReader.indexExists(dir));      IndexReader reader = IndexReader.open(dir);      assertFalse(IndexReader.isLocked(dir));		// reader only, no lock      long version = IndexReader.getCurrentVersion(dir);      reader.close();      // modify index and check version has been      // incremented:      writer  = new IndexWriter(dir, new WhitespaceAnalyzer(), true);      addDocumentWithFields(writer);      writer.close();      reader = IndexReader.open(dir);      assertTrue("old version is " + version + "; new version is " + IndexReader.getCurrentVersion(dir), version < IndexReader.getCurrentVersion(dir));      reader.close();      dir.close();    }    public void testLock() throws IOException {      Directory dir = new MockRAMDirectory();      IndexWriter writer  = new IndexWriter(dir, new WhitespaceAnalyzer(), true);      addDocumentWithFields(writer);      writer.close();      writer  = new IndexWriter(dir, new WhitespaceAnalyzer(), false);      IndexReader reader = IndexReader.open(dir);      try {        reader.deleteDocument(0);        fail("expected lock");      } catch(IOException e) {        // expected exception      }      IndexReader.unlock(dir);		// this should not be done in the real world!       reader.deleteDocument(0);      reader.close();      writer.close();      dir.close();    }    public void testUndeleteAll() throws IOException {      Directory dir = new MockRAMDirectory();      IndexWriter writer  = new IndexWriter(dir, new WhitespaceAnalyzer(), true);      addDocumentWithFields(writer);      addDocumentWithFields(writer);      writer.close();      IndexReader reader = IndexReader.open(dir);      reader.deleteDocument(0);      reader.deleteDocument(1);      reader.undeleteAll();      reader.close();      reader = IndexReader.open(dir);      assertEquals(2, reader.numDocs());	// nothing has really been deleted thanks to undeleteAll()      reader.close();      dir.close();    }    public void testUndeleteAllAfterClose() throws IOException {      Directory dir = new MockRAMDirectory();      IndexWriter writer  = new IndexWriter(dir, new WhitespaceAnalyzer(), true);      addDocumentWithFields(writer);      addDocumentWithFields(writer);      writer.close();      IndexReader reader = IndexReader.open(dir);      reader.deleteDocument(0);      reader.deleteDocument(1);      reader.close();      reader = IndexReader.open(dir);      reader.undeleteAll();      assertEquals(2, reader.numDocs());	// nothing has really been deleted thanks to undeleteAll()      reader.close();      dir.close();    }    public void testUndeleteAllAfterCloseThenReopen() throws IOException {      Directory dir = new MockRAMDirectory();      IndexWriter writer  = new IndexWriter(dir, new WhitespaceAnalyzer(), true);      addDocumentWithFields(writer);      addDocumentWithFields(writer);      writer.close();      IndexReader reader = IndexReader.open(dir);      reader.deleteDocument(0);      reader.deleteDocument(1);      reader.close();      reader = IndexReader.open(dir);      reader.undeleteAll();      reader.close();      reader = IndexReader.open(dir);      assertEquals(2, reader.numDocs());	// nothing has really been deleted thanks to undeleteAll()      reader.close();      dir.close();    }    public void testDeleteReaderReaderConflictUnoptimized() throws IOException{      deleteReaderReaderConflict(false);    }        public void testDeleteReaderReaderConflictOptimized() throws IOException{      deleteReaderReaderConflict(true);    }    /**     * Make sure if reader tries to commit but hits disk     * full that reader remains consistent and usable.     */    public void testDiskFull() throws IOException {      boolean debug = false;      Term searchTerm = new Term("content", "aaa");      int START_COUNT = 157;      int END_COUNT = 144;            // First build up a starting index:      RAMDirectory startDir = new MockRAMDirectory();      IndexWriter writer = new IndexWriter(startDir, new WhitespaceAnalyzer(), true);      for(int i=0;i<157;i++) {        Document d = new Document();        d.add(new Field("id", Integer.toString(i), Field.Store.YES, Field.Index.UN_TOKENIZED));        d.add(new Field("content", "aaa " + i, Field.Store.NO, Field.Index.TOKENIZED));        writer.addDocument(d);      }      writer.close();      long diskUsage = startDir.sizeInBytes();      long diskFree = diskUsage+100;            IOException err = null;      boolean done = false;      // Iterate w/ ever increasing free disk space:      while(!done) {        MockRAMDirectory dir = new MockRAMDirectory(startDir);        IndexReader reader = IndexReader.open(dir);        // For each disk size, first try to commit against        // dir that will hit random IOExceptions & disk        // full; after, give it infinite disk space & turn        // off random IOExceptions & retry w/ same reader:        boolean success = false;        for(int x=0;x<2;x++) {          double rate = 0.05;          double diskRatio = ((double) diskFree)/diskUsage;          long thisDiskFree;          String testName;          if (0 == x) {            thisDiskFree = diskFree;            if (diskRatio >= 2.0) {              rate /= 2;            }            if (diskRatio >= 4.0) {              rate /= 2;            }            if (diskRatio >= 6.0) {              rate = 0.0;            }            if (debug) {              System.out.println("\ncycle: " + diskFree + " bytes");            }            testName = "disk full during reader.close() @ " + thisDiskFree + " bytes";          } else {            thisDiskFree = 0;            rate = 0.0;            if (debug) {              System.out.println("\ncycle: same writer: unlimited disk space");            }            testName = "reader re-use after disk full";          }          dir.setMaxSizeInBytes(thisDiskFree);          dir.setRandomIOExceptionRate(rate, diskFree);          try {            if (0 == x) {              int docId = 12;              for(int i=0;i<13;i++) {                reader.deleteDocument(docId);                reader.setNorm(docId, "contents", (float) 2.0);                docId += 12;              }            }            reader.close();            success = true;            if (0 == x) {              done = true;            }          } catch (IOException e) {            if (debug) {              System.out.println("  hit IOException: " + e);            }            err = e;            if (1 == x) {              e.printStackTrace();              fail(testName + " hit IOException after disk space was freed up");            }          }          // Whether we succeeded or failed, check that all          // un-referenced files were in fact deleted (ie,          // we did not create garbage).  Just create a          // new IndexFileDeleter, have it delete          // unreferenced files, then verify that in fact          // no files were deleted:          String[] startFiles = dir.list();          SegmentInfos infos = new SegmentInfos();          infos.read(dir);          IndexFileDeleter d = new IndexFileDeleter(dir, new KeepOnlyLastCommitDeletionPolicy(), infos, null, null);          String[] endFiles = dir.list();          Arrays.sort(startFiles);          Arrays.sort(endFiles);          //for(int i=0;i<startFiles.length;i++) {          //  System.out.println("  startFiles: " + i + ": " + startFiles[i]);          //}          if (!Arrays.equals(startFiles, endFiles)) {            String successStr;            if (success) {              successStr = "success";            } else {              successStr = "IOException";              err.printStackTrace();            }            fail("reader.close() failed to delete unreferenced files after " + successStr + " (" + diskFree + " bytes): before delete:\n    " + arrayToString(startFiles) + "\n  after delete:\n    " + arrayToString(endFiles));          }          // Finally, verify index is not corrupt, and, if          // we succeeded, we see all docs changed, and if          // we failed, we see either all docs or no docs          // changed (transactional semantics):          IndexReader newReader = null;          try {            newReader = IndexReader.open(dir);          } catch (IOException e) {            e.printStackTrace();            fail(testName + ":exception when creating IndexReader after disk full during close: " + e);          }          /*          int result = newReader.docFreq(searchTerm);          if (success) {            if (result != END_COUNT) {              fail(testName + ": method did not throw exception but docFreq('aaa') is " + result + " instead of expected " + END_COUNT);            }          } else {            // On hitting exception we still may have added            // all docs:            if (result != START_COUNT && result != END_COUNT) {              err.printStackTrace();              fail(testName + ": method did throw exception but docFreq('aaa') is " + result + " instead of expected " + START_COUNT + " or " + END_COUNT);            }          }          */          IndexSearcher searcher = new IndexSearcher(newReader);          Hits hits = null;          try {            hits = searcher.search(new TermQuery(searchTerm));          } catch (IOException e) {            e.printStackTrace();            fail(testName + ": exception when searching: " + e);          }          int result2 = hits.length();          if (success) {            if (result2 != END_COUNT) {              fail(testName + ": method did not throw exception but hits.length for search on term 'aaa' is " + result2 + " instead of expected " + END_COUNT);            }          } else {            // On hitting exception we still may have added            // all docs:            if (result2 != START_COUNT && result2 != END_COUNT) {              err.printStackTrace();              fail(testName + ": method did throw exception but hits.length for search on term 'aaa' is " + result2 + " instead of expected " + START_COUNT);            }          }          searcher.close();          newReader.close();          if (result2 == END_COUNT) {            break;          }        }        dir.close();        // Try again with 10 more bytes of free space:        diskFree += 10;      }      startDir.close();    }    public void testDocsOutOfOrderJIRA140() throws IOException {      Directory dir = new MockRAMDirectory();            IndexWriter writer  = new IndexWriter(dir, new WhitespaceAnalyzer(), true);      for(int i=0;i<11;i++) {        addDoc(writer, "aaa");      }      writer.close();      IndexReader reader = IndexReader.open(dir);      // Try to delete an invalid docId, yet, within range      // of the final bits of the BitVector:      boolean gotException = false;

⌨️ 快捷键说明

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