Index: lucene/CHANGES.txt =================================================================== --- lucene/CHANGES.txt (revision 950237) +++ lucene/CHANGES.txt (working copy) @@ -106,6 +106,11 @@ commit points when they are not needed anymore (instead of waiting for the next commit). (Shai Erera) +* LUCENE-2356: Add IndexWriterConfig.set/getReaderTermIndexDivisor, to + set what IndexWriter passes for termIndexDivisor to the readers it + opens internally when apply deletions or creating a near-real-time + reader. (Earwin Burrfoot via Mike McCandless) + New features * LUCENE-1606, LUCENE-2089: Adds AutomatonQuery, a MultiTermQuery that Index: lucene/src/test/org/apache/lucene/index/TestIndexWriterConfig.java =================================================================== --- lucene/src/test/org/apache/lucene/index/TestIndexWriterConfig.java (revision 950237) +++ lucene/src/test/org/apache/lucene/index/TestIndexWriterConfig.java (working copy) @@ -84,6 +84,7 @@ assertNull(conf.getMergedSegmentWarmer()); assertEquals(IndexWriterConfig.DEFAULT_CODEC_PROVIDER, CodecProvider.getDefault()); assertEquals(IndexWriterConfig.DEFAULT_MAX_THREAD_STATES, conf.getMaxThreadStates()); + assertEquals(IndexWriterConfig.DEFAULT_READER_TERMS_INDEX_DIVISOR, conf.getReaderTermsIndexDivisor()); assertEquals(LogByteSizeMergePolicy.class, conf.getMergePolicy().getClass()); // Sanity check - validate that all getters are covered. @@ -107,6 +108,7 @@ getters.add("getMergePolicy"); getters.add("getMaxThreadStates"); getters.add("getReaderPooling"); + getters.add("getReaderTermsIndexDivisor"); for (Method m : IndexWriterConfig.class.getDeclaredMethods()) { if (m.getDeclaringClass() == IndexWriterConfig.class && m.getName().startsWith("get")) { assertTrue("method " + m.getName() + " is not tested for defaults", getters.contains(m.getName())); @@ -140,6 +142,7 @@ assertEquals(16.0, IndexWriterConfig.DEFAULT_RAM_BUFFER_SIZE_MB, 0.0); assertEquals(false, IndexWriterConfig.DEFAULT_READER_POOLING); assertEquals(8, IndexWriterConfig.DEFAULT_MAX_THREAD_STATES); + assertEquals(IndexReader.DEFAULT_TERMS_INDEX_DIVISOR, IndexWriterConfig.DEFAULT_READER_TERMS_INDEX_DIVISOR); } @Test Index: lucene/src/test/org/apache/lucene/index/TestIndexWriterReader.java =================================================================== --- lucene/src/test/org/apache/lucene/index/TestIndexWriterReader.java (revision 950237) +++ lucene/src/test/org/apache/lucene/index/TestIndexWriterReader.java (working copy) @@ -214,7 +214,7 @@ boolean optimize = true; Directory dir1 = new MockRAMDirectory(); - IndexWriter writer = new IndexWriter(dir1, new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer())); + IndexWriter writer = new IndexWriter(dir1, new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer()).setReaderTermsIndexDivisor(2)); writer.setInfoStream(infoStream); // create the index createIndexNoClose(!optimize, "index1", writer); Index: lucene/src/java/org/apache/lucene/index/IndexWriter.java =================================================================== --- lucene/src/java/org/apache/lucene/index/IndexWriter.java (revision 950237) +++ lucene/src/java/org/apache/lucene/index/IndexWriter.java (working copy) @@ -382,7 +382,7 @@ * @throws IOException */ public IndexReader getReader() throws IOException { - return getReader(IndexReader.DEFAULT_TERMS_INDEX_DIVISOR); + return getReader(config.getReaderTermsIndexDivisor()); } /** Expert: like {@link #getReader}, except you can @@ -603,8 +603,9 @@ * @throws IOException */ public synchronized SegmentReader get(SegmentInfo info, boolean doOpenStores) throws IOException { - return get(info, doOpenStores, BufferedIndexInput.BUFFER_SIZE, IndexReader.DEFAULT_TERMS_INDEX_DIVISOR); + return get(info, doOpenStores, BufferedIndexInput.BUFFER_SIZE, config.getReaderTermsIndexDivisor()); } + /** * Obtain a SegmentReader from the readerPool. The reader * must be returned by calling {@link #release(SegmentReader)} Index: lucene/src/java/org/apache/lucene/index/IndexWriterConfig.java =================================================================== --- lucene/src/java/org/apache/lucene/index/IndexWriterConfig.java (revision 950237) +++ lucene/src/java/org/apache/lucene/index/IndexWriterConfig.java (working copy) @@ -91,6 +91,9 @@ /** Default setting for {@link #setReaderPooling}. */ public final static boolean DEFAULT_READER_POOLING = false; + /** Default value is 1. Change using {@link #setReaderTermsIndexDivisor(int)}. */ + public static final int DEFAULT_READER_TERMS_INDEX_DIVISOR = IndexReader.DEFAULT_TERMS_INDEX_DIVISOR; + /** * Sets the default (for any instance) maximum time to wait for a write lock * (in milliseconds). @@ -127,6 +130,7 @@ private MergePolicy mergePolicy; private int maxThreadStates; private boolean readerPooling; + private int readerTermsIndexDivisor; // required for clone private Version matchVersion; @@ -158,6 +162,7 @@ mergePolicy = new LogByteSizeMergePolicy(); maxThreadStates = DEFAULT_MAX_THREAD_STATES; readerPooling = DEFAULT_READER_POOLING; + readerTermsIndexDivisor = DEFAULT_READER_TERMS_INDEX_DIVISOR; } @Override @@ -583,6 +588,20 @@ IndexingChain getIndexingChain() { return indexingChain; } + + /** 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}. */ + public IndexWriterConfig setReaderTermsIndexDivisor(int divisor) { + readerTermsIndexDivisor = divisor; + return this; + } + + /** @see #setReaderTermsIndexDivisor() */ + public int getReaderTermsIndexDivisor() { + return readerTermsIndexDivisor; + } @Override public String toString() { @@ -606,6 +625,7 @@ sb.append("mergePolicy=").append(mergePolicy).append("\n"); sb.append("maxThreadStates=").append(maxThreadStates).append("\n"); sb.append("readerPooling=").append(readerPooling).append("\n"); + sb.append("readerTermsIndexDivisor=").append(readerTermsIndexDivisor).append("\n"); return sb.toString(); } }