more explicit javadocs about Scorer contract for iterating in doc id order

git-svn-id: https://svn.apache.org/repos/asf/lucene/java/trunk@582054 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Chris M. Hostetter 2007-10-05 01:53:29 +00:00
parent f19266575e
commit 5a1fdc2a72
2 changed files with 62 additions and 18 deletions

View File

@ -313,15 +313,25 @@ public class BooleanQuery extends Query {
private static boolean allowDocsOutOfOrder = false; private static boolean allowDocsOutOfOrder = false;
/** /**
* Indicates whether hit docs may be collected out of docid * Expert: Indicates whether hit docs may be collected out of docid
* order. In other words, with this setting, * order.
*
* <p>
* Background: llthough the contract of the Scorer class requires that
* documents be iterated in order of doc id this was not true in early
* versions of Lucene. Many pieces of functionality in the current
* Lucene code base have undefined behavior if this contract is not
* upheld, but in some specific simple cases may be faster. (For
* example: disjunction queries with less than 32 prohibited clauses;
* This setting has no effect for other queries.)
* </p>
*
* <p>
* Specifics: By setting this option to this true, calls to
* {@link HitCollector#collect(int,float)} might be * {@link HitCollector#collect(int,float)} might be
* invoked first for docid N and only later for docid N-1. * invoked first for docid N and only later for docid N-1.
* Being static, this setting is system wide. * Being static, this setting is system wide.
* If collecting docs out of order is allowed, scoring might be faster * </p>
* for certain queries, for example disjunction queries with
* less than 32 prohibited clauses.
* This setting has no effect for other queries.
*/ */
public static void setAllowDocsOutOfOrder(boolean allow) { public static void setAllowDocsOutOfOrder(boolean allow) {
allowDocsOutOfOrder = allow; allowDocsOutOfOrder = allow;

View File

@ -19,10 +19,19 @@ package org.apache.lucene.search;
import java.io.IOException; import java.io.IOException;
/** Expert: Common scoring functionality for different types of queries. /**
* <br>A <code>Scorer</code> either iterates over documents matching a query, * Expert: Common scoring functionality for different types of queries.
* or provides an explanation of the score for a query for a given document. *
* <br>Document scores are computed using a given <code>Similarity</code> implementation. * <p>
* A <code>Scorer</code> either iterates over documents matching a
* query in increasing order of doc Id, or provides an explanation of
* the score for a query for a given document.
* </p>
* <p>
* Document scores are computed using a given <code>Similarity</code>
* implementation.
* </p>
* @see BooleanQuery#setAllowDocsOutOfOrder
*/ */
public abstract class Scorer { public abstract class Scorer {
private Similarity similarity; private Similarity similarity;
@ -67,9 +76,19 @@ public abstract class Scorer {
return true; return true;
} }
/** Advances to the next document matching the query. /**
* Advances to the document matching this Scorer with the lowest doc Id
* greater then the current value of {@link doc()} (or to the matching
* document with the lowest doc Id if next has never been called on
* this Scorer).
*
* <p>
* When this method is used the {@link #explain(int)} method should not
* be used.
* </p>
*
* @return true iff there is another document matching the query. * @return true iff there is another document matching the query.
* <br>When this method is used the {@link #explain(int)} method should not be used. * @see BooleanQuery#setAllowDocsOutOfOrder
*/ */
public abstract boolean next() throws IOException; public abstract boolean next() throws IOException;
@ -84,12 +103,16 @@ public abstract class Scorer {
*/ */
public abstract float score() throws IOException; public abstract float score() throws IOException;
/** Skips to the first match beyond the current whose document number is /**
* Skips to the document matching this Scorer with the lowest doc Id
* greater than or equal to a given target. * greater than or equal to a given target.
* <br>When this method is used the {@link #explain(int)} method should not be used. *
* @param target The target document number. * <p>
* @return true iff there is such a match. * The behavior of this method is undefined if the target specified is
* <p>Behaves as if written: <pre> * less then or equal to the current value of {@link #doc()}
* <p>
* Behaves as if written:
* <pre>
* boolean skipTo(int target) { * boolean skipTo(int target) {
* do { * do {
* if (!next()) * if (!next())
@ -97,7 +120,18 @@ public abstract class Scorer {
* } while (target > doc()); * } while (target > doc());
* return true; * return true;
* } * }
* </pre>Most implementations are considerably more efficient than that. * </pre>
* Most implementations are considerably more efficient than that.
* </p>
*
* <p>
* When this method is used the {@link #explain(int)} method should not
* be used.
* </p>
*
* @param target The target document number.
* @return true iff there is such a match.
* @see BooleanQuery#setAllowDocsOutOfOrder
*/ */
public abstract boolean skipTo(int target) throws IOException; public abstract boolean skipTo(int target) throws IOException;