You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mi...@apache.org on 2011/01/20 20:06:18 UTC
svn commit: r1061462 - in /lucene/dev/branches/branch_3x: ./ lucene/
lucene/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/
lucene/contrib/queryparser/src/test/org/apache/lucene/queryParser/standard/
lucene/contrib/spatial/src/test...
Author: mikemccand
Date: Thu Jan 20 19:06:17 2011
New Revision: 1061462
URL: http://svn.apache.org/viewvc?rev=1061462&view=rev
Log:
LUCENE-2691: IndexWriter.getReader -> IndexReader.open(IndexWriter)
Modified:
lucene/dev/branches/branch_3x/ (props changed)
lucene/dev/branches/branch_3x/lucene/ (props changed)
lucene/dev/branches/branch_3x/lucene/CHANGES.txt
lucene/dev/branches/branch_3x/lucene/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/NearRealtimeReaderTask.java
lucene/dev/branches/branch_3x/lucene/contrib/queryparser/src/test/org/apache/lucene/queryParser/standard/TestQPHelper.java
lucene/dev/branches/branch_3x/lucene/contrib/spatial/src/test/org/apache/lucene/spatial/tier/TestDistance.java
lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/IndexReader.java
lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/IndexWriter.java
lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/queryParser/TestQueryParser.java
lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestCachingSpanFilter.java
lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestCachingWrapperFilter.java
lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestElevationComparator.java
lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/payloads/PayloadHelper.java
lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/store/TestFileSwitchDirectory.java
lucene/dev/branches/branch_3x/solr/ (props changed)
Modified: lucene/dev/branches/branch_3x/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/CHANGES.txt?rev=1061462&r1=1061461&r2=1061462&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/CHANGES.txt (original)
+++ lucene/dev/branches/branch_3x/lucene/CHANGES.txt Thu Jan 20 19:06:17 2011
@@ -289,6 +289,9 @@ API Changes
for AttributeImpls, but can still be provided (if needed).
(Uwe Schindler)
+* LUCENE-2691: Deprecate IndexWriter.getReader in favor of
+ IndexReader.open(IndexWriter) (Grant Ingersoll, Mike McCandless)
+
Bug fixes
* LUCENE-2249: ParallelMultiSearcher should shut down thread pool on
Modified: lucene/dev/branches/branch_3x/lucene/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/NearRealtimeReaderTask.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/NearRealtimeReaderTask.java?rev=1061462&r1=1061461&r2=1061462&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/NearRealtimeReaderTask.java (original)
+++ lucene/dev/branches/branch_3x/lucene/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/NearRealtimeReaderTask.java Thu Jan 20 19:06:17 2011
@@ -59,7 +59,7 @@ public class NearRealtimeReaderTask exte
}
long t = System.currentTimeMillis();
- IndexReader r = w.getReader();
+ IndexReader r = IndexReader.open(w);
runData.setIndexReader(r);
// Transfer our reference to runData
r.decRef();
Modified: lucene/dev/branches/branch_3x/lucene/contrib/queryparser/src/test/org/apache/lucene/queryParser/standard/TestQPHelper.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/contrib/queryparser/src/test/org/apache/lucene/queryParser/standard/TestQPHelper.java?rev=1061462&r1=1061461&r2=1061462&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/contrib/queryparser/src/test/org/apache/lucene/queryParser/standard/TestQPHelper.java (original)
+++ lucene/dev/branches/branch_3x/lucene/contrib/queryparser/src/test/org/apache/lucene/queryParser/standard/TestQPHelper.java Thu Jan 20 19:06:17 2011
@@ -1242,7 +1242,7 @@ public class TestQPHelper extends Lucene
Document doc = new Document();
doc.add(newField("field", "", Field.Store.NO, Field.Index.ANALYZED));
w.addDocument(doc);
- IndexReader r = w.getReader();
+ IndexReader r = IndexReader.open(w);
IndexSearcher s = new IndexSearcher(r);
Query q = new StandardQueryParser(new CannedAnalyzer()).parse("\"a\"", "field");
Modified: lucene/dev/branches/branch_3x/lucene/contrib/spatial/src/test/org/apache/lucene/spatial/tier/TestDistance.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/contrib/spatial/src/test/org/apache/lucene/spatial/tier/TestDistance.java?rev=1061462&r1=1061461&r2=1061462&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/contrib/spatial/src/test/org/apache/lucene/spatial/tier/TestDistance.java (original)
+++ lucene/dev/branches/branch_3x/lucene/contrib/spatial/src/test/org/apache/lucene/spatial/tier/TestDistance.java Thu Jan 20 19:06:17 2011
@@ -96,7 +96,7 @@ public class TestDistance extends Lucene
public void testLatLongFilterOnDeletedDocs() throws Exception {
writer.deleteDocuments(new Term("name", "Potomac"));
- IndexReader r = writer.getReader();
+ IndexReader r = IndexReader.open(writer);
LatLongDistanceFilter f = new LatLongDistanceFilter(new QueryWrapperFilter(new MatchAllDocsQuery()),
lat, lng, 1.0, latField, lngField);
Modified: lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/IndexReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/IndexReader.java?rev=1061462&r1=1061461&r2=1061462&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/IndexReader.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/IndexReader.java Thu Jan 20 19:06:17 2011
@@ -230,6 +230,22 @@ public abstract class IndexReader implem
return open(directory, null, null, readOnly, DEFAULT_TERMS_INDEX_DIVISOR);
}
+ /**
+ * Open a near real time IndexReader from the {@link org.apache.lucene.index.IndexWriter}.
+ *
+ * @param writer The IndexWriter to open from
+ * @return The new IndexReader
+ * @throws CorruptIndexException
+ * @throws IOException if there is a low-level IO error
+ *
+ * @see #reopen(IndexWriter)
+ *
+ * @lucene.experimental
+ */
+ public static IndexReader open(final IndexWriter writer) throws CorruptIndexException, IOException {
+ return writer.getReader();
+ }
+
/** Expert: returns an IndexReader reading the index in the given
* {@link IndexCommit}. You should pass readOnly=true, since it
* gives much better concurrent performance, unless you
@@ -413,6 +429,69 @@ public abstract class IndexReader implem
}
/**
+ * Expert: returns a readonly reader, covering all
+ * committed as well as un-committed changes to the index.
+ * This provides "near real-time" searching, in that
+ * changes made during an IndexWriter session can be
+ * quickly made available for searching without closing
+ * the writer nor calling {@link #commit}.
+ *
+ * <p>Note that this is functionally equivalent to calling
+ * {#flush} (an internal IndexWriter operation) and then using {@link IndexReader#open} to
+ * open a new reader. But the turnaround time of this
+ * method should be faster since it avoids the potentially
+ * costly {@link #commit}.</p>
+ *
+ * <p>You must close the {@link IndexReader} returned by
+ * this method once you are done using it.</p>
+ *
+ * <p>It's <i>near</i> real-time because there is no hard
+ * guarantee on how quickly you can get a new reader after
+ * making changes with IndexWriter. You'll have to
+ * experiment in your situation to determine if it's
+ * fast enough. As this is a new and experimental
+ * feature, please report back on your findings so we can
+ * learn, improve and iterate.</p>
+ *
+ * <p>The resulting reader supports {@link
+ * IndexReader#reopen}, but that call will simply forward
+ * back to this method (though this may change in the
+ * future).</p>
+ *
+ * <p>The very first time this method is called, this
+ * writer instance will make every effort to pool the
+ * readers that it opens for doing merges, applying
+ * deletes, etc. This means additional resources (RAM,
+ * file descriptors, CPU time) will be consumed.</p>
+ *
+ * <p>For lower latency on reopening a reader, you should
+ * call {@link #setMergedSegmentWarmer} to
+ * pre-warm a newly merged segment before it's committed
+ * to the index. This is important for minimizing
+ * index-to-search delay after a large merge. </p>
+ *
+ * <p>If an addIndexes* call is running in another thread,
+ * then this reader will only search those segments from
+ * the foreign index that have been successfully copied
+ * over, so far</p>.
+ *
+ * <p><b>NOTE</b>: Once the writer is closed, any
+ * outstanding readers may continue to be used. However,
+ * if you attempt to reopen any of those readers, you'll
+ * hit an {@link AlreadyClosedException}.</p>
+ *
+ * @lucene.experimental
+ *
+ * @return IndexReader that covers entire index plus all
+ * changes made so far by this IndexWriter instance
+ *
+ * @throws IOException
+ */
+ public IndexReader reopen(IndexWriter writer) throws CorruptIndexException, IOException {
+ return writer.getReader();
+ }
+
+ /**
* Efficiently clones the IndexReader (sharing most
* internal state).
* <p>
Modified: lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/IndexWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/IndexWriter.java?rev=1061462&r1=1061461&r2=1061462&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/IndexWriter.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/IndexWriter.java Thu Jan 20 19:06:17 2011
@@ -34,7 +34,6 @@ import java.util.concurrent.atomic.Atomi
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.LimitTokenCountAnalyzer;
-import org.apache.lucene.analysis.LimitTokenCountFilter;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexWriterConfig.OpenMode;
import org.apache.lucene.index.PayloadProcessorProvider.DirPayloadProcessor;
@@ -341,7 +340,7 @@ public class IndexWriter implements Clos
* the writer nor calling {@link #commit}.
*
* <p>Note that this is functionally equivalent to calling
- * {#commit} and then using {@link IndexReader#open} to
+ * {#flush} and then using {@link IndexReader#open} to
* open a new reader. But the turarnound time of this
* method should be faster since it avoids the potentially
* costly {@link #commit}.</p>
@@ -389,8 +388,12 @@ public class IndexWriter implements Clos
* @return IndexReader that covers entire index plus all
* changes made so far by this IndexWriter instance
*
+ * @deprecated Please use {@link
+ * IndexReader#open(IndexWriter)} instead.
+ *
* @throws IOException
*/
+ @Deprecated
public IndexReader getReader() throws IOException {
return getReader(config.getReaderTermsIndexDivisor());
}
@@ -409,13 +412,17 @@ public class IndexWriter implements Clos
* loading a TermInfo. The default value is 1. Set this
* to -1 to skip loading the terms index entirely.
*
- * @deprecated this method cannot guarantee the reader (and its sub-readers)
- * will be opened with the termInfosIndexDivisor setting because some of them
- * may have already been opened according to
- * {@link IndexWriterConfig#setReaderTermsIndexDivisor}. You should set the
- * requested termInfosIndexDivisor through
+ * @deprecated Please use {@link
+ * IndexReader#open(IndexWriter)} instead. Furthermore,
+ * this method cannot guarantee the reader (and its
+ * sub-readers) will be opened with the
+ * termInfosIndexDivisor setting because some of them may
+ * have already been opened according to {@link
+ * IndexWriterConfig#setReaderTermsIndexDivisor}. You
+ * should set the requested termInfosIndexDivisor through
* {@link IndexWriterConfig#setReaderTermsIndexDivisor} and use
* {@link #getReader()}. */
+ @Deprecated
public IndexReader getReader(int termInfosIndexDivisor) throws IOException {
ensureOpen();
@@ -1971,6 +1978,7 @@ public class IndexWriter implements Clos
* @see MaxFieldLength
* @deprecated remove in 4.0
*/
+ @Deprecated
private int maxFieldLength = DEFAULT_MAX_FIELD_LENGTH;
/**
Modified: lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/queryParser/TestQueryParser.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/queryParser/TestQueryParser.java?rev=1061462&r1=1061461&r2=1061462&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/queryParser/TestQueryParser.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/queryParser/TestQueryParser.java Thu Jan 20 19:06:17 2011
@@ -1093,7 +1093,7 @@ public class TestQueryParser extends Luc
Document doc = new Document();
doc.add(newField("f", "the wizard of ozzy", Field.Store.NO, Field.Index.ANALYZED));
w.addDocument(doc);
- IndexReader r = w.getReader();
+ IndexReader r = IndexReader.open(w);
w.close();
IndexSearcher s = new IndexSearcher(r);
QueryParser qp = new QueryParser(TEST_VERSION_CURRENT, "f", a);
Modified: lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestCachingSpanFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestCachingSpanFilter.java?rev=1061462&r1=1061461&r2=1061462&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestCachingSpanFilter.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestCachingSpanFilter.java Thu Jan 20 19:06:17 2011
@@ -44,7 +44,7 @@ public class TestCachingSpanFilter exten
// flipping a coin) may give us a newly opened reader,
// but we use .reopen on this reader below and expect to
// (must) get an NRT reader:
- IndexReader reader = writer.w.getReader();
+ IndexReader reader = IndexReader.open(writer.w);
IndexSearcher searcher = new IndexSearcher(reader);
// add a doc, refresh the reader, and check that its there
Modified: lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestCachingWrapperFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestCachingWrapperFilter.java?rev=1061462&r1=1061461&r2=1061462&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestCachingWrapperFilter.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestCachingWrapperFilter.java Thu Jan 20 19:06:17 2011
@@ -160,7 +160,7 @@ public class TestCachingWrapperFilter ex
// flipping a coin) may give us a newly opened reader,
// but we use .reopen on this reader below and expect to
// (must) get an NRT reader:
- IndexReader reader = writer.w.getReader();
+ IndexReader reader = IndexReader.open(writer.w);
IndexSearcher searcher = new IndexSearcher(reader);
// add a doc, refresh the reader, and check that its there
Modified: lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestElevationComparator.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestElevationComparator.java?rev=1061462&r1=1061461&r2=1061462&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestElevationComparator.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestElevationComparator.java Thu Jan 20 19:06:17 2011
@@ -44,7 +44,7 @@ public class TestElevationComparator ext
writer.addDocument(adoc(new String[] {"id", "y", "title", "boosted boosted", "str_s","y"}));
writer.addDocument(adoc(new String[] {"id", "z", "title", "boosted boosted boosted","str_s", "z"}));
- IndexReader r = writer.getReader();
+ IndexReader r = IndexReader.open(writer);
writer.close();
IndexSearcher searcher = new IndexSearcher(r);
Modified: lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/payloads/PayloadHelper.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/payloads/PayloadHelper.java?rev=1061462&r1=1061461&r2=1061462&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/payloads/PayloadHelper.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/payloads/PayloadHelper.java Thu Jan 20 19:06:17 2011
@@ -17,26 +17,27 @@ package org.apache.lucene.search.payload
* limitations under the License.
*/
+import java.io.IOException;
+import java.io.Reader;
+import java.util.Random;
+
import org.apache.lucene.analysis.*;
import org.apache.lucene.analysis.tokenattributes.PayloadAttribute;
-import org.apache.lucene.index.IndexWriterConfig;
-import org.apache.lucene.index.Payload;
-import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
-import org.apache.lucene.util.English;
+import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexWriter;
+import org.apache.lucene.index.IndexWriterConfig;
+import org.apache.lucene.index.Payload;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Similarity;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.MockDirectoryWrapper;
import org.apache.lucene.store.RAMDirectory;
+import org.apache.lucene.util.English;
import static org.apache.lucene.util.LuceneTestCase.TEST_VERSION_CURRENT;
-import java.io.Reader;
-import java.io.IOException;
-import java.util.Random;
-
/**
*
*
@@ -50,6 +51,8 @@ public class PayloadHelper {
public static final String MULTI_FIELD = "multiField";
public static final String FIELD = "field";
+ public IndexReader reader;
+
public final class PayloadAnalyzer extends Analyzer {
@@ -121,11 +124,15 @@ public class PayloadHelper {
doc.add(new Field(NO_PAYLOAD_FIELD, English.intToEnglish(i), Field.Store.YES, Field.Index.ANALYZED));
writer.addDocument(doc);
}
- //writer.optimize();
+ reader = IndexReader.open(writer);
writer.close();
- IndexSearcher searcher = new IndexSearcher(directory, true);
+ IndexSearcher searcher = new IndexSearcher(reader);
searcher.setSimilarity(similarity);
return searcher;
}
+
+ public void tearDown() throws Exception {
+ reader.close();
+ }
}
Modified: lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/store/TestFileSwitchDirectory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/store/TestFileSwitchDirectory.java?rev=1061462&r1=1061461&r2=1061462&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/store/TestFileSwitchDirectory.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/store/TestFileSwitchDirectory.java Thu Jan 20 19:06:17 2011
@@ -47,7 +47,7 @@ public class TestFileSwitchDirectory ext
IndexWriter writer = new IndexWriter(fsd, new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)));
((LogMergePolicy) writer.getConfig().getMergePolicy()).setUseCompoundFile(false);
TestIndexWriterReader.createIndexNoClose(true, "ram", writer);
- IndexReader reader = writer.getReader();
+ IndexReader reader = IndexReader.open(writer);
assertEquals(100, reader.maxDoc());
writer.commit();
// we should see only fdx,fdt files here