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 2013/01/25 22:37:00 UTC
svn commit: r1438731 - in /lucene/dev/branches/branch_4x: ./ lucene/
lucene/core/ lucene/core/src/java/org/apache/lucene/search/
lucene/core/src/test/org/apache/lucene/search/
Author: mikemccand
Date: Fri Jan 25 21:37:00 2013
New Revision: 1438731
URL: http://svn.apache.org/viewvc?rev=1438731&view=rev
Log:
LUCENE-4695: add LiveFieldValues, to get current (live/real-time) values for fields indexed after the last NRT reopen
Added:
lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/search/LiveFieldValues.java
- copied, changed from r1438721, lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/search/LiveFieldValues.java
lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/search/TestLiveFieldValues.java
- copied, changed from r1438721, lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestLiveFieldValues.java
Modified:
lucene/dev/branches/branch_4x/ (props changed)
lucene/dev/branches/branch_4x/lucene/ (props changed)
lucene/dev/branches/branch_4x/lucene/CHANGES.txt (contents, props changed)
lucene/dev/branches/branch_4x/lucene/core/ (props changed)
lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/search/ReferenceManager.java
lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/search/TestNRTManager.java
lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/search/TestSearcherManager.java
Modified: lucene/dev/branches/branch_4x/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/CHANGES.txt?rev=1438731&r1=1438730&r2=1438731&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/CHANGES.txt (original)
+++ lucene/dev/branches/branch_4x/lucene/CHANGES.txt Fri Jan 25 21:37:00 2013
@@ -58,12 +58,23 @@ New Features
compresses term vectors into chunks of documents similarly to
CompressingStoredFieldsFormat. (Adrien Grand)
+* LUCENE-4695: Added LiveFieldValues utility class, for getting the
+ current (live, real-time) value for any indexed doc/field. The
+ class buffers recently indexed doc/field values until a new
+ near-real-time reader is opened that contains those changes.
+ (Robert Muir, Mike McCandless)
+
API Changes
* LUCENE-4709: FacetResultNode no longer has a residue field. (Shai Erera)
* LUCENE-4716: DrillDown.query now takes Occur, allowing to specify if
categories should be OR'ed or AND'ed. (Shai Erera)
+
+* LUCENE-4695: ReferenceManager.RefreshListener.afterRefresh now takes
+ a boolean indicating whether a new reference was in fact opened, and
+ a new beforeRefresh method notifies you when a refresh attempt is
+ starting. (Robert Muir, Mike McCandless)
Bug Fixes
Copied: lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/search/LiveFieldValues.java (from r1438721, lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/search/LiveFieldValues.java)
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/search/LiveFieldValues.java?p2=lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/search/LiveFieldValues.java&p1=lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/search/LiveFieldValues.java&r1=1438721&r2=1438731&rev=1438731&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/search/LiveFieldValues.java (original)
+++ lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/search/LiveFieldValues.java Fri Jan 25 21:37:00 2013
@@ -19,23 +19,9 @@ package org.apache.lucene.search;
import java.io.Closeable;
import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
-import org.apache.lucene.document.Document;
-import org.apache.lucene.index.AtomicReader;
-import org.apache.lucene.index.AtomicReaderContext;
-import org.apache.lucene.index.IndexDocument;
-import org.apache.lucene.index.IndexWriterConfig;
-import org.apache.lucene.index.MergeState;
-import org.apache.lucene.index.SegmentReader;
-import org.apache.lucene.index.SegmentWriteState;
-import org.apache.lucene.util.Counter;
-
/** Tracks live field values across NRT reader reopens.
* This holds a map for all updated ids since
* the last reader reopen. Once the NRT reader is reopened,
Modified: lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/search/ReferenceManager.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/search/ReferenceManager.java?rev=1438731&r1=1438730&r2=1438731&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/search/ReferenceManager.java (original)
+++ lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/search/ReferenceManager.java Fri Jan 25 21:37:00 2013
@@ -151,6 +151,7 @@ public abstract class ReferenceManager<G
try {
final G reference = acquire();
try {
+ notifyRefreshListenersBefore();
G newReference = refreshIfNeeded(reference);
if (newReference != null) {
assert newReference != reference : "refreshIfNeeded should return null if refresh wasn't needed";
@@ -165,11 +166,9 @@ public abstract class ReferenceManager<G
}
} finally {
release(reference);
+ notifyRefreshListenersRefreshed(refreshed);
}
afterMaybeRefresh();
- if (refreshed) {
- notifyRefreshListeners();
- }
} finally {
refreshLock.unlock();
}
@@ -254,9 +253,15 @@ public abstract class ReferenceManager<G
decRef(reference);
}
- private void notifyRefreshListeners() {
+ private void notifyRefreshListenersBefore() throws IOException {
+ for (RefreshListener refreshListener : refreshListeners) {
+ refreshListener.beforeRefresh();
+ }
+ }
+
+ private void notifyRefreshListenersRefreshed(boolean didRefresh) throws IOException {
for (RefreshListener refreshListener : refreshListeners) {
- refreshListener.afterRefresh();
+ refreshListener.afterRefresh(didRefresh);
}
}
@@ -284,9 +289,13 @@ public abstract class ReferenceManager<G
* finished. See {@link #addListener}. */
public interface RefreshListener {
- /**
- * Called after a successful refresh and a new reference has been installed. When this is called {@link #acquire()} is guaranteed to return a new instance.
- */
- void afterRefresh();
+ /** Called right before a refresh attempt starts. */
+ void beforeRefresh() throws IOException;
+
+ /** Called after the attempted refresh; if the refresh
+ * did open a new reference then didRefresh will be true
+ * and {@link #acquire()} is guaranteed to return the new
+ * reference. */
+ void afterRefresh(boolean didRefresh) throws IOException;
}
}
Copied: lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/search/TestLiveFieldValues.java (from r1438721, lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestLiveFieldValues.java)
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/search/TestLiveFieldValues.java?p2=lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/search/TestLiveFieldValues.java&p1=lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestLiveFieldValues.java&r1=1438721&r2=1438731&rev=1438731&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestLiveFieldValues.java (original)
+++ lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/search/TestLiveFieldValues.java Fri Jan 25 21:37:00 2013
@@ -37,7 +37,6 @@ import org.apache.lucene.index.IndexRead
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.RandomIndexWriter;
-import org.apache.lucene.index.StoredDocument;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.NRTManager.TrackingIndexWriter;
import org.apache.lucene.store.Directory;
@@ -71,7 +70,7 @@ public class TestLiveFieldValues extends
if (hits.totalHits == 0) {
return null;
} else {
- StoredDocument doc = s.doc(hits.scoreDocs[0].doc);
+ Document doc = s.doc(hits.scoreDocs[0].doc);
return (Integer) doc.getField("field").numericValue();
}
}
Modified: lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/search/TestNRTManager.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/search/TestNRTManager.java?rev=1438731&r1=1438730&r2=1438731&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/search/TestNRTManager.java (original)
+++ lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/search/TestNRTManager.java Fri Jan 25 21:37:00 2013
@@ -423,8 +423,13 @@ public class TestNRTManager extends Thre
NRTManager sm = new NRTManager(new NRTManager.TrackingIndexWriter(iw),new SearcherFactory());
sm.addListener(new ReferenceManager.RefreshListener() {
@Override
- public void afterRefresh() {
- afterRefreshCalled.set(true);
+ public void beforeRefresh() {
+ }
+ @Override
+ public void afterRefresh(boolean didRefresh) {
+ if (didRefresh) {
+ afterRefreshCalled.set(true);
+ }
}
});
iw.addDocument(new Document());
Modified: lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/search/TestSearcherManager.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/search/TestSearcherManager.java?rev=1438731&r1=1438730&r2=1438731&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/search/TestSearcherManager.java (original)
+++ lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/search/TestSearcherManager.java Fri Jan 25 21:37:00 2013
@@ -331,8 +331,13 @@ public class TestSearcherManager extends
SearcherManager sm = new SearcherManager(iw, false, new SearcherFactory());
sm.addListener(new ReferenceManager.RefreshListener() {
@Override
- public void afterRefresh() {
- afterRefreshCalled.set(true);
+ public void beforeRefresh() {
+ }
+ @Override
+ public void afterRefresh(boolean didRefresh) {
+ if (didRefresh) {
+ afterRefreshCalled.set(true);
+ }
}
});
iw.addDocument(new Document());