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 2015/03/31 19:40:13 UTC

svn commit: r1670406 - /lucene/dev/branches/lucene6271/lucene/codecs/src/java/org/apache/lucene/codecs/memory/DirectPostingsFormat.java

Author: mikemccand
Date: Tue Mar 31 17:40:12 2015
New Revision: 1670406

URL: http://svn.apache.org/r1670406
Log:
LUCENE-6271: DirectPF was using the wrong PostingsEnum impl for the incoming requested flags

Modified:
    lucene/dev/branches/lucene6271/lucene/codecs/src/java/org/apache/lucene/codecs/memory/DirectPostingsFormat.java

Modified: lucene/dev/branches/lucene6271/lucene/codecs/src/java/org/apache/lucene/codecs/memory/DirectPostingsFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/lucene/codecs/src/java/org/apache/lucene/codecs/memory/DirectPostingsFormat.java?rev=1670406&r1=1670405&r2=1670406&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/lucene/codecs/src/java/org/apache/lucene/codecs/memory/DirectPostingsFormat.java (original)
+++ lucene/dev/branches/lucene6271/lucene/codecs/src/java/org/apache/lucene/codecs/memory/DirectPostingsFormat.java Tue Mar 31 17:40:12 2015
@@ -866,7 +866,20 @@ public final class DirectPostingsFormat
           if (terms[termOrd] instanceof LowFreqTerm) {
             final LowFreqTerm term = ((LowFreqTerm) terms[termOrd]);
             final int[] postings = term.postings;
-            if (hasPos == false) {
+            if (hasFreq == false) {
+              LowFreqDocsEnumNoTF docsEnum;
+              if (reuse instanceof LowFreqDocsEnumNoTF) {
+                docsEnum = (LowFreqDocsEnumNoTF) reuse;
+                if (!docsEnum.canReuse(liveDocs)) {
+                  docsEnum = new LowFreqDocsEnumNoTF(liveDocs);
+                }
+              } else {
+                docsEnum = new LowFreqDocsEnumNoTF(liveDocs);
+              }
+
+              return docsEnum.reset(postings);
+              
+            } else if (hasPos == false) {
               LowFreqDocsEnumNoPos docsEnum;
               if (reuse instanceof LowFreqDocsEnumNoPos) {
                 docsEnum = (LowFreqDocsEnumNoPos) reuse;
@@ -883,7 +896,11 @@ public final class DirectPostingsFormat
             return new LowFreqPostingsEnum(liveDocs, hasOffsets, hasPayloads).reset(postings, payloads);
           } else {
             final HighFreqTerm term = (HighFreqTerm) terms[termOrd];
-            return new HighFreqPostingsEnum(liveDocs, hasOffsets).reset(term.docIDs, term.freqs, term.positions, term.payloads);
+            if (hasPos == false) {
+              return new HighFreqDocsEnum(liveDocs).reset(term.docIDs, term.freqs);
+            } else {
+              return new HighFreqPostingsEnum(liveDocs, hasOffsets).reset(term.docIDs, term.freqs, term.positions, term.payloads);
+            }
           }
         }