You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by yo...@apache.org on 2010/12/07 02:46:20 UTC

svn commit: r1042888 - in /lucene/dev/trunk/lucene: ./ src/java/org/apache/lucene/search/cache/

Author: yonik
Date: Tue Dec  7 01:46:20 2010
New Revision: 1042888

URL: http://svn.apache.org/viewvc?rev=1042888&view=rev
Log:
LUCENE-2803: ignore deleted docs when populating field cache

Modified:
    lucene/dev/trunk/lucene/CHANGES.txt
    lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/cache/ByteValuesCreator.java
    lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/cache/CachedArrayCreator.java
    lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/cache/DocTermsIndexCreator.java
    lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/cache/DoubleValuesCreator.java
    lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/cache/FloatValuesCreator.java
    lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/cache/IntValuesCreator.java
    lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/cache/LongValuesCreator.java
    lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/cache/ShortValuesCreator.java

Modified: lucene/dev/trunk/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/CHANGES.txt?rev=1042888&r1=1042887&r2=1042888&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/CHANGES.txt (original)
+++ lucene/dev/trunk/lucene/CHANGES.txt Tue Dec  7 01:46:20 2010
@@ -339,6 +339,12 @@ Bug fixes
 * LUCENE-2633: PackedInts Packed32 and Packed64 did not support internal
   structures larger than 256MB (Toke Eskildsen via Mike McCandless)
 
+* LUCENE-2803: The FieldCache can miss values if an entry for a reader
+  with more document deletions is requested before a reader with fewer
+  deletions, provided they share some segments. (yonik)
+
+
+
 ======================= Lucene 3.x (not yet released) =======================
 
 Changes in backwards compatibility policy

Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/cache/ByteValuesCreator.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/cache/ByteValuesCreator.java?rev=1042888&r1=1042887&r2=1042888&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/cache/ByteValuesCreator.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/cache/ByteValuesCreator.java Tue Dec  7 01:46:20 2010
@@ -110,7 +110,6 @@ public class ByteValuesCreator extends C
     vals.values = new byte[maxDoc];
     if (terms != null) {
       final TermsEnum termsEnum = terms.iterator();
-      final Bits delDocs = MultiFields.getDeletedDocs(reader);
       OpenBitSet validBits = (hasOption(OPTION_CACHE_BITS)) ? new OpenBitSet( maxDoc ) : null;
       DocsEnum docs = null;
       try {
@@ -120,7 +119,7 @@ public class ByteValuesCreator extends C
             break;
           }
           final byte termval = parser.parseByte(term);
-          docs = termsEnum.docs(delDocs, docs);
+          docs = termsEnum.docs(null, docs);
           while (true) {
             final int docID = docs.nextDoc();
             if (docID == DocIdSetIterator.NO_MORE_DOCS) {
@@ -137,7 +136,7 @@ public class ByteValuesCreator extends C
       } catch (FieldCache.StopFillCacheException stop) {}
 
       if( vals.valid == null ) {
-        vals.valid = checkMatchAllBits( delDocs, validBits, vals.numDocs, maxDoc );
+        vals.valid = checkMatchAllBits( validBits, vals.numDocs, maxDoc );
       }
     }
     if( vals.valid == null && vals.numDocs < 1 ) {

Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/cache/CachedArrayCreator.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/cache/CachedArrayCreator.java?rev=1042888&r1=1042887&r2=1042888&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/cache/CachedArrayCreator.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/cache/CachedArrayCreator.java Tue Dec  7 01:46:20 2010
@@ -100,22 +100,13 @@ public abstract class CachedArrayCreator
   /**
    * Utility function to help check what bits are valid
    */
-  protected Bits checkMatchAllBits( Bits deleted, OpenBitSet valid, int numDocs, int maxDocs )
+  protected Bits checkMatchAllBits( OpenBitSet valid, int numDocs, int maxDocs )
   {
     if( numDocs != maxDocs ) {
       if( hasOption( OPTION_CACHE_BITS ) ) {
-        if( deleted == null ) {
-          for( int i=0; i<maxDocs; i++ ) {
-            if( !valid.get(i) ) {
-              return valid;
-            }
-          }
-        }
-        else {
-          for( int i=0; i<maxDocs; i++ ) {
-            if( !deleted.get(i) && !valid.get(i) ) {
-              return valid;
-            }
+        for( int i=0; i<maxDocs; i++ ) {
+          if( !valid.get(i) ) {
+            return valid;
           }
         }
       }
@@ -132,7 +123,6 @@ public abstract class CachedArrayCreator
     Terms terms = MultiFields.getTerms(reader, field);
     if (terms != null) {
       final TermsEnum termsEnum = terms.iterator();
-      final Bits delDocs = MultiFields.getDeletedDocs(reader);
       OpenBitSet validBits = new OpenBitSet( reader.maxDoc() );
       DocsEnum docs = null;
       while(true) {
@@ -140,7 +130,7 @@ public abstract class CachedArrayCreator
         if (term == null) {
           break;
         }
-        docs = termsEnum.docs(delDocs, docs);
+        docs = termsEnum.docs(null, docs);
         while (true) {
           final int docID = docs.nextDoc();
           if (docID == DocIdSetIterator.NO_MORE_DOCS) {
@@ -152,7 +142,7 @@ public abstract class CachedArrayCreator
         vals.numTerms++;
       }
 
-      vals.valid = checkMatchAllBits( delDocs, validBits, vals.numDocs, reader.maxDoc() );
+      vals.valid = checkMatchAllBits( validBits, vals.numDocs, reader.maxDoc() );
     }
     if( vals.numDocs < 1 ) {
       vals.valid = new Bits.MatchNoBits( reader.maxDoc() );

Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/cache/DocTermsIndexCreator.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/cache/DocTermsIndexCreator.java?rev=1042888&r1=1042887&r2=1042888&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/cache/DocTermsIndexCreator.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/cache/DocTermsIndexCreator.java Tue Dec  7 01:46:20 2010
@@ -130,7 +130,6 @@ public class DocTermsIndexCreator extend
 
     if (terms != null) {
       final TermsEnum termsEnum = terms.iterator();
-      final Bits delDocs = MultiFields.getDeletedDocs(reader);
       DocsEnum docs = null;
 
       while(true) {
@@ -149,7 +148,7 @@ public class DocTermsIndexCreator extend
           termOrdToBytesOffset = termOrdToBytesOffset.resize(ArrayUtil.oversize(1+termOrd, 1));
         }
         termOrdToBytesOffset.set(termOrd, bytes.copyUsingLengthPrefix(term));
-        docs = termsEnum.docs(delDocs, docs);
+        docs = termsEnum.docs(null, docs);
         while (true) {
           final int docID = docs.nextDoc();
           if (docID == DocIdSetIterator.NO_MORE_DOCS) {

Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/cache/DoubleValuesCreator.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/cache/DoubleValuesCreator.java?rev=1042888&r1=1042887&r2=1042888&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/cache/DoubleValuesCreator.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/cache/DoubleValuesCreator.java Tue Dec  7 01:46:20 2010
@@ -120,7 +120,6 @@ public class DoubleValuesCreator extends
     vals.values = null;
     if (terms != null) {
       final TermsEnum termsEnum = terms.iterator();
-      final Bits delDocs = MultiFields.getDeletedDocs(reader);
       OpenBitSet validBits = (hasOption(OPTION_CACHE_BITS)) ? new OpenBitSet( maxDoc ) : null;
       DocsEnum docs = null;
       try {
@@ -130,7 +129,7 @@ public class DoubleValuesCreator extends
             break;
           }
           final double termval = parser.parseDouble(term);
-          docs = termsEnum.docs(delDocs, docs);
+          docs = termsEnum.docs(null, docs);
           while (true) {
             final int docID = docs.nextDoc();
             if (docID == DocIdSetIterator.NO_MORE_DOCS) {
@@ -150,7 +149,7 @@ public class DoubleValuesCreator extends
       } catch (FieldCache.StopFillCacheException stop) {}
 
       if( vals.valid == null ) {
-        vals.valid = checkMatchAllBits( delDocs, validBits, vals.numDocs, maxDoc );
+        vals.valid = checkMatchAllBits( validBits, vals.numDocs, maxDoc );
       }
     }
 

Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/cache/FloatValuesCreator.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/cache/FloatValuesCreator.java?rev=1042888&r1=1042887&r2=1042888&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/cache/FloatValuesCreator.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/cache/FloatValuesCreator.java Tue Dec  7 01:46:20 2010
@@ -121,7 +121,6 @@ public class FloatValuesCreator extends 
     vals.values = null;
     if (terms != null) {
       final TermsEnum termsEnum = terms.iterator();
-      final Bits delDocs = MultiFields.getDeletedDocs(reader);
       OpenBitSet validBits = (hasOption(OPTION_CACHE_BITS)) ? new OpenBitSet( maxDoc ) : null;
       DocsEnum docs = null;
       try {
@@ -131,7 +130,7 @@ public class FloatValuesCreator extends 
             break;
           }
           final float termval = parser.parseFloat(term);
-          docs = termsEnum.docs(delDocs, docs);
+          docs = termsEnum.docs(null, docs);
           while (true) {
             final int docID = docs.nextDoc();
             if (docID == DocIdSetIterator.NO_MORE_DOCS) {
@@ -151,7 +150,7 @@ public class FloatValuesCreator extends 
       } catch (FieldCache.StopFillCacheException stop) {}
 
       if( vals.valid == null ) {
-        vals.valid = checkMatchAllBits( delDocs, validBits, vals.numDocs, maxDoc );
+        vals.valid = checkMatchAllBits( validBits, vals.numDocs, maxDoc );
       }
     }
 

Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/cache/IntValuesCreator.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/cache/IntValuesCreator.java?rev=1042888&r1=1042887&r2=1042888&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/cache/IntValuesCreator.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/cache/IntValuesCreator.java Tue Dec  7 01:46:20 2010
@@ -121,7 +121,6 @@ public class IntValuesCreator extends Ca
     vals.values = null;
     if (terms != null) {
       final TermsEnum termsEnum = terms.iterator();
-      final Bits delDocs = MultiFields.getDeletedDocs(reader);
       OpenBitSet validBits = (hasOption(OPTION_CACHE_BITS)) ? new OpenBitSet( maxDoc ) : null;
       DocsEnum docs = null;
       try {
@@ -131,7 +130,7 @@ public class IntValuesCreator extends Ca
             break;
           }
           final int termval = parser.parseInt(term);
-          docs = termsEnum.docs(delDocs, docs);
+          docs = termsEnum.docs(null, docs);
           while (true) {
             final int docID = docs.nextDoc();
             if (docID == DocIdSetIterator.NO_MORE_DOCS) {
@@ -151,7 +150,7 @@ public class IntValuesCreator extends Ca
       } catch (FieldCache.StopFillCacheException stop) {}
 
       if( vals.valid == null ) {
-        vals.valid = checkMatchAllBits( delDocs, validBits, vals.numDocs, maxDoc );
+        vals.valid = checkMatchAllBits( validBits, vals.numDocs, maxDoc );
       }
     }
 

Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/cache/LongValuesCreator.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/cache/LongValuesCreator.java?rev=1042888&r1=1042887&r2=1042888&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/cache/LongValuesCreator.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/cache/LongValuesCreator.java Tue Dec  7 01:46:20 2010
@@ -121,7 +121,6 @@ public class LongValuesCreator extends C
     vals.values = null;
     if (terms != null) {
       final TermsEnum termsEnum = terms.iterator();
-      final Bits delDocs = MultiFields.getDeletedDocs(reader);
       OpenBitSet validBits = (hasOption(OPTION_CACHE_BITS)) ? new OpenBitSet( maxDoc ) : null;
       DocsEnum docs = null;
       try {
@@ -131,7 +130,7 @@ public class LongValuesCreator extends C
             break;
           }
           final long termval = parser.parseLong(term);
-          docs = termsEnum.docs(delDocs, docs);
+          docs = termsEnum.docs(null, docs);
           while (true) {
             final int docID = docs.nextDoc();
             if (docID == DocIdSetIterator.NO_MORE_DOCS) {
@@ -151,7 +150,7 @@ public class LongValuesCreator extends C
       } catch (FieldCache.StopFillCacheException stop) {}
 
       if( vals.valid == null ) {
-        vals.valid = checkMatchAllBits( delDocs, validBits, vals.numDocs, maxDoc );
+        vals.valid = checkMatchAllBits( validBits, vals.numDocs, maxDoc );
       }
     }
 

Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/cache/ShortValuesCreator.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/cache/ShortValuesCreator.java?rev=1042888&r1=1042887&r2=1042888&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/cache/ShortValuesCreator.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/cache/ShortValuesCreator.java Tue Dec  7 01:46:20 2010
@@ -111,7 +111,6 @@ public class ShortValuesCreator extends 
     vals.values = new short[maxDoc];
     if (terms != null) {
       final TermsEnum termsEnum = terms.iterator();
-      final Bits delDocs = MultiFields.getDeletedDocs(reader);
       OpenBitSet validBits = (hasOption(OPTION_CACHE_BITS)) ? new OpenBitSet( maxDoc ) : null;
       DocsEnum docs = null;
       try {
@@ -121,7 +120,7 @@ public class ShortValuesCreator extends 
             break;
           }
           final Short termval = parser.parseShort(term);
-          docs = termsEnum.docs(delDocs, docs);
+          docs = termsEnum.docs(null, docs);
           while (true) {
             final int docID = docs.nextDoc();
             if (docID == DocIdSetIterator.NO_MORE_DOCS) {
@@ -138,7 +137,7 @@ public class ShortValuesCreator extends 
       } catch (FieldCache.StopFillCacheException stop) {}
 
       if( vals.valid == null ) {
-        vals.valid = checkMatchAllBits( delDocs, validBits, vals.numDocs, maxDoc );
+        vals.valid = checkMatchAllBits( validBits, vals.numDocs, maxDoc );
       }
     }
     if( vals.valid == null && vals.numDocs < 1 ) {