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
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
Modifier and TypeClassDescriptionprotected static class
Just wraps a Scorer and performs top scoring using it. -
Field Summary
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionbulkScorer
(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.final Query
getQuery()
The query that this concerns.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
(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 Details
-
parentQuery
-
-
Constructor Details
-
Weight
Sole constructor, typically invoked by sub-classes.- Parameters:
query
- the parent query
-
-
Method Details
-
matches
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
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
The query that this concerns. -
scorer
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
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:
-
bulkScorer
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
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
-