| Index: CHANGES.txt |
| =================================================================== |
| --- CHANGES.txt (revision 802424) |
| +++ CHANGES.txt (working copy) |
| @@ -53,16 +53,15 @@ |
| which was unlikely done, because there is no possibility to change |
| Lucene's FieldCache implementation. (Grant Ingersoll, Uwe Schindler) |
| |
| - 3. LUCENE-1630: Deprecate Weight in favor of QueryWeight: added |
| - matching methods to Searcher to take QueryWeight and deprecated |
| - those taking Weight. If you have a Weight implementation, you can |
| - turn it into a QueryWeight with QueryWeightWrapper (will be |
| - removed in 3.0). All of the Weight-based methods were implemented |
| - by calling the QueryWeight variants by wrapping the given Weight. |
| + 3. LUCENE-1630, LUCENE-1771: Weight, previously an interface, is now an abstract |
| + class. Some of the method signatures have changed, but it should be fairly |
| + easy to see what adjustments must be made existing code to match up |
| + with the new API. You can find more detail in the API Changes section. |
| + |
| Going forward Searchable will be kept for convenience only and may |
| be changed between minor releases without any deprecation |
| process. It is not recommended to implement it, but rather extend |
| - Searcher. (Shai Erera via Mike McCandless) |
| + Searcher. (Shai Erera, Hoss Man, Mark Miller via Mike McCandless) |
| |
| 4. LUCENE-1422, LUCENE-1693: The new TokenStream API (see below) using |
| Attributes has some backwards breaks in rare cases. |
| @@ -296,15 +295,14 @@ |
| NumericRangeQuery and its new indexing format for numeric or |
| date values. (Uwe Schindler) |
| |
| -24. LUCENE-1630: Deprecate Weight in favor of QueryWeight, which adds |
| +24. LUCENE-1630, LUCENE-1771: Weight is now abstract class, andd adds |
| a scorer(IndexReader, boolean /* scoreDocsInOrder */, boolean /* |
| - topScorer */) method instead of scorer(IndexReader) (now |
| - deprecated). The new method is used by IndexSearcher to mate |
| - between Collector and Scorer orderness of doc IDs. Some Scorers |
| - (like BooleanScorer) are much more efficient if out-of-order |
| - documents scoring is allowed by a Collector. Collector must now |
| - implement acceptsDocsOutOfOrder. If you write a Collector which |
| - does not care about doc ID orderness, it is recommended that you |
| + topScorer */) method instead of scorer(IndexReader). The new method |
| + is used by IndexSearcher to mate between Collector and Scorer orderness |
| + of doc IDs. Some Scorers (like BooleanScorer) are much more efficient |
| + if out-of-order documents scoring is allowed by a Collector. Collector |
| + must now implement acceptsDocsOutOfOrder. If you write a Collector |
| + which does not care about doc ID orderness, it is recommended that you |
| return true. QueryWeight has the scoresDocsOutOfOrder method, |
| which by default returns false. If you create a QueryWeight which |
| will score documents out of order if that's requested, you should |
| @@ -312,7 +310,8 @@ |
| BooleanQuery's setAllowDocsOutOfOrder and getAllowDocsOutOfOrder |
| as they are not needed anymore. BooleanQuery will now score docs |
| out of order when used with a Collector that can accept docs out |
| - of order. (Shai Erera via Mike McCandless) |
| + of order. Finally, Weight#explain now also takes a Searcher. |
| + (Shai Erera, Hoss Man, Mark Miller via Mike McCandless) |
| |
| 25. LUCENE-1466: Changed Tokenizer.input to be a CharStream; added |
| CharFilter and MappingCharFilter, which allows chaining & mapping |
| @@ -986,6 +985,8 @@ |
| |
| 24. LUCENE-1131: Added numDeletedDocs method to IndexReader (Otis Gospodnetic) |
| |
| +25. LUCENE-1771: |
| + |
| Bug fixes |
| |
| 1. LUCENE-1134: Fixed BooleanQuery.rewrite to only optimize a single |
| Index: contrib/remote/src/java/org/apache/lucene/search/RemoteSearchable.java |
| =================================================================== |
| --- contrib/remote/src/java/org/apache/lucene/search/RemoteSearchable.java (revision 801468) |
| +++ contrib/remote/src/java/org/apache/lucene/search/RemoteSearchable.java (working copy) |
| @@ -48,15 +48,10 @@ |
| /** @deprecated use {@link #search(Weight, Filter, Collector)} instead. */ |
| public void search(Weight weight, Filter filter, HitCollector results) |
| throws IOException { |
| - search(new QueryWeightWrapper(weight), filter, new HitCollectorWrapper(results)); |
| + local.search(weight, filter, results); |
| } |
| |
| public void search(Weight weight, Filter filter, Collector results) |
| - throws IOException { |
| - search(new QueryWeightWrapper(weight), filter, results); |
| - } |
| - |
| - public void search(QueryWeight weight, Filter filter, Collector results) |
| throws IOException { |
| local.search(weight, filter, results); |
| } |
| @@ -79,19 +74,10 @@ |
| } |
| |
| public TopDocs search(Weight weight, Filter filter, int n) throws IOException { |
| - return search(new QueryWeightWrapper(weight), filter, n); |
| - } |
| - |
| - public TopDocs search(QueryWeight weight, Filter filter, int n) throws IOException { |
| return local.search(weight, filter, n); |
| } |
| - |
| - public TopFieldDocs search(Weight weight, Filter filter, int n, Sort sort) |
| - throws IOException { |
| - return search(new QueryWeightWrapper(weight), filter, n, sort); |
| - } |
| |
| - public TopFieldDocs search(QueryWeight weight, Filter filter, int n, Sort sort) |
| + public TopFieldDocs search(Weight weight, Filter filter, int n, Sort sort) |
| throws IOException { |
| return local.search (weight, filter, n, sort); |
| } |
| @@ -109,10 +95,6 @@ |
| } |
| |
| public Explanation explain(Weight weight, int doc) throws IOException { |
| - return explain(new QueryWeightWrapper(weight), doc); |
| - } |
| - |
| - public Explanation explain(QueryWeight weight, int doc) throws IOException { |
| return local.explain(weight, doc); |
| } |
| |
| Index: src/java/org/apache/lucene/index/DocumentsWriter.java |
| =================================================================== |
| --- src/java/org/apache/lucene/index/DocumentsWriter.java (revision 801468) |
| +++ src/java/org/apache/lucene/index/DocumentsWriter.java (working copy) |
| @@ -32,9 +32,9 @@ |
| import org.apache.lucene.document.Document; |
| import org.apache.lucene.search.IndexSearcher; |
| import org.apache.lucene.search.Query; |
| -import org.apache.lucene.search.QueryWeight; |
| import org.apache.lucene.search.Scorer; |
| import org.apache.lucene.search.Similarity; |
| +import org.apache.lucene.search.Weight; |
| import org.apache.lucene.store.AlreadyClosedException; |
| import org.apache.lucene.store.Directory; |
| import org.apache.lucene.util.ArrayUtil; |
| @@ -1005,7 +1005,7 @@ |
| Entry entry = (Entry) iter.next(); |
| Query query = (Query) entry.getKey(); |
| int limit = ((Integer) entry.getValue()).intValue(); |
| - QueryWeight weight = query.queryWeight(searcher); |
| + Weight weight = query.weight(searcher); |
| Scorer scorer = weight.scorer(reader, true, false); |
| if (scorer != null) { |
| while(true) { |
| Index: src/java/org/apache/lucene/search/BooleanQuery.java |
| =================================================================== |
| --- src/java/org/apache/lucene/search/BooleanQuery.java (revision 802968) |
| +++ src/java/org/apache/lucene/search/BooleanQuery.java (working copy) |
| @@ -179,11 +179,9 @@ |
| * <p>NOTE: this API and implementation is subject to |
| * change suddenly in the next release.</p> |
| */ |
| - protected class BooleanWeight extends QueryWeight { |
| + protected class BooleanWeight extends Weight { |
| /** The Similarity implementation. */ |
| protected Similarity similarity; |
| - |
| - /** The Weights for our subqueries, in 1-1 correspondence with clauses */ |
| protected ArrayList weights; |
| |
| public BooleanWeight(Searcher searcher) |
| @@ -192,7 +190,7 @@ |
| weights = new ArrayList(clauses.size()); |
| for (int i = 0 ; i < clauses.size(); i++) { |
| BooleanClause c = (BooleanClause)clauses.get(i); |
| - weights.add(c.getQuery().createQueryWeight(searcher)); |
| + weights.add(c.getQuery().createWeight(searcher)); |
| } |
| } |
| |
| @@ -203,7 +201,7 @@ |
| float sum = 0.0f; |
| for (int i = 0 ; i < weights.size(); i++) { |
| BooleanClause c = (BooleanClause)clauses.get(i); |
| - QueryWeight w = (QueryWeight)weights.get(i); |
| + Weight w = (Weight)weights.get(i); |
| // call sumOfSquaredWeights for all clauses in case of side effects |
| float s = w.sumOfSquaredWeights(); // sum sub weights |
| if (!c.isProhibited()) |
| @@ -220,13 +218,13 @@ |
| public void normalize(float norm) { |
| norm *= getBoost(); // incorporate boost |
| for (Iterator iter = weights.iterator(); iter.hasNext();) { |
| - QueryWeight w = (QueryWeight) iter.next(); |
| + Weight w = (Weight) iter.next(); |
| // normalize all clauses, (even if prohibited in case of side affects) |
| w.normalize(norm); |
| } |
| } |
| |
| - public Explanation explain(IndexReader reader, int doc) |
| + public Explanation explain(Searcher searcher, IndexReader reader, int doc) |
| throws IOException { |
| final int minShouldMatch = |
| BooleanQuery.this.getMinimumNumberShouldMatch(); |
| @@ -238,12 +236,12 @@ |
| boolean fail = false; |
| int shouldMatchCount = 0; |
| for (Iterator wIter = weights.iterator(), cIter = clauses.iterator(); wIter.hasNext();) { |
| - QueryWeight w = (QueryWeight) wIter.next(); |
| + Weight w = (Weight) wIter.next(); |
| BooleanClause c = (BooleanClause) cIter.next(); |
| if (w.scorer(reader, true, true) == null) { |
| continue; |
| } |
| - Explanation e = w.explain(reader, doc); |
| + Explanation e = w.explain(searcher, reader, doc); |
| if (!c.isProhibited()) maxCoord++; |
| if (e.isMatch()) { |
| if (!c.isProhibited()) { |
| @@ -303,7 +301,7 @@ |
| List prohibited = new ArrayList(); |
| List optional = new ArrayList(); |
| for (Iterator wIter = weights.iterator(), cIter = clauses.iterator(); wIter.hasNext();) { |
| - QueryWeight w = (QueryWeight) wIter.next(); |
| + Weight w = (Weight) wIter.next(); |
| BooleanClause c = (BooleanClause) cIter.next(); |
| Scorer subScorer = w.scorer(reader, true, false); |
| if (subScorer == null) { |
| @@ -364,7 +362,7 @@ |
| * Whether hit docs may be collected out of docid order. |
| * |
| * @deprecated this will not be needed anymore, as |
| - * {@link QueryWeight#scoresDocsOutOfOrder()} is used. |
| + * {@link Weight#scoresDocsOutOfOrder()} is used. |
| */ |
| private static boolean allowDocsOutOfOrder = true; |
| |
| @@ -391,7 +389,7 @@ |
| * </p> |
| * |
| * @deprecated this is not needed anymore, as |
| - * {@link QueryWeight#scoresDocsOutOfOrder()} is used. |
| + * {@link Weight#scoresDocsOutOfOrder()} is used. |
| */ |
| public static void setAllowDocsOutOfOrder(boolean allow) { |
| allowDocsOutOfOrder = allow; |
| @@ -402,7 +400,7 @@ |
| * |
| * @see #setAllowDocsOutOfOrder(boolean) |
| * @deprecated this is not needed anymore, as |
| - * {@link QueryWeight#scoresDocsOutOfOrder()} is used. |
| + * {@link Weight#scoresDocsOutOfOrder()} is used. |
| */ |
| public static boolean getAllowDocsOutOfOrder() { |
| return allowDocsOutOfOrder; |
| @@ -422,7 +420,7 @@ |
| return getAllowDocsOutOfOrder(); |
| } |
| |
| - public QueryWeight createQueryWeight(Searcher searcher) throws IOException { |
| + public Weight createWeight(Searcher searcher) throws IOException { |
| return new BooleanWeight(searcher); |
| } |
| |
| Index: src/java/org/apache/lucene/search/ConstantScoreQuery.java |
| =================================================================== |
| --- src/java/org/apache/lucene/search/ConstantScoreQuery.java (revision 801468) |
| +++ src/java/org/apache/lucene/search/ConstantScoreQuery.java (working copy) |
| @@ -50,7 +50,7 @@ |
| // but may not be OK for highlighting |
| } |
| |
| - protected class ConstantWeight extends QueryWeight { |
| + protected class ConstantWeight extends Weight { |
| private Similarity similarity; |
| private float queryNorm; |
| private float queryWeight; |
| @@ -81,9 +81,9 @@ |
| return new ConstantScorer(similarity, reader, this); |
| } |
| |
| - public Explanation explain(IndexReader reader, int doc) throws IOException { |
| - |
| - ConstantScorer cs = (ConstantScorer) scorer(reader, true, false); |
| + public Explanation explain(Searcher searcher, IndexReader reader, int doc) throws IOException { |
| + |
| + ConstantScorer cs = new ConstantScorer(similarity, reader, this); |
| boolean exists = cs.docIdSetIterator.advance(doc) == doc; |
| |
| ComplexExplanation result = new ComplexExplanation(); |
| @@ -110,7 +110,7 @@ |
| final float theScore; |
| int doc = -1; |
| |
| - public ConstantScorer(Similarity similarity, IndexReader reader, QueryWeight w) throws IOException { |
| + public ConstantScorer(Similarity similarity, IndexReader reader, Weight w) throws IOException { |
| super(similarity); |
| theScore = w.getValue(); |
| DocIdSet docIdSet = filter.getDocIdSet(reader); |
| @@ -162,7 +162,7 @@ |
| } |
| } |
| |
| - public QueryWeight createQueryWeight(Searcher searcher) { |
| + public Weight createWeight(Searcher searcher) { |
| return new ConstantScoreQuery.ConstantWeight(searcher); |
| } |
| |
| Index: src/java/org/apache/lucene/search/DisjunctionMaxQuery.java |
| =================================================================== |
| --- src/java/org/apache/lucene/search/DisjunctionMaxQuery.java (revision 802968) |
| +++ src/java/org/apache/lucene/search/DisjunctionMaxQuery.java (working copy) |
| @@ -92,18 +92,18 @@ |
| * <p>NOTE: this API and implementation is subject to |
| * change suddenly in the next release.</p> |
| */ |
| - protected class DisjunctionMaxWeight extends QueryWeight { |
| + protected class DisjunctionMaxWeight extends Weight { |
| /** The Similarity implementation. */ |
| protected Similarity similarity; |
| |
| /** The Weights for our subqueries, in 1-1 correspondence with disjuncts */ |
| - protected ArrayList weights = new ArrayList(); |
| + protected ArrayList weights = new ArrayList(); // The Weight's for our subqueries, in 1-1 correspondence with disjuncts |
| |
| /* Construct the Weight for this Query searched by searcher. Recursively construct subquery weights. */ |
| public DisjunctionMaxWeight(Searcher searcher) throws IOException { |
| this.similarity = searcher.getSimilarity(); |
| for (Iterator iter = disjuncts.iterator(); iter.hasNext();) { |
| - weights.add(((Query) iter.next()).createQueryWeight(searcher)); |
| + weights.add(((Query) iter.next()).createWeight(searcher)); |
| } |
| } |
| |
| @@ -117,7 +117,7 @@ |
| public float sumOfSquaredWeights() throws IOException { |
| float max = 0.0f, sum = 0.0f; |
| for (Iterator iter = weights.iterator(); iter.hasNext();) { |
| - float sub = ((QueryWeight) iter.next()).sumOfSquaredWeights(); |
| + float sub = ((Weight) iter.next()).sumOfSquaredWeights(); |
| sum += sub; |
| max = Math.max(max, sub); |
| |
| @@ -130,7 +130,7 @@ |
| public void normalize(float norm) { |
| norm *= getBoost(); // Incorporate our boost |
| for (Iterator iter = weights.iterator(); iter.hasNext();) { |
| - ((QueryWeight) iter.next()).normalize(norm); |
| + ((Weight) iter.next()).normalize(norm); |
| } |
| } |
| |
| @@ -140,7 +140,7 @@ |
| Scorer[] scorers = new Scorer[weights.size()]; |
| int idx = 0; |
| for (Iterator iter = weights.iterator(); iter.hasNext();) { |
| - QueryWeight w = (QueryWeight) iter.next(); |
| + Weight w = (Weight) iter.next(); |
| Scorer subScorer = w.scorer(reader, true, false); |
| if (subScorer != null && subScorer.nextDoc() != DocIdSetIterator.NO_MORE_DOCS) { |
| scorers[idx++] = subScorer; |
| @@ -152,13 +152,13 @@ |
| } |
| |
| /* Explain the score we computed for doc */ |
| - public Explanation explain(IndexReader reader, int doc) throws IOException { |
| - if (disjuncts.size() == 1) return ((QueryWeight) weights.get(0)).explain(reader,doc); |
| + public Explanation explain(Searcher searcher, IndexReader reader, int doc) throws IOException { |
| + if (disjuncts.size() == 1) return ((Weight) weights.get(0)).explain(searcher, reader,doc); |
| ComplexExplanation result = new ComplexExplanation(); |
| float max = 0.0f, sum = 0.0f; |
| result.setDescription(tieBreakerMultiplier == 0.0f ? "max of:" : "max plus " + tieBreakerMultiplier + " times others of:"); |
| for (Iterator iter = weights.iterator(); iter.hasNext();) { |
| - Explanation e = ((QueryWeight) iter.next()).explain(reader, doc); |
| + Explanation e = ((Weight) iter.next()).explain(searcher, reader, doc); |
| if (e.isMatch()) { |
| result.setMatch(Boolean.TRUE); |
| result.addDetail(e); |
| @@ -172,8 +172,8 @@ |
| |
| } // end of DisjunctionMaxWeight inner class |
| |
| - /* Create the QueryWeight used to score us */ |
| - public QueryWeight createQueryWeight(Searcher searcher) throws IOException { |
| + /* Create the Weight used to score us */ |
| + public Weight createWeight(Searcher searcher) throws IOException { |
| return new DisjunctionMaxWeight(searcher); |
| } |
| |
| Index: src/java/org/apache/lucene/search/ExactPhraseScorer.java |
| =================================================================== |
| --- src/java/org/apache/lucene/search/ExactPhraseScorer.java (revision 801468) |
| +++ src/java/org/apache/lucene/search/ExactPhraseScorer.java (working copy) |
| @@ -22,7 +22,7 @@ |
| |
| final class ExactPhraseScorer extends PhraseScorer { |
| |
| - ExactPhraseScorer(QueryWeight weight, TermPositions[] tps, int[] offsets, |
| + ExactPhraseScorer(Weight weight, TermPositions[] tps, int[] offsets, |
| Similarity similarity, byte[] norms) { |
| super(weight, tps, offsets, similarity, norms); |
| } |
| Index: src/java/org/apache/lucene/search/FilteredQuery.java |
| =================================================================== |
| --- src/java/org/apache/lucene/search/FilteredQuery.java (revision 801468) |
| +++ src/java/org/apache/lucene/search/FilteredQuery.java (working copy) |
| @@ -58,10 +58,10 @@ |
| * Returns a Weight that applies the filter to the enclosed query's Weight. |
| * This is accomplished by overriding the Scorer returned by the Weight. |
| */ |
| - public QueryWeight createQueryWeight(final Searcher searcher) throws IOException { |
| - final QueryWeight weight = query.createQueryWeight (searcher); |
| + public Weight createWeight(final Searcher searcher) throws IOException { |
| + final Weight weight = query.createWeight (searcher); |
| final Similarity similarity = query.getSimilarity(searcher); |
| - return new QueryWeight() { |
| + return new Weight() { |
| private float value; |
| |
| // pass these methods through to enclosed query's weight |
| @@ -73,8 +73,8 @@ |
| weight.normalize(v); |
| value = weight.getValue() * getBoost(); |
| } |
| - public Explanation explain (IndexReader ir, int i) throws IOException { |
| - Explanation inner = weight.explain (ir, i); |
| + public Explanation explain (Searcher searcher, IndexReader ir, int i) throws IOException { |
| + Explanation inner = weight.explain (searcher, ir, i); |
| if (getBoost()!=1) { |
| Explanation preBoost = inner; |
| inner = new Explanation(inner.getValue()*getBoost(),"product of:"); |
| Index: src/java/org/apache/lucene/search/Hits.java |
| =================================================================== |
| --- src/java/org/apache/lucene/search/Hits.java (revision 801468) |
| +++ src/java/org/apache/lucene/search/Hits.java (working copy) |
| @@ -53,7 +53,7 @@ |
| * </pre> |
| */ |
| public final class Hits { |
| - private QueryWeight weight; |
| + private Weight weight; |
| private Searcher searcher; |
| private Filter filter = null; |
| private Sort sort = null; |
| @@ -73,7 +73,7 @@ |
| boolean debugCheckedForDeletions = false; // for test purposes. |
| |
| Hits(Searcher s, Query q, Filter f) throws IOException { |
| - weight = q.queryWeight(s); |
| + weight = q.weight(s); |
| searcher = s; |
| filter = f; |
| nDeletions = countDeletions(s); |
| @@ -82,7 +82,7 @@ |
| } |
| |
| Hits(Searcher s, Query q, Filter f, Sort o) throws IOException { |
| - weight = q.queryWeight(s); |
| + weight = q.weight(s); |
| searcher = s; |
| filter = f; |
| sort = o; |
| Index: src/java/org/apache/lucene/search/IndexSearcher.java |
| =================================================================== |
| --- src/java/org/apache/lucene/search/IndexSearcher.java (revision 801468) |
| +++ src/java/org/apache/lucene/search/IndexSearcher.java (working copy) |
| @@ -27,6 +27,7 @@ |
| import org.apache.lucene.index.IndexReader; |
| import org.apache.lucene.index.Term; |
| import org.apache.lucene.store.Directory; |
| +import org.apache.lucene.util.ReaderUtil; |
| |
| /** Implements search over a single IndexReader. |
| * |
| @@ -121,15 +122,7 @@ |
| } |
| |
| protected void gatherSubReaders(List allSubReaders, IndexReader r) { |
| - IndexReader[] subReaders = r.getSequentialSubReaders(); |
| - if (subReaders == null) { |
| - // Add the reader itself, and do not recurse |
| - allSubReaders.add(r); |
| - } else { |
| - for (int i = 0; i < subReaders.length; i++) { |
| - gatherSubReaders(allSubReaders, subReaders[i]); |
| - } |
| - } |
| + ReaderUtil.gatherSubReaders(allSubReaders, r); |
| } |
| |
| /** Return the {@link IndexReader} this searches. */ |
| @@ -169,7 +162,7 @@ |
| } |
| |
| // inherit javadoc |
| - public TopDocs search(QueryWeight weight, Filter filter, final int nDocs) throws IOException { |
| + public TopDocs search(Weight weight, Filter filter, final int nDocs) throws IOException { |
| |
| if (nDocs <= 0) { |
| throw new IllegalArgumentException("nDocs must be > 0"); |
| @@ -180,22 +173,22 @@ |
| return collector.topDocs(); |
| } |
| |
| - public TopFieldDocs search(QueryWeight weight, Filter filter, |
| + public TopFieldDocs search(Weight weight, Filter filter, |
| final int nDocs, Sort sort) throws IOException { |
| return search(weight, filter, nDocs, sort, true); |
| } |
| |
| /** |
| - * Just like {@link #search(QueryWeight, Filter, int, Sort)}, but you choose |
| + * Just like {@link #search(Weight, Filter, int, Sort)}, but you choose |
| * whether or not the fields in the returned {@link FieldDoc} instances should |
| * be set by specifying fillFields.<br> |
| * <b>NOTE:</b> currently, this method tracks document scores and sets them in |
| * the returned {@link FieldDoc}, however in 3.0 it will move to not track |
| * document scores. If document scores tracking is still needed, you can use |
| - * {@link #search(QueryWeight, Filter, Collector)} and pass in a |
| + * {@link #search(Weight, Filter, Collector)} and pass in a |
| * {@link TopFieldCollector} instance. |
| */ |
| - public TopFieldDocs search(QueryWeight weight, Filter filter, final int nDocs, |
| + public TopFieldDocs search(Weight weight, Filter filter, final int nDocs, |
| Sort sort, boolean fillFields) |
| throws IOException { |
| |
| @@ -242,7 +235,7 @@ |
| return (TopFieldDocs) collector.topDocs(); |
| } |
| |
| - public void search(QueryWeight weight, Filter filter, Collector collector) |
| + public void search(Weight weight, Filter filter, Collector collector) |
| throws IOException { |
| |
| if (filter == null) { |
| @@ -261,7 +254,7 @@ |
| } |
| } |
| |
| - private void searchWithFilter(IndexReader reader, QueryWeight weight, |
| + private void searchWithFilter(IndexReader reader, Weight weight, |
| final Filter filter, final Collector collector) throws IOException { |
| |
| assert filter != null; |
| @@ -316,8 +309,11 @@ |
| return query; |
| } |
| |
| - public Explanation explain(QueryWeight weight, int doc) throws IOException { |
| - return weight.explain(reader, doc); |
| + public Explanation explain(Weight weight, int doc) throws IOException { |
| + int n = ReaderUtil.subIndex(doc, docStarts); |
| + int deBasedDoc = doc - docStarts[n]; |
| + |
| + return weight.explain(this, subReaders[n], deBasedDoc); |
| } |
| |
| private boolean fieldSortDoTrackScores; |
| Index: src/java/org/apache/lucene/search/MatchAllDocsQuery.java |
| =================================================================== |
| --- src/java/org/apache/lucene/search/MatchAllDocsQuery.java (revision 801468) |
| +++ src/java/org/apache/lucene/search/MatchAllDocsQuery.java (working copy) |
| @@ -49,7 +49,7 @@ |
| final byte[] norms; |
| private int doc = -1; |
| |
| - MatchAllScorer(IndexReader reader, Similarity similarity, QueryWeight w, |
| + MatchAllScorer(IndexReader reader, Similarity similarity, Weight w, |
| byte[] norms) throws IOException { |
| super(similarity); |
| this.termDocs = reader.termDocs(null); |
| @@ -93,7 +93,7 @@ |
| } |
| } |
| |
| - private class MatchAllDocsWeight extends QueryWeight { |
| + private class MatchAllDocsWeight extends Weight { |
| private Similarity similarity; |
| private float queryWeight; |
| private float queryNorm; |
| @@ -129,7 +129,7 @@ |
| normsField != null ? reader.norms(normsField) : null); |
| } |
| |
| - public Explanation explain(IndexReader reader, int doc) { |
| + public Explanation explain(Searcher searcher, IndexReader reader, int doc) { |
| // explain query weight |
| Explanation queryExpl = new ComplexExplanation |
| (true, getValue(), "MatchAllDocsQuery, product of:"); |
| @@ -142,7 +142,7 @@ |
| } |
| } |
| |
| - public QueryWeight createQueryWeight(Searcher searcher) { |
| + public Weight createWeight(Searcher searcher) { |
| return new MatchAllDocsWeight(searcher); |
| } |
| |
| Index: src/java/org/apache/lucene/search/MultiPhraseQuery.java |
| =================================================================== |
| --- src/java/org/apache/lucene/search/MultiPhraseQuery.java (revision 801468) |
| +++ src/java/org/apache/lucene/search/MultiPhraseQuery.java (working copy) |
| @@ -123,7 +123,7 @@ |
| } |
| |
| |
| - private class MultiPhraseWeight extends QueryWeight { |
| + private class MultiPhraseWeight extends Weight { |
| private Similarity similarity; |
| private float value; |
| private float idf; |
| @@ -186,7 +186,7 @@ |
| slop, reader.norms(field)); |
| } |
| |
| - public Explanation explain(IndexReader reader, int doc) |
| + public Explanation explain(Searcher searcher, IndexReader reader, int doc) |
| throws IOException { |
| ComplexExplanation result = new ComplexExplanation(); |
| result.setDescription("weight("+getQuery()+" in "+doc+"), product of:"); |
| @@ -265,7 +265,7 @@ |
| } |
| } |
| |
| - public QueryWeight createQueryWeight(Searcher searcher) throws IOException { |
| + public Weight createWeight(Searcher searcher) throws IOException { |
| return new MultiPhraseWeight(searcher); |
| } |
| |
| Index: src/java/org/apache/lucene/search/MultiSearcher.java |
| =================================================================== |
| --- src/java/org/apache/lucene/search/MultiSearcher.java (revision 801468) |
| +++ src/java/org/apache/lucene/search/MultiSearcher.java (working copy) |
| @@ -22,6 +22,7 @@ |
| import org.apache.lucene.index.CorruptIndexException; |
| import org.apache.lucene.index.Term; |
| import org.apache.lucene.index.IndexReader; |
| +import org.apache.lucene.util.ReaderUtil; |
| |
| import java.io.IOException; |
| import java.util.HashMap; |
| @@ -94,19 +95,19 @@ |
| throw new UnsupportedOperationException(); |
| } |
| |
| - public Explanation explain(QueryWeight weight,int doc) { |
| + public Explanation explain(Weight weight,int doc) { |
| throw new UnsupportedOperationException(); |
| } |
| |
| - public void search(QueryWeight weight, Filter filter, Collector results) { |
| + public void search(Weight weight, Filter filter, Collector results) { |
| throw new UnsupportedOperationException(); |
| } |
| |
| - public TopDocs search(QueryWeight weight,Filter filter,int n) { |
| + public TopDocs search(Weight weight,Filter filter,int n) { |
| throw new UnsupportedOperationException(); |
| } |
| |
| - public TopFieldDocs search(QueryWeight weight,Filter filter,int n,Sort sort) { |
| + public TopFieldDocs search(Weight weight,Filter filter,int n,Sort sort) { |
| throw new UnsupportedOperationException(); |
| } |
| } |
| @@ -164,25 +165,7 @@ |
| /** Returns index of the searcher for document <code>n</code> in the array |
| * used to construct this searcher. */ |
| public int subSearcher(int n) { // find searcher for doc n: |
| - // replace w/ call to Arrays.binarySearch in Java 1.2 |
| - int lo = 0; // search starts array |
| - int hi = searchables.length - 1; // for first element less |
| - // than n, return its index |
| - while (hi >= lo) { |
| - int mid = (lo + hi) >>> 1; |
| - int midValue = starts[mid]; |
| - if (n < midValue) |
| - hi = mid - 1; |
| - else if (n > midValue) |
| - lo = mid + 1; |
| - else { // found a match |
| - while (mid+1 < searchables.length && starts[mid+1] == midValue) { |
| - mid++; // scan to last match |
| - } |
| - return mid; |
| - } |
| - } |
| - return hi; |
| + return ReaderUtil.subIndex(n, starts); |
| } |
| |
| /** Returns the document number of document <code>n</code> within its |
| @@ -195,7 +178,7 @@ |
| return maxDoc; |
| } |
| |
| - public TopDocs search(QueryWeight weight, Filter filter, int nDocs) |
| + public TopDocs search(Weight weight, Filter filter, int nDocs) |
| throws IOException { |
| |
| HitQueue hq = new HitQueue(nDocs, false); |
| @@ -222,7 +205,7 @@ |
| return new TopDocs(totalHits, scoreDocs, maxScore); |
| } |
| |
| - public TopFieldDocs search (QueryWeight weight, Filter filter, int n, Sort sort) |
| + public TopFieldDocs search (Weight weight, Filter filter, int n, Sort sort) |
| throws IOException { |
| FieldDocSortedHitQueue hq = null; |
| int totalHits = 0; |
| @@ -264,7 +247,7 @@ |
| } |
| |
| // inherit javadoc |
| - public void search(QueryWeight weight, Filter filter, final Collector collector) |
| + public void search(Weight weight, Filter filter, final Collector collector) |
| throws IOException { |
| for (int i = 0; i < searchables.length; i++) { |
| |
| @@ -297,7 +280,7 @@ |
| return queries[0].combine(queries); |
| } |
| |
| - public Explanation explain(QueryWeight weight, int doc) throws IOException { |
| + public Explanation explain(Weight weight, int doc) throws IOException { |
| int i = subSearcher(doc); // find searcher index |
| return searchables[i].explain(weight, doc - starts[i]); // dispatch to searcher |
| } |
| @@ -317,7 +300,7 @@ |
| * |
| * @return rewritten queries |
| */ |
| - protected QueryWeight createQueryWeight(Query original) throws IOException { |
| + protected Weight createWeight(Query original) throws IOException { |
| // step 1 |
| Query rewrittenQuery = rewrite(original); |
| |
| @@ -345,7 +328,7 @@ |
| int numDocs = maxDoc(); |
| CachedDfSource cacheSim = new CachedDfSource(dfMap, numDocs, getSimilarity()); |
| |
| - return rewrittenQuery.queryWeight(cacheSim); |
| + return rewrittenQuery.weight(cacheSim); |
| } |
| |
| } |
| Index: src/java/org/apache/lucene/search/ParallelMultiSearcher.java |
| =================================================================== |
| --- src/java/org/apache/lucene/search/ParallelMultiSearcher.java (revision 801468) |
| +++ src/java/org/apache/lucene/search/ParallelMultiSearcher.java (working copy) |
| @@ -52,7 +52,7 @@ |
| * Searchable, waits for each search to complete and merge |
| * the results back together. |
| */ |
| - public TopDocs search(QueryWeight weight, Filter filter, int nDocs) |
| + public TopDocs search(Weight weight, Filter filter, int nDocs) |
| throws IOException { |
| HitQueue hq = new HitQueue(nDocs, false); |
| int totalHits = 0; |
| @@ -97,7 +97,7 @@ |
| * Searchable, waits for each search to complete and merges |
| * the results back together. |
| */ |
| - public TopFieldDocs search(QueryWeight weight, Filter filter, int nDocs, Sort sort) |
| + public TopFieldDocs search(Weight weight, Filter filter, int nDocs, Sort sort) |
| throws IOException { |
| // don't specify the fields - we'll wait to do this until we get results |
| FieldDocSortedHitQueue hq = new FieldDocSortedHitQueue (null, nDocs); |
| @@ -153,7 +153,7 @@ |
| * |
| * @todo parallelize this one too |
| */ |
| - public void search(QueryWeight weight, Filter filter, final Collector collector) |
| + public void search(Weight weight, Filter filter, final Collector collector) |
| throws IOException { |
| for (int i = 0; i < searchables.length; i++) { |
| |
| @@ -194,7 +194,7 @@ |
| class MultiSearcherThread extends Thread { |
| |
| private Searchable searchable; |
| - private QueryWeight weight; |
| + private Weight weight; |
| private Filter filter; |
| private int nDocs; |
| private TopDocs docs; |
| @@ -204,7 +204,7 @@ |
| private IOException ioe; |
| private Sort sort; |
| |
| - public MultiSearcherThread(Searchable searchable, QueryWeight weight, Filter filter, |
| + public MultiSearcherThread(Searchable searchable, Weight weight, Filter filter, |
| int nDocs, HitQueue hq, int i, int[] starts, String name) { |
| super(name); |
| this.searchable = searchable; |
| @@ -216,7 +216,7 @@ |
| this.starts = starts; |
| } |
| |
| - public MultiSearcherThread(Searchable searchable, QueryWeight weight, |
| + public MultiSearcherThread(Searchable searchable, Weight weight, |
| Filter filter, int nDocs, FieldDocSortedHitQueue hq, Sort sort, int i, |
| int[] starts, String name) { |
| super(name); |
| Index: src/java/org/apache/lucene/search/PhraseQuery.java |
| =================================================================== |
| --- src/java/org/apache/lucene/search/PhraseQuery.java (revision 801468) |
| +++ src/java/org/apache/lucene/search/PhraseQuery.java (working copy) |
| @@ -106,7 +106,7 @@ |
| return result; |
| } |
| |
| - private class PhraseWeight extends QueryWeight { |
| + private class PhraseWeight extends Weight { |
| private Similarity similarity; |
| private float value; |
| private float idf; |
| @@ -158,7 +158,7 @@ |
| |
| } |
| |
| - public Explanation explain(IndexReader reader, int doc) |
| + public Explanation explain(Searcher searcher, IndexReader reader, int doc) |
| throws IOException { |
| |
| Explanation result = new Explanation(); |
| @@ -241,12 +241,12 @@ |
| } |
| } |
| |
| - public QueryWeight createQueryWeight(Searcher searcher) throws IOException { |
| + public Weight createWeight(Searcher searcher) throws IOException { |
| if (terms.size() == 1) { // optimize one-term case |
| Term term = (Term)terms.get(0); |
| Query termQuery = new TermQuery(term); |
| termQuery.setBoost(getBoost()); |
| - return termQuery.createQueryWeight(searcher); |
| + return termQuery.createWeight(searcher); |
| } |
| return new PhraseWeight(searcher); |
| } |
| Index: src/java/org/apache/lucene/search/PhraseScorer.java |
| =================================================================== |
| --- src/java/org/apache/lucene/search/PhraseScorer.java (revision 801468) |
| +++ src/java/org/apache/lucene/search/PhraseScorer.java (working copy) |
| @@ -32,7 +32,7 @@ |
| * means a match. |
| */ |
| abstract class PhraseScorer extends Scorer { |
| - private QueryWeight weight; |
| + private Weight weight; |
| protected byte[] norms; |
| protected float value; |
| |
| @@ -43,7 +43,7 @@ |
| |
| private float freq; //prhase frequency in current doc as computed by phraseFreq(). |
| |
| - PhraseScorer(QueryWeight weight, TermPositions[] tps, int[] offsets, |
| + PhraseScorer(Weight weight, TermPositions[] tps, int[] offsets, |
| Similarity similarity, byte[] norms) { |
| super(similarity); |
| this.norms = norms; |
| Index: src/java/org/apache/lucene/search/Query.java |
| =================================================================== |
| --- src/java/org/apache/lucene/search/Query.java (revision 801468) |
| +++ src/java/org/apache/lucene/search/Query.java (working copy) |
| @@ -86,45 +86,17 @@ |
| * |
| * <p> |
| * Only implemented by primitive queries, which re-write to themselves. |
| - * @deprecated use {@link #createQueryWeight(Searcher)} instead. |
| */ |
| protected Weight createWeight(Searcher searcher) throws IOException { |
| throw new UnsupportedOperationException(); |
| } |
| |
| /** |
| - * Expert: Constructs an appropriate {@link QueryWeight} implementation for |
| - * this query. |
| - * <p> |
| - * Only implemented by primitive queries, which re-write to themselves. |
| - * <p> |
| - * <b>NOTE:</b> in 3.0 this method will throw |
| - * {@link UnsupportedOperationException}. It is implemented now by calling |
| - * {@link #createWeight(Searcher)} for backwards compatibility, for |
| - * {@link Query} implementations that did not override it yet (but did |
| - * override {@link #createWeight(Searcher)}). |
| - */ |
| - // TODO (3.0): change to throw UnsupportedOperationException. |
| - public QueryWeight createQueryWeight(Searcher searcher) throws IOException { |
| - return new QueryWeightWrapper(createWeight(searcher)); |
| - } |
| - |
| - /** |
| * Expert: Constructs and initializes a Weight for a top-level query. |
| - * |
| - * @deprecated use {@link #queryWeight(Searcher)} instead. |
| */ |
| public Weight weight(Searcher searcher) throws IOException { |
| - return queryWeight(searcher); |
| - } |
| - |
| - /** |
| - * Expert: Constructs and initializes a {@link QueryWeight} for a top-level |
| - * query. |
| - */ |
| - public QueryWeight queryWeight(Searcher searcher) throws IOException { |
| Query query = searcher.rewrite(this); |
| - QueryWeight weight = query.createQueryWeight(searcher); |
| + Weight weight = query.createWeight(searcher); |
| float sum = weight.sumOfSquaredWeights(); |
| float norm = getSimilarity(searcher).queryNorm(sum); |
| weight.normalize(norm); |
| Index: src/java/org/apache/lucene/search/QueryWeight.java |
| =================================================================== |
| --- src/java/org/apache/lucene/search/QueryWeight.java (revision 801468) |
| +++ src/java/org/apache/lucene/search/QueryWeight.java (working copy) |
| @@ -1,122 +0,0 @@ |
| -package org.apache.lucene.search; |
| - |
| -/** |
| - * Licensed to the Apache Software Foundation (ASF) under one or more |
| - * contributor license agreements. See the NOTICE file distributed with |
| - * this work for additional information regarding copyright ownership. |
| - * The ASF licenses this file to You under the Apache License, Version 2.0 |
| - * (the "License"); you may not use this file except in compliance with |
| - * the License. You may obtain a copy of the License at |
| - * |
| - * http://www.apache.org/licenses/LICENSE-2.0 |
| - * |
| - * Unless required by applicable law or agreed to in writing, software |
| - * distributed under the License is distributed on an "AS IS" BASIS, |
| - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| - * See the License for the specific language governing permissions and |
| - * limitations under the License. |
| - */ |
| - |
| -import java.io.IOException; |
| -import java.io.Serializable; |
| - |
| -import org.apache.lucene.index.IndexReader; |
| - |
| -/** |
| - * Expert: Calculate query weights and build query scorers. |
| - * <p> |
| - * The purpose of {@link QueryWeight} is to ensure searching does not |
| - * modify a {@link Query}, so that a {@link Query} instance can be reused. <br> |
| - * {@link Searcher} dependent state of the query should reside in the |
| - * {@link QueryWeight}. <br> |
| - * {@link IndexReader} dependent state should reside in the {@link Scorer}. |
| - * <p> |
| - * A <code>QueryWeight</code> is used in the following way: |
| - * <ol> |
| - * <li>A <code>QueryWeight</code> is constructed by a top-level query, given a |
| - * <code>Searcher</code> ({@link Query#createWeight(Searcher)}). |
| - * <li>The {@link #sumOfSquaredWeights()} method is called on the |
| - * <code>QueryWeight</code> to compute the query normalization factor |
| - * {@link Similarity#queryNorm(float)} of the query clauses contained in the |
| - * query. |
| - * <li>The query normalization factor is passed to {@link #normalize(float)}. At |
| - * this point the weighting is complete. |
| - * <li>A <code>Scorer</code> is constructed by {@link #scorer(IndexReader)}. |
| - * </ol> |
| - * |
| - * @since 2.9 |
| - */ |
| -public abstract class QueryWeight implements Weight, Serializable { |
| - |
| - /** An explanation of the score computation for the named document. */ |
| - public abstract Explanation explain(IndexReader reader, int doc) throws IOException; |
| - |
| - /** The query that this concerns. */ |
| - public abstract Query getQuery(); |
| - |
| - /** The weight for this query. */ |
| - public abstract float getValue(); |
| - |
| - /** Assigns the query normalization factor to this. */ |
| - public abstract void normalize(float norm); |
| - |
| - /** |
| - * @deprecated use {@link #scorer(IndexReader, boolean, boolean)} instead. |
| - * Currently this defaults to asking a scorer in out-of-order |
| - * mode, but will be removed in 3.0. |
| - */ |
| - public Scorer scorer(IndexReader reader) throws IOException { |
| - return scorer(reader, true, false); |
| - } |
| - |
| - /** |
| - * Returns a {@link Scorer} which scores documents in/out-of order according |
| - * to <code>scoreDocsInOrder</code>. |
| - * <p> |
| - * <b>NOTE:</b> even if <code>scoreDocsInOrder</code> is false, it is |
| - * recommended to check whether the returned <code>Scorer</code> indeed scores |
| - * documents out of order (i.e., call {@link #scoresDocsOutOfOrder()}), as |
| - * some <code>Scorer</code> implementations will always return documents |
| - * in-order.<br> |
| - * <b>NOTE:</b> null can be returned if no documents will be scored by this |
| - * query. |
| - * |
| - * @param reader |
| - * the {@link IndexReader} for which to return the {@link Scorer}. |
| - * @param scoreDocsInOrder |
| - * specifies whether in-order scoring of documents is required. Note |
| - * that if set to false (i.e., out-of-order scoring is required), |
| - * this method can return whatever scoring mode it supports, as every |
| - * in-order scorer is also an out-of-order one. However, an |
| - * out-of-order scorer may not support {@link Scorer#nextDoc()} |
| - * and/or {@link Scorer#advance(int)}, therfore it is recommended to |
| - * request an in-order scorer if use of these methods is required. |
| - * @param topScorer |
| - * specifies whether the returned {@link Scorer} will be used as a |
| - * top scorer or as in iterator. I.e., if true, |
| - * {@link Scorer#score(Collector)} will be called; if false, |
| - * {@link Scorer#nextDoc()} and/or {@link Scorer#advance(int)} will |
| - * be called. |
| - * @return a {@link Scorer} which scores documents in/out-of order. |
| - * @throws IOException |
| - */ |
| - public abstract Scorer scorer(IndexReader reader, boolean scoreDocsInOrder, |
| - boolean topScorer) throws IOException; |
| - |
| - /** The sum of squared weights of contained query clauses. */ |
| - public abstract float sumOfSquaredWeights() throws IOException; |
| - |
| - /** |
| - * Returns true iff this implementation scores docs only out of order. This |
| - * method is used in conjunction with {@link Collector}'s |
| - * {@link Collector#acceptsDocsOutOfOrder() acceptsDocsOutOfOrder} and |
| - * {@link #scorer(org.apache.lucene.index.IndexReader, boolean, boolean)} to |
| - * create a matching {@link Scorer} instance for a given {@link Collector}, or |
| - * vice versa. |
| - * <p> |
| - * <b>NOTE:</b> the default implementation returns <code>false</code>, i.e. |
| - * the <code>Scorer</code> scores documents in-order. |
| - */ |
| - public boolean scoresDocsOutOfOrder() { return false; } |
| - |
| -} |
| Index: src/java/org/apache/lucene/search/QueryWeightWrapper.java |
| =================================================================== |
| --- src/java/org/apache/lucene/search/QueryWeightWrapper.java (revision 801468) |
| +++ src/java/org/apache/lucene/search/QueryWeightWrapper.java (working copy) |
| @@ -1,68 +0,0 @@ |
| -package org.apache.lucene.search; |
| - |
| -/** |
| - * Licensed to the Apache Software Foundation (ASF) under one or more |
| - * contributor license agreements. See the NOTICE file distributed with |
| - * this work for additional information regarding copyright ownership. |
| - * The ASF licenses this file to You under the Apache License, Version 2.0 |
| - * (the "License"); you may not use this file except in compliance with |
| - * the License. You may obtain a copy of the License at |
| - * |
| - * http://www.apache.org/licenses/LICENSE-2.0 |
| - * |
| - * Unless required by applicable law or agreed to in writing, software |
| - * distributed under the License is distributed on an "AS IS" BASIS, |
| - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| - * See the License for the specific language governing permissions and |
| - * limitations under the License. |
| - */ |
| - |
| -import java.io.IOException; |
| - |
| -import org.apache.lucene.index.IndexReader; |
| - |
| -/** |
| - * A wrapper class for the deprecated {@link Weight}. |
| - * Please re-implement any custom Weight classes as {@link |
| - * QueryWeight} instead. |
| - * |
| - * @deprecated will be removed in 3.0 |
| - */ |
| -public class QueryWeightWrapper extends QueryWeight { |
| - |
| - private Weight weight; |
| - |
| - public QueryWeightWrapper(Weight weight) { |
| - this.weight = weight; |
| - } |
| - |
| - public Explanation explain(IndexReader reader, int doc) throws IOException { |
| - return weight.explain(reader, doc); |
| - } |
| - |
| - public Query getQuery() { |
| - return weight.getQuery(); |
| - } |
| - |
| - public float getValue() { |
| - return weight.getValue(); |
| - } |
| - |
| - public void normalize(float norm) { |
| - weight.normalize(norm); |
| - } |
| - |
| - public Scorer scorer(IndexReader reader, boolean scoreDocsInOrder, boolean topScorer) |
| - throws IOException { |
| - return weight.scorer(reader); |
| - } |
| - |
| - public float sumOfSquaredWeights() throws IOException { |
| - return weight.sumOfSquaredWeights(); |
| - } |
| - |
| - public Scorer scorer(IndexReader reader) throws IOException { |
| - return weight.scorer(reader); |
| - } |
| - |
| -} |
| Index: src/java/org/apache/lucene/search/QueryWrapperFilter.java |
| =================================================================== |
| --- src/java/org/apache/lucene/search/QueryWrapperFilter.java (revision 801468) |
| +++ src/java/org/apache/lucene/search/QueryWrapperFilter.java (working copy) |
| @@ -69,7 +69,7 @@ |
| } |
| |
| public DocIdSet getDocIdSet(final IndexReader reader) throws IOException { |
| - final QueryWeight weight = query.queryWeight(new IndexSearcher(reader)); |
| + final Weight weight = query.createWeight(new IndexSearcher(reader)); |
| return new DocIdSet() { |
| public DocIdSetIterator iterator() throws IOException { |
| return weight.scorer(reader, true, false); |
| Index: src/java/org/apache/lucene/search/Scorer.java |
| =================================================================== |
| --- src/java/org/apache/lucene/search/Scorer.java (revision 801468) |
| +++ src/java/org/apache/lucene/search/Scorer.java (working copy) |
| @@ -127,7 +127,7 @@ |
| * @param doc The document number for the explanation. |
| * |
| * @deprecated Please use {@link IndexSearcher#explain} |
| - * or {@link QueryWeight#explain} instead. |
| + * or {@link Weight#explain} instead. |
| */ |
| public abstract Explanation explain(int doc) throws IOException; |
| |
| Index: src/java/org/apache/lucene/search/Searchable.java |
| =================================================================== |
| --- src/java/org/apache/lucene/search/Searchable.java (revision 801468) |
| +++ src/java/org/apache/lucene/search/Searchable.java (working copy) |
| @@ -58,7 +58,7 @@ |
| * @param filter if non-null, used to permit documents to be collected. |
| * @param results to receive hits |
| * @throws BooleanQuery.TooManyClauses |
| - * @deprecated use {@link #search(QueryWeight, Filter, Collector)} instead. |
| + * @deprecated use {@link #search(Weight, Filter, Collector)} instead. |
| */ |
| void search(Weight weight, Filter filter, HitCollector results) |
| throws IOException; |
| @@ -82,33 +82,9 @@ |
| * @param collector |
| * to receive hits |
| * @throws BooleanQuery.TooManyClauses |
| - * |
| - * @deprecated use {@link #search(QueryWeight, Filter, Collector)} instead. |
| */ |
| void search(Weight weight, Filter filter, Collector collector) throws IOException; |
| |
| - /** |
| - * Lower-level search API. |
| - * |
| - * <p> |
| - * {@link Collector#collect(int)} is called for every document. <br> |
| - * Collector-based access to remote indexes is discouraged. |
| - * |
| - * <p> |
| - * Applications should only use this if they need <i>all</i> of the matching |
| - * documents. The high-level search API ({@link Searcher#search(Query)}) is |
| - * usually more efficient, as it skips non-high-scoring hits. |
| - * |
| - * @param weight |
| - * to match documents |
| - * @param filter |
| - * if non-null, used to permit documents to be collected. |
| - * @param collector |
| - * to receive hits |
| - * @throws BooleanQuery.TooManyClauses |
| - */ |
| - void search(QueryWeight weight, Filter filter, Collector collector) throws IOException; |
| - |
| /** Frees resources associated with this Searcher. |
| * Be careful not to call this method while you are still using objects |
| * like {@link Hits}. |
| @@ -141,20 +117,9 @@ |
| * <p>Applications should usually call {@link Searcher#search(Query)} or |
| * {@link Searcher#search(Query,Filter)} instead. |
| * @throws BooleanQuery.TooManyClauses |
| - * @deprecated use {@link #search(QueryWeight, Filter, int)} instead. |
| + * @deprecated use {@link #search(Weight, Filter, int)} instead. |
| */ |
| TopDocs search(Weight weight, Filter filter, int n) throws IOException; |
| - |
| - /** Expert: Low-level search implementation. Finds the top <code>n</code> |
| - * hits for <code>query</code>, applying <code>filter</code> if non-null. |
| - * |
| - * <p>Called by {@link Hits}. |
| - * |
| - * <p>Applications should usually call {@link Searcher#search(Query)} or |
| - * {@link Searcher#search(Query,Filter)} instead. |
| - * @throws BooleanQuery.TooManyClauses |
| - */ |
| - TopDocs search(QueryWeight weight, Filter filter, int n) throws IOException; |
| |
| /** Expert: Returns the stored fields of document <code>i</code>. |
| * Called by {@link HitCollector} implementations. |
| @@ -202,22 +167,9 @@ |
| * entire index. |
| * <p>Applications should call {@link Searcher#explain(Query, int)}. |
| * @throws BooleanQuery.TooManyClauses |
| - * @deprecated use {@link #explain(QueryWeight, int)} instead. |
| + * @deprecated use {@link #explain(Weight, int)} instead. |
| */ |
| Explanation explain(Weight weight, int doc) throws IOException; |
| - |
| - /** Expert: low-level implementation method |
| - * Returns an Explanation that describes how <code>doc</code> scored against |
| - * <code>weight</code>. |
| - * |
| - * <p>This is intended to be used in developing Similarity implementations, |
| - * and, for good performance, should not be displayed with every hit. |
| - * Computing an explanation is as expensive as executing the query over the |
| - * entire index. |
| - * <p>Applications should call {@link Searcher#explain(Query, int)}. |
| - * @throws BooleanQuery.TooManyClauses |
| - */ |
| - Explanation explain(QueryWeight weight, int doc) throws IOException; |
| |
| /** Expert: Low-level search implementation with arbitrary sorting. Finds |
| * the top <code>n</code> hits for <code>query</code>, applying |
| @@ -228,22 +180,8 @@ |
| * Searcher#search(Query,Filter,Sort)} instead. |
| * |
| * @throws BooleanQuery.TooManyClauses |
| - * @deprecated use {@link #search(QueryWeight, Filter, int, Sort)} instead. |
| */ |
| TopFieldDocs search(Weight weight, Filter filter, int n, Sort sort) |
| throws IOException; |
| - |
| - /** Expert: Low-level search implementation with arbitrary sorting. Finds |
| - * the top <code>n</code> hits for <code>query</code>, applying |
| - * <code>filter</code> if non-null, and sorting the hits by the criteria in |
| - * <code>sort</code>. |
| - * |
| - * <p>Applications should usually call {@link |
| - * Searcher#search(Query,Filter,Sort)} instead. |
| - * |
| - * @throws BooleanQuery.TooManyClauses |
| - */ |
| - TopFieldDocs search(QueryWeight weight, Filter filter, int n, Sort sort) |
| - throws IOException; |
| |
| } |
| Index: src/java/org/apache/lucene/search/Searcher.java |
| =================================================================== |
| --- src/java/org/apache/lucene/search/Searcher.java (revision 801468) |
| +++ src/java/org/apache/lucene/search/Searcher.java (working copy) |
| @@ -89,7 +89,7 @@ |
| */ |
| public TopFieldDocs search(Query query, Filter filter, int n, |
| Sort sort) throws IOException { |
| - return search(createQueryWeight(query), filter, n, sort); |
| + return search(createWeight(query), filter, n, sort); |
| } |
| |
| /** Lower-level search API. |
| @@ -109,7 +109,7 @@ |
| */ |
| public void search(Query query, HitCollector results) |
| throws IOException { |
| - search(createQueryWeight(query), null, new HitCollectorWrapper(results)); |
| + search(createWeight(query), null, new HitCollectorWrapper(results)); |
| } |
| |
| /** Lower-level search API. |
| @@ -127,7 +127,7 @@ |
| */ |
| public void search(Query query, Collector results) |
| throws IOException { |
| - search(createQueryWeight(query), null, results); |
| + search(createWeight(query), null, results); |
| } |
| |
| /** Lower-level search API. |
| @@ -149,7 +149,7 @@ |
| */ |
| public void search(Query query, Filter filter, HitCollector results) |
| throws IOException { |
| - search(createQueryWeight(query), filter, new HitCollectorWrapper(results)); |
| + search(createWeight(query), filter, new HitCollectorWrapper(results)); |
| } |
| |
| /** Lower-level search API. |
| @@ -170,7 +170,7 @@ |
| */ |
| public void search(Query query, Filter filter, Collector results) |
| throws IOException { |
| - search(createQueryWeight(query), filter, results); |
| + search(createWeight(query), filter, results); |
| } |
| |
| /** Finds the top <code>n</code> |
| @@ -180,7 +180,7 @@ |
| */ |
| public TopDocs search(Query query, Filter filter, int n) |
| throws IOException { |
| - return search(createQueryWeight(query), filter, n); |
| + return search(createWeight(query), filter, n); |
| } |
| |
| /** Finds the top <code>n</code> |
| @@ -202,7 +202,7 @@ |
| * entire index. |
| */ |
| public Explanation explain(Query query, int doc) throws IOException { |
| - return explain(createQueryWeight(query), doc); |
| + return explain(createWeight(query), doc); |
| } |
| |
| /** The Similarity implementation used by this searcher. */ |
| @@ -215,7 +215,7 @@ |
| public void setSimilarity(Similarity similarity) { |
| this.similarity = similarity; |
| } |
| - |
| + |
| /** Expert: Return the Similarity implementation used by this Searcher. |
| * |
| * <p>This defaults to the current value of {@link Similarity#getDefault()}. |
| @@ -226,15 +226,10 @@ |
| |
| /** |
| * creates a weight for <code>query</code> |
| - * |
| - * @deprecated use {@link #createQueryWeight(Query)} instead. |
| + * @return new weight |
| */ |
| protected Weight createWeight(Query query) throws IOException { |
| - return createQueryWeight(query); |
| - } |
| - |
| - protected QueryWeight createQueryWeight(Query query) throws IOException { |
| - return query.queryWeight(this); |
| + return query.weight(this); |
| } |
| |
| // inherit javadoc |
| @@ -253,33 +248,16 @@ |
| * @deprecated use {@link #search(Weight, Filter, Collector)} instead. |
| */ |
| public void search(Weight weight, Filter filter, HitCollector results) throws IOException { |
| - search(new QueryWeightWrapper(weight), filter, new HitCollectorWrapper(results)); |
| + search(weight, filter, new HitCollectorWrapper(results)); |
| } |
| - /** @deprecated delete in 3.0. */ |
| - public void search(Weight weight, Filter filter, Collector collector) |
| - throws IOException { |
| - search(new QueryWeightWrapper(weight), filter, collector); |
| - } |
| - abstract public void search(QueryWeight weight, Filter filter, Collector results) throws IOException; |
| + abstract public void search(Weight weight, Filter filter, Collector results) throws IOException; |
| abstract public void close() throws IOException; |
| abstract public int docFreq(Term term) throws IOException; |
| abstract public int maxDoc() throws IOException; |
| - /** @deprecated use {@link #search(QueryWeight, Filter, int)} instead. */ |
| - public TopDocs search(Weight weight, Filter filter, int n) throws IOException { |
| - return search(new QueryWeightWrapper(weight), filter, n); |
| - } |
| - abstract public TopDocs search(QueryWeight weight, Filter filter, int n) throws IOException; |
| + abstract public TopDocs search(Weight weight, Filter filter, int n) throws IOException; |
| abstract public Document doc(int i) throws CorruptIndexException, IOException; |
| abstract public Query rewrite(Query query) throws IOException; |
| - /** @deprecated use {@link #explain(QueryWeight, int)} instead. */ |
| - public Explanation explain(Weight weight, int doc) throws IOException { |
| - return explain(new QueryWeightWrapper(weight), doc); |
| - } |
| - abstract public Explanation explain(QueryWeight weight, int doc) throws IOException; |
| - /** @deprecated use {@link #search(QueryWeight, Filter, int, Sort)} instead. */ |
| - public TopFieldDocs search(Weight weight, Filter filter, int n, Sort sort) throws IOException { |
| - return search(new QueryWeightWrapper(weight), filter, n, sort); |
| - } |
| - abstract public TopFieldDocs search(QueryWeight weight, Filter filter, int n, Sort sort) throws IOException; |
| + abstract public Explanation explain(Weight weight, int doc) throws IOException; |
| + abstract public TopFieldDocs search(Weight weight, Filter filter, int n, Sort sort) throws IOException; |
| /* End patch for GCJ bug #15411. */ |
| } |
| Index: src/java/org/apache/lucene/search/SloppyPhraseScorer.java |
| =================================================================== |
| --- src/java/org/apache/lucene/search/SloppyPhraseScorer.java (revision 801468) |
| +++ src/java/org/apache/lucene/search/SloppyPhraseScorer.java (working copy) |
| @@ -28,7 +28,7 @@ |
| private PhrasePositions tmpPos[]; // for flipping repeating pps. |
| private boolean checkedRepeats; |
| |
| - SloppyPhraseScorer(QueryWeight weight, TermPositions[] tps, int[] offsets, Similarity similarity, |
| + SloppyPhraseScorer(Weight weight, TermPositions[] tps, int[] offsets, Similarity similarity, |
| int slop, byte[] norms) { |
| super(weight, tps, offsets, similarity, norms); |
| this.slop = slop; |
| Index: src/java/org/apache/lucene/search/TermQuery.java |
| =================================================================== |
| --- src/java/org/apache/lucene/search/TermQuery.java (revision 801468) |
| +++ src/java/org/apache/lucene/search/TermQuery.java (working copy) |
| @@ -31,7 +31,7 @@ |
| public class TermQuery extends Query { |
| private Term term; |
| |
| - private class TermWeight extends QueryWeight { |
| + private class TermWeight extends Weight { |
| private Similarity similarity; |
| private float value; |
| private float idf; |
| @@ -69,15 +69,19 @@ |
| return new TermScorer(this, termDocs, similarity, reader.norms(term.field())); |
| } |
| |
| - public Explanation explain(IndexReader reader, int doc) |
| + public Explanation explain(Searcher searcher, IndexReader reader, int doc) |
| throws IOException { |
| |
| ComplexExplanation result = new ComplexExplanation(); |
| result.setDescription("weight("+getQuery()+" in "+doc+"), product of:"); |
| |
| - Explanation idfExpl = |
| - new Explanation(idf, "idf(docFreq=" + reader.docFreq(term) + |
| - ", numDocs=" + reader.numDocs() + ")"); |
| + Explanation expl; |
| + if(searcher == null) { |
| + expl = new Explanation(idf, "idf(" + idf + ")"); |
| + } else { |
| + expl = new Explanation(idf, "idf(docFreq=" + searcher.docFreq(term) + |
| + ", maxDocs=" + searcher.maxDoc() + ")"); |
| + } |
| |
| // explain query weight |
| Explanation queryExpl = new Explanation(); |
| @@ -86,13 +90,13 @@ |
| Explanation boostExpl = new Explanation(getBoost(), "boost"); |
| if (getBoost() != 1.0f) |
| queryExpl.addDetail(boostExpl); |
| - queryExpl.addDetail(idfExpl); |
| + queryExpl.addDetail(expl); |
| |
| Explanation queryNormExpl = new Explanation(queryNorm,"queryNorm"); |
| queryExpl.addDetail(queryNormExpl); |
| |
| queryExpl.setValue(boostExpl.getValue() * |
| - idfExpl.getValue() * |
| + expl.getValue() * |
| queryNormExpl.getValue()); |
| |
| result.addDetail(queryExpl); |
| @@ -105,7 +109,7 @@ |
| |
| Explanation tfExpl = scorer(reader, true, false).explain(doc); |
| fieldExpl.addDetail(tfExpl); |
| - fieldExpl.addDetail(idfExpl); |
| + fieldExpl.addDetail(expl); |
| |
| Explanation fieldNormExpl = new Explanation(); |
| byte[] fieldNorms = reader.norms(field); |
| @@ -117,7 +121,7 @@ |
| |
| fieldExpl.setMatch(Boolean.valueOf(tfExpl.isMatch())); |
| fieldExpl.setValue(tfExpl.getValue() * |
| - idfExpl.getValue() * |
| + expl.getValue() * |
| fieldNormExpl.getValue()); |
| |
| result.addDetail(fieldExpl); |
| @@ -141,7 +145,7 @@ |
| /** Returns the term of this query. */ |
| public Term getTerm() { return term; } |
| |
| - public QueryWeight createQueryWeight(Searcher searcher) throws IOException { |
| + public Weight createWeight(Searcher searcher) throws IOException { |
| return new TermWeight(searcher); |
| } |
| |
| Index: src/java/org/apache/lucene/search/TermScorer.java |
| =================================================================== |
| --- src/java/org/apache/lucene/search/TermScorer.java (revision 801468) |
| +++ src/java/org/apache/lucene/search/TermScorer.java (working copy) |
| @@ -27,7 +27,7 @@ |
| |
| private static final float[] SIM_NORM_DECODER = Similarity.getNormDecoder(); |
| |
| - private QueryWeight weight; |
| + private Weight weight; |
| private TermDocs termDocs; |
| private byte[] norms; |
| private float weightValue; |
| @@ -53,30 +53,8 @@ |
| * computations. |
| * @param norms |
| * The field norms of the document fields for the <code>Term</code>. |
| - * |
| - * @deprecated use delete in 3.0, kept around for TestTermScorer in tag which |
| - * creates TermScorer directly, and cannot pass in a QueryWeight |
| - * object. |
| */ |
| TermScorer(Weight weight, TermDocs td, Similarity similarity, byte[] norms) { |
| - this(new QueryWeightWrapper(weight), td, similarity, norms); |
| - } |
| - |
| - /** |
| - * Construct a <code>TermScorer</code>. |
| - * |
| - * @param weight |
| - * The weight of the <code>Term</code> in the query. |
| - * @param td |
| - * An iterator over the documents matching the <code>Term</code>. |
| - * @param similarity |
| - * The </code>Similarity</code> implementation to be used for score |
| - * computations. |
| - * @param norms |
| - * The field norms of the document fields for the <code>Term</code>. |
| - */ |
| - TermScorer(QueryWeight weight, TermDocs td, Similarity similarity, |
| - byte[] norms) { |
| super(similarity); |
| this.weight = weight; |
| this.termDocs = td; |
| Index: src/java/org/apache/lucene/search/Weight.java |
| =================================================================== |
| --- src/java/org/apache/lucene/search/Weight.java (revision 801468) |
| +++ src/java/org/apache/lucene/search/Weight.java (working copy) |
| @@ -18,47 +18,108 @@ |
| */ |
| |
| import java.io.IOException; |
| +import java.io.Serializable; |
| |
| import org.apache.lucene.index.IndexReader; |
| |
| -/** Expert: Calculate query weights and build query scorers. |
| +/** |
| + * Expert: Calculate query weights and build query scorers. |
| * <p> |
| - * The purpose of Weight is to make it so that searching does not modify |
| - * a Query, so that a Query instance can be reused. <br> |
| - * Searcher dependent state of the query should reside in the Weight. <br> |
| - * IndexReader dependent state should reside in the Scorer. |
| + * The purpose of {@link Weight} is to ensure searching does not |
| + * modify a {@link Query}, so that a {@link Query} instance can be reused. <br> |
| + * {@link Searcher} dependent state of the query should reside in the |
| + * {@link Weight}. <br> |
| + * {@link IndexReader} dependent state should reside in the {@link Scorer}. |
| * <p> |
| * A <code>Weight</code> is used in the following way: |
| * <ol> |
| - * <li>A <code>Weight</code> is constructed by a top-level query, |
| - * given a <code>Searcher</code> ({@link Query#createWeight(Searcher)}). |
| - * <li>The {@link #sumOfSquaredWeights()} method is called |
| - * on the <code>Weight</code> to compute |
| - * the query normalization factor {@link Similarity#queryNorm(float)} |
| - * of the query clauses contained in the query. |
| - * <li>The query normalization factor is passed to {@link #normalize(float)}. |
| - * At this point the weighting is complete. |
| + * <li>A <code>Weight</code> is constructed by a top-level query, given a |
| + * <code>Searcher</code> ({@link Query#createWeight(Searcher)}). |
| + * <li>The {@link #sumOfSquaredWeights()} method is called on the |
| + * <code>Weight</code> to compute the query normalization factor |
| + * {@link Similarity#queryNorm(float)} of the query clauses contained in the |
| + * query. |
| + * <li>The query normalization factor is passed to {@link #normalize(float)}. At |
| + * this point the weighting is complete. |
| * <li>A <code>Scorer</code> is constructed by {@link #scorer(IndexReader)}. |
| * </ol> |
| * |
| - * @deprecated use {@link QueryWeight} instead. |
| + * @since 2.9 |
| */ |
| -public interface Weight extends java.io.Serializable { |
| +public abstract class Weight implements Serializable { |
| + |
| + /** |
| + * An explanation of the score computation for the named document. |
| + * |
| + * Until 3.0, null may be passed in situations where the {@Searcher} is not |
| + * available, so impls must only use {@Searcher} to generate optional |
| + * explain info. |
| + * |
| + * @param searcher over the index or null |
| + * @param reader sub-reader containing the give doc |
| + * @param doc |
| + * @return an Explanation for the score |
| + * @throws IOException |
| + */ |
| + public abstract Explanation explain(Searcher searcher, IndexReader reader, int doc) throws IOException; |
| + |
| /** The query that this concerns. */ |
| - Query getQuery(); |
| + public abstract Query getQuery(); |
| |
| /** The weight for this query. */ |
| - float getValue(); |
| - |
| - /** The sum of squared weights of contained query clauses. */ |
| - float sumOfSquaredWeights() throws IOException; |
| + public abstract float getValue(); |
| |
| /** Assigns the query normalization factor to this. */ |
| - void normalize(float norm); |
| + public abstract void normalize(float norm); |
| |
| - /** Constructs a scorer for this. */ |
| - Scorer scorer(IndexReader reader) throws IOException; |
| + /** |
| + * Returns a {@link Scorer} which scores documents in/out-of order according |
| + * to <code>scoreDocsInOrder</code>. |
| + * <p> |
| + * <b>NOTE:</b> even if <code>scoreDocsInOrder</code> is false, it is |
| + * recommended to check whether the returned <code>Scorer</code> indeed scores |
| + * documents out of order (i.e., call {@link #scoresDocsOutOfOrder()}), as |
| + * some <code>Scorer</code> implementations will always return documents |
| + * in-order.<br> |
| + * <b>NOTE:</b> null can be returned if no documents will be scored by this |
| + * query. |
| + * |
| + * @param reader |
| + * the {@link IndexReader} for which to return the {@link Scorer}. |
| + * @param scoreDocsInOrder |
| + * specifies whether in-order scoring of documents is required. Note |
| + * that if set to false (i.e., out-of-order scoring is required), |
| + * this method can return whatever scoring mode it supports, as every |
| + * in-order scorer is also an out-of-order one. However, an |
| + * out-of-order scorer may not support {@link Scorer#nextDoc()} |
| + * and/or {@link Scorer#advance(int)}, therfore it is recommended to |
| + * request an in-order scorer if use of these methods is required. |
| + * @param topScorer |
| + * specifies whether the returned {@link Scorer} will be used as a |
| + * top scorer or as in iterator. I.e., if true, |
| + * {@link Scorer#score(Collector)} will be called; if false, |
| + * {@link Scorer#nextDoc()} and/or {@link Scorer#advance(int)} will |
| + * be called. |
| + * @return a {@link Scorer} which scores documents in/out-of order. |
| + * @throws IOException |
| + */ |
| + public abstract Scorer scorer(IndexReader reader, boolean scoreDocsInOrder, |
| + boolean topScorer) throws IOException; |
| + |
| + /** The sum of squared weights of contained query clauses. */ |
| + public abstract float sumOfSquaredWeights() throws IOException; |
| |
| - /** An explanation of the score computation for the named document. */ |
| - Explanation explain(IndexReader reader, int doc) throws IOException; |
| + /** |
| + * Returns true iff this implementation scores docs only out of order. This |
| + * method is used in conjunction with {@link Collector}'s |
| + * {@link Collector#acceptsDocsOutOfOrder() acceptsDocsOutOfOrder} and |
| + * {@link #scorer(org.apache.lucene.index.IndexReader, boolean, boolean)} to |
| + * create a matching {@link Scorer} instance for a given {@link Collector}, or |
| + * vice versa. |
| + * <p> |
| + * <b>NOTE:</b> the default implementation returns <code>false</code>, i.e. |
| + * the <code>Scorer</code> scores documents in-order. |
| + */ |
| + public boolean scoresDocsOutOfOrder() { return false; } |
| + |
| } |
| Index: src/java/org/apache/lucene/search/function/CustomScoreQuery.java |
| =================================================================== |
| --- src/java/org/apache/lucene/search/function/CustomScoreQuery.java (revision 801468) |
| +++ src/java/org/apache/lucene/search/function/CustomScoreQuery.java (working copy) |
| @@ -24,7 +24,7 @@ |
| import org.apache.lucene.search.ComplexExplanation; |
| import org.apache.lucene.search.Explanation; |
| import org.apache.lucene.search.Query; |
| -import org.apache.lucene.search.QueryWeight; |
| +import org.apache.lucene.search.Weight; |
| import org.apache.lucene.search.Scorer; |
| import org.apache.lucene.search.Searcher; |
| import org.apache.lucene.search.Similarity; |
| @@ -271,18 +271,18 @@ |
| |
| //=========================== W E I G H T ============================ |
| |
| - private class CustomWeight extends QueryWeight { |
| + private class CustomWeight extends Weight { |
| Similarity similarity; |
| - QueryWeight subQueryWeight; |
| - QueryWeight[] valSrcWeights; |
| + Weight subQueryWeight; |
| + Weight[] valSrcWeights; |
| boolean qStrict; |
| |
| public CustomWeight(Searcher searcher) throws IOException { |
| this.similarity = getSimilarity(searcher); |
| - this.subQueryWeight = subQuery.queryWeight(searcher); |
| - this.valSrcWeights = new QueryWeight[valSrcQueries.length]; |
| + this.subQueryWeight = subQuery.weight(searcher); |
| + this.valSrcWeights = new Weight[valSrcQueries.length]; |
| for(int i = 0; i < valSrcQueries.length; i++) { |
| - this.valSrcWeights[i] = valSrcQueries[i].createQueryWeight(searcher); |
| + this.valSrcWeights[i] = valSrcQueries[i].createWeight(searcher); |
| } |
| this.qStrict = strict; |
| } |
| @@ -336,16 +336,39 @@ |
| } |
| Scorer[] valSrcScorers = new Scorer[valSrcWeights.length]; |
| for(int i = 0; i < valSrcScorers.length; i++) { |
| - valSrcScorers[i] = valSrcWeights[i].scorer(reader, true, false); |
| + valSrcScorers[i] = valSrcWeights[i].scorer(reader, true, topScorer); |
| } |
| return new CustomScorer(similarity, reader, this, subQueryScorer, valSrcScorers); |
| } |
| |
| - public Explanation explain(IndexReader reader, int doc) throws IOException { |
| - Scorer scorer = scorer(reader, true, false); |
| - return scorer == null ? new Explanation(0.0f, "no matching docs") : scorer.explain(doc); |
| + public Explanation explain(Searcher searcher, IndexReader reader, int doc) throws IOException { |
| + Explanation explain = doExplain(searcher, reader, doc); |
| + return explain == null ? new Explanation(0.0f, "no matching docs") : doExplain(searcher, reader, doc); |
| } |
| |
| + private Explanation doExplain(Searcher searcher, IndexReader reader, int doc) throws IOException { |
| + Scorer[] valSrcScorers = new Scorer[valSrcWeights.length]; |
| + for(int i = 0; i < valSrcScorers.length; i++) { |
| + valSrcScorers[i] = valSrcWeights[i].scorer(reader, true, false); |
| + } |
| + Explanation subQueryExpl = subQueryWeight.explain(searcher, reader, doc); |
| + if (!subQueryExpl.isMatch()) { |
| + return subQueryExpl; |
| + } |
| + // match |
| + Explanation[] valSrcExpls = new Explanation[valSrcScorers.length]; |
| + for(int i = 0; i < valSrcScorers.length; i++) { |
| + valSrcExpls[i] = valSrcScorers[i].explain(doc); |
| + } |
| + Explanation customExp = customExplain(doc,subQueryExpl,valSrcExpls); |
| + float sc = getValue() * customExp.getValue(); |
| + Explanation res = new ComplexExplanation( |
| + true, sc, CustomScoreQuery.this.toString() + ", product of:"); |
| + res.addDetail(customExp); |
| + res.addDetail(new Explanation(getValue(), "queryBoost")); // actually using the q boost as q weight (== weight value) |
| + return res; |
| + } |
| + |
| public boolean scoresDocsOutOfOrder() { |
| return false; |
| } |
| @@ -425,9 +448,10 @@ |
| return doc; |
| } |
| |
| + // TODO: remove in 3.0 |
| /*(non-Javadoc) @see org.apache.lucene.search.Scorer#explain(int) */ |
| public Explanation explain(int doc) throws IOException { |
| - Explanation subQueryExpl = weight.subQueryWeight.explain(reader,doc); |
| + Explanation subQueryExpl = weight.subQueryWeight.explain(null, reader,doc); // nocommit: needs resolution |
| if (!subQueryExpl.isMatch()) { |
| return subQueryExpl; |
| } |
| @@ -446,7 +470,7 @@ |
| } |
| } |
| |
| - public QueryWeight createQueryWeight(Searcher searcher) throws IOException { |
| + public Weight createWeight(Searcher searcher) throws IOException { |
| return new CustomWeight(searcher); |
| } |
| |
| Index: src/java/org/apache/lucene/search/function/ValueSourceQuery.java |
| =================================================================== |
| --- src/java/org/apache/lucene/search/function/ValueSourceQuery.java (revision 801468) |
| +++ src/java/org/apache/lucene/search/function/ValueSourceQuery.java (working copy) |
| @@ -62,7 +62,7 @@ |
| // no terms involved here |
| } |
| |
| - private class ValueSourceWeight extends QueryWeight { |
| + class ValueSourceWeight extends Weight { |
| Similarity similarity; |
| float queryNorm; |
| float queryWeight; |
| @@ -98,8 +98,8 @@ |
| } |
| |
| /*(non-Javadoc) @see org.apache.lucene.search.Weight#explain(org.apache.lucene.index.IndexReader, int) */ |
| - public Explanation explain(IndexReader reader, int doc) throws IOException { |
| - return scorer(reader, true, false).explain(doc); |
| + public Explanation explain(Searcher searcher, IndexReader reader, int doc) throws IOException { |
| + return new ValueSourceScorer(similarity, reader, this).explain(doc); |
| } |
| } |
| |
| @@ -172,7 +172,7 @@ |
| } |
| } |
| |
| - public QueryWeight createQueryWeight(Searcher searcher) { |
| + public Weight createWeight(Searcher searcher) { |
| return new ValueSourceQuery.ValueSourceWeight(searcher); |
| } |
| |
| Index: src/java/org/apache/lucene/search/payloads/BoostingFunctionTermQuery.java |
| =================================================================== |
| --- src/java/org/apache/lucene/search/payloads/BoostingFunctionTermQuery.java (revision 802424) |
| +++ src/java/org/apache/lucene/search/payloads/BoostingFunctionTermQuery.java (working copy) |
| @@ -21,7 +21,7 @@ |
| import org.apache.lucene.index.TermPositions; |
| import org.apache.lucene.search.Searcher; |
| import org.apache.lucene.search.Scorer; |
| -import org.apache.lucene.search.QueryWeight; |
| +import org.apache.lucene.search.Weight; |
| import org.apache.lucene.search.Similarity; |
| import org.apache.lucene.search.Explanation; |
| import org.apache.lucene.search.ComplexExplanation; |
| @@ -54,7 +54,7 @@ |
| |
| |
| |
| - public QueryWeight createQueryWeight(Searcher searcher) throws IOException { |
| + public Weight createWeight(Searcher searcher) throws IOException { |
| return new BoostingFunctionTermWeight(this, searcher); |
| } |
| |
| @@ -76,7 +76,7 @@ |
| protected float payloadScore; |
| protected int payloadsSeen; |
| |
| - public BoostingFunctionSpanScorer(TermSpans spans, QueryWeight weight, Similarity similarity, |
| + public BoostingFunctionSpanScorer(TermSpans spans, Weight weight, Similarity similarity, |
| byte[] norms) throws IOException { |
| super(spans, weight, similarity, norms); |
| positions = spans.getPositions(); |
| Index: src/java/org/apache/lucene/search/payloads/BoostingNearQuery.java |
| =================================================================== |
| --- src/java/org/apache/lucene/search/payloads/BoostingNearQuery.java (revision 802424) |
| +++ src/java/org/apache/lucene/search/payloads/BoostingNearQuery.java (working copy) |
| @@ -18,7 +18,6 @@ |
| |
| import org.apache.lucene.index.IndexReader; |
| import org.apache.lucene.search.Explanation; |
| -import org.apache.lucene.search.QueryWeight; |
| import org.apache.lucene.search.Scorer; |
| import org.apache.lucene.search.Searcher; |
| import org.apache.lucene.search.Similarity; |
| @@ -63,7 +62,7 @@ |
| } |
| |
| |
| - public QueryWeight createQueryWeight(Searcher searcher) throws IOException { |
| + public Weight createWeight(Searcher searcher) throws IOException { |
| return new BoostingSpanWeight(this, searcher); |
| } |
| |
| Index: src/java/org/apache/lucene/search/payloads/BoostingTermQuery.java |
| =================================================================== |
| --- src/java/org/apache/lucene/search/payloads/BoostingTermQuery.java (revision 802424) |
| +++ src/java/org/apache/lucene/search/payloads/BoostingTermQuery.java (working copy) |
| @@ -1,16 +1,14 @@ |
| package org.apache.lucene.search.payloads; |
| |
| +import java.io.IOException; |
| + |
| import org.apache.lucene.index.IndexReader; |
| import org.apache.lucene.index.Term; |
| -import org.apache.lucene.index.TermPositions; |
| -import org.apache.lucene.search.*; |
| -import org.apache.lucene.search.spans.SpanScorer; |
| -import org.apache.lucene.search.spans.SpanTermQuery; |
| -import org.apache.lucene.search.spans.SpanWeight; |
| +import org.apache.lucene.search.Scorer; |
| +import org.apache.lucene.search.Searcher; |
| +import org.apache.lucene.search.Weight; |
| import org.apache.lucene.search.spans.TermSpans; |
| |
| -import java.io.IOException; |
| - |
| /** |
| * Copyright 2004 The Apache Software Foundation |
| * <p/> |
| @@ -49,7 +47,7 @@ |
| super(term, new AveragePayloadFunction(), includeSpanScore); |
| } |
| |
| - public QueryWeight createQueryWeight(Searcher searcher) throws IOException { |
| + public Weight createWeight(Searcher searcher) throws IOException { |
| return new BoostingTermWeight(this, searcher); |
| } |
| |
| Index: src/java/org/apache/lucene/search/spans/FieldMaskingSpanQuery.java |
| =================================================================== |
| --- src/java/org/apache/lucene/search/spans/FieldMaskingSpanQuery.java (revision 801468) |
| +++ src/java/org/apache/lucene/search/spans/FieldMaskingSpanQuery.java (working copy) |
| @@ -23,7 +23,7 @@ |
| |
| import org.apache.lucene.index.IndexReader; |
| import org.apache.lucene.search.Query; |
| -import org.apache.lucene.search.QueryWeight; |
| +import org.apache.lucene.search.Weight; |
| import org.apache.lucene.search.Searcher; |
| import org.apache.lucene.search.Similarity; |
| import org.apache.lucene.util.ToStringUtils; |
| @@ -103,8 +103,8 @@ |
| maskedQuery.extractTerms(terms); |
| } |
| |
| - public QueryWeight createQueryWeight(Searcher searcher) throws IOException { |
| - return maskedQuery.createQueryWeight(searcher); |
| + public Weight createWeight(Searcher searcher) throws IOException { |
| + return maskedQuery.createWeight(searcher); |
| } |
| |
| public Similarity getSimilarity(Searcher searcher) { |
| Index: src/java/org/apache/lucene/search/spans/SpanQuery.java |
| =================================================================== |
| --- src/java/org/apache/lucene/search/spans/SpanQuery.java (revision 801468) |
| +++ src/java/org/apache/lucene/search/spans/SpanQuery.java (working copy) |
| @@ -22,7 +22,6 @@ |
| |
| import org.apache.lucene.index.IndexReader; |
| import org.apache.lucene.search.Query; |
| -import org.apache.lucene.search.QueryWeight; |
| import org.apache.lucene.search.Searcher; |
| import org.apache.lucene.search.Weight; |
| |
| @@ -40,13 +39,8 @@ |
| * @see Query#extractTerms(Set) |
| */ |
| public abstract Collection getTerms(); |
| - |
| - /** @deprecated delete in 3.0. */ |
| - protected Weight createWeight(Searcher searcher) throws IOException { |
| - return createQueryWeight(searcher); |
| - } |
| |
| - public QueryWeight createQueryWeight(Searcher searcher) throws IOException { |
| + public Weight createWeight(Searcher searcher) throws IOException { |
| return new SpanWeight(this, searcher); |
| } |
| |
| Index: src/java/org/apache/lucene/search/spans/SpanScorer.java |
| =================================================================== |
| --- src/java/org/apache/lucene/search/spans/SpanScorer.java (revision 801468) |
| +++ src/java/org/apache/lucene/search/spans/SpanScorer.java (working copy) |
| @@ -20,18 +20,16 @@ |
| import java.io.IOException; |
| |
| import org.apache.lucene.search.Explanation; |
| -import org.apache.lucene.search.QueryWeight; |
| -import org.apache.lucene.search.QueryWeightWrapper; |
| +import org.apache.lucene.search.Weight; |
| import org.apache.lucene.search.Scorer; |
| import org.apache.lucene.search.Similarity; |
| -import org.apache.lucene.search.Weight; |
| |
| /** |
| * Public for extension only. |
| */ |
| public class SpanScorer extends Scorer { |
| protected Spans spans; |
| - protected QueryWeight weight; |
| + protected Weight weight; |
| protected byte[] norms; |
| protected float value; |
| |
| @@ -42,13 +40,7 @@ |
| protected int doc; |
| protected float freq; |
| |
| - /** @deprecated use {@link #SpanScorer(Spans, QueryWeight, Similarity, byte[])} instead.*/ |
| protected SpanScorer(Spans spans, Weight weight, Similarity similarity, byte[] norms) |
| - throws IOException { |
| - this(spans, new QueryWeightWrapper(weight), similarity, norms); |
| - } |
| - |
| - protected SpanScorer(Spans spans, QueryWeight weight, Similarity similarity, byte[] norms) |
| throws IOException { |
| super(similarity); |
| this.spans = spans; |
| Index: src/java/org/apache/lucene/search/spans/SpanWeight.java |
| =================================================================== |
| --- src/java/org/apache/lucene/search/spans/SpanWeight.java (revision 801468) |
| +++ src/java/org/apache/lucene/search/spans/SpanWeight.java (working copy) |
| @@ -29,7 +29,7 @@ |
| /** |
| * Expert-only. Public for use by other weight implementations |
| */ |
| -public class SpanWeight extends QueryWeight { |
| +public class SpanWeight extends Weight { |
| protected Similarity similarity; |
| protected float value; |
| protected float idf; |
| @@ -68,7 +68,7 @@ |
| .norms(query.getField())); |
| } |
| |
| - public Explanation explain(IndexReader reader, int doc) |
| + public Explanation explain(Searcher searcher, IndexReader reader, int doc) |
| throws IOException { |
| |
| ComplexExplanation result = new ComplexExplanation(); |
| Index: src/java/org/apache/lucene/util/ReaderUtil.java |
| =================================================================== |
| --- src/java/org/apache/lucene/util/ReaderUtil.java (revision 0) |
| +++ src/java/org/apache/lucene/util/ReaderUtil.java (revision 0) |
| @@ -0,0 +1,107 @@ |
| +package org.apache.lucene.util; |
| + |
| +/** |
| + * Licensed to the Apache Software Foundation (ASF) under one or more |
| + * contributor license agreements. See the NOTICE file distributed with |
| + * this work for additional information regarding copyright ownership. |
| + * The ASF licenses this file to You under the Apache License, Version 2.0 |
| + * (the "License"); you may not use this file except in compliance with |
| + * the License. You may obtain a copy of the License at |
| + * |
| + * http://www.apache.org/licenses/LICENSE-2.0 |
| + * |
| + * Unless required by applicable law or agreed to in writing, software |
| + * distributed under the License is distributed on an "AS IS" BASIS, |
| + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| + * See the License for the specific language governing permissions and |
| + * limitations under the License. |
| + */ |
| + |
| +import java.util.ArrayList; |
| +import java.util.List; |
| + |
| +import org.apache.lucene.index.IndexReader; |
| + |
| +public class ReaderUtil { |
| + |
| + /** |
| + * Gathers sub-readers from reader into a List. |
| + * |
| + * @param allSubReaders |
| + * @param reader |
| + */ |
| + public static void gatherSubReaders(List allSubReaders, IndexReader reader) { |
| + IndexReader[] subReaders = reader.getSequentialSubReaders(); |
| + if (subReaders == null) { |
| + // Add the reader itself, and do not recurse |
| + allSubReaders.add(reader); |
| + } else { |
| + for (int i = 0; i < subReaders.length; i++) { |
| + gatherSubReaders(allSubReaders, subReaders[i]); |
| + } |
| + } |
| + } |
| + |
| + /** |
| + * Returns sub IndexReader that contains the given document id. |
| + * |
| + * @param doc |
| + * @param reader |
| + * @return |
| + */ |
| + public static IndexReader subReader(int doc, IndexReader reader) { |
| + List subReadersList = new ArrayList(); |
| + ReaderUtil.gatherSubReaders(subReadersList, reader); |
| + IndexReader[] subReaders = (IndexReader[]) subReadersList |
| + .toArray(new IndexReader[subReadersList.size()]); |
| + int[] docStarts = new int[subReaders.length]; |
| + int maxDoc = 0; |
| + for (int i = 0; i < subReaders.length; i++) { |
| + docStarts[i] = maxDoc; |
| + maxDoc += subReaders[i].maxDoc(); |
| + } |
| + return subReaders[ReaderUtil.subIndex(doc, docStarts)]; |
| + } |
| + |
| + /** |
| + * Returns sub-reader subIndex from reader. |
| + * |
| + * @param reader |
| + * @param subIndex |
| + * @return |
| + */ |
| + public static IndexReader subReader(IndexReader reader, int subIndex) { |
| + List subReadersList = new ArrayList(); |
| + ReaderUtil.gatherSubReaders(subReadersList, reader); |
| + IndexReader[] subReaders = (IndexReader[]) subReadersList |
| + .toArray(new IndexReader[subReadersList.size()]); |
| + return subReaders[subIndex]; |
| + } |
| + |
| + |
| + /** |
| + * Returns index of the searcher/reader for document <code>n</code> in the |
| + * array used to construct this searcher/reader. |
| + */ |
| + public static int subIndex(int n, int[] docStarts) { // find |
| + // searcher/reader for doc n: |
| + int size = docStarts.length; |
| + int lo = 0; // search starts array |
| + int hi = size - 1; // for first element less than n, return its index |
| + while (hi >= lo) { |
| + int mid = (lo + hi) >>> 1; |
| + int midValue = docStarts[mid]; |
| + if (n < midValue) |
| + hi = mid - 1; |
| + else if (n > midValue) |
| + lo = mid + 1; |
| + else { // found a match |
| + while (mid + 1 < size && docStarts[mid + 1] == midValue) { |
| + mid++; // scan to last match |
| + } |
| + return mid; |
| + } |
| + } |
| + return hi; |
| + } |
| +} |
| Index: src/test/org/apache/lucene/search/JustCompileSearch.java |
| =================================================================== |
| --- src/test/org/apache/lucene/search/JustCompileSearch.java (revision 801468) |
| +++ src/test/org/apache/lucene/search/JustCompileSearch.java (working copy) |
| @@ -40,7 +40,7 @@ |
| |
| static final class JustCompileSearcher extends Searcher { |
| |
| - protected QueryWeight createQueryWeight(Query query) throws IOException { |
| + protected Weight createWeight(Query query) throws IOException { |
| throw new UnsupportedOperationException(UNSUPPORTED_MSG); |
| } |
| |
| @@ -94,7 +94,7 @@ |
| throw new UnsupportedOperationException(UNSUPPORTED_MSG); |
| } |
| |
| - public Explanation explain(QueryWeight weight, int doc) throws IOException { |
| + public Explanation explain(Weight weight, int doc) throws IOException { |
| throw new UnsupportedOperationException(UNSUPPORTED_MSG); |
| } |
| |
| @@ -106,17 +106,17 @@ |
| throw new UnsupportedOperationException(UNSUPPORTED_MSG); |
| } |
| |
| - public void search(QueryWeight weight, Filter filter, Collector results) |
| + public void search(Weight weight, Filter filter, Collector results) |
| throws IOException { |
| throw new UnsupportedOperationException(UNSUPPORTED_MSG); |
| } |
| |
| - public TopDocs search(QueryWeight weight, Filter filter, int n) |
| + public TopDocs search(Weight weight, Filter filter, int n) |
| throws IOException { |
| throw new UnsupportedOperationException(UNSUPPORTED_MSG); |
| } |
| |
| - public TopFieldDocs search(QueryWeight weight, Filter filter, int n, Sort sort) |
| + public TopFieldDocs search(Weight weight, Filter filter, int n, Sort sort) |
| throws IOException { |
| throw new UnsupportedOperationException(UNSUPPORTED_MSG); |
| } |
| @@ -296,7 +296,7 @@ |
| |
| static final class JustCompilePhraseScorer extends PhraseScorer { |
| |
| - JustCompilePhraseScorer(QueryWeight weight, TermPositions[] tps, int[] offsets, |
| + JustCompilePhraseScorer(Weight weight, TermPositions[] tps, int[] offsets, |
| Similarity similarity, byte[] norms) { |
| super(weight, tps, offsets, similarity, norms); |
| } |
| @@ -423,9 +423,9 @@ |
| |
| } |
| |
| - static final class JustCompileWeight extends QueryWeight { |
| + static final class JustCompileWeight extends Weight { |
| |
| - public Explanation explain(IndexReader reader, int doc) throws IOException { |
| + public Explanation explain(Searcher searcher, IndexReader reader, int doc) throws IOException { |
| throw new UnsupportedOperationException(UNSUPPORTED_MSG); |
| } |
| |
| Index: src/test/org/apache/lucene/search/QueryUtils.java |
| =================================================================== |
| --- src/test/org/apache/lucene/search/QueryUtils.java (revision 801468) |
| +++ src/test/org/apache/lucene/search/QueryUtils.java (working copy) |
| @@ -105,7 +105,7 @@ |
| * @throws IOException if serialization check fail. |
| */ |
| private static void checkSerialization(Query q, Searcher s) throws IOException { |
| - QueryWeight w = q.queryWeight(s); |
| + Weight w = q.weight(s); |
| try { |
| ByteArrayOutputStream bos = new ByteArrayOutputStream(); |
| ObjectOutputStream oos = new ObjectOutputStream(bos); |
| @@ -150,7 +150,7 @@ |
| //System.out.print("Order:");for (int i = 0; i < order.length; i++) System.out.print(order[i]==skip_op ? " skip()":" next()"); System.out.println(); |
| final int opidx[] = {0}; |
| |
| - final QueryWeight w = q.queryWeight(s); |
| + final Weight w = q.weight(s); |
| final Scorer scorer = w.scorer(s.getIndexReader(), true, false); |
| if (scorer == null) { |
| continue; |
| @@ -234,7 +234,7 @@ |
| float score = scorer.score(); |
| try { |
| for (int i=lastDoc[0]+1; i<=doc; i++) { |
| - QueryWeight w = q.queryWeight(s); |
| + Weight w = q.weight(s); |
| Scorer scorer = w.scorer(s.getIndexReader(), true, false); |
| Assert.assertTrue("query collected "+doc+" but skipTo("+i+") says no more docs!",scorer.advance(i) != DocIdSetIterator.NO_MORE_DOCS); |
| Assert.assertEquals("query collected "+doc+" but skipTo("+i+") got to "+scorer.docID(),doc,scorer.docID()); |
| @@ -254,7 +254,7 @@ |
| return false; |
| } |
| }); |
| - QueryWeight w = q.queryWeight(s); |
| + Weight w = q.weight(s); |
| Scorer scorer = w.scorer(s.getIndexReader(), true, false); |
| if (scorer != null) { |
| boolean more = scorer.advance(lastDoc[0] + 1) != DocIdSetIterator.NO_MORE_DOCS; |
| Index: src/test/org/apache/lucene/search/TestDisjunctionMaxQuery.java |
| =================================================================== |
| --- src/test/org/apache/lucene/search/TestDisjunctionMaxQuery.java (revision 801468) |
| +++ src/test/org/apache/lucene/search/TestDisjunctionMaxQuery.java (working copy) |
| @@ -133,7 +133,7 @@ |
| |
| QueryUtils.check(dq,s); |
| |
| - final QueryWeight dw = dq.queryWeight(s); |
| + final Weight dw = dq.weight(s); |
| final Scorer ds = dw.scorer(r, true, false); |
| final boolean skipOk = ds.advance(3) != DocIdSetIterator.NO_MORE_DOCS; |
| if (skipOk) { |
| @@ -148,7 +148,7 @@ |
| |
| QueryUtils.check(dq,s); |
| |
| - final QueryWeight dw = dq.queryWeight(s); |
| + final Weight dw = dq.weight(s); |
| final Scorer ds = dw.scorer(r, true, false); |
| assertTrue("firsttime skipTo found no match", ds.advance(3) != DocIdSetIterator.NO_MORE_DOCS); |
| assertEquals("found wrong docid", "d4", r.document(ds.docID()).get("id")); |
| Index: src/test/org/apache/lucene/search/TestTermScorer.java |
| =================================================================== |
| --- src/test/org/apache/lucene/search/TestTermScorer.java (revision 801468) |
| +++ src/test/org/apache/lucene/search/TestTermScorer.java (working copy) |
| @@ -69,7 +69,7 @@ |
| Term allTerm = new Term(FIELD, "all"); |
| TermQuery termQuery = new TermQuery(allTerm); |
| |
| - QueryWeight weight = termQuery.queryWeight(indexSearcher); |
| + Weight weight = termQuery.weight(indexSearcher); |
| |
| TermScorer ts = new TermScorer(weight, |
| indexReader.termDocs(allTerm), indexSearcher.getSimilarity(), |
| @@ -131,7 +131,7 @@ |
| Term allTerm = new Term(FIELD, "all"); |
| TermQuery termQuery = new TermQuery(allTerm); |
| |
| - QueryWeight weight = termQuery.queryWeight(indexSearcher); |
| + Weight weight = termQuery.weight(indexSearcher); |
| |
| TermScorer ts = new TermScorer(weight, |
| indexReader.termDocs(allTerm), indexSearcher.getSimilarity(), |
| @@ -148,7 +148,7 @@ |
| Term allTerm = new Term(FIELD, "all"); |
| TermQuery termQuery = new TermQuery(allTerm); |
| |
| - QueryWeight weight = termQuery.queryWeight(indexSearcher); |
| + Weight weight = termQuery.weight(indexSearcher); |
| |
| TermScorer ts = new TermScorer(weight, |
| indexReader.termDocs(allTerm), indexSearcher.getSimilarity(), |
| @@ -163,7 +163,7 @@ |
| Term allTerm = new Term(FIELD, "all"); |
| TermQuery termQuery = new TermQuery(allTerm); |
| |
| - QueryWeight weight = termQuery.queryWeight(indexSearcher); |
| + Weight weight = termQuery.weight(indexSearcher); |
| |
| TermScorer ts = new TermScorer(weight, |
| indexReader.termDocs(allTerm), indexSearcher.getSimilarity(), |
| @@ -181,7 +181,7 @@ |
| |
| Term dogsTerm = new Term(FIELD, "dogs"); |
| termQuery = new TermQuery(dogsTerm); |
| - weight = termQuery.queryWeight(indexSearcher); |
| + weight = termQuery.weight(indexSearcher); |
| |
| ts = new TermScorer(weight, indexReader.termDocs(dogsTerm), indexSearcher.getSimilarity(), |
| indexReader.norms(FIELD)); |
| Index: src/test/org/apache/lucene/search/spans/JustCompileSearchSpans.java |
| =================================================================== |
| --- src/test/org/apache/lucene/search/spans/JustCompileSearchSpans.java (revision 801468) |
| +++ src/test/org/apache/lucene/search/spans/JustCompileSearchSpans.java (working copy) |
| @@ -21,9 +21,8 @@ |
| import java.util.Collection; |
| |
| import org.apache.lucene.index.IndexReader; |
| -import org.apache.lucene.search.QueryWeight; |
| -import org.apache.lucene.search.Similarity; |
| import org.apache.lucene.search.Weight; |
| +import org.apache.lucene.search.Similarity; |
| |
| /** |
| * Holds all implementations of classes in the o.a.l.s.spans package as a |
| @@ -123,16 +122,10 @@ |
| |
| static final class JustCompileSpanScorer extends SpanScorer { |
| |
| - /** @deprecated delete in 3.0 */ |
| protected JustCompileSpanScorer(Spans spans, Weight weight, |
| Similarity similarity, byte[] norms) throws IOException { |
| super(spans, weight, similarity, norms); |
| } |
| - |
| - protected JustCompileSpanScorer(Spans spans, QueryWeight weight, |
| - Similarity similarity, byte[] norms) throws IOException { |
| - super(spans, weight, similarity, norms); |
| - } |
| |
| protected boolean setFreqCurrentDoc() throws IOException { |
| throw new UnsupportedOperationException(UNSUPPORTED_MSG); |
| Index: src/test/org/apache/lucene/search/spans/TestNearSpansOrdered.java |
| =================================================================== |
| --- src/test/org/apache/lucene/search/spans/TestNearSpansOrdered.java (revision 801468) |
| +++ src/test/org/apache/lucene/search/spans/TestNearSpansOrdered.java (working copy) |
| @@ -26,7 +26,7 @@ |
| import org.apache.lucene.search.CheckHits; |
| import org.apache.lucene.search.Explanation; |
| import org.apache.lucene.search.IndexSearcher; |
| -import org.apache.lucene.search.QueryWeight; |
| +import org.apache.lucene.search.Weight; |
| import org.apache.lucene.search.Scorer; |
| import org.apache.lucene.store.RAMDirectory; |
| import org.apache.lucene.util.LuceneTestCase; |
| @@ -158,7 +158,7 @@ |
| */ |
| public void testSpanNearScorerSkipTo1() throws Exception { |
| SpanNearQuery q = makeQuery(); |
| - QueryWeight w = q.queryWeight(searcher); |
| + Weight w = q.weight(searcher); |
| Scorer s = w.scorer(searcher.getIndexReader(), true, false); |
| assertEquals(1, s.advance(1)); |
| } |
| @@ -168,7 +168,7 @@ |
| */ |
| public void testSpanNearScorerExplain() throws Exception { |
| SpanNearQuery q = makeQuery(); |
| - QueryWeight w = q.queryWeight(searcher); |
| + Weight w = q.weight(searcher); |
| Scorer s = w.scorer(searcher.getIndexReader(), true, false); |
| Explanation e = s.explain(1); |
| assertTrue("Scorer explanation value for doc#1 isn't positive: " |
| Index: src/test/org/apache/lucene/search/spans/TestSpans.java |
| =================================================================== |
| --- src/test/org/apache/lucene/search/spans/TestSpans.java (revision 801468) |
| +++ src/test/org/apache/lucene/search/spans/TestSpans.java (working copy) |
| @@ -409,7 +409,7 @@ |
| } |
| }; |
| |
| - Scorer spanScorer = snq.weight(searcher).scorer(searcher.getIndexReader()); |
| + Scorer spanScorer = snq.weight(searcher).scorer(searcher.getIndexReader(), true, false); |
| |
| assertTrue("first doc", spanScorer.nextDoc() != DocIdSetIterator.NO_MORE_DOCS); |
| assertEquals("first doc number", spanScorer.docID(), 11); |
| |