You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by jp...@apache.org on 2015/07/27 10:11:14 UTC
svn commit: r1692830 -
/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/BufferedUpdatesStream.java
Author: jpountz
Date: Mon Jul 27 08:11:14 2015
New Revision: 1692830
URL: http://svn.apache.org/r1692830
Log:
LUCENE-6688: Use the Query API instead of QueryWrapperFilter to handle deleted documents.
Modified:
lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/BufferedUpdatesStream.java
Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/BufferedUpdatesStream.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/BufferedUpdatesStream.java?rev=1692830&r1=1692829&r2=1692830&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/BufferedUpdatesStream.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/BufferedUpdatesStream.java Mon Jul 27 08:11:14 2015
@@ -27,10 +27,10 @@ import java.util.Locale;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;
-import org.apache.lucene.search.DocIdSet;
import org.apache.lucene.search.DocIdSetIterator;
+import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
-import org.apache.lucene.search.QueryWrapperFilter;
+import org.apache.lucene.search.Weight;
import org.apache.lucene.store.IOContext;
import org.apache.lucene.util.Accountable;
import org.apache.lucene.util.Bits;
@@ -687,23 +687,27 @@ class BufferedUpdatesStream implements A
for (QueryAndLimit ent : queriesIter) {
Query query = ent.query;
int limit = ent.limit;
- final DocIdSet docs = new QueryWrapperFilter(query).getDocIdSet(readerContext, segState.reader.getLiveDocs());
- if (docs != null) {
- final DocIdSetIterator it = docs.iterator();
- if (it != null) {
- while (true) {
- int doc = it.nextDoc();
- if (doc >= limit) {
- break;
- }
+ final IndexSearcher searcher = new IndexSearcher(readerContext.reader());
+ searcher.setQueryCache(null);
+ final Weight weight = searcher.createNormalizedWeight(query, false);
+ final DocIdSetIterator it = weight.scorer(readerContext);
+ if (it != null) {
+ final Bits liveDocs = readerContext.reader().getLiveDocs();
+ while (true) {
+ int doc = it.nextDoc();
+ if (doc >= limit) {
+ break;
+ }
+ if (liveDocs != null && liveDocs.get(doc) == false) {
+ continue;
+ }
- if (!segState.any) {
- segState.rld.initWritableLiveDocs();
- segState.any = true;
- }
- if (segState.rld.delete(doc)) {
- delCount++;
- }
+ if (!segState.any) {
+ segState.rld.initWritableLiveDocs();
+ segState.any = true;
+ }
+ if (segState.rld.delete(doc)) {
+ delCount++;
}
}
}