You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by si...@apache.org on 2012/08/13 15:53:27 UTC
svn commit: r1372423 [32/45] - in /lucene/dev/branches/LUCENE-2878: ./
dev-tools/ dev-tools/eclipse/ dev-tools/idea/.idea/libraries/
dev-tools/maven/ dev-tools/maven/lucene/
dev-tools/maven/lucene/analysis/common/
dev-tools/maven/lucene/analysis/icu/ d...
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/PhraseQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/PhraseQuery.java?rev=1372423&r1=1372422&r2=1372423&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/PhraseQuery.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/PhraseQuery.java Mon Aug 13 13:52:46 2012
@@ -18,6 +18,7 @@ package org.apache.lucene.search;
*/
import org.apache.lucene.index.*;
+import org.apache.lucene.search.Weight.PostingFeatures;
import org.apache.lucene.search.similarities.Similarity;
import org.apache.lucene.search.similarities.Similarity.SloppySimScorer;
import org.apache.lucene.util.*;
@@ -232,7 +233,7 @@ public class PhraseQuery extends Query {
@Override
public Scorer scorer(AtomicReaderContext context, boolean scoreDocsInOrder,
- boolean topScorer, FeatureFlags flags, Bits acceptDocs) throws IOException {
+ boolean topScorer, PostingFeatures flags, Bits acceptDocs) throws IOException {
assert !terms.isEmpty();
final AtomicReader reader = context.reader();
final Bits liveDocs = acceptDocs;
@@ -254,8 +255,7 @@ public class PhraseQuery extends Query {
return null;
}
te.seekExact(t.bytes(), state);
- final DocsAndPositionsEnum postingsEnum = te.docsAndPositions(liveDocs, null, false);
-
+ final DocsAndPositionsEnum postingsEnum = te.docsAndPositions(liveDocs, null, 0);
// PhraseQuery on a field that did not index
// positions.
if (postingsEnum == null) {
@@ -263,7 +263,7 @@ public class PhraseQuery extends Query {
// term does exist, but has no positions
throw new IllegalStateException("field \"" + t.field() + "\" was indexed without position data; cannot run PhraseQuery (term=" + t.text() + ")");
}
- TermDocsEnumFactory factory = new TermDocsEnumFactory(BytesRef.deepCopyOf(t.bytes()), te, acceptDocs);
+ TermDocsEnumFactory factory = new TermDocsEnumFactory(BytesRef.deepCopyOf(t.bytes()), te, flags, acceptDocs);
postingsFreqs[i] = new PostingsAndFreq(postingsEnum, factory, te.docFreq(), positions.get(i).intValue(), t);
}
@@ -273,8 +273,7 @@ public class PhraseQuery extends Query {
}
if (slop == 0) { // optimize exact case
- ExactPhraseScorer s = new ExactPhraseScorer(this, postingsFreqs, similarity.exactSimScorer(stats, context), flags == FeatureFlags.OFFSETS
- );
+ ExactPhraseScorer s = new ExactPhraseScorer(this, postingsFreqs, similarity.exactSimScorer(stats, context));
if (s.noDocs) {
return null;
} else {
@@ -282,7 +281,7 @@ public class PhraseQuery extends Query {
}
} else {
return
- new SloppyPhraseScorer(this, postingsFreqs, slop, similarity.sloppySimScorer(stats, context), flags == FeatureFlags.OFFSETS);
+ new SloppyPhraseScorer(this, postingsFreqs, slop, similarity.sloppySimScorer(stats, context));
}
}
@@ -293,7 +292,7 @@ public class PhraseQuery extends Query {
@Override
public Explanation explain(AtomicReaderContext context, int doc) throws IOException {
- Scorer scorer = scorer(context, true, false, FeatureFlags.POSITIONS, context.reader().getLiveDocs());
+ Scorer scorer = scorer(context, true, false, PostingFeatures.POSITIONS, context.reader().getLiveDocs());
if (scorer != null) {
int newDoc = scorer.advance(doc);
if (newDoc == doc) {
@@ -395,25 +394,27 @@ public class PhraseQuery extends Query {
protected final TermsEnum termsEnum;
protected final Bits liveDocs;
protected final BytesRef term;
+ protected final PostingFeatures flags;
- TermDocsEnumFactory(TermsEnum termsEnum, Bits liveDocs) {
- this(null, termsEnum, liveDocs);
+ TermDocsEnumFactory(TermsEnum termsEnum, PostingFeatures flags, Bits liveDocs) {
+ this(null, termsEnum, flags, liveDocs);
}
- TermDocsEnumFactory(BytesRef term, TermsEnum termsEnum, Bits liveDocs) {
+ TermDocsEnumFactory(BytesRef term, TermsEnum termsEnum, PostingFeatures flags, Bits liveDocs) {
this.termsEnum = termsEnum;
this.liveDocs = liveDocs;
this.term = term;
+ this.flags = flags;
}
- public DocsAndPositionsEnum docsAndPositionsEnum(boolean offsets)
+ public DocsAndPositionsEnum docsAndPositionsEnum()
throws IOException {
if (term != null) {
assert term != null;
termsEnum.seekExact(term, false);
}
- return termsEnum.docsAndPositions(liveDocs, null, offsets);
+ return termsEnum.docsAndPositions(liveDocs, null, flags.docsAndPositionsFlags());
}
}
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/QueryWrapperFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/QueryWrapperFilter.java?rev=1372423&r1=1372422&r2=1372423&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/QueryWrapperFilter.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/QueryWrapperFilter.java Mon Aug 13 13:52:46 2012
@@ -20,7 +20,7 @@ package org.apache.lucene.search;
import java.io.IOException;
import org.apache.lucene.index.AtomicReaderContext;
-import org.apache.lucene.search.Weight.FeatureFlags;
+import org.apache.lucene.search.Weight.PostingFeatures;
import org.apache.lucene.util.Bits;
/**
@@ -56,7 +56,7 @@ public class QueryWrapperFilter extends
return new DocIdSet() {
@Override
public DocIdSetIterator iterator() throws IOException {
- return weight.scorer(privateContext, true, false, FeatureFlags.DOCS, acceptDocs);
+ return weight.scorer(privateContext, true, false, PostingFeatures.DOCS_AND_FREQS, acceptDocs);
}
@Override
public boolean isCacheable() { return false; }
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/SloppyPhraseScorer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/SloppyPhraseScorer.java?rev=1372423&r1=1372422&r2=1372423&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/SloppyPhraseScorer.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/SloppyPhraseScorer.java Mon Aug 13 13:52:46 2012
@@ -51,13 +51,11 @@ final class SloppyPhraseScorer extends P
private boolean hasMultiTermRpts; //
private PhrasePositions[][] rptGroups; // in each group are PPs that repeats each other (i.e. same term), sorted by (query) offset
private PhrasePositions[] rptStack; // temporary stack for switching colliding repeating pps
- private final boolean needsOffsets;
SloppyPhraseScorer(Weight weight, PhraseQuery.PostingsAndFreq[] postings,
- int slop, Similarity.SloppySimScorer docScorer, boolean needsOffsets) throws IOException {
+ int slop, Similarity.SloppySimScorer docScorer) throws IOException {
super(weight, postings, docScorer);
this.slop = slop;
- this.needsOffsets = needsOffsets;
this.numPostings = postings==null ? 0 : postings.length;
pq = new PhraseQueue(postings.length);
// iter = (MaxLengthPositionIntervalIterator) positions(false, false, false);
@@ -562,7 +560,7 @@ final class SloppyPhraseScorer extends P
*/
if (!map.containsKey(term)) {
DocsAndPositionsEnum docsAndPosEnum = postings[i].factory
- .docsAndPositionsEnum(needsOffsets);
+ .docsAndPositionsEnum();
enums.add(docsAndPosEnum);
iterAndOffset = new IterAndOffsets(new TermIntervalIterator(this, docsAndPosEnum, false,
collectPositions));
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/TermQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/TermQuery.java?rev=1372423&r1=1372422&r2=1372423&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/TermQuery.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/TermQuery.java Mon Aug 13 13:52:46 2012
@@ -82,7 +82,7 @@ public class TermQuery extends Query {
@Override
public Scorer scorer(AtomicReaderContext context, boolean scoreDocsInOrder,
- boolean topScorer, FeatureFlags flags, Bits acceptDocs) throws IOException {
+ boolean topScorer, PostingFeatures flags, Bits acceptDocs) throws IOException {
assert termStates.topReaderContext == ReaderUtil
.getTopLevelContext(context) : "The top-reader used to create Weight ("
+ termStates.topReaderContext
@@ -93,29 +93,13 @@ public class TermQuery extends Query {
return null;
}
DocsEnum docs;
- boolean needsOffsets = false;
- switch (flags) {
- case DOCS:
- docs = termsEnum.docs(acceptDocs, null, true);
- break;
- case OFFSETS:
- case OFFSETS_AND_PAYLOADS:
- needsOffsets = true;
- case POSITIONS:
- case POSITIONS_AND_PAYLOADS:
- docs = termsEnum.docsAndPositions(acceptDocs, null, needsOffsets);
- break;
- default:
- throw new IllegalArgumentException("unknown ScorerFlag " + flags);
- }
- if (docs != null) {
- return new TermScorer(this, docs, similarity.exactSimScorer(stats, context), termsEnum.docFreq());
+ if (!flags.isProximityFeature()) {
+ docs = termsEnum.docs(acceptDocs, null, flags.docFlags());
} else {
- // Index does not store freq info
- docs = termsEnum.docs(acceptDocs, null, false);
- assert docs != null;
- return new MatchOnlyTermScorer(this, docs, similarity.exactSimScorer(stats, context), termsEnum.docFreq());
+ docs = termsEnum.docsAndPositions(acceptDocs, null, flags.docsAndPositionsFlags());
}
+ assert docs != null;
+ return new TermScorer(this, docs, similarity.exactSimScorer(stats, context), termsEnum.docFreq());
}
/**
@@ -148,7 +132,7 @@ public class TermQuery extends Query {
@Override
public Explanation explain(AtomicReaderContext context, int doc)
throws IOException {
- Scorer scorer = scorer(context, true, false, FeatureFlags.DOCS, context.reader()
+ Scorer scorer = scorer(context, true, false, PostingFeatures.DOCS_AND_FREQS, context.reader()
.getLiveDocs());
if (scorer != null) {
int newDoc = scorer.advance(doc);
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/TotalHitCountCollector.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/TotalHitCountCollector.java?rev=1372423&r1=1372422&r2=1372423&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/TotalHitCountCollector.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/TotalHitCountCollector.java Mon Aug 13 13:52:46 2012
@@ -18,6 +18,7 @@ package org.apache.lucene.search;
*/
import org.apache.lucene.index.AtomicReaderContext;
+import org.apache.lucene.search.Weight.PostingFeatures;
/**
* Just counts the total number of hits.
@@ -41,6 +42,12 @@ public class TotalHitCountCollector exte
}
@Override
+ public PostingFeatures postingFeatures() {
+ // we don't need frequencies here
+ return PostingFeatures.DOCS_ONLY;
+ }
+
+ @Override
public void setNextReader(AtomicReaderContext context) {
}
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/Weight.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/Weight.java?rev=1372423&r1=1372422&r2=1372423&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/Weight.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/Weight.java Mon Aug 13 13:52:46 2012
@@ -21,6 +21,8 @@ import java.io.IOException;
import org.apache.lucene.index.AtomicReader; // javadocs
import org.apache.lucene.index.AtomicReaderContext;
+import org.apache.lucene.index.DocsAndPositionsEnum;
+import org.apache.lucene.index.DocsEnum;
import org.apache.lucene.index.IndexReaderContext; // javadocs
import org.apache.lucene.search.similarities.Similarity;
import org.apache.lucene.util.Bits;
@@ -111,7 +113,7 @@ public abstract class Weight {
* @throws IOException
*/
public abstract Scorer scorer(AtomicReaderContext context, boolean scoreDocsInOrder,
- boolean topScorer, FeatureFlags flags, Bits acceptDocs) throws IOException;
+ boolean topScorer, PostingFeatures flags, Bits acceptDocs) throws IOException;
/**
* Returns true iff this implementation scores docs only out of order. This
@@ -126,7 +128,37 @@ public abstract class Weight {
*/
public boolean scoresDocsOutOfOrder() { return false; }
- public static enum FeatureFlags {
- DOCS, POSITIONS, POSITIONS_AND_PAYLOADS, OFFSETS, OFFSETS_AND_PAYLOADS
+ public static enum PostingFeatures {
+ DOCS_ONLY(0, 0, false),
+ DOCS_AND_FREQS(DocsEnum.FLAG_FREQS, 0, false),
+ POSITIONS(DocsEnum.FLAG_FREQS, 0, true),
+ POSITIONS_AND_PAYLOADS(DocsEnum.FLAG_FREQS, DocsAndPositionsEnum.FLAG_PAYLOADS, true),
+ OFFSETS(DocsEnum.FLAG_FREQS, DocsAndPositionsEnum.FLAG_OFFSETS, true),
+ OFFSETS_AND_PAYLOADS(DocsEnum.FLAG_FREQS, DocsAndPositionsEnum.FLAG_OFFSETS
+ | DocsAndPositionsEnum.FLAG_PAYLOADS, true);
+
+ private final int docsAndPositionsFlags;
+ private final int docFlags;
+ private final boolean isProximityFeature;
+
+
+ private PostingFeatures(int docFlags, int docsAndPositionsFlags, boolean isProximityFeature) {
+ this.docsAndPositionsFlags = docsAndPositionsFlags;
+ this.docFlags = docsAndPositionsFlags;
+ this.isProximityFeature = isProximityFeature;
+ }
+
+ public int docsAndPositionsFlags() {
+ return docsAndPositionsFlags;
+ }
+
+ public int docFlags() {
+ return docFlags;
+ }
+
+ public boolean isProximityFeature() {
+ return isProximityFeature;
+ }
+
}
}
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/payloads/AveragePayloadFunction.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/payloads/AveragePayloadFunction.java?rev=1372423&r1=1372422&r2=1372423&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/payloads/AveragePayloadFunction.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/payloads/AveragePayloadFunction.java Mon Aug 13 13:52:46 2012
@@ -1,6 +1,5 @@
package org.apache.lucene.search.payloads;
-import org.apache.lucene.search.Explanation;
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
@@ -36,14 +35,6 @@ public class AveragePayloadFunction exte
public float docScore(int docId, String field, int numPayloadsSeen, float payloadScore) {
return numPayloadsSeen > 0 ? (payloadScore / numPayloadsSeen) : 1;
}
- @Override
- public Explanation explain(int doc, int numPayloadsSeen, float payloadScore) {
- Explanation payloadBoost = new Explanation();
- float avgPayloadScore = (numPayloadsSeen > 0 ? (payloadScore / numPayloadsSeen) : 1);
- payloadBoost.setValue(avgPayloadScore);
- payloadBoost.setDescription("AveragePayloadFunction(...)");
- return payloadBoost;
- }
@Override
public int hashCode() {
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/payloads/MaxPayloadFunction.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/payloads/MaxPayloadFunction.java?rev=1372423&r1=1372422&r2=1372423&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/payloads/MaxPayloadFunction.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/payloads/MaxPayloadFunction.java Mon Aug 13 13:52:46 2012
@@ -1,6 +1,5 @@
package org.apache.lucene.search.payloads;
-import org.apache.lucene.search.Explanation;
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
@@ -41,14 +40,6 @@ public class MaxPayloadFunction extends
}
@Override
- public Explanation explain(int doc, int numPayloadsSeen, float payloadScore) {
- Explanation expl = new Explanation();
- float maxPayloadScore = (numPayloadsSeen > 0 ? payloadScore : 1);
- expl.setValue(maxPayloadScore);
- expl.setDescription("MaxPayloadFunction(...)");
- return expl;
- }
- @Override
public int hashCode() {
final int prime = 31;
int result = 1;
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/payloads/MinPayloadFunction.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/payloads/MinPayloadFunction.java?rev=1372423&r1=1372422&r2=1372423&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/payloads/MinPayloadFunction.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/payloads/MinPayloadFunction.java Mon Aug 13 13:52:46 2012
@@ -1,6 +1,5 @@
package org.apache.lucene.search.payloads;
-import org.apache.lucene.search.Explanation;
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
@@ -39,14 +38,6 @@ public class MinPayloadFunction extends
}
@Override
- public Explanation explain(int doc, int numPayloadsSeen, float payloadScore) {
- Explanation expl = new Explanation();
- float minPayloadScore = (numPayloadsSeen > 0 ? payloadScore : 1);
- expl.setValue(minPayloadScore);
- expl.setDescription("MinPayloadFunction(...)");
- return expl;
- }
- @Override
public int hashCode() {
final int prime = 31;
int result = 1;
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/payloads/PayloadFunction.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/payloads/PayloadFunction.java?rev=1372423&r1=1372422&r2=1372423&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/payloads/PayloadFunction.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/payloads/PayloadFunction.java Mon Aug 13 13:52:46 2012
@@ -55,10 +55,10 @@ public abstract class PayloadFunction {
*/
public abstract float docScore(int docId, String field, int numPayloadsSeen, float payloadScore);
- public Explanation explain(int docId, int numPayloadsSeen, float payloadScore){
+ public Explanation explain(int docId, String field, int numPayloadsSeen, float payloadScore){
Explanation result = new Explanation();
- result.setDescription("Unimpl Payload Function Explain");
- result.setValue(1);
+ result.setDescription(getClass().getSimpleName() + ".docScore()");
+ result.setValue(docScore(docId, field, numPayloadsSeen, payloadScore));
return result;
};
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/payloads/PayloadNearQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/payloads/PayloadNearQuery.java?rev=1372423&r1=1372422&r2=1372423&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/payloads/PayloadNearQuery.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/payloads/PayloadNearQuery.java Mon Aug 13 13:52:46 2012
@@ -149,14 +149,14 @@ public class PayloadNearQuery extends Sp
@Override
public Scorer scorer(AtomicReaderContext context, boolean scoreDocsInOrder,
- boolean topScorer, FeatureFlags flags, Bits acceptDocs) throws IOException {
+ boolean topScorer, PostingFeatures flags, Bits acceptDocs) throws IOException {
return new PayloadNearSpanScorer(query.getSpans(context, acceptDocs, termContexts), this,
similarity, similarity.sloppySimScorer(stats, context));
}
@Override
public Explanation explain(AtomicReaderContext context, int doc) throws IOException {
- PayloadNearSpanScorer scorer = (PayloadNearSpanScorer) scorer(context, true, false, FeatureFlags.POSITIONS, context.reader().getLiveDocs());
+ PayloadNearSpanScorer scorer = (PayloadNearSpanScorer) scorer(context, true, false, PostingFeatures.POSITIONS, context.reader().getLiveDocs());
if (scorer != null) {
int newDoc = scorer.advance(doc);
if (newDoc == doc) {
@@ -167,8 +167,9 @@ public class PayloadNearQuery extends Sp
Explanation scoreExplanation = docScorer.explain(doc, new Explanation(freq, "phraseFreq=" + freq));
expl.addDetail(scoreExplanation);
expl.setValue(scoreExplanation.getValue());
+ String field = ((SpanQuery)getQuery()).getField();
// now the payloads part
- Explanation payloadExpl = function.explain(doc, scorer.payloadsSeen, scorer.payloadScore);
+ Explanation payloadExpl = function.explain(doc, field, scorer.payloadsSeen, scorer.payloadScore);
// combined
ComplexExplanation result = new ComplexExplanation();
result.addDetail(expl);
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/payloads/PayloadTermQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/payloads/PayloadTermQuery.java?rev=1372423&r1=1372422&r2=1372423&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/payloads/PayloadTermQuery.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/payloads/PayloadTermQuery.java Mon Aug 13 13:52:46 2012
@@ -28,6 +28,7 @@ import org.apache.lucene.search.ComplexE
import org.apache.lucene.search.similarities.DefaultSimilarity;
import org.apache.lucene.search.similarities.Similarity;
import org.apache.lucene.search.similarities.Similarity.SloppySimScorer;
+import org.apache.lucene.search.spans.SpanQuery;
import org.apache.lucene.search.spans.TermSpans;
import org.apache.lucene.search.spans.SpanTermQuery;
import org.apache.lucene.search.spans.SpanWeight;
@@ -79,7 +80,7 @@ public class PayloadTermQuery extends Sp
@Override
public Scorer scorer(AtomicReaderContext context, boolean scoreDocsInOrder,
- boolean topScorer, FeatureFlags flags, Bits acceptDocs) throws IOException {
+ boolean topScorer, PostingFeatures flags, Bits acceptDocs) throws IOException {
return new PayloadTermSpanScorer((TermSpans) query.getSpans(context, acceptDocs, termContexts),
this, similarity.sloppySimScorer(stats, context));
}
@@ -117,8 +118,8 @@ public class PayloadTermQuery extends Sp
}
protected void processPayload(Similarity similarity) throws IOException {
- final DocsAndPositionsEnum postings = termSpans.getPostings();
- if (postings.hasPayload()) {
+ if (termSpans.isPayloadAvailable()) {
+ final DocsAndPositionsEnum postings = termSpans.getPostings();
payload = postings.getPayload();
if (payload != null) {
payloadScore = function.currentScore(doc, term.field(),
@@ -174,7 +175,7 @@ public class PayloadTermQuery extends Sp
@Override
public Explanation explain(AtomicReaderContext context, int doc) throws IOException {
- PayloadTermSpanScorer scorer = (PayloadTermSpanScorer) scorer(context, true, false, FeatureFlags.POSITIONS, context.reader().getLiveDocs());
+ PayloadTermSpanScorer scorer = (PayloadTermSpanScorer) scorer(context, true, false, PostingFeatures.POSITIONS, context.reader().getLiveDocs());
if (scorer != null) {
int newDoc = scorer.advance(doc);
if (newDoc == doc) {
@@ -190,7 +191,8 @@ public class PayloadTermQuery extends Sp
// whether to load the payload or not
// GSI: I suppose we could toString the payload, but I don't think that
// would be a good idea
- Explanation payloadExpl = new Explanation(scorer.getPayloadScore(), "scorePayload(...)");
+ String field = ((SpanQuery)getQuery()).getField();
+ Explanation payloadExpl = function.explain(doc, field, scorer.payloadsSeen, scorer.payloadScore);
payloadExpl.setValue(scorer.getPayloadScore());
// combined
ComplexExplanation result = new ComplexExplanation();
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/positions/BrouwerianQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/positions/BrouwerianQuery.java?rev=1372423&r1=1372422&r2=1372423&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/positions/BrouwerianQuery.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/positions/BrouwerianQuery.java Mon Aug 13 13:52:46 2012
@@ -28,7 +28,7 @@ import org.apache.lucene.search.IndexSea
import org.apache.lucene.search.Query;
import org.apache.lucene.search.Scorer;
import org.apache.lucene.search.Weight;
-import org.apache.lucene.search.Weight.FeatureFlags;
+import org.apache.lucene.search.Weight.PostingFeatures;
import org.apache.lucene.util.Bits;
/**
@@ -94,8 +94,8 @@ public final class BrouwerianQuery exten
@Override
public Scorer scorer(AtomicReaderContext context, boolean scoreDocsInOrder,
- boolean topScorer, FeatureFlags flags, Bits acceptDocs) throws IOException {
- flags = flags == FeatureFlags.DOCS ? FeatureFlags.POSITIONS : flags;
+ boolean topScorer, PostingFeatures flags, Bits acceptDocs) throws IOException {
+ flags = flags == PostingFeatures.DOCS_AND_FREQS ? PostingFeatures.POSITIONS : flags;
ScorerFactory factory = new ScorerFactory(minuted, subtracted, context, topScorer, flags, acceptDocs);
final Scorer scorer = factory.minutedScorer();
final Scorer subScorer = factory.subtractedScorer();
@@ -126,10 +126,10 @@ public final class BrouwerianQuery exten
final Weight subtracted;
final AtomicReaderContext context;
final boolean topScorer;
- final FeatureFlags flags;
+ final PostingFeatures flags;
final Bits acceptDocs;
ScorerFactory(Weight minuted, Weight subtracted,
- AtomicReaderContext context, boolean topScorer, FeatureFlags flags,
+ AtomicReaderContext context, boolean topScorer, PostingFeatures flags,
Bits acceptDocs) {
this.minuted = minuted;
this.subtracted = subtracted;
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/positions/Interval.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/positions/Interval.java?rev=1372423&r1=1372422&r2=1372423&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/positions/Interval.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/positions/Interval.java Mon Aug 13 13:52:46 2012
@@ -66,13 +66,10 @@ public class Interval implements Cloneab
offsetEnd = other.offsetEnd;
}
- public boolean nextPayload(BytesRef ref) throws IOException {
- return false;
+ public BytesRef nextPayload() throws IOException {
+ return null;
}
- public boolean payloadAvailable() {
- return false;
- }
public void reset() {
offsetBegin = offsetEnd = -1;
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/positions/IntervalFilterQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/positions/IntervalFilterQuery.java?rev=1372423&r1=1372422&r2=1372423&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/positions/IntervalFilterQuery.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/positions/IntervalFilterQuery.java Mon Aug 13 13:52:46 2012
@@ -21,7 +21,7 @@ import org.apache.lucene.index.AtomicRea
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.*;
-import org.apache.lucene.search.Weight.FeatureFlags;
+import org.apache.lucene.search.Weight.PostingFeatures;
import org.apache.lucene.search.positions.IntervalIterator.IntervalCollector;
import org.apache.lucene.search.positions.IntervalIterator.IntervalFilter;
import org.apache.lucene.util.Bits;
@@ -82,7 +82,7 @@ public class IntervalFilterQuery extends
@Override
public Explanation explain(AtomicReaderContext context, int doc)
throws IOException {
- Scorer scorer = scorer(context, true, false, FeatureFlags.POSITIONS, context.reader()
+ Scorer scorer = scorer(context, true, false, PostingFeatures.POSITIONS, context.reader()
.getLiveDocs());
if (scorer != null) {
int newDoc = scorer.advance(doc);
@@ -96,8 +96,8 @@ public class IntervalFilterQuery extends
@Override
public Scorer scorer(AtomicReaderContext context, boolean scoreDocsInOrder,
- boolean topScorer, FeatureFlags flags, Bits acceptDocs) throws IOException {
- flags = flags == FeatureFlags.DOCS ? FeatureFlags.POSITIONS : flags;
+ boolean topScorer, PostingFeatures flags, Bits acceptDocs) throws IOException {
+ flags = flags == PostingFeatures.DOCS_AND_FREQS ? PostingFeatures.POSITIONS : flags;
ScorerFactory factory = new ScorerFactory(other, context, topScorer, flags, acceptDocs);
final Scorer scorer = factory.scorer();
return scorer == null ? null : new PositionFilterScorer(this, scorer, factory);
@@ -123,10 +123,10 @@ public class IntervalFilterQuery extends
final Weight weight;
final AtomicReaderContext context;
final boolean topScorer;
- final FeatureFlags flags;
+ final PostingFeatures flags;
final Bits acceptDocs;
ScorerFactory(Weight weight,
- AtomicReaderContext context, boolean topScorer, FeatureFlags flags,
+ AtomicReaderContext context, boolean topScorer, PostingFeatures flags,
Bits acceptDocs) {
this.weight = weight;
this.context = context;
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/positions/TermIntervalIterator.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/positions/TermIntervalIterator.java?rev=1372423&r1=1372422&r2=1372423&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/positions/TermIntervalIterator.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/positions/TermIntervalIterator.java Mon Aug 13 13:52:46 2012
@@ -100,21 +100,12 @@ public final class TermIntervalIterator
}
@Override
- public boolean payloadAvailable() {
- return payloads.hasPayload();
- }
-
- @Override
- public boolean nextPayload(BytesRef ref) throws IOException {
+ public BytesRef nextPayload() throws IOException {
if (pos == termPos.positionsPending) {
- return false;
+ return null;
} else {
pos = termPos.positionsPending;
- final BytesRef payload = payloads.getPayload();
- ref.bytes = payload.bytes;
- ref.length = payload.length;
- ref.offset = payload.offset;
- return true;
+ return payloads.getPayload();
}
}
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/spans/NearSpansUnordered.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/spans/NearSpansUnordered.java?rev=1372423&r1=1372422&r2=1372423&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/spans/NearSpansUnordered.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/spans/NearSpansUnordered.java Mon Aug 13 13:52:46 2012
@@ -126,7 +126,7 @@ public class NearSpansUnordered extends
// TODO: Remove warning after API has been finalized
@Override
- public boolean isPayloadAvailable() {
+ public boolean isPayloadAvailable() throws IOException {
return spans.isPayloadAvailable();
}
@@ -256,7 +256,7 @@ public class NearSpansUnordered extends
// TODO: Remove warning after API has been finalized
@Override
- public boolean isPayloadAvailable() {
+ public boolean isPayloadAvailable() throws IOException {
SpansCell pointer = min();
while (pointer != null) {
if (pointer.isPayloadAvailable()) {
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/spans/SpanNotQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/spans/SpanNotQuery.java?rev=1372423&r1=1372422&r2=1372423&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/spans/SpanNotQuery.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/spans/SpanNotQuery.java Mon Aug 13 13:52:46 2012
@@ -157,7 +157,7 @@ public class SpanNotQuery extends SpanQu
// TODO: Remove warning after API has been finalized
@Override
- public boolean isPayloadAvailable() {
+ public boolean isPayloadAvailable() throws IOException {
return includeSpans.isPayloadAvailable();
}
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/spans/SpanOrQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/spans/SpanOrQuery.java?rev=1372423&r1=1372422&r2=1372423&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/spans/SpanOrQuery.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/spans/SpanOrQuery.java Mon Aug 13 13:52:46 2012
@@ -247,7 +247,7 @@ public class SpanOrQuery extends SpanQue
}
@Override
- public boolean isPayloadAvailable() {
+ public boolean isPayloadAvailable() throws IOException {
Spans top = top();
return top != null && top.isPayloadAvailable();
}
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/spans/SpanPositionCheckQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/spans/SpanPositionCheckQuery.java?rev=1372423&r1=1372422&r2=1372423&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/spans/SpanPositionCheckQuery.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/spans/SpanPositionCheckQuery.java Mon Aug 13 13:52:46 2012
@@ -176,7 +176,7 @@ public abstract class SpanPositionCheckQ
// TODO: Remove warning after API has been finalized
@Override
- public boolean isPayloadAvailable() {
+ public boolean isPayloadAvailable() throws IOException {
return spans.isPayloadAvailable();
}
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/spans/SpanTermQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/spans/SpanTermQuery.java?rev=1372423&r1=1372422&r2=1372423&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/spans/SpanTermQuery.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/spans/SpanTermQuery.java Mon Aug 13 13:52:46 2012
@@ -120,7 +120,7 @@ public class SpanTermQuery extends SpanQ
final TermsEnum termsEnum = context.reader().terms(term.field()).iterator(null);
termsEnum.seekExact(term.bytes(), state);
- final DocsAndPositionsEnum postings = termsEnum.docsAndPositions(acceptDocs, null, false);
+ final DocsAndPositionsEnum postings = termsEnum.docsAndPositions(acceptDocs, null, DocsAndPositionsEnum.FLAG_PAYLOADS);
if (postings != null) {
return new TermSpans(postings, term);
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/spans/SpanWeight.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/spans/SpanWeight.java?rev=1372423&r1=1372422&r2=1372423&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/spans/SpanWeight.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/spans/SpanWeight.java Mon Aug 13 13:52:46 2012
@@ -82,7 +82,7 @@ public class SpanWeight extends Weight {
@Override
public Scorer scorer(AtomicReaderContext context, boolean scoreDocsInOrder,
- boolean topScorer, FeatureFlags flags, Bits acceptDocs) throws IOException {
+ boolean topScorer, PostingFeatures flags, Bits acceptDocs) throws IOException {
if (stats == null) {
return null;
} else {
@@ -92,7 +92,7 @@ public class SpanWeight extends Weight {
@Override
public Explanation explain(AtomicReaderContext context, int doc) throws IOException {
- Scorer scorer = scorer(context, true, false, FeatureFlags.POSITIONS, context.reader().getLiveDocs());
+ Scorer scorer = scorer(context, true, false, PostingFeatures.POSITIONS, context.reader().getLiveDocs());
if (scorer != null) {
int newDoc = scorer.advance(doc);
if (newDoc == doc) {
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/spans/Spans.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/spans/Spans.java?rev=1372423&r1=1372422&r2=1372423&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/spans/Spans.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/spans/Spans.java Mon Aug 13 13:52:46 2012
@@ -82,6 +82,6 @@ public abstract class Spans {
*
* @return true if there is a payload available at this position that can be loaded
*/
- public abstract boolean isPayloadAvailable();
+ public abstract boolean isPayloadAvailable() throws IOException;
}
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/spans/TermSpans.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/spans/TermSpans.java?rev=1372423&r1=1372422&r2=1372423&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/spans/TermSpans.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/spans/TermSpans.java Mon Aug 13 13:52:46 2012
@@ -36,6 +36,7 @@ public class TermSpans extends Spans {
protected int freq;
protected int count;
protected int position;
+ protected boolean readPayload;
public TermSpans(DocsAndPositionsEnum postings, Term term) {
this.postings = postings;
@@ -64,6 +65,7 @@ public class TermSpans extends Spans {
}
position = postings.nextPosition();
count++;
+ readPayload = false;
return true;
}
@@ -78,7 +80,7 @@ public class TermSpans extends Spans {
count = 0;
position = postings.nextPosition();
count++;
-
+ readPayload = false;
return true;
}
@@ -101,6 +103,7 @@ public class TermSpans extends Spans {
@Override
public Collection<byte[]> getPayload() throws IOException {
final BytesRef payload = postings.getPayload();
+ readPayload = true;
final byte[] bytes;
if (payload != null) {
bytes = new byte[payload.length];
@@ -113,8 +116,8 @@ public class TermSpans extends Spans {
// TODO: Remove warning after API has been finalized
@Override
- public boolean isPayloadAvailable() {
- return postings.hasPayload();
+ public boolean isPayloadAvailable() throws IOException {
+ return readPayload == false && postings.getPayload() != null;
}
@Override
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/util/Constants.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/util/Constants.java?rev=1372423&r1=1372422&r2=1372423&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/util/Constants.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/util/Constants.java Mon Aug 13 13:52:46 2012
@@ -18,6 +18,7 @@ package org.apache.lucene.util;
*/
import java.lang.reflect.Field;
+import java.util.Collections;
import org.apache.lucene.LucenePackage;
/**
@@ -56,6 +57,7 @@ public final class Constants {
new Boolean(true).booleanValue(); // prevent inlining in foreign class files
public static final boolean JRE_IS_MINIMUM_JAVA7;
+ public static final boolean JRE_IS_MINIMUM_JAVA8;
/** True iff running on a 64bit JVM */
public static final boolean JRE_IS_64BIT;
@@ -93,6 +95,19 @@ public final class Constants {
v7 = false;
}
JRE_IS_MINIMUM_JAVA7 = v7;
+
+ if (JRE_IS_MINIMUM_JAVA7) {
+ // this method only exists in Java 8:
+ boolean v8 = true;
+ try {
+ Collections.class.getMethod("emptySortedSet");
+ } catch (NoSuchMethodException nsme) {
+ v8 = false;
+ }
+ JRE_IS_MINIMUM_JAVA8 = v8;
+ } else {
+ JRE_IS_MINIMUM_JAVA8 = false;
+ }
}
// this method prevents inlining the final version constant in compiled classes,
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/util/FixedBitSet.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/util/FixedBitSet.java?rev=1372423&r1=1372422&r2=1372423&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/util/FixedBitSet.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/util/FixedBitSet.java Mon Aug 13 13:52:46 2012
@@ -54,6 +54,11 @@ public final class FixedBitSet extends D
bits = new long[bits2words(numBits)];
}
+ public FixedBitSet(long[]storedBits,int numBits) {
+ this.numBits = numBits;
+ this.bits = storedBits;
+ }
+
/** Makes full copy. */
public FixedBitSet(FixedBitSet other) {
bits = new long[other.bits.length];
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/util/IOUtils.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/util/IOUtils.java?rev=1372423&r1=1372422&r2=1372423&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/util/IOUtils.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/util/IOUtils.java Mon Aug 13 13:52:46 2012
@@ -65,7 +65,7 @@ public final class IOUtils {
* } catch (ExpectedException e) {
* priorE = e;
* } finally {
- * closeSafely(priorE, resource1, resource2, resource3);
+ * closeWhileHandlingException(priorE, resource1, resource2, resource3);
* }
* </pre>
* </p>
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/util/NamedSPILoader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/util/NamedSPILoader.java?rev=1372423&r1=1372422&r2=1372423&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/util/NamedSPILoader.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/util/NamedSPILoader.java Mon Aug 13 13:52:46 2012
@@ -22,73 +22,80 @@ import java.util.Iterator;
import java.util.Map;
import java.util.LinkedHashMap;
import java.util.Set;
-import java.util.ServiceLoader;
+import java.util.ServiceConfigurationError;
/**
* Helper class for loading named SPIs from classpath (e.g. Codec, PostingsFormat).
* @lucene.internal
*/
-// TODO: would be nice to have case insensitive lookups.
public final class NamedSPILoader<S extends NamedSPILoader.NamedSPI> implements Iterable<S> {
- private final Map<String,S> services;
-
- /** This field is a hack for LuceneTestCase to get access
- * to the modifiable map (to work around bugs in IBM J9) */
- @SuppressWarnings("unused")
- @Deprecated
- // Hackidy-Häck-Hack for bugs in IBM J9 ServiceLoader
- private final Map<String,S> modifiableServices;
-
+ private volatile Map<String,S> services = Collections.emptyMap();
private final Class<S> clazz;
public NamedSPILoader(Class<S> clazz) {
+ this(clazz, Thread.currentThread().getContextClassLoader());
+ }
+
+ public NamedSPILoader(Class<S> clazz, ClassLoader classloader) {
this.clazz = clazz;
- final ServiceLoader<S> loader = ServiceLoader.load(clazz);
- final LinkedHashMap<String,S> services = new LinkedHashMap<String,S>();
- for (final S service : loader) {
- final String name = service.getName();
- // only add the first one for each name, later services will be ignored
- // this allows to place services before others in classpath to make
- // them used instead of others
- if (!services.containsKey(name)) {
- assert checkServiceName(name);
- services.put(name, service);
+ reload(classloader);
+ }
+
+ /**
+ * Reloads the internal SPI list from the given {@link ClassLoader}.
+ * Changes to the service list are visible after the method ends, all
+ * iterators ({@link #iterator()},...) stay consistent.
+ *
+ * <p><b>NOTE:</b> Only new service providers are added, existing ones are
+ * never removed or replaced.
+ *
+ * <p><em>This method is expensive and should only be called for discovery
+ * of new service providers on the given classpath/classloader!</em>
+ */
+ public void reload(ClassLoader classloader) {
+ final LinkedHashMap<String,S> services = new LinkedHashMap<String,S>(this.services);
+ final SPIClassIterator<S> loader = SPIClassIterator.get(clazz, classloader);
+ while (loader.hasNext()) {
+ final Class<? extends S> c = loader.next();
+ try {
+ final S service = c.newInstance();
+ final String name = service.getName();
+ // only add the first one for each name, later services will be ignored
+ // this allows to place services before others in classpath to make
+ // them used instead of others
+ if (!services.containsKey(name)) {
+ checkServiceName(name);
+ services.put(name, service);
+ }
+ } catch (Exception e) {
+ throw new ServiceConfigurationError("Cannot instantiate SPI class: " + c.getName(), e);
}
}
- this.modifiableServices = services; // hack, remove when IBM J9 is fixed!
this.services = Collections.unmodifiableMap(services);
}
/**
* Validates that a service name meets the requirements of {@link NamedSPI}
*/
- public static boolean checkServiceName(String name) {
+ public static void checkServiceName(String name) {
// based on harmony charset.java
if (name.length() >= 128) {
throw new IllegalArgumentException("Illegal service name: '" + name + "' is too long (must be < 128 chars).");
}
- for (int i = 0; i < name.length(); i++) {
+ for (int i = 0, len = name.length(); i < len; i++) {
char c = name.charAt(i);
- if (!isLetter(c) && !isDigit(c)) {
+ if (!isLetterOrDigit(c)) {
throw new IllegalArgumentException("Illegal service name: '" + name + "' must be simple ascii alphanumeric.");
}
}
- return true;
}
- /*
- * Checks whether a character is a letter (ascii) which are defined in the spec.
- */
- private static boolean isLetter(char c) {
- return ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z');
- }
-
- /*
- * Checks whether a character is a digit (ascii) which are defined in the spec.
+ /**
+ * Checks whether a character is a letter or digit (ascii) which are defined in the spec.
*/
- private static boolean isDigit(char c) {
- return ('0' <= c && c <= '9');
+ private static boolean isLetterOrDigit(char c) {
+ return ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || ('0' <= c && c <= '9');
}
public S lookup(String name) {
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/resources/META-INF/services/org.apache.lucene.codecs.PostingsFormat
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/resources/META-INF/services/org.apache.lucene.codecs.PostingsFormat?rev=1372423&r1=1372422&r2=1372423&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/resources/META-INF/services/org.apache.lucene.codecs.PostingsFormat (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/resources/META-INF/services/org.apache.lucene.codecs.PostingsFormat Mon Aug 13 13:52:46 2012
@@ -17,3 +17,5 @@ org.apache.lucene.codecs.lucene40.Lucene
org.apache.lucene.codecs.pulsing.Pulsing40PostingsFormat
org.apache.lucene.codecs.simpletext.SimpleTextPostingsFormat
org.apache.lucene.codecs.memory.MemoryPostingsFormat
+org.apache.lucene.codecs.bloom.BloomFilteringPostingsFormat
+org.apache.lucene.codecs.memory.DirectPostingsFormat
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/TestExternalCodecs.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/TestExternalCodecs.java?rev=1372423&r1=1372422&r2=1372423&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/TestExternalCodecs.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/TestExternalCodecs.java Mon Aug 13 13:52:46 2012
@@ -59,7 +59,7 @@ public class TestExternalCodecs extends
System.out.println("TEST: NUM_DOCS=" + NUM_DOCS);
}
- MockDirectoryWrapper dir = newDirectory();
+ BaseDirectoryWrapper dir = newDirectory();
dir.setCheckIndexOnClose(false); // we use a custom codec provider
IndexWriter w = new IndexWriter(
dir,
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/TestMergeSchedulerExternal.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/TestMergeSchedulerExternal.java?rev=1372423&r1=1372422&r2=1372423&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/TestMergeSchedulerExternal.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/TestMergeSchedulerExternal.java Mon Aug 13 13:52:46 2012
@@ -85,7 +85,7 @@ public class TestMergeSchedulerExternal
}
public void testSubclassConcurrentMergeScheduler() throws IOException {
- MockDirectoryWrapper dir = newDirectory();
+ MockDirectoryWrapper dir = newMockDirectory();
dir.failOn(new FailOnlyOnMerge());
Document doc = new Document();
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/analysis/TestCachingTokenFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/analysis/TestCachingTokenFilter.java?rev=1372423&r1=1372422&r2=1372423&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/analysis/TestCachingTokenFilter.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/analysis/TestCachingTokenFilter.java Mon Aug 13 13:52:46 2012
@@ -75,8 +75,7 @@ public class TestCachingTokenFilter exte
DocsAndPositionsEnum termPositions = MultiFields.getTermPositionsEnum(reader,
MultiFields.getLiveDocs(reader),
"preanalyzed",
- new BytesRef("term1"),
- false);
+ new BytesRef("term1"));
assertTrue(termPositions.nextDoc() != DocIdSetIterator.NO_MORE_DOCS);
assertEquals(1, termPositions.freq());
assertEquals(0, termPositions.nextPosition());
@@ -84,8 +83,7 @@ public class TestCachingTokenFilter exte
termPositions = MultiFields.getTermPositionsEnum(reader,
MultiFields.getLiveDocs(reader),
"preanalyzed",
- new BytesRef("term2"),
- false);
+ new BytesRef("term2"));
assertTrue(termPositions.nextDoc() != DocIdSetIterator.NO_MORE_DOCS);
assertEquals(2, termPositions.freq());
assertEquals(1, termPositions.nextPosition());
@@ -94,8 +92,7 @@ public class TestCachingTokenFilter exte
termPositions = MultiFields.getTermPositionsEnum(reader,
MultiFields.getLiveDocs(reader),
"preanalyzed",
- new BytesRef("term3"),
- false);
+ new BytesRef("term3"));
assertTrue(termPositions.nextDoc() != DocIdSetIterator.NO_MORE_DOCS);
assertEquals(1, termPositions.freq());
assertEquals(2, termPositions.nextPosition());
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/codecs/appending/TestAppendingCodec.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/codecs/appending/TestAppendingCodec.java?rev=1372423&r1=1372422&r2=1372423&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/codecs/appending/TestAppendingCodec.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/codecs/appending/TestAppendingCodec.java Mon Aug 13 13:52:46 2012
@@ -142,7 +142,7 @@ public class TestAppendingCodec extends
assertEquals(SeekStatus.FOUND, te.seekCeil(new BytesRef("lazy")));
assertEquals(SeekStatus.FOUND, te.seekCeil(new BytesRef("dog")));
assertEquals(SeekStatus.FOUND, te.seekCeil(new BytesRef("the")));
- DocsEnum de = te.docs(null, null, true);
+ DocsEnum de = te.docs(null, null);
assertTrue(de.advance(0) != DocIdSetIterator.NO_MORE_DOCS);
assertEquals(2, de.freq());
assertTrue(de.advance(1) != DocIdSetIterator.NO_MORE_DOCS);
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/codecs/lucene40/TestReuseDocsEnum.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/codecs/lucene40/TestReuseDocsEnum.java?rev=1372423&r1=1372422&r2=1372423&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/codecs/lucene40/TestReuseDocsEnum.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/codecs/lucene40/TestReuseDocsEnum.java Mon Aug 13 13:52:46 2012
@@ -56,7 +56,7 @@ public class TestReuseDocsEnum extends L
IdentityHashMap<DocsEnum, Boolean> enums = new IdentityHashMap<DocsEnum, Boolean>();
MatchNoBits bits = new Bits.MatchNoBits(indexReader.maxDoc());
while ((iterator.next()) != null) {
- DocsEnum docs = iterator.docs(random().nextBoolean() ? bits : new Bits.MatchNoBits(indexReader.maxDoc()), null, random().nextBoolean());
+ DocsEnum docs = iterator.docs(random().nextBoolean() ? bits : new Bits.MatchNoBits(indexReader.maxDoc()), null, random().nextBoolean() ? DocsEnum.FLAG_FREQS : 0);
enums.put(docs, true);
}
@@ -83,7 +83,7 @@ public class TestReuseDocsEnum extends L
MatchNoBits bits = new Bits.MatchNoBits(open.maxDoc());
DocsEnum docs = null;
while ((iterator.next()) != null) {
- docs = iterator.docs(bits, docs, random().nextBoolean());
+ docs = iterator.docs(bits, docs, random().nextBoolean() ? DocsEnum.FLAG_FREQS : 0);
enums.put(docs, true);
}
@@ -92,7 +92,7 @@ public class TestReuseDocsEnum extends L
iterator = terms.iterator(null);
docs = null;
while ((iterator.next()) != null) {
- docs = iterator.docs(new Bits.MatchNoBits(open.maxDoc()), docs, random().nextBoolean());
+ docs = iterator.docs(new Bits.MatchNoBits(open.maxDoc()), docs, random().nextBoolean() ? DocsEnum.FLAG_FREQS : 0);
enums.put(docs, true);
}
assertEquals(terms.size(), enums.size());
@@ -101,7 +101,7 @@ public class TestReuseDocsEnum extends L
iterator = terms.iterator(null);
docs = null;
while ((iterator.next()) != null) {
- docs = iterator.docs(null, docs, random().nextBoolean());
+ docs = iterator.docs(null, docs, random().nextBoolean() ? DocsEnum.FLAG_FREQS : 0);
enums.put(docs, true);
}
assertEquals(1, enums.size());
@@ -133,7 +133,7 @@ public class TestReuseDocsEnum extends L
DocsEnum docs = null;
BytesRef term = null;
while ((term = iterator.next()) != null) {
- docs = iterator.docs(null, randomDocsEnum("body", term, sequentialSubReaders2, bits), random().nextBoolean());
+ docs = iterator.docs(null, randomDocsEnum("body", term, sequentialSubReaders2, bits), random().nextBoolean() ? DocsEnum.FLAG_FREQS : 0);
enums.put(docs, true);
}
assertEquals(terms.size(), enums.size());
@@ -142,7 +142,7 @@ public class TestReuseDocsEnum extends L
enums.clear();
docs = null;
while ((term = iterator.next()) != null) {
- docs = iterator.docs(bits, randomDocsEnum("body", term, sequentialSubReaders2, bits), random().nextBoolean());
+ docs = iterator.docs(bits, randomDocsEnum("body", term, sequentialSubReaders2, bits), random().nextBoolean() ? DocsEnum.FLAG_FREQS : 0);
enums.put(docs, true);
}
assertEquals(terms.size(), enums.size());
@@ -155,7 +155,7 @@ public class TestReuseDocsEnum extends L
return null;
}
AtomicReader indexReader = (AtomicReader) readers.get(random().nextInt(readers.size()));
- return indexReader.termDocsEnum(bits, field, term, random().nextBoolean());
+ return indexReader.termDocsEnum(bits, field, term, random().nextBoolean() ? DocsEnum.FLAG_FREQS : 0);
}
/**
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/codecs/pulsing/Test10KPulsings.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/codecs/pulsing/Test10KPulsings.java?rev=1372423&r1=1372422&r2=1372423&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/codecs/pulsing/Test10KPulsings.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/codecs/pulsing/Test10KPulsings.java Mon Aug 13 13:52:46 2012
@@ -37,6 +37,7 @@ import org.apache.lucene.index.MultiFiel
import org.apache.lucene.index.RandomIndexWriter;
import org.apache.lucene.index.TermsEnum;
import org.apache.lucene.search.DocIdSetIterator;
+import org.apache.lucene.store.BaseDirectoryWrapper;
import org.apache.lucene.store.MockDirectoryWrapper;
import org.apache.lucene.util.LuceneTestCase;
import org.apache.lucene.util._TestUtil;
@@ -54,7 +55,7 @@ public class Test10KPulsings extends Luc
Codec cp = _TestUtil.alwaysPostingsFormat(new Pulsing40PostingsFormat(1));
File f = _TestUtil.getTempDir("10kpulsed");
- MockDirectoryWrapper dir = newFSDirectory(f);
+ BaseDirectoryWrapper dir = newFSDirectory(f);
dir.setCheckIndexOnClose(false); // we do this ourselves explicitly
RandomIndexWriter iw = new RandomIndexWriter(random(), dir,
newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random())).setCodec(cp));
@@ -87,7 +88,7 @@ public class Test10KPulsings extends Luc
for (int i = 0; i < 10050; i++) {
String expected = df.format(i);
assertEquals(expected, te.next().utf8ToString());
- de = _TestUtil.docs(random(), te, null, de, false);
+ de = _TestUtil.docs(random(), te, null, de, 0);
assertTrue(de.nextDoc() != DocIdSetIterator.NO_MORE_DOCS);
assertEquals(DocIdSetIterator.NO_MORE_DOCS, de.nextDoc());
}
@@ -105,7 +106,7 @@ public class Test10KPulsings extends Luc
Codec cp = _TestUtil.alwaysPostingsFormat(new Pulsing40PostingsFormat(freqCutoff));
File f = _TestUtil.getTempDir("10knotpulsed");
- MockDirectoryWrapper dir = newFSDirectory(f);
+ BaseDirectoryWrapper dir = newFSDirectory(f);
dir.setCheckIndexOnClose(false); // we do this ourselves explicitly
RandomIndexWriter iw = new RandomIndexWriter(random(), dir,
newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random())).setCodec(cp));
@@ -145,7 +146,7 @@ public class Test10KPulsings extends Luc
for (int i = 0; i < 10050; i++) {
String expected = df.format(i);
assertEquals(expected, te.next().utf8ToString());
- de = _TestUtil.docs(random(), te, null, de, false);
+ de = _TestUtil.docs(random(), te, null, de, 0);
assertTrue(de.nextDoc() != DocIdSetIterator.NO_MORE_DOCS);
assertEquals(DocIdSetIterator.NO_MORE_DOCS, de.nextDoc());
}
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/codecs/pulsing/TestPulsingReuse.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/codecs/pulsing/TestPulsingReuse.java?rev=1372423&r1=1372422&r2=1372423&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/codecs/pulsing/TestPulsingReuse.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/codecs/pulsing/TestPulsingReuse.java Mon Aug 13 13:52:46 2012
@@ -33,8 +33,8 @@ import org.apache.lucene.index.DocsAndPo
import org.apache.lucene.index.DocsEnum;
import org.apache.lucene.index.RandomIndexWriter;
import org.apache.lucene.index.TermsEnum;
+import org.apache.lucene.store.BaseDirectoryWrapper;
import org.apache.lucene.store.Directory;
-import org.apache.lucene.store.MockDirectoryWrapper;
import org.apache.lucene.util.LuceneTestCase;
import org.apache.lucene.util._TestUtil;
@@ -60,7 +60,7 @@ public class TestPulsingReuse extends Lu
Map<DocsEnum,Boolean> allEnums = new IdentityHashMap<DocsEnum,Boolean>();
TermsEnum te = segment.terms("foo").iterator(null);
while (te.next() != null) {
- reuse = te.docs(null, reuse, false);
+ reuse = te.docs(null, reuse, 0);
allEnums.put(reuse, true);
}
@@ -70,7 +70,7 @@ public class TestPulsingReuse extends Lu
DocsAndPositionsEnum posReuse = null;
te = segment.terms("foo").iterator(null);
while (te.next() != null) {
- posReuse = te.docsAndPositions(null, posReuse, false);
+ posReuse = te.docsAndPositions(null, posReuse);
allEnums.put(posReuse, true);
}
@@ -84,7 +84,7 @@ public class TestPulsingReuse extends Lu
public void testNestedPulsing() throws Exception {
// we always run this test with pulsing codec.
Codec cp = _TestUtil.alwaysPostingsFormat(new NestedPulsingPostingsFormat());
- MockDirectoryWrapper dir = newDirectory();
+ BaseDirectoryWrapper dir = newDirectory();
dir.setCheckIndexOnClose(false); // will do this ourselves, custom codec
RandomIndexWriter iw = new RandomIndexWriter(random(), dir,
newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random())).setCodec(cp));
@@ -102,7 +102,7 @@ public class TestPulsingReuse extends Lu
Map<DocsEnum,Boolean> allEnums = new IdentityHashMap<DocsEnum,Boolean>();
TermsEnum te = segment.terms("foo").iterator(null);
while (te.next() != null) {
- reuse = te.docs(null, reuse, false);
+ reuse = te.docs(null, reuse, 0);
allEnums.put(reuse, true);
}
@@ -112,7 +112,7 @@ public class TestPulsingReuse extends Lu
DocsAndPositionsEnum posReuse = null;
te = segment.terms("foo").iterator(null);
while (te.next() != null) {
- posReuse = te.docsAndPositions(null, posReuse, false);
+ posReuse = te.docsAndPositions(null, posReuse);
allEnums.put(posReuse, true);
}
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/document/TestDocument.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/document/TestDocument.java?rev=1372423&r1=1372422&r2=1372423&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/document/TestDocument.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/document/TestDocument.java Mon Aug 13 13:52:46 2012
@@ -290,33 +290,4 @@ public class TestDocument extends Lucene
// expected
}
}
-
- public void testBoost() throws Exception {
- Directory dir = newDirectory();
- IndexWriterConfig iwc = new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random()));
- iwc.setMergePolicy(newLogMergePolicy());
- IndexWriter iw = new IndexWriter(dir, iwc);
- Document doc = new Document();
- doc.add(new StringField("field1", "sometext", Field.Store.YES));
- doc.add(new TextField("field2", "sometext", Field.Store.NO));
- doc.add(new StringField("foo", "bar", Field.Store.NO));
- iw.addDocument(doc); // add an 'ok' document
- try {
- doc = new Document();
- // try to boost with norms omitted
- StringField field = new StringField("foo", "baz", Field.Store.NO);
- field.setBoost(5.0f);
- doc.add(field);
- iw.addDocument(doc);
- fail("didn't get any exception, boost silently discarded");
- } catch (UnsupportedOperationException expected) {
- // expected
- }
- DirectoryReader ir = DirectoryReader.open(iw, false);
- assertEquals(1, ir.numDocs());
- assertEquals("sometext", ir.document(0).get("field1"));
- ir.close();
- iw.close();
- dir.close();
- }
}
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/index/Test2BPostings.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/index/Test2BPostings.java?rev=1372423&r1=1372422&r2=1372423&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/index/Test2BPostings.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/index/Test2BPostings.java Mon Aug 13 13:52:46 2012
@@ -25,22 +25,29 @@ import org.apache.lucene.document.Field;
import org.apache.lucene.document.FieldType;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.FieldInfo.IndexOptions;
+import org.apache.lucene.store.BaseDirectoryWrapper;
import org.apache.lucene.store.MockDirectoryWrapper;
import org.apache.lucene.util.LuceneTestCase;
+import org.apache.lucene.util.TimeUnits;
import org.apache.lucene.util._TestUtil;
import org.apache.lucene.util.LuceneTestCase.SuppressCodecs;
+import com.carrotsearch.randomizedtesting.annotations.TimeoutSuite;
+
/**
* Test indexes ~82M docs with 26 terms each, so you get > Integer.MAX_VALUE terms/docs pairs
* @lucene.experimental
*/
-@SuppressCodecs({ "SimpleText", "Memory" })
+@SuppressCodecs({ "SimpleText", "Memory", "Direct" })
+@TimeoutSuite(millis = 4 * TimeUnits.HOUR)
public class Test2BPostings extends LuceneTestCase {
@Nightly
public void test() throws Exception {
- MockDirectoryWrapper dir = newFSDirectory(_TestUtil.getTempDir("2BPostings"));
- dir.setThrottling(MockDirectoryWrapper.Throttling.NEVER);
+ BaseDirectoryWrapper dir = newFSDirectory(_TestUtil.getTempDir("2BPostings"));
+ if (dir instanceof MockDirectoryWrapper) {
+ ((MockDirectoryWrapper)dir).setThrottling(MockDirectoryWrapper.Throttling.NEVER);
+ }
dir.setCheckIndexOnClose(false); // don't double-checkindex
IndexWriter w = new IndexWriter(dir,
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/index/Test2BTerms.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/index/Test2BTerms.java?rev=1372423&r1=1372422&r2=1372423&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/index/Test2BTerms.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/index/Test2BTerms.java Mon Aug 13 13:52:46 2012
@@ -41,7 +41,7 @@ import java.util.Random;
//
// java -server -Xmx8g -d64 -cp .:lib/junit-4.10.jar:./build/classes/test:./build/classes/test-framework:./build/classes/java -Dlucene.version=4.0-dev -Dtests.directory=MMapDirectory -DtempDir=build -ea org.junit.runner.JUnitCore org.apache.lucene.index.Test2BTerms
//
-@SuppressCodecs({ "SimpleText", "Memory" })
+@SuppressCodecs({ "SimpleText", "Memory", "Direct" })
public class Test2BTerms extends LuceneTestCase {
private final static int TOKEN_LEN = 10;
@@ -146,9 +146,11 @@ public class Test2BTerms extends LuceneT
List<BytesRef> savedTerms = null;
- MockDirectoryWrapper dir = newFSDirectory(_TestUtil.getTempDir("2BTerms"));
+ BaseDirectoryWrapper dir = newFSDirectory(_TestUtil.getTempDir("2BTerms"));
//MockDirectoryWrapper dir = newFSDirectory(new File("/p/lucene/indices/2bindex"));
- dir.setThrottling(MockDirectoryWrapper.Throttling.NEVER);
+ if (dir instanceof MockDirectoryWrapper) {
+ ((MockDirectoryWrapper)dir).setThrottling(MockDirectoryWrapper.Throttling.NEVER);
+ }
dir.setCheckIndexOnClose(false); // don't double-checkindex
if (true) {
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/index/TestAddIndexes.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/index/TestAddIndexes.java?rev=1372423&r1=1372422&r2=1372423&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/index/TestAddIndexes.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/index/TestAddIndexes.java Mon Aug 13 13:52:46 2012
@@ -51,6 +51,7 @@ import org.apache.lucene.index.IndexWrit
import org.apache.lucene.search.DocIdSetIterator;
import org.apache.lucene.search.PhraseQuery;
import org.apache.lucene.store.AlreadyClosedException;
+import org.apache.lucene.store.BaseDirectoryWrapper;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.MockDirectoryWrapper;
import org.apache.lucene.store.RAMDirectory;
@@ -549,7 +550,7 @@ public class TestAddIndexes extends Luce
private void verifyTermDocs(Directory dir, Term term, int numDocs)
throws IOException {
IndexReader reader = DirectoryReader.open(dir);
- DocsEnum docsEnum = _TestUtil.docs(random(), reader, term.field, term.bytes, null, null, false);
+ DocsEnum docsEnum = _TestUtil.docs(random(), reader, term.field, term.bytes, null, null, 0);
int count = 0;
while (docsEnum.nextDoc() != DocIdSetIterator.NO_MORE_DOCS)
count++;
@@ -1168,7 +1169,7 @@ public class TestAddIndexes extends Luce
* simple test that ensures we getting expected exceptions
*/
public void testAddIndexMissingCodec() throws IOException {
- MockDirectoryWrapper toAdd = newDirectory();
+ BaseDirectoryWrapper toAdd = newDirectory();
// Disable checkIndex, else we get an exception because
// of the unregistered codec:
toAdd.setCheckIndexOnClose(false);
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java?rev=1372423&r1=1372422&r2=1372423&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java Mon Aug 13 13:52:46 2012
@@ -55,6 +55,7 @@ import org.apache.lucene.search.IndexSea
import org.apache.lucene.search.NumericRangeQuery;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TermQuery;
+import org.apache.lucene.store.BaseDirectoryWrapper;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.MockDirectoryWrapper;
import org.apache.lucene.store.RAMDirectory;
@@ -177,7 +178,7 @@ public class TestBackwardsCompatibility
}
File oldIndxeDir = _TestUtil.getTempDir(unsupportedNames[i]);
_TestUtil.unzip(getDataFile("unsupported." + unsupportedNames[i] + ".zip"), oldIndxeDir);
- MockDirectoryWrapper dir = newFSDirectory(oldIndxeDir);
+ BaseDirectoryWrapper dir = newFSDirectory(oldIndxeDir);
// don't checkindex, these are intentionally not supported
dir.setCheckIndexOnClose(false);
@@ -718,7 +719,7 @@ public class TestBackwardsCompatibility
// should be found exactly
assertEquals(TermsEnum.SeekStatus.FOUND,
terms.seekCeil(aaaTerm));
- assertEquals(35, countDocs(_TestUtil.docs(random(), terms, null, null, false)));
+ assertEquals(35, countDocs(_TestUtil.docs(random(), terms, null, null, 0)));
assertNull(terms.next());
// should hit end of field
@@ -730,12 +731,12 @@ public class TestBackwardsCompatibility
assertEquals(TermsEnum.SeekStatus.NOT_FOUND,
terms.seekCeil(new BytesRef("a")));
assertTrue(terms.term().bytesEquals(aaaTerm));
- assertEquals(35, countDocs(_TestUtil.docs(random(), terms, null, null, false)));
+ assertEquals(35, countDocs(_TestUtil.docs(random(), terms, null, null, 0)));
assertNull(terms.next());
assertEquals(TermsEnum.SeekStatus.FOUND,
terms.seekCeil(aaaTerm));
- assertEquals(35, countDocs(_TestUtil.docs(random(), terms,null, null, false)));
+ assertEquals(35, countDocs(_TestUtil.docs(random(), terms,null, null, 0)));
assertNull(terms.next());
r.close();
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/index/TestByteSlices.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/index/TestByteSlices.java?rev=1372423&r1=1372422&r2=1372423&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/index/TestByteSlices.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/index/TestByteSlices.java Mon Aug 13 13:52:46 2012
@@ -40,24 +40,41 @@ public class TestByteSlices extends Luce
counters[stream] = 0;
}
- int num = atLeast(10000);
+ int num = atLeast(3000);
for (int iter = 0; iter < num; iter++) {
- int stream = random().nextInt(NUM_STREAM);
- if (VERBOSE)
+ int stream;
+ if (random().nextBoolean()) {
+ stream = random().nextInt(3);
+ } else {
+ stream = random().nextInt(NUM_STREAM);
+ }
+
+ if (VERBOSE) {
System.out.println("write stream=" + stream);
+ }
if (starts[stream] == -1) {
final int spot = pool.newSlice(ByteBlockPool.FIRST_LEVEL_SIZE);
starts[stream] = uptos[stream] = spot + pool.byteOffset;
- if (VERBOSE)
+ if (VERBOSE) {
System.out.println(" init to " + starts[stream]);
+ }
}
writer.init(uptos[stream]);
- int numValue = random().nextInt(20);
+ int numValue;
+ if (random().nextInt(10) == 3) {
+ numValue = random().nextInt(100);
+ } else if (random().nextInt(5) == 3) {
+ numValue = random().nextInt(3);
+ } else {
+ numValue = random().nextInt(20);
+ }
+
for(int j=0;j<numValue;j++) {
- if (VERBOSE)
+ if (VERBOSE) {
System.out.println(" write " + (counters[stream]+j));
+ }
// write some large (incl. negative) ints:
writer.writeVInt(random().nextInt());
writer.writeVInt(counters[stream]+j);
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/index/TestCodecs.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/index/TestCodecs.java?rev=1372423&r1=1372422&r2=1372423&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/index/TestCodecs.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/index/TestCodecs.java Mon Aug 13 13:52:46 2012
@@ -20,6 +20,7 @@ package org.apache.lucene.index;
import java.io.IOException;
import java.util.Arrays;
import java.util.HashSet;
+import java.util.Iterator;
import org.apache.lucene.analysis.MockAnalyzer;
import org.apache.lucene.codecs.Codec;
@@ -116,7 +117,7 @@ public class TestCodecs extends LuceneTe
sumDF += term.docs.length;
sumTotalTermCount += term.write(termsConsumer);
}
- termsConsumer.finish(sumTotalTermCount, sumDF, (int) visitedDocs.cardinality());
+ termsConsumer.finish(omitTF ? -1 : sumTotalTermCount, sumDF, (int) visitedDocs.cardinality());
}
}
@@ -154,7 +155,7 @@ public class TestCodecs extends LuceneTe
for(int i=0;i<docs.length;i++) {
final int termDocFreq;
if (field.omitTF) {
- termDocFreq = 0;
+ termDocFreq = -1;
} else {
termDocFreq = positions[i].length;
}
@@ -165,10 +166,10 @@ public class TestCodecs extends LuceneTe
final PositionData pos = positions[i][j];
postingsConsumer.addPosition(pos.pos, pos.payload, -1, -1);
}
- postingsConsumer.finishDoc();
}
+ postingsConsumer.finishDoc();
}
- termsConsumer.finishTerm(text, new TermStats(docs.length, totTF));
+ termsConsumer.finishTerm(text, new TermStats(docs.length, field.omitTF ? -1 : totTF));
return totTF;
}
}
@@ -258,9 +259,10 @@ public class TestCodecs extends LuceneTe
final FieldsProducer reader = codec.postingsFormat().fieldsProducer(new SegmentReadState(dir, si, fieldInfos, newIOContext(random()), DirectoryReader.DEFAULT_TERMS_INDEX_DIVISOR));
- final FieldsEnum fieldsEnum = reader.iterator();
- assertNotNull(fieldsEnum.next());
- final Terms terms2 = fieldsEnum.terms();
+ final Iterator<String> fieldsEnum = reader.iterator();
+ String fieldName = fieldsEnum.next();
+ assertNotNull(fieldName);
+ final Terms terms2 = reader.terms(fieldName);
assertNotNull(terms2);
final TermsEnum termsEnum = terms2.iterator(null);
@@ -275,7 +277,7 @@ public class TestCodecs extends LuceneTe
// make sure it properly fully resets (rewinds) its
// internal state:
for(int iter=0;iter<2;iter++) {
- docsEnum = _TestUtil.docs(random(), termsEnum, null, docsEnum, false);
+ docsEnum = _TestUtil.docs(random(), termsEnum, null, docsEnum, 0);
assertEquals(terms[i].docs[0], docsEnum.nextDoc());
assertEquals(DocIdSetIterator.NO_MORE_DOCS, docsEnum.nextDoc());
}
@@ -286,7 +288,7 @@ public class TestCodecs extends LuceneTe
assertEquals(termsEnum.seekCeil(new BytesRef(terms[i].text2)), TermsEnum.SeekStatus.FOUND);
}
- assertNull(fieldsEnum.next());
+ assertFalse(fieldsEnum.hasNext());
reader.close();
dir.close();
}
@@ -436,14 +438,14 @@ public class TestCodecs extends LuceneTe
final int pos = posEnum.nextPosition();
assertEquals(positions[i].pos, pos);
if (positions[i].payload != null) {
- assertTrue(posEnum.hasPayload());
+ assertNotNull(posEnum.getPayload());
if (random().nextInt(3) < 2) {
// Verify the payload bytes
final BytesRef otherPayload = posEnum.getPayload();
assertTrue("expected=" + positions[i].payload.toString() + " got=" + otherPayload.toString(), positions[i].payload.equals(otherPayload));
}
} else {
- assertFalse(posEnum.hasPayload());
+ assertNull(posEnum.getPayload());
}
}
}
@@ -472,9 +474,9 @@ public class TestCodecs extends LuceneTe
assertEquals(status, TermsEnum.SeekStatus.FOUND);
assertEquals(term.docs.length, termsEnum.docFreq());
if (field.omitTF) {
- this.verifyDocs(term.docs, term.positions, _TestUtil.docs(random(), termsEnum, null, null, false), false);
+ this.verifyDocs(term.docs, term.positions, _TestUtil.docs(random(), termsEnum, null, null, 0), false);
} else {
- this.verifyDocs(term.docs, term.positions, termsEnum.docsAndPositions(null, null, false), true);
+ this.verifyDocs(term.docs, term.positions, termsEnum.docsAndPositions(null, null), true);
}
// Test random seek by ord:
@@ -492,9 +494,9 @@ public class TestCodecs extends LuceneTe
assertTrue(termsEnum.term().bytesEquals(new BytesRef(term.text2)));
assertEquals(term.docs.length, termsEnum.docFreq());
if (field.omitTF) {
- this.verifyDocs(term.docs, term.positions, _TestUtil.docs(random(), termsEnum, null, null, false), false);
+ this.verifyDocs(term.docs, term.positions, _TestUtil.docs(random(), termsEnum, null, null, 0), false);
} else {
- this.verifyDocs(term.docs, term.positions, termsEnum.docsAndPositions(null, null, false), true);
+ this.verifyDocs(term.docs, term.positions, termsEnum.docsAndPositions(null, null), true);
}
}
@@ -546,16 +548,16 @@ public class TestCodecs extends LuceneTe
final DocsEnum docsAndFreqs;
final DocsAndPositionsEnum postings;
if (!field.omitTF) {
- postings = termsEnum.docsAndPositions(null, null, false);
+ postings = termsEnum.docsAndPositions(null, null);
if (postings != null) {
docs = docsAndFreqs = postings;
} else {
- docs = docsAndFreqs = _TestUtil.docs(random(), termsEnum, null, null, true);
+ docs = docsAndFreqs = _TestUtil.docs(random(), termsEnum, null, null, DocsEnum.FLAG_FREQS);
}
} else {
postings = null;
docsAndFreqs = null;
- docs = _TestUtil.docs(random(), termsEnum, null, null, false);
+ docs = _TestUtil.docs(random(), termsEnum, null, null, 0);
}
assertNotNull(docs);
int upto2 = -1;