Index: lucene/CHANGES.txt =================================================================== --- lucene/CHANGES.txt (revision 1063734) +++ lucene/CHANGES.txt (working copy) @@ -371,6 +371,9 @@ * LUCENE-1846: DateTools now uses the US locale everywhere, so DateTools.round() is safe also in strange locales. (Uwe Schindler) +* LUCENE-2891: IndexWriterConfig did not accept -1 in setReaderTermIndexDivisor, + which can be used to prevent loading the term infos into memory. (Shai Erera) + New features * LUCENE-2128: Parallelized fetching document frequencies during weight Index: lucene/src/test/org/apache/lucene/index/RandomIndexWriter.java =================================================================== --- lucene/src/test/org/apache/lucene/index/RandomIndexWriter.java (revision 1063734) +++ lucene/src/test/org/apache/lucene/index/RandomIndexWriter.java (working copy) @@ -148,7 +148,9 @@ System.out.println("RIW.getReader: open new reader"); } w.commit(); - return IndexReader.open(w.getDirectory(), new KeepOnlyLastCommitDeletionPolicy(), r.nextBoolean(), _TestUtil.nextInt(r, 1, 10)); + int termIndexDivisor = _TestUtil.nextInt(r, 0, 10); + if (termIndexDivisor == 0) termIndexDivisor = -1; // disable loading term infos + return IndexReader.open(w.getDirectory(), new KeepOnlyLastCommitDeletionPolicy(), r.nextBoolean(), termIndexDivisor); } } Index: lucene/src/test/org/apache/lucene/index/TestIndexWriterConfig.java =================================================================== --- lucene/src/test/org/apache/lucene/index/TestIndexWriterConfig.java (revision 1063734) +++ lucene/src/test/org/apache/lucene/index/TestIndexWriterConfig.java (working copy) @@ -230,6 +230,23 @@ // this is expected } + // Test setReaderTermInfosDivisor + try { + conf.setReaderTermsIndexDivisor(0); + fail("should not have succeeded to set termInfosDivisor to 0"); + } catch (IllegalArgumentException e) { + // this is expected + } + + // Setting to -1 is ok + conf.setReaderTermsIndexDivisor(-1); + try { + conf.setReaderTermsIndexDivisor(-2); + fail("should not have succeeded to set termInfosDivisor to < -1"); + } catch (IllegalArgumentException e) { + // this is expected + } + assertEquals(IndexWriterConfig.DEFAULT_MAX_THREAD_STATES, conf.getMaxThreadStates()); conf.setMaxThreadStates(5); assertEquals(5, conf.getMaxThreadStates()); Index: lucene/src/test/org/apache/lucene/util/LuceneTestCase.java =================================================================== --- lucene/src/test/org/apache/lucene/util/LuceneTestCase.java (revision 1063734) +++ lucene/src/test/org/apache/lucene/util/LuceneTestCase.java (working copy) @@ -641,7 +641,9 @@ } c.setReaderPooling(r.nextBoolean()); - c.setReaderTermsIndexDivisor(_TestUtil.nextInt(r, 1, 4)); + int termIndexDivisor = _TestUtil.nextInt(r, 0, 4); + if (termIndexDivisor == 0) termIndexDivisor = -1; // disable loading term infos + c.setReaderTermsIndexDivisor(termIndexDivisor); return c; } Index: lucene/src/java/org/apache/lucene/index/IndexWriterConfig.java =================================================================== --- lucene/src/java/org/apache/lucene/index/IndexWriterConfig.java (revision 1063734) +++ lucene/src/java/org/apache/lucene/index/IndexWriterConfig.java (working copy) @@ -539,10 +539,11 @@ /** Sets the term index divisor passed to any readers that * IndexWriter opens, for example when apply deletes or * creating a near-real-time reader in {@link - * IndexWriter#getReader}. */ + * IndexWriter#getReader}. If you pass -1, the term infos + * won't be loaded by the readers. */ public IndexWriterConfig setReaderTermsIndexDivisor(int divisor) { - if (divisor <= 0) { - throw new IllegalArgumentException("divisor must be >= 1 (got " + divisor + ")"); + if (divisor <= 0 && divisor != -1) { + throw new IllegalArgumentException("divisor must be >= 1, or -1 (got " + divisor + ")"); } readerTermsIndexDivisor = divisor; return this;