You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by jp...@apache.org on 2015/07/27 12:34:42 UTC
svn commit: r1692864 - in /lucene/dev/branches/branch_5x: ./ lucene/
lucene/core/ lucene/core/src/java/org/apache/lucene/index/
lucene/core/src/java/org/apache/lucene/search/
lucene/core/src/java/org/apache/lucene/search/spans/
lucene/core/src/java/org...
Author: jpountz
Date: Mon Jul 27 10:34:42 2015
New Revision: 1692864
URL: http://svn.apache.org/r1692864
Log:
LUCENE-6695: Added BlendedTermQuery.
Added:
lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/search/BlendedTermQuery.java
- copied, changed from r1692848, lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/search/BlendedTermQuery.java
lucene/dev/branches/branch_5x/lucene/core/src/test/org/apache/lucene/search/TestBlendedTermQuery.java
- copied unchanged from r1692848, lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestBlendedTermQuery.java
Modified:
lucene/dev/branches/branch_5x/ (props changed)
lucene/dev/branches/branch_5x/lucene/ (props changed)
lucene/dev/branches/branch_5x/lucene/CHANGES.txt (contents, props changed)
lucene/dev/branches/branch_5x/lucene/core/ (props changed)
lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/index/TermContext.java
lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/search/MultiTermQuery.java
lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/search/ScoringRewrite.java
lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/search/TermCollectingRewrite.java
lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/search/TopTermsRewrite.java
lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/search/spans/SpanMultiTermQueryWrapper.java
lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/util/ArrayUtil.java
lucene/dev/branches/branch_5x/lucene/queryparser/ (props changed)
lucene/dev/branches/branch_5x/lucene/queryparser/src/java/org/apache/lucene/queryparser/complexPhrase/ComplexPhraseQueryParser.java
Modified: lucene/dev/branches/branch_5x/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/CHANGES.txt?rev=1692864&r1=1692863&r2=1692864&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/CHANGES.txt (original)
+++ lucene/dev/branches/branch_5x/lucene/CHANGES.txt Mon Jul 27 10:34:42 2015
@@ -102,6 +102,9 @@ New Features
* LUCENE-6694: Add LithuanianAnalyzer and LithuanianStemmer.
(Dainius Jocas via Robert Muir)
+* LUCENE-6695: Added a new BlendedTermQuery to blend statistics across several
+ terms. (Simon Willnauer, Adrien Grand)
+
API Changes
* LUCENE-6508: Simplify Lock api, there is now just
Modified: lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/index/TermContext.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/index/TermContext.java?rev=1692864&r1=1692863&r2=1692864&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/index/TermContext.java (original)
+++ lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/index/TermContext.java Mon Jul 27 10:34:42 2015
@@ -17,7 +17,6 @@ package org.apache.lucene.index;
* limitations under the License.
*/
-import org.apache.lucene.codecs.BlockTermState;
import org.apache.lucene.util.BytesRef;
import java.io.IOException;
Copied: lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/search/BlendedTermQuery.java (from r1692848, lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/search/BlendedTermQuery.java)
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/search/BlendedTermQuery.java?p2=lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/search/BlendedTermQuery.java&p1=lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/search/BlendedTermQuery.java&r1=1692848&r2=1692864&rev=1692864&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/search/BlendedTermQuery.java (original)
+++ lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/search/BlendedTermQuery.java Mon Jul 27 10:34:42 2015
@@ -134,12 +134,11 @@ public final class BlendedTermQuery exte
public static final RewriteMethod BOOLEAN_REWRITE = new RewriteMethod() {
@Override
public Query rewrite(Query[] subQueries) {
- BooleanQuery.Builder merged = new BooleanQuery.Builder();
- merged.setDisableCoord(true);
+ BooleanQuery merged = new BooleanQuery(true);
for (Query query : subQueries) {
merged.add(query, Occur.SHOULD);
}
- return merged.build();
+ return merged;
}
};
@@ -189,7 +188,7 @@ public final class BlendedTermQuery exte
private final TermContext[] contexts;
private final RewriteMethod rewriteMethod;
- private BlendedTermQuery(Term[] terms, float[] boosts, TermContext[] contexts,
+ private BlendedTermQuery(final Term[] terms, final float[] boosts, final TermContext[] contexts,
RewriteMethod rewriteMethod) {
assert terms.length == boosts.length;
assert terms.length == contexts.length;
Modified: lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/search/MultiTermQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/search/MultiTermQuery.java?rev=1692864&r1=1692863&r2=1692864&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/search/MultiTermQuery.java (original)
+++ lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/search/MultiTermQuery.java Mon Jul 27 10:34:42 2015
@@ -18,16 +18,13 @@ package org.apache.lucene.search;
*/
import java.io.IOException;
-import java.util.List;
import java.util.Objects;
import org.apache.lucene.index.FilteredTermsEnum; // javadocs
import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.LeafReaderContext;
import org.apache.lucene.index.SingleTermsEnum; // javadocs
import org.apache.lucene.index.Term;
import org.apache.lucene.index.TermContext;
-import org.apache.lucene.index.TermState;
import org.apache.lucene.index.Terms;
import org.apache.lucene.index.TermsEnum;
import org.apache.lucene.util.AttributeSource;
@@ -175,10 +172,15 @@ public abstract class MultiTermQuery ext
}
@Override
- protected BooleanQuery getTopLevelQuery() {
+ protected BooleanQuery getTopLevelBuilder() {
return new BooleanQuery(true);
}
-
+
+ @Override
+ protected Query build(BooleanQuery builder) {
+ return builder;
+ }
+
@Override
protected void addClause(BooleanQuery topLevel, Term term, int docCount, float boost, TermContext states) {
final TermQuery tq = new TermQuery(term, states);
@@ -201,7 +203,7 @@ public abstract class MultiTermQuery ext
* @see #setRewriteMethod
*/
public static final class TopTermsBlendedFreqScoringRewrite extends
- TopTermsRewrite<BooleanQuery> {
+ TopTermsRewrite<BlendedTermQuery.Builder> {
/**
* Create a TopTermsBlendedScoringBooleanQueryRewrite for at most
@@ -220,71 +222,22 @@ public abstract class MultiTermQuery ext
}
@Override
- protected BooleanQuery getTopLevelQuery() {
- return new BooleanQuery(true);
+ protected BlendedTermQuery.Builder getTopLevelBuilder() {
+ BlendedTermQuery.Builder builder = new BlendedTermQuery.Builder();
+ builder.setRewriteMethod(BlendedTermQuery.BOOLEAN_REWRITE);
+ return builder;
}
@Override
- protected void addClause(BooleanQuery topLevel, Term term, int docCount,
- float boost, TermContext states) {
- final TermQuery tq = new TermQuery(term, states);
- tq.setBoost(boost);
- topLevel.add(tq, BooleanClause.Occur.SHOULD);
+ protected Query build(BlendedTermQuery.Builder builder) {
+ return builder.build();
}
@Override
- void adjustScoreTerms(IndexReader reader, ScoreTerm[] scoreTerms) {
- if (scoreTerms.length <= 1) {
- return;
- }
- int maxDoc = reader.maxDoc();
- int maxDf = 0;
- long maxTtf = 0;
- for (ScoreTerm scoreTerm : scoreTerms) {
- TermContext ctx = scoreTerm.termState;
- int df = ctx.docFreq();
- maxDf = Math.max(df, maxDf);
- long ttf = ctx.totalTermFreq();
- maxTtf = ttf == -1 || maxTtf == -1 ? -1 : Math.max(ttf, maxTtf);
- }
-
- assert maxDf >= 0 : "DF must be >= 0";
- if (maxDf == 0) {
- return; // we are done that term doesn't exist at all
- }
- assert (maxTtf == -1) || (maxTtf >= maxDf);
-
- for (int i = 0; i < scoreTerms.length; i++) {
- TermContext ctx = scoreTerms[i].termState;
- ctx = adjustFrequencies(ctx, maxDf, maxTtf);
-
- ScoreTerm adjustedScoreTerm = new ScoreTerm(ctx);
- adjustedScoreTerm.boost = scoreTerms[i].boost;
- adjustedScoreTerm.bytes.copyBytes(scoreTerms[i].bytes);
- scoreTerms[i] = adjustedScoreTerm;
- }
- }
- }
-
- private static TermContext adjustFrequencies(TermContext ctx, int artificialDf,
- long artificialTtf) {
- List<LeafReaderContext> leaves = ctx.topReaderContext.leaves();
- final int len;
- if (leaves == null) {
- len = 1;
- } else {
- len = leaves.size();
- }
- TermContext newCtx = new TermContext(ctx.topReaderContext);
- for (int i = 0; i < len; ++i) {
- TermState termState = ctx.get(i);
- if (termState == null) {
- continue;
- }
- newCtx.register(termState, i);
+ protected void addClause(BlendedTermQuery.Builder topLevel, Term term, int docCount,
+ float boost, TermContext states) {
+ topLevel.add(term, boost, states);
}
- newCtx.accumulateStatistics(artificialDf, artificialTtf);
- return newCtx;
}
/**
@@ -316,11 +269,16 @@ public abstract class MultiTermQuery ext
}
@Override
- protected BooleanQuery getTopLevelQuery() {
+ protected BooleanQuery getTopLevelBuilder() {
return new BooleanQuery(true);
}
@Override
+ protected Query build(BooleanQuery builder) {
+ return builder;
+ }
+
+ @Override
protected void addClause(BooleanQuery topLevel, Term term, int docFreq, float boost, TermContext states) {
final Query q = new ConstantScoreQuery(new TermQuery(term, states));
q.setBoost(boost);
Modified: lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/search/ScoringRewrite.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/search/ScoringRewrite.java?rev=1692864&r1=1692863&r2=1692864&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/search/ScoringRewrite.java (original)
+++ lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/search/ScoringRewrite.java Mon Jul 27 10:34:42 2015
@@ -37,7 +37,7 @@ import org.apache.lucene.util.RamUsageEs
* the scores as computed by the query.
* <p>
* @lucene.internal Only public to be accessible by spans package. */
-public abstract class ScoringRewrite<Q extends Query> extends TermCollectingRewrite<Q> {
+public abstract class ScoringRewrite<B> extends TermCollectingRewrite<B> {
/** A rewrite method that first translates each term into
* {@link BooleanClause.Occur#SHOULD} clause in a
@@ -54,9 +54,14 @@ public abstract class ScoringRewrite<Q e
* @see MultiTermQuery#setRewriteMethod */
public final static ScoringRewrite<BooleanQuery> SCORING_BOOLEAN_REWRITE = new ScoringRewrite<BooleanQuery>() {
@Override
- protected BooleanQuery getTopLevelQuery() {
+ protected BooleanQuery getTopLevelBuilder() {
return new BooleanQuery(true);
}
+
+ @Override
+ protected Query build(BooleanQuery builder) {
+ return builder;
+ }
@Override
protected void addClause(BooleanQuery topLevel, Term term, int docCount,
@@ -86,7 +91,7 @@ public abstract class ScoringRewrite<Q e
public final static RewriteMethod CONSTANT_SCORE_BOOLEAN_REWRITE = new RewriteMethod() {
@Override
public Query rewrite(IndexReader reader, MultiTermQuery query) throws IOException {
- final BooleanQuery bq = SCORING_BOOLEAN_REWRITE.rewrite(reader, query);
+ final Query bq = SCORING_BOOLEAN_REWRITE.rewrite(reader, query);
// strip the scores off
final Query result = new ConstantScoreQuery(bq);
result.setBoost(query.getBoost());
@@ -99,8 +104,8 @@ public abstract class ScoringRewrite<Q e
protected abstract void checkMaxClauseCount(int count) throws IOException;
@Override
- public final Q rewrite(final IndexReader reader, final MultiTermQuery query) throws IOException {
- final Q result = getTopLevelQuery();
+ public final Query rewrite(final IndexReader reader, final MultiTermQuery query) throws IOException {
+ final B builder = getTopLevelBuilder();
final ParallelArraysTermCollector col = new ParallelArraysTermCollector();
collectTerms(reader, query, col);
@@ -113,10 +118,10 @@ public abstract class ScoringRewrite<Q e
final int pos = sort[i];
final Term term = new Term(query.getField(), col.terms.get(pos, new BytesRef()));
assert termStates[pos].hasOnlyRealTerms() == false || reader.docFreq(term) == termStates[pos].docFreq();
- addClause(result, term, termStates[pos].docFreq(), query.getBoost() * boost[pos], termStates[pos]);
+ addClause(builder, term, termStates[pos].docFreq(), query.getBoost() * boost[pos], termStates[pos]);
}
}
- return result;
+ return build(builder);
}
final class ParallelArraysTermCollector extends TermCollector {
Modified: lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/search/TermCollectingRewrite.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/search/TermCollectingRewrite.java?rev=1692864&r1=1692863&r2=1692864&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/search/TermCollectingRewrite.java (original)
+++ lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/search/TermCollectingRewrite.java Mon Jul 27 10:34:42 2015
@@ -20,7 +20,6 @@ package org.apache.lucene.search;
import java.io.IOException;
import org.apache.lucene.index.LeafReaderContext;
-import org.apache.lucene.index.Fields;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexReaderContext;
import org.apache.lucene.index.Term;
@@ -30,18 +29,21 @@ import org.apache.lucene.index.TermsEnum
import org.apache.lucene.util.AttributeSource;
import org.apache.lucene.util.BytesRef;
-abstract class TermCollectingRewrite<Q extends Query> extends MultiTermQuery.RewriteMethod {
+abstract class TermCollectingRewrite<B> extends MultiTermQuery.RewriteMethod {
- /** Return a suitable top-level Query for holding all expanded terms. */
- protected abstract Q getTopLevelQuery() throws IOException;
+ /** Return a suitable builder for the top-level Query for holding all expanded terms. */
+ protected abstract B getTopLevelBuilder() throws IOException;
+
+ /** Finalize the creation of the query from the builder. */
+ protected abstract Query build(B builder);
/** Add a MultiTermQuery term to the top-level query */
- protected final void addClause(Q topLevel, Term term, int docCount, float boost) throws IOException {
+ protected final void addClause(B topLevel, Term term, int docCount, float boost) throws IOException {
addClause(topLevel, term, docCount, boost, null);
}
- protected abstract void addClause(Q topLevel, Term term, int docCount, float boost, TermContext states) throws IOException;
+ protected abstract void addClause(B topLevel, Term term, int docCount, float boost, TermContext states) throws IOException;
final void collectTerms(IndexReader reader, MultiTermQuery query, TermCollector collector) throws IOException {
Modified: lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/search/TopTermsRewrite.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/search/TopTermsRewrite.java?rev=1692864&r1=1692863&r2=1692864&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/search/TopTermsRewrite.java (original)
+++ lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/search/TopTermsRewrite.java Mon Jul 27 10:34:42 2015
@@ -37,7 +37,7 @@ import org.apache.lucene.util.BytesRefBu
* via a priority queue.
* @lucene.internal Only public to be accessible by spans package.
*/
-public abstract class TopTermsRewrite<Q extends Query> extends TermCollectingRewrite<Q> {
+public abstract class TopTermsRewrite<B> extends TermCollectingRewrite<B> {
private final int size;
@@ -61,7 +61,7 @@ public abstract class TopTermsRewrite<Q
protected abstract int getMaxSize();
@Override
- public final Q rewrite(final IndexReader reader, final MultiTermQuery query) throws IOException {
+ public final Query rewrite(final IndexReader reader, final MultiTermQuery query) throws IOException {
final int maxSize = Math.min(size, getMaxSize());
final PriorityQueue<ScoreTerm> stQueue = new PriorityQueue<>();
collectTerms(reader, query, new TermCollector() {
@@ -154,21 +154,15 @@ public abstract class TopTermsRewrite<Q
}
});
- final Q q = getTopLevelQuery();
+ final B b = getTopLevelBuilder();
final ScoreTerm[] scoreTerms = stQueue.toArray(new ScoreTerm[stQueue.size()]);
ArrayUtil.timSort(scoreTerms, scoreTermSortByTermComp);
-
- adjustScoreTerms(reader, scoreTerms);
for (final ScoreTerm st : scoreTerms) {
final Term term = new Term(query.field, st.bytes.toBytesRef());
- addClause(q, term, st.termState.docFreq(), query.getBoost() * st.boost, st.termState); // add to query
+ addClause(b, term, st.termState.docFreq(), query.getBoost() * st.boost, st.termState); // add to query
}
- return q;
- }
-
- void adjustScoreTerms(IndexReader reader, ScoreTerm[] scoreTerms) {
- //no-op but allows subclasses the ability to tweak the score terms used in ranking e.g. balancing IDF.
+ return build(b);
}
@Override
Modified: lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/search/spans/SpanMultiTermQueryWrapper.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/search/spans/SpanMultiTermQueryWrapper.java?rev=1692864&r1=1692863&r2=1692864&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/search/spans/SpanMultiTermQueryWrapper.java (original)
+++ lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/search/spans/SpanMultiTermQueryWrapper.java Mon Jul 27 10:34:42 2015
@@ -160,11 +160,16 @@ public class SpanMultiTermQueryWrapper<Q
public final static SpanRewriteMethod SCORING_SPAN_QUERY_REWRITE = new SpanRewriteMethod() {
private final ScoringRewrite<SpanOrQuery> delegate = new ScoringRewrite<SpanOrQuery>() {
@Override
- protected SpanOrQuery getTopLevelQuery() {
+ protected SpanOrQuery getTopLevelBuilder() {
return new SpanOrQuery();
}
@Override
+ protected Query build(SpanOrQuery builder) {
+ return builder;
+ }
+
+ @Override
protected void checkMaxClauseCount(int count) {
// we accept all terms as SpanOrQuery has no limits
}
@@ -179,7 +184,7 @@ public class SpanMultiTermQueryWrapper<Q
@Override
public SpanQuery rewrite(IndexReader reader, MultiTermQuery query) throws IOException {
- return delegate.rewrite(reader, query);
+ return (SpanQuery) delegate.rewrite(reader, query);
}
};
@@ -209,11 +214,16 @@ public class SpanMultiTermQueryWrapper<Q
}
@Override
- protected SpanOrQuery getTopLevelQuery() {
+ protected SpanOrQuery getTopLevelBuilder() {
return new SpanOrQuery();
}
@Override
+ protected Query build(SpanOrQuery builder) {
+ return builder;
+ }
+
+ @Override
protected void addClause(SpanOrQuery topLevel, Term term, int docFreq, float boost, TermContext states) {
final SpanTermQuery q = new SpanTermQuery(term, states);
q.setBoost(boost);
@@ -229,7 +239,7 @@ public class SpanMultiTermQueryWrapper<Q
@Override
public SpanQuery rewrite(IndexReader reader, MultiTermQuery query) throws IOException {
- return delegate.rewrite(reader, query);
+ return (SpanQuery) delegate.rewrite(reader, query);
}
@Override
Modified: lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/util/ArrayUtil.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/util/ArrayUtil.java?rev=1692864&r1=1692863&r2=1692864&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/util/ArrayUtil.java (original)
+++ lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/util/ArrayUtil.java Mon Jul 27 10:34:42 2015
@@ -17,6 +17,7 @@ package org.apache.lucene.util;
* limitations under the License.
*/
+import java.util.Arrays;
import java.util.Collection;
import java.util.Comparator;
@@ -236,6 +237,14 @@ public final class ArrayUtil {
return currentSize;
}
+ public static <T> T[] grow(T[] array, int minSize) {
+ assert minSize >= 0: "size must be positive (got " + minSize + "): likely integer overflow?";
+ if (array.length < minSize) {
+ return Arrays.copyOf(array, oversize(minSize, RamUsageEstimator.NUM_BYTES_OBJECT_REF));
+ } else
+ return array;
+ }
+
public static short[] grow(short[] array, int minSize) {
assert minSize >= 0: "size must be positive (got " + minSize + "): likely integer overflow?";
if (array.length < minSize) {
Modified: lucene/dev/branches/branch_5x/lucene/queryparser/src/java/org/apache/lucene/queryparser/complexPhrase/ComplexPhraseQueryParser.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/queryparser/src/java/org/apache/lucene/queryparser/complexPhrase/ComplexPhraseQueryParser.java?rev=1692864&r1=1692863&r2=1692864&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/queryparser/src/java/org/apache/lucene/queryparser/complexPhrase/ComplexPhraseQueryParser.java (original)
+++ lucene/dev/branches/branch_5x/lucene/queryparser/src/java/org/apache/lucene/queryparser/complexPhrase/ComplexPhraseQueryParser.java Mon Jul 27 10:34:42 2015
@@ -29,6 +29,7 @@ import org.apache.lucene.queryparser.cla
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.BooleanClause;
import org.apache.lucene.search.BooleanQuery;
+import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.MultiTermQuery;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.TermQuery;
@@ -271,7 +272,7 @@ public class ComplexPhraseQueryParser ex
// HashSet bclauseterms=new HashSet();
Query qc = bclauses[i].getQuery();
// Rewrite this clause e.g one* becomes (one OR onerous)
- qc = qc.rewrite(reader);
+ qc = new IndexSearcher(reader).rewrite(qc);
if (bclauses[i].getOccur().equals(BooleanClause.Occur.MUST_NOT)) {
numNegatives++;
}