You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by rj...@apache.org on 2015/02/25 02:17:14 UTC
svn commit: r1662157 - in /lucene/dev/branches/lucene6271:
lucene/codecs/src/java/org/apache/lucene/codecs/blockterms/
lucene/codecs/src/java/org/apache/lucene/codecs/blocktreeords/
lucene/codecs/src/java/org/apache/lucene/codecs/memory/ lucene/codecs/...
Author: rjernst
Date: Wed Feb 25 01:17:13 2015
New Revision: 1662157
URL: http://svn.apache.org/r1662157
Log:
LUCENE-6271: initial patch, postings() funcs switched over to not return null, callers marked with nocommits that check against null
Modified:
lucene/dev/branches/lucene6271/lucene/codecs/src/java/org/apache/lucene/codecs/blockterms/BlockTermsReader.java
lucene/dev/branches/lucene6271/lucene/codecs/src/java/org/apache/lucene/codecs/blocktreeords/OrdsIntersectTermsEnum.java
lucene/dev/branches/lucene6271/lucene/codecs/src/java/org/apache/lucene/codecs/blocktreeords/OrdsSegmentTermsEnum.java
lucene/dev/branches/lucene6271/lucene/codecs/src/java/org/apache/lucene/codecs/memory/DirectPostingsFormat.java
lucene/dev/branches/lucene6271/lucene/codecs/src/java/org/apache/lucene/codecs/memory/MemoryPostingsFormat.java
lucene/dev/branches/lucene6271/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextFieldsReader.java
lucene/dev/branches/lucene6271/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextTermVectorsReader.java
lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/codecs/compressing/CompressingTermVectorsReader.java
lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/codecs/lucene50/Lucene50PostingsReader.java
lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/index/CheckIndex.java
lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/index/MultiFields.java
lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/index/MultiTermsEnum.java
lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/search/MultiPhraseQuery.java
lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/search/PhraseQuery.java
lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/search/spans/SpanTermQuery.java
lucene/dev/branches/lucene6271/lucene/core/src/test/org/apache/lucene/index/TestCodecs.java
lucene/dev/branches/lucene6271/lucene/core/src/test/org/apache/lucene/index/TestPostingsEnum.java
lucene/dev/branches/lucene6271/lucene/core/src/test/org/apache/lucene/index/TestStressIndexing2.java
lucene/dev/branches/lucene6271/lucene/core/src/test/org/apache/lucene/index/TestTermVectorsReader.java
lucene/dev/branches/lucene6271/lucene/highlighter/src/java/org/apache/lucene/search/postingshighlight/PostingsHighlighter.java
lucene/dev/branches/lucene6271/lucene/highlighter/src/java/org/apache/lucene/search/vectorhighlight/FieldTermStack.java
lucene/dev/branches/lucene6271/lucene/misc/src/java/org/apache/lucene/index/SortingLeafReader.java
lucene/dev/branches/lucene6271/lucene/sandbox/src/java/org/apache/lucene/search/TermAutomatonQuery.java
lucene/dev/branches/lucene6271/lucene/test-framework/src/java/org/apache/lucene/index/AssertingLeafReader.java
lucene/dev/branches/lucene6271/lucene/test-framework/src/java/org/apache/lucene/index/BasePostingsFormatTestCase.java
lucene/dev/branches/lucene6271/lucene/test-framework/src/java/org/apache/lucene/index/BaseTermVectorsFormatTestCase.java
lucene/dev/branches/lucene6271/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java
lucene/dev/branches/lucene6271/lucene/test-framework/src/java/org/apache/lucene/util/TestUtil.java
lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/handler/component/QueryElevationComponent.java
lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java
Modified: lucene/dev/branches/lucene6271/lucene/codecs/src/java/org/apache/lucene/codecs/blockterms/BlockTermsReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/lucene/codecs/src/java/org/apache/lucene/codecs/blockterms/BlockTermsReader.java?rev=1662157&r1=1662156&r2=1662157&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/lucene/codecs/src/java/org/apache/lucene/codecs/blockterms/BlockTermsReader.java (original)
+++ lucene/dev/branches/lucene6271/lucene/codecs/src/java/org/apache/lucene/codecs/blockterms/BlockTermsReader.java Wed Feb 25 01:17:13 2015
@@ -652,14 +652,6 @@ public class BlockTermsReader extends Fi
@Override
public PostingsEnum postings(Bits liveDocs, PostingsEnum reuse, int flags) throws IOException {
-
- if (PostingsEnum.featureRequested(flags, PostingsEnum.POSITIONS)) {
- if (fieldInfo.getIndexOptions().compareTo(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS) < 0) {
- // Positions were not indexed:
- return null;
- }
- }
-
//System.out.println("BTR.docs this=" + this);
decodeMetaData();
//System.out.println("BTR.docs: state.docFreq=" + state.docFreq);
Modified: lucene/dev/branches/lucene6271/lucene/codecs/src/java/org/apache/lucene/codecs/blocktreeords/OrdsIntersectTermsEnum.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/lucene/codecs/src/java/org/apache/lucene/codecs/blocktreeords/OrdsIntersectTermsEnum.java?rev=1662157&r1=1662156&r2=1662157&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/lucene/codecs/src/java/org/apache/lucene/codecs/blocktreeords/OrdsIntersectTermsEnum.java (original)
+++ lucene/dev/branches/lucene6271/lucene/codecs/src/java/org/apache/lucene/codecs/blocktreeords/OrdsIntersectTermsEnum.java Wed Feb 25 01:17:13 2015
@@ -203,14 +203,6 @@ final class OrdsIntersectTermsEnum exten
@Override
public PostingsEnum postings(Bits skipDocs, PostingsEnum reuse, int flags) throws IOException {
-
- if (PostingsEnum.featureRequested(flags, PostingsEnum.POSITIONS)) {
- if (fr.fieldInfo.getIndexOptions().compareTo(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS) < 0) {
- // Positions were not indexed:
- return null;
- }
- }
-
currentFrame.decodeMetaData();
return fr.parent.postingsReader.postings(fr.fieldInfo, currentFrame.termState, skipDocs, reuse, flags);
}
Modified: lucene/dev/branches/lucene6271/lucene/codecs/src/java/org/apache/lucene/codecs/blocktreeords/OrdsSegmentTermsEnum.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/lucene/codecs/src/java/org/apache/lucene/codecs/blocktreeords/OrdsSegmentTermsEnum.java?rev=1662157&r1=1662156&r2=1662157&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/lucene/codecs/src/java/org/apache/lucene/codecs/blocktreeords/OrdsSegmentTermsEnum.java (original)
+++ lucene/dev/branches/lucene6271/lucene/codecs/src/java/org/apache/lucene/codecs/blocktreeords/OrdsSegmentTermsEnum.java Wed Feb 25 01:17:13 2015
@@ -924,14 +924,6 @@ public final class OrdsSegmentTermsEnum
@Override
public PostingsEnum postings(Bits skipDocs, PostingsEnum reuse, int flags) throws IOException {
-
- if (PostingsEnum.featureRequested(flags, PostingsEnum.POSITIONS)) {
- if (fr.fieldInfo.getIndexOptions().compareTo(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS) < 0) {
- // Positions were not indexed:
- return null;
- }
- }
-
assert !eof;
//if (DEBUG) {
//System.out.println("BTTR.docs seg=" + segment);
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=1662157&r1=1662156&r2=1662157&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 Wed Feb 25 01:17:13 2015
@@ -860,14 +860,25 @@ public final class DirectPostingsFormat
// TODO: implement reuse
// it's hairy!
+ // TODO: the logic of which enum impl to choose should be refactored to be simpler...
if (PostingsEnum.featureRequested(flags, PostingsEnum.POSITIONS)) {
- if (!hasPos) {
- return null;
- }
if (terms[termOrd] instanceof LowFreqTerm) {
final LowFreqTerm term = ((LowFreqTerm) terms[termOrd]);
final int[] postings = term.postings;
+ if (hasPos == false) {
+ LowFreqDocsEnumNoPos docsEnum;
+ if (reuse instanceof LowFreqDocsEnumNoPos) {
+ docsEnum = (LowFreqDocsEnumNoPos) reuse;
+ if (!docsEnum.canReuse(liveDocs)) {
+ docsEnum = new LowFreqDocsEnumNoPos(liveDocs);
+ }
+ } else {
+ docsEnum = new LowFreqDocsEnumNoPos(liveDocs);
+ }
+
+ return docsEnum.reset(postings);
+ }
final byte[] payloads = term.payloads;
return new LowFreqPostingsEnum(liveDocs, hasOffsets, hasPayloads).reset(postings, payloads);
} else {
@@ -1454,10 +1465,9 @@ public final class DirectPostingsFormat
public PostingsEnum postings(Bits liveDocs, PostingsEnum reuse, int flags) {
// TODO: implement reuse
// it's hairy!
- if (PostingsEnum.featureRequested(flags, PostingsEnum.POSITIONS)) {
- if (!hasPos) {
- return null;
- }
+
+ // TODO: the logic of which enum impl to choose should be refactored to be simpler...
+ if (hasPos && PostingsEnum.featureRequested(flags, PostingsEnum.POSITIONS)) {
if (terms[termOrd] instanceof LowFreqTerm) {
final LowFreqTerm term = ((LowFreqTerm) terms[termOrd]);
final int[] postings = term.postings;
Modified: lucene/dev/branches/lucene6271/lucene/codecs/src/java/org/apache/lucene/codecs/memory/MemoryPostingsFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/lucene/codecs/src/java/org/apache/lucene/codecs/memory/MemoryPostingsFormat.java?rev=1662157&r1=1662156&r2=1662157&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/lucene/codecs/src/java/org/apache/lucene/codecs/memory/MemoryPostingsFormat.java (original)
+++ lucene/dev/branches/lucene6271/lucene/codecs/src/java/org/apache/lucene/codecs/memory/MemoryPostingsFormat.java Wed Feb 25 01:17:13 2015
@@ -829,10 +829,9 @@ public final class MemoryPostingsFormat
@Override
public PostingsEnum postings(Bits liveDocs, PostingsEnum reuse, int flags) {
- if (PostingsEnum.featureRequested(flags, PostingsEnum.POSITIONS)) {
- if (field.getIndexOptions().compareTo(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS) < 0) {
- return null;
- }
+ // TODO: the logic of which enum impl to choose should be refactored to be simpler...
+ boolean hasPositions = field.getIndexOptions().compareTo(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS) >= 0;
+ if (hasPositions && PostingsEnum.featureRequested(flags, PostingsEnum.POSITIONS)) {
boolean hasOffsets = field.getIndexOptions().compareTo(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS) >= 0;
decodeMetaData();
FSTPostingsEnum docsAndPositionsEnum;
Modified: lucene/dev/branches/lucene6271/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextFieldsReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextFieldsReader.java?rev=1662157&r1=1662156&r2=1662157&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextFieldsReader.java (original)
+++ lucene/dev/branches/lucene6271/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextFieldsReader.java Wed Feb 25 01:17:13 2015
@@ -209,11 +209,8 @@ class SimpleTextFieldsReader extends Fie
@Override
public PostingsEnum postings(Bits liveDocs, PostingsEnum reuse, int flags) throws IOException {
- if (PostingsEnum.featureRequested(flags, PostingsEnum.POSITIONS)) {
- if (indexOptions.compareTo(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS) < 0) {
- // Positions were not indexed
- return null;
- }
+ boolean hasPositions = indexOptions.compareTo(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS) >= 0;
+ if (hasPositions && PostingsEnum.featureRequested(flags, PostingsEnum.POSITIONS)) {
SimpleTextPostingsEnum docsAndPositionsEnum;
if (reuse != null && reuse instanceof SimpleTextPostingsEnum && ((SimpleTextPostingsEnum) reuse).canReuse(SimpleTextFieldsReader.this.in)) {
Modified: lucene/dev/branches/lucene6271/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextTermVectorsReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextTermVectorsReader.java?rev=1662157&r1=1662156&r2=1662157&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextTermVectorsReader.java (original)
+++ lucene/dev/branches/lucene6271/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextTermVectorsReader.java Wed Feb 25 01:17:13 2015
@@ -388,16 +388,15 @@ public class SimpleTextTermVectorsReader
@Override
public PostingsEnum postings(Bits liveDocs, PostingsEnum reuse, int flags) throws IOException {
-
+
if (PostingsEnum.featureRequested(flags, PostingsEnum.POSITIONS)) {
SimpleTVPostings postings = current.getValue();
- if (postings.positions == null && postings.startOffsets == null) {
- return null;
+ if (postings.positions != null || postings.startOffsets != null) {
+ // TODO: reuse
+ SimpleTVPostingsEnum e = new SimpleTVPostingsEnum();
+ e.reset(liveDocs, postings.positions, postings.startOffsets, postings.endOffsets, postings.payloads);
+ return e;
}
- // TODO: reuse
- SimpleTVPostingsEnum e = new SimpleTVPostingsEnum();
- e.reset(liveDocs, postings.positions, postings.startOffsets, postings.endOffsets, postings.payloads);
- return e;
}
// TODO: reuse
Modified: lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/codecs/compressing/CompressingTermVectorsReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/codecs/compressing/CompressingTermVectorsReader.java?rev=1662157&r1=1662156&r2=1662157&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/codecs/compressing/CompressingTermVectorsReader.java (original)
+++ lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/codecs/compressing/CompressingTermVectorsReader.java Wed Feb 25 01:17:13 2015
@@ -936,12 +936,6 @@ public final class CompressingTermVector
@Override
public final PostingsEnum postings(Bits liveDocs, PostingsEnum reuse, int flags) throws IOException {
-
- if (PostingsEnum.featureRequested(flags, PostingsEnum.POSITIONS)) {
- if (positions == null && startOffsets == null)
- return null;
- }
-
final TVPostingsEnum docsEnum;
if (reuse != null && reuse instanceof TVPostingsEnum) {
docsEnum = (TVPostingsEnum) reuse;
Modified: lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/codecs/lucene50/Lucene50PostingsReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/codecs/lucene50/Lucene50PostingsReader.java?rev=1662157&r1=1662156&r2=1662157&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/codecs/lucene50/Lucene50PostingsReader.java (original)
+++ lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/codecs/lucene50/Lucene50PostingsReader.java Wed Feb 25 01:17:13 2015
@@ -193,8 +193,12 @@ public final class Lucene50PostingsReade
@Override
public PostingsEnum postings(FieldInfo fieldInfo, BlockTermState termState, Bits liveDocs, PostingsEnum reuse, int flags) throws IOException {
+
+ boolean indexHasPositions = fieldInfo.getIndexOptions().compareTo(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS) >= 0;
+ boolean indexHasOffsets = fieldInfo.getIndexOptions().compareTo(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS) >= 0;
+ boolean indexHasPayloads = fieldInfo.hasPayloads();
- if (PostingsEnum.featureRequested(flags, PostingsEnum.POSITIONS) == false) {
+ if (indexHasPositions == false || PostingsEnum.featureRequested(flags, PostingsEnum.POSITIONS) == false) {
BlockDocsEnum docsEnum;
if (reuse instanceof BlockDocsEnum) {
docsEnum = (BlockDocsEnum) reuse;
@@ -205,17 +209,8 @@ public final class Lucene50PostingsReade
docsEnum = new BlockDocsEnum(fieldInfo);
}
return docsEnum.reset(liveDocs, (IntBlockTermState) termState, flags);
- }
-
- boolean indexHasPositions = fieldInfo.getIndexOptions().compareTo(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS) >= 0;
- boolean indexHasOffsets = fieldInfo.getIndexOptions().compareTo(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS) >= 0;
- boolean indexHasPayloads = fieldInfo.hasPayloads();
-
- if (!indexHasPositions)
- return null;
-
- if ((!indexHasOffsets || PostingsEnum.featureRequested(flags, PostingsEnum.OFFSETS) == false) &&
- (!indexHasPayloads || PostingsEnum.featureRequested(flags, PostingsEnum.PAYLOADS) == false)) {
+ } else if ((indexHasOffsets == false || PostingsEnum.featureRequested(flags, PostingsEnum.OFFSETS) == false) &&
+ (indexHasPayloads == false || PostingsEnum.featureRequested(flags, PostingsEnum.PAYLOADS) == false)) {
BlockPostingsEnum docsAndPositionsEnum;
if (reuse instanceof BlockPostingsEnum) {
docsAndPositionsEnum = (BlockPostingsEnum) reuse;
Modified: lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/index/CheckIndex.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/index/CheckIndex.java?rev=1662157&r1=1662156&r2=1662157&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/index/CheckIndex.java (original)
+++ lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/index/CheckIndex.java Wed Feb 25 01:17:13 2015
@@ -1050,6 +1050,7 @@ public class CheckIndex implements Close
sumDocFreq += docFreq;
docs = termsEnum.postings(liveDocs, docs);
+ // nocommit: check null
postings = termsEnum.postings(liveDocs, postings, PostingsEnum.ALL);
if (hasFreqs == false) {
@@ -1389,6 +1390,7 @@ public class CheckIndex implements Close
}
docs = termsEnum.postings(liveDocs, docs, PostingsEnum.NONE);
+ // nocommit: null check still needed? how to replace?
if (docs == null) {
throw new RuntimeException("null DocsEnum from to existing term " + seekTerms[i]);
}
@@ -1407,6 +1409,7 @@ public class CheckIndex implements Close
totDocFreq += termsEnum.docFreq();
docs = termsEnum.postings(null, docs, PostingsEnum.NONE);
+ // nocommit: null check still needed? how to replace?
if (docs == null) {
throw new RuntimeException("null DocsEnum from to existing term " + seekTerms[i]);
}
Modified: lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/index/MultiFields.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/index/MultiFields.java?rev=1662157&r1=1662156&r2=1662157&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/index/MultiFields.java (original)
+++ lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/index/MultiFields.java Wed Feb 25 01:17:13 2015
@@ -159,8 +159,7 @@ public final class MultiFields extends F
* required. Some codecs may be able to optimize
* their implementation when offsets and/or payloads are not
* required. This will return null if the field or term does not
- * exist or positions were not indexed. See {@link
- * TermsEnum#postings(Bits, PostingsEnum,int)}. */
+ * exist. See {@link TermsEnum#postings(Bits, PostingsEnum,int)}. */
public static PostingsEnum getTermPositionsEnum(IndexReader r, Bits liveDocs, String field, BytesRef term, int flags) throws IOException {
assert field != null;
assert term != null;
Modified: lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/index/MultiTermsEnum.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/index/MultiTermsEnum.java?rev=1662157&r1=1662156&r2=1662157&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/index/MultiTermsEnum.java (original)
+++ lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/index/MultiTermsEnum.java Wed Feb 25 01:17:13 2015
@@ -379,22 +379,14 @@ public final class MultiTermsEnum extend
assert entry.index < docsEnum.subPostingsEnums.length: entry.index + " vs " + docsEnum.subPostingsEnums.length + "; " + subs.length;
final PostingsEnum subPostingsEnum = entry.terms.postings(b, docsEnum.subPostingsEnums[entry.index], flags);
- if (subPostingsEnum != null) {
- docsEnum.subPostingsEnums[entry.index] = subPostingsEnum;
- subDocs[upto].postingsEnum = subPostingsEnum;
- subDocs[upto].slice = entry.subSlice;
- upto++;
- } else {
- // should this be an error?
- return null; // We can't support what is being asked for
- }
- }
-
- if (upto == 0) {
- return null;
- } else {
- return docsEnum.reset(subDocs, upto);
+ assert subPostingsEnum != null;
+ docsEnum.subPostingsEnums[entry.index] = subPostingsEnum;
+ subDocs[upto].postingsEnum = subPostingsEnum;
+ subDocs[upto].slice = entry.subSlice;
+ upto++;
}
+
+ return docsEnum.reset(subDocs, upto);
}
final static class TermsEnumWithSlice {
Modified: lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/search/MultiPhraseQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/search/MultiPhraseQuery.java?rev=1662157&r1=1662156&r2=1662157&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/search/MultiPhraseQuery.java (original)
+++ lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/search/MultiPhraseQuery.java Wed Feb 25 01:17:13 2015
@@ -230,6 +230,7 @@ public class MultiPhraseQuery extends Qu
termsEnum.seekExact(term.bytes(), termState);
postingsEnum = termsEnum.postings(liveDocs, null, PostingsEnum.POSITIONS);
+ // nocommit: check
if (postingsEnum == null) {
// term does exist, but has no positions
assert termsEnum.postings(liveDocs, null, PostingsEnum.NONE) != null: "termstate found but no term exists in reader";
@@ -483,6 +484,7 @@ class UnionPostingsEnum extends Postings
}
termsEnum.seekExact(term.bytes(), termState);
PostingsEnum postings = termsEnum.postings(liveDocs, null, PostingsEnum.POSITIONS);
+ // nocommit: check
if (postings == null) {
// term does exist, but has no positions
throw new IllegalStateException("field \"" + term.field() + "\" was indexed without position data; cannot run PhraseQuery (term=" + term.text() + ")");
Modified: lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/search/PhraseQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/search/PhraseQuery.java?rev=1662157&r1=1662156&r2=1662157&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/search/PhraseQuery.java (original)
+++ lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/search/PhraseQuery.java Wed Feb 25 01:17:13 2015
@@ -312,6 +312,7 @@ public class PhraseQuery extends Query {
// PhraseQuery on a field that did not index
// positions.
+ // nocommit: check
if (postingsEnum == null) {
assert te.seekExact(t.bytes()) : "termstate found but no term exists in reader";
// term does exist, but has no positions
Modified: lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/search/spans/SpanTermQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/search/spans/SpanTermQuery.java?rev=1662157&r1=1662156&r2=1662157&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/search/spans/SpanTermQuery.java (original)
+++ lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/search/spans/SpanTermQuery.java Wed Feb 25 01:17:13 2015
@@ -119,6 +119,7 @@ public class SpanTermQuery extends SpanQ
if (postings != null) {
return new TermSpans(postings, term);
} else {
+ // nocommit: check
// term does exist, but has no positions
throw new IllegalStateException("field \"" + term.field() + "\" was indexed without position data; cannot run SpanTermQuery (term=" + term.text() + ")");
}
Modified: lucene/dev/branches/lucene6271/lucene/core/src/test/org/apache/lucene/index/TestCodecs.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/lucene/core/src/test/org/apache/lucene/index/TestCodecs.java?rev=1662157&r1=1662156&r2=1662157&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/lucene/core/src/test/org/apache/lucene/index/TestCodecs.java (original)
+++ lucene/dev/branches/lucene6271/lucene/core/src/test/org/apache/lucene/index/TestCodecs.java Wed Feb 25 01:17:13 2015
@@ -458,6 +458,7 @@ public class TestCodecs extends LuceneTe
if (postings != null) {
docs = postings;
} else {
+ // nocommit: check
docs = TestUtil.docs(random(), termsEnum, null, null, PostingsEnum.FREQS);
}
} else {
Modified: lucene/dev/branches/lucene6271/lucene/core/src/test/org/apache/lucene/index/TestPostingsEnum.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/lucene/core/src/test/org/apache/lucene/index/TestPostingsEnum.java?rev=1662157&r1=1662156&r2=1662157&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/lucene/core/src/test/org/apache/lucene/index/TestPostingsEnum.java (original)
+++ lucene/dev/branches/lucene6271/lucene/core/src/test/org/apache/lucene/index/TestPostingsEnum.java Wed Feb 25 01:17:13 2015
@@ -84,18 +84,22 @@ public class TestPostingsEnum extends Lu
// we did not index positions
PostingsEnum docsAndPositionsEnum = getOnlySegmentReader(reader).postings(new Term("foo", "bar"), PostingsEnum.POSITIONS);
+ // nocommit: check
assertNull(docsAndPositionsEnum);
// we did not index positions
docsAndPositionsEnum = getOnlySegmentReader(reader).postings(new Term("foo", "bar"), PostingsEnum.PAYLOADS);
+ // nocommit: check
assertNull(docsAndPositionsEnum);
// we did not index positions
docsAndPositionsEnum = getOnlySegmentReader(reader).postings(new Term("foo", "bar"), PostingsEnum.OFFSETS);
+ // nocommit: check
assertNull(docsAndPositionsEnum);
// we did not index positions
docsAndPositionsEnum = getOnlySegmentReader(reader).postings(new Term("foo", "bar"), PostingsEnum.ALL);
+ // nocommit: check
assertNull(docsAndPositionsEnum);
iw.close();
Modified: lucene/dev/branches/lucene6271/lucene/core/src/test/org/apache/lucene/index/TestStressIndexing2.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/lucene/core/src/test/org/apache/lucene/index/TestStressIndexing2.java?rev=1662157&r1=1662156&r2=1662157&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/lucene/core/src/test/org/apache/lucene/index/TestStressIndexing2.java (original)
+++ lucene/dev/branches/lucene6271/lucene/core/src/test/org/apache/lucene/index/TestStressIndexing2.java Wed Feb 25 01:17:13 2015
@@ -397,6 +397,7 @@ public class TestStressIndexing2 extends
while((term2 = termsEnum3.next()) != null) {
System.out.println(" " + term2.utf8ToString() + ": freq=" + termsEnum3.totalTermFreq());
dpEnum = termsEnum3.postings(null, dpEnum, PostingsEnum.ALL);
+ // nocommit: check
if (dpEnum != null) {
assertTrue(dpEnum.nextDoc() != DocIdSetIterator.NO_MORE_DOCS);
final int freq = dpEnum.freq();
@@ -620,6 +621,7 @@ public class TestStressIndexing2 extends
dpEnum1 = termsEnum1.postings(null, dpEnum1, PostingsEnum.ALL);
dpEnum2 = termsEnum2.postings(null, dpEnum2, PostingsEnum.ALL);
+ // nocommit: check
if (dpEnum1 != null) {
assertNotNull(dpEnum2);
int docID1 = dpEnum1.nextDoc();
Modified: lucene/dev/branches/lucene6271/lucene/core/src/test/org/apache/lucene/index/TestTermVectorsReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/lucene/core/src/test/org/apache/lucene/index/TestTermVectorsReader.java?rev=1662157&r1=1662156&r2=1662157&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/lucene/core/src/test/org/apache/lucene/index/TestTermVectorsReader.java (original)
+++ lucene/dev/branches/lucene6271/lucene/core/src/test/org/apache/lucene/index/TestTermVectorsReader.java Wed Feb 25 01:17:13 2015
@@ -292,6 +292,7 @@ public class TestTermVectorsReader exten
//System.out.println("Term: " + term);
assertEquals(testTerms[i], term);
assertNotNull(termsEnum.postings(null, null));
+ // nocommit: check
assertNull(termsEnum.postings(null, null, PostingsEnum.ALL)); // no pos
}
reader.close();
Modified: lucene/dev/branches/lucene6271/lucene/highlighter/src/java/org/apache/lucene/search/postingshighlight/PostingsHighlighter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/lucene/highlighter/src/java/org/apache/lucene/search/postingshighlight/PostingsHighlighter.java?rev=1662157&r1=1662156&r2=1662157&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/lucene/highlighter/src/java/org/apache/lucene/search/postingshighlight/PostingsHighlighter.java (original)
+++ lucene/dev/branches/lucene6271/lucene/highlighter/src/java/org/apache/lucene/search/postingshighlight/PostingsHighlighter.java Wed Feb 25 01:17:13 2015
@@ -552,6 +552,7 @@ public class PostingsHighlighter {
if (!termsEnum.seekExact(terms[i])) {
continue; // term not found
}
+ // nocommit: check
de = postings[i] = termsEnum.postings(null, null, PostingsEnum.OFFSETS);
if (de == null) {
// no positions available
Modified: lucene/dev/branches/lucene6271/lucene/highlighter/src/java/org/apache/lucene/search/vectorhighlight/FieldTermStack.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/lucene/highlighter/src/java/org/apache/lucene/search/vectorhighlight/FieldTermStack.java?rev=1662157&r1=1662156&r2=1662157&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/lucene/highlighter/src/java/org/apache/lucene/search/vectorhighlight/FieldTermStack.java (original)
+++ lucene/dev/branches/lucene6271/lucene/highlighter/src/java/org/apache/lucene/search/vectorhighlight/FieldTermStack.java Wed Feb 25 01:17:13 2015
@@ -104,6 +104,7 @@ public class FieldTermStack {
if (!termSet.contains(term)) {
continue;
}
+ // nocommit: check
dpEnum = termsEnum.postings(null, dpEnum, PostingsEnum.POSITIONS);
if (dpEnum == null) {
// null snippet
Modified: lucene/dev/branches/lucene6271/lucene/misc/src/java/org/apache/lucene/index/SortingLeafReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/lucene/misc/src/java/org/apache/lucene/index/SortingLeafReader.java?rev=1662157&r1=1662156&r2=1662157&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/lucene/misc/src/java/org/apache/lucene/index/SortingLeafReader.java (original)
+++ lucene/dev/branches/lucene6271/lucene/misc/src/java/org/apache/lucene/index/SortingLeafReader.java Wed Feb 25 01:17:13 2015
@@ -88,13 +88,13 @@ public class SortingLeafReader extends F
@Override
public TermsEnum iterator(final TermsEnum reuse) throws IOException {
- return new SortingTermsEnum(in.iterator(reuse), docMap, indexOptions);
+ return new SortingTermsEnum(in.iterator(reuse), docMap, indexOptions, hasPositions());
}
@Override
public TermsEnum intersect(CompiledAutomaton compiled, BytesRef startTerm)
throws IOException {
- return new SortingTermsEnum(in.intersect(compiled, startTerm), docMap, indexOptions);
+ return new SortingTermsEnum(in.intersect(compiled, startTerm), docMap, indexOptions, hasPositions());
}
}
@@ -103,11 +103,13 @@ public class SortingLeafReader extends F
final Sorter.DocMap docMap; // pkg-protected to avoid synthetic accessor methods
private final IndexOptions indexOptions;
+ private final boolean hasPositions;
- public SortingTermsEnum(final TermsEnum in, Sorter.DocMap docMap, IndexOptions indexOptions) {
+ public SortingTermsEnum(final TermsEnum in, Sorter.DocMap docMap, IndexOptions indexOptions, boolean hasPositions) {
super(in);
this.docMap = docMap;
this.indexOptions = indexOptions;
+ this.hasPositions = hasPositions;
}
Bits newToOld(final Bits liveDocs) {
@@ -132,7 +134,7 @@ public class SortingLeafReader extends F
@Override
public PostingsEnum postings(Bits liveDocs, PostingsEnum reuse, final int flags) throws IOException {
- if (PostingsEnum.featureRequested(flags, PostingsEnum.POSITIONS)) {
+ if (hasPositions && PostingsEnum.featureRequested(flags, PostingsEnum.POSITIONS)) {
final PostingsEnum inReuse;
final SortingPostingsEnum wrapReuse;
if (reuse != null && reuse instanceof SortingPostingsEnum) {
@@ -146,10 +148,6 @@ public class SortingLeafReader extends F
}
final PostingsEnum inDocsAndPositions = in.postings(newToOld(liveDocs), inReuse, flags);
- if (inDocsAndPositions == null) {
- return null;
- }
-
// we ignore the fact that offsets may be stored but not asked for,
// since this code is expected to be used during addIndexes which will
// ask for everything. if that assumption changes in the future, we can
Modified: lucene/dev/branches/lucene6271/lucene/sandbox/src/java/org/apache/lucene/search/TermAutomatonQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/lucene/sandbox/src/java/org/apache/lucene/search/TermAutomatonQuery.java?rev=1662157&r1=1662156&r2=1662157&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/lucene/sandbox/src/java/org/apache/lucene/search/TermAutomatonQuery.java (original)
+++ lucene/dev/branches/lucene6271/lucene/sandbox/src/java/org/apache/lucene/search/TermAutomatonQuery.java Wed Feb 25 01:17:13 2015
@@ -335,6 +335,7 @@ public class TermAutomatonQuery extends
public EnumAndScorer(int termID, PostingsEnum posEnum) {
this.termID = termID;
+ // nocommit: check uses
this.posEnum = posEnum;
}
}
Modified: lucene/dev/branches/lucene6271/lucene/test-framework/src/java/org/apache/lucene/index/AssertingLeafReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/lucene/test-framework/src/java/org/apache/lucene/index/AssertingLeafReader.java?rev=1662157&r1=1662156&r2=1662157&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/lucene/test-framework/src/java/org/apache/lucene/index/AssertingLeafReader.java (original)
+++ lucene/dev/branches/lucene6271/lucene/test-framework/src/java/org/apache/lucene/index/AssertingLeafReader.java Wed Feb 25 01:17:13 2015
@@ -159,9 +159,8 @@ public class AssertingLeafReader extends
actualReuse = null;
}
PostingsEnum docs = super.postings(liveDocs, actualReuse, flags);
- if (docs == null) {
- return null;
- } else if (docs == actualReuse) {
+ assert docs != null;
+ if (docs == actualReuse) {
// codec reused, reset asserting state
((AssertingPostingsEnum)reuse).reset();
return reuse;
Modified: lucene/dev/branches/lucene6271/lucene/test-framework/src/java/org/apache/lucene/index/BasePostingsFormatTestCase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/lucene/test-framework/src/java/org/apache/lucene/index/BasePostingsFormatTestCase.java?rev=1662157&r1=1662156&r2=1662157&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/lucene/test-framework/src/java/org/apache/lucene/index/BasePostingsFormatTestCase.java (original)
+++ lucene/dev/branches/lucene6271/lucene/test-framework/src/java/org/apache/lucene/index/BasePostingsFormatTestCase.java Wed Feb 25 01:17:13 2015
@@ -1626,6 +1626,7 @@ public abstract class BasePostingsFormat
} else {
docs = termsEnum.postings(null, null, PostingsEnum.POSITIONS);
}
+ // nocommit: can we remove the noPositions and always ask for positions here?
int docFreq = 0;
long totalTermFreq = 0;
while (docs.nextDoc() != PostingsEnum.NO_MORE_DOCS) {
Modified: lucene/dev/branches/lucene6271/lucene/test-framework/src/java/org/apache/lucene/index/BaseTermVectorsFormatTestCase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/lucene/test-framework/src/java/org/apache/lucene/index/BaseTermVectorsFormatTestCase.java?rev=1662157&r1=1662156&r2=1662157&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/lucene/test-framework/src/java/org/apache/lucene/index/BaseTermVectorsFormatTestCase.java (original)
+++ lucene/dev/branches/lucene6271/lucene/test-framework/src/java/org/apache/lucene/index/BaseTermVectorsFormatTestCase.java Wed Feb 25 01:17:13 2015
@@ -454,6 +454,7 @@ public abstract class BaseTermVectorsFor
bits.clear(0);
PostingsEnum docsAndPositionsEnum = termsEnum.postings(bits, random().nextBoolean() ? null : this.docsEnum.get(), PostingsEnum.POSITIONS);
assertEquals(ft.storeTermVectorOffsets() || ft.storeTermVectorPositions(), docsAndPositionsEnum != null);
+ // nocommit: check
if (docsAndPositionsEnum != null) {
assertEquals(PostingsEnum.NO_MORE_DOCS, docsAndPositionsEnum.nextDoc());
}
Modified: lucene/dev/branches/lucene6271/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java?rev=1662157&r1=1662156&r2=1662157&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java (original)
+++ lucene/dev/branches/lucene6271/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java Wed Feb 25 01:17:13 2015
@@ -1968,6 +1968,7 @@ public abstract class LuceneTestCase ext
*/
public void assertDocsAndPositionsEnumEquals(String info, PostingsEnum leftDocs, PostingsEnum rightDocs) throws IOException {
if (leftDocs == null || rightDocs == null) {
+ // nocommit: this should now only be for term or field not existing, is this assert used in that way?
assertNull(leftDocs);
assertNull(rightDocs);
return;
Modified: lucene/dev/branches/lucene6271/lucene/test-framework/src/java/org/apache/lucene/util/TestUtil.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/lucene/test-framework/src/java/org/apache/lucene/util/TestUtil.java?rev=1662157&r1=1662156&r2=1662157&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/lucene/test-framework/src/java/org/apache/lucene/util/TestUtil.java (original)
+++ lucene/dev/branches/lucene6271/lucene/test-framework/src/java/org/apache/lucene/util/TestUtil.java Wed Feb 25 01:17:13 2015
@@ -1020,6 +1020,7 @@ public final class TestUtil {
default: posFlags = PostingsEnum.ALL; break;
}
PostingsEnum docsAndPositions = termsEnum.postings(liveDocs, null, posFlags);
+ // nocommit: check
if (docsAndPositions != null) {
return docsAndPositions;
}
Modified: lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/handler/component/QueryElevationComponent.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/handler/component/QueryElevationComponent.java?rev=1662157&r1=1662156&r2=1662157&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/handler/component/QueryElevationComponent.java (original)
+++ lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/handler/component/QueryElevationComponent.java Wed Feb 25 01:17:13 2015
@@ -693,6 +693,7 @@ public class QueryElevationComponent ext
term.copyChars(id);
if (seen.contains(id) == false && termsEnum.seekExact(term.get())) {
postingsEnum = termsEnum.postings(liveDocs, postingsEnum, PostingsEnum.NONE);
+ // nocommit: check, maybe just remove null check?
if (postingsEnum != null) {
int docId = postingsEnum.nextDoc();
if (docId == DocIdSetIterator.NO_MORE_DOCS ) continue; // must have been deleted
Modified: lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java?rev=1662157&r1=1662156&r2=1662157&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java (original)
+++ lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java Wed Feb 25 01:17:13 2015
@@ -798,6 +798,7 @@ public class SolrIndexSearcher extends I
return -1;
}
PostingsEnum docs = termsEnum.postings(leafReader.getLiveDocs(), null, PostingsEnum.NONE);
+ // nocommit: check
if (docs == null) return -1;
int id = docs.nextDoc();
return id == DocIdSetIterator.NO_MORE_DOCS ? -1 : id;
@@ -1169,6 +1170,7 @@ public class SolrIndexSearcher extends I
FixedBitSet fbs = null;
PostingsEnum postingsEnum = deState.termsEnum.postings(deState.liveDocs, deState.postingsEnum, PostingsEnum.NONE);
+ // nocommit: check
if (deState.postingsEnum == null) {
deState.postingsEnum = postingsEnum;
}