Class Weight
- All Implemented Interfaces:
SegmentCacheable
- Direct Known Subclasses:
ConstantScoreWeight,DisjunctionMaxQuery.DisjunctionMaxWeight,FilterWeight,IndriAndWeight,PhraseWeight
The purpose of Weight is to ensure searching does not modify a Query, so that
a Query instance can be reused.
IndexSearcher dependent state of the query should reside in the Weight.
LeafReader dependent state should reside in the Scorer.
Since Weight creates Scorer instances for a given LeafReaderContext (scorer(org.apache.lucene.index.LeafReaderContext)) callers must maintain the relationship
between the searcher's top-level IndexReaderContext and the context used to create a
Scorer.
A Weight is used in the following way:
- A
Weightis constructed by a top-level query, given aIndexSearcher(Query.createWeight(IndexSearcher, ScoreMode, float)). - A
Scoreris constructed byscorer(org.apache.lucene.index.LeafReaderContext).
- Since:
- 2.9
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprotected static classJust wraps a Scorer and performs top scoring using it.protected static final classA wrap for default scorer supplier. -
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionfinal BulkScorerbulkScorer(LeafReaderContext context) Helper method that delegates toscorerSupplier(LeafReaderContext).intcount(LeafReaderContext context) Counts the number of live documents that match a givenparentQueryin a leaf.abstract Explanationexplain(LeafReaderContext context, int doc) An explanation of the score computation for the named document.final QuerygetQuery()The query that this concerns.matches(LeafReaderContext context, int doc) ReturnsMatchesfor a specific document, ornullif the document does not match the parent queryfinal Scorerscorer(LeafReaderContext context) Optional method that delegates to scorerSupplier.abstract ScorerSupplierscorerSupplier(LeafReaderContext context) Get aScorerSupplier, which allows knowing the cost of theScorerbefore building it.Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.apache.lucene.search.SegmentCacheable
isCacheable
-
Field Details
-
parentQuery
-
-
Constructor Details
-
Weight
Sole constructor, typically invoked by sub-classes.- Parameters:
query- the parent query
-
-
Method Details
-
matches
ReturnsMatchesfor a specific document, ornullif the document does not match the parent queryA query match that contains no position information (for example, a Point or DocValues query) will return
MatchesUtils.MATCH_WITH_NO_TERMS- Parameters:
context- the reader's context to create theMatchesfordoc- the document's id relative to the given context's reader- Throws:
IOException- WARNING: This API is experimental and might change in incompatible ways in the next release.
-
explain
An explanation of the score computation for the named document.- Parameters:
context- the readers context to create theExplanationfor.doc- the document's id relative to the given context's reader- Returns:
- an Explanation for the score
- Throws:
IOException- if anIOExceptionoccurs
-
getQuery
The query that this concerns. -
scorer
Optional method that delegates to scorerSupplier.Returns a
Scorerwhich can iterate in order over all matching documents and assign them a score. A scorer for the sameLeafReaderContextinstance may be requested multiple times as part of a single search call.NOTE: null can be returned if no documents will be scored by this query.
NOTE: The returned
Scorerdoes not haveLeafReader.getLiveDocs()applied, they need to be checked on top.- Parameters:
context- theLeafReaderContextfor which to return theScorer.- Returns:
- a
Scorerwhich scores documents in/out-of order. - Throws:
IOException- if there is a low-level I/O error
-
scorerSupplier
Get aScorerSupplier, which allows knowing the cost of theScorerbefore building it. A scorer supplier for the sameLeafReaderContextinstance may be requested multiple times as part of a single search call.Note: It must return null if the scorer is null.
- Parameters:
context- the leaf reader context- Returns:
- a
ScorerSupplierproviding the scorer, or null if scorer is null - Throws:
IOException- if an IOException occurs- See Also:
-
bulkScorer
Helper method that delegates toscorerSupplier(LeafReaderContext). It is implemented asScorerSupplier scorerSupplier = scorerSupplier(context); if (scorerSupplier == null) { // No docs match return null; } scorerSupplier.setTopLevelScoringClause(); return scorerSupplier.bulkScorer();A bulk scorer for the sameLeafReaderContextinstance may be requested multiple times as part of a single search call.- Throws:
IOException
-
count
Counts the number of live documents that match a givenparentQueryin a leaf.The default implementation returns -1 for every query. This indicates that the count could not be computed in sub-linear time.
Specific query classes should override it to provide other accurate sub-linear implementations (that actually return the count). Look at
MatchAllDocsQuery.createWeight(IndexSearcher, ScoreMode, float)for an exampleWe use this property of the function to count hits in
IndexSearcher.count(Query).- Parameters:
context- theLeafReaderContextfor which to return the count.- Returns:
- integer count of the number of matches
- Throws:
IOException- if there is a low-level I/O error
-