Class Weight
- java.lang.Object
-
- org.apache.lucene.search.Weight
-
- All Implemented Interfaces:
SegmentCacheable
- Direct Known Subclasses:
ConstantScoreWeight,DisjunctionMaxQuery.DisjunctionMaxWeight,FilterWeight,IndriAndWeight,PhraseWeight
public abstract class Weight extends Object implements SegmentCacheable
Expert: Calculate query weights and build query scorers.The purpose of
Weightis to ensure searching does not modify aQuery, so that aQueryinstance can be reused.IndexSearcherdependent state of the query should reside in theWeight.LeafReaderdependent state should reside in theScorer.Since
WeightcreatesScorerinstances for a givenLeafReaderContext(scorer(org.apache.lucene.index.LeafReaderContext)) callers must maintain the relationship between the searcher's top-levelIndexReaderContextand the context used to create aScorer.A
Weightis 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 Classes Modifier and Type Class Description protected static classWeight.DefaultBulkScorerJust wraps a Scorer and performs top scoring using it.
-
Field Summary
Fields Modifier and Type Field Description protected QueryparentQuery
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description BulkScorerbulkScorer(LeafReaderContext context)Optional method, to return aBulkScorerto score the query and send hits to aCollector.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.QuerygetQuery()The query that this concerns.Matchesmatches(LeafReaderContext context, int doc)ReturnsMatchesfor a specific document, ornullif the document does not match the parent queryabstract Scorerscorer(LeafReaderContext context)Returns aScorerwhich can iterate in order over all matching documents and assign them a score.ScorerSupplierscorerSupplier(LeafReaderContext context)Optional method.-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.apache.lucene.search.SegmentCacheable
isCacheable
-
-
-
-
Field Detail
-
parentQuery
protected final Query parentQuery
-
-
Constructor Detail
-
Weight
protected Weight(Query query)
Sole constructor, typically invoked by sub-classes.- Parameters:
query- the parent query
-
-
Method Detail
-
matches
public Matches matches(LeafReaderContext context, int doc) throws IOException
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
public abstract Explanation explain(LeafReaderContext context, int doc) throws IOException
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
public final Query getQuery()
The query that this concerns.
-
scorer
public abstract Scorer scorer(LeafReaderContext context) throws IOException
Returns aScorerwhich can iterate in order over all matching documents and assign them a score.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
public ScorerSupplier scorerSupplier(LeafReaderContext context) throws IOException
Optional method. Get aScorerSupplier, which allows to know the cost of theScorerbefore building it. The default implementation callsscorer(org.apache.lucene.index.LeafReaderContext)and builds aScorerSupplierwrapper around it.- Throws:
IOException- See Also:
scorer(org.apache.lucene.index.LeafReaderContext)
-
bulkScorer
public BulkScorer bulkScorer(LeafReaderContext context) throws IOException
Optional method, to return aBulkScorerto score the query and send hits to aCollector. Only queries that have a different top-level approach need to override this; the default implementation pulls a normalScorerand iterates and collects the resulting hits which are not marked as deleted.- Parameters:
context- theLeafReaderContextfor which to return theScorer.- Returns:
- a
BulkScorerwhich scores documents and passes them to a collector. - Throws:
IOException- if there is a low-level I/O error
-
count
public int count(LeafReaderContext context) throws IOException
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
-
-