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
Weight
is to ensure searching does not modify aQuery
, so that aQuery
instance can be reused.IndexSearcher
dependent state of the query should reside in theWeight
.LeafReader
dependent state should reside in theScorer
.Since
Weight
createsScorer
instances for a givenLeafReaderContext
(scorer(org.apache.lucene.index.LeafReaderContext)
) callers must maintain the relationship between the searcher's top-levelIndexReaderContext
and the context used to create aScorer
.A
Weight
is used in the following way:- A
Weight
is constructed by a top-level query, given aIndexSearcher
(Query.createWeight(IndexSearcher, ScoreMode, float)
). - A
Scorer
is constructed byscorer(org.apache.lucene.index.LeafReaderContext)
.
- Since:
- 2.9
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected static class
Weight.DefaultBulkScorer
Just wraps a Scorer and performs top scoring using it.
-
Field Summary
Fields Modifier and Type Field Description protected Query
parentQuery
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description BulkScorer
bulkScorer(LeafReaderContext context)
Optional method, to return aBulkScorer
to score the query and send hits to aCollector
.int
count(LeafReaderContext context)
Counts the number of live documents that match a givenparentQuery
in a leaf.abstract Explanation
explain(LeafReaderContext context, int doc)
An explanation of the score computation for the named document.Query
getQuery()
The query that this concerns.Matches
matches(LeafReaderContext context, int doc)
ReturnsMatches
for a specific document, ornull
if the document does not match the parent queryabstract Scorer
scorer(LeafReaderContext context)
Returns aScorer
which can iterate in order over all matching documents and assign them a score.ScorerSupplier
scorerSupplier(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
ReturnsMatches
for a specific document, ornull
if 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 theMatches
fordoc
- 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 theExplanation
for.doc
- the document's id relative to the given context's reader- Returns:
- an Explanation for the score
- Throws:
IOException
- if anIOException
occurs
-
getQuery
public final Query getQuery()
The query that this concerns.
-
scorer
public abstract Scorer scorer(LeafReaderContext context) throws IOException
Returns aScorer
which 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
Scorer
does not haveLeafReader.getLiveDocs()
applied, they need to be checked on top.- Parameters:
context
- theLeafReaderContext
for which to return theScorer
.- Returns:
- a
Scorer
which 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 theScorer
before building it. The default implementation callsscorer(org.apache.lucene.index.LeafReaderContext)
and builds aScorerSupplier
wrapper around it.- Throws:
IOException
- See Also:
scorer(org.apache.lucene.index.LeafReaderContext)
-
bulkScorer
public BulkScorer bulkScorer(LeafReaderContext context) throws IOException
Optional method, to return aBulkScorer
to 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 normalScorer
and iterates and collects the resulting hits which are not marked as deleted.- Parameters:
context
- theLeafReaderContext
for which to return theScorer
.- Returns:
- a
BulkScorer
which 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 givenparentQuery
in 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
- theLeafReaderContext
for which to return the count.- Returns:
- integer count of the number of matches
- Throws:
IOException
- if there is a low-level I/O error
-
-