xapian-core  1.4.25
Public Member Functions | Private Attributes | List of all members
OrPostList Class Reference

A postlist comprising two postlists ORed together. More...

#include <orpostlist.h>

+ Inheritance diagram for OrPostList:
+ Collaboration diagram for OrPostList:

Public Member Functions

Xapian::doccount get_termfreq_max () const
 Get an upper bound on the number of documents indexed by this term. More...
 
Xapian::doccount get_termfreq_min () const
 Get a lower bound on the number of documents indexed by this term. More...
 
Xapian::doccount get_termfreq_est () const
 Get an estimate of the number of documents indexed by this term. More...
 
TermFreqs get_termfreq_est_using_stats (const Xapian::Weight::Internal &stats) const
 Get an estimate for the termfreq and reltermfreq, given the stats. More...
 
Xapian::docid get_docid () const
 Return the current docid. More...
 
double get_weight () const
 Return the weight contribution for the current position. More...
 
double get_maxweight () const
 Return an upper bound on what get_weight() can return. More...
 
double recalc_maxweight ()
 Recalculate the upper bound on what get_weight() can return. More...
 
PostListnext (double w_min)
 Advance the current position to the next document in the postlist. More...
 
PostListskip_to (Xapian::docid did, double w_min)
 Skip forward to the specified docid. More...
 
PostListcheck (Xapian::docid did, double w_min, bool &valid)
 Check if the specified docid occurs in this postlist. More...
 
bool at_end () const
 Return true if the current position is past the last entry in this list. More...
 
std::string get_description () const
 Return a string description of this object. More...
 
virtual Xapian::termcount get_doclength () const
 Return the document length of the document the current term comes from. More...
 
virtual Xapian::termcount get_unique_terms () const
 Return the number of unique terms in the document. More...
 
 OrPostList (PostList *left_, PostList *right_, MultiMatch *matcher_, Xapian::doccount dbsize_)
 
Xapian::termcount get_wdf () const
 get_wdf() for OR postlists returns the sum of the wdfs of the sub postlists which are at the current document - this is desirable when the OR is part of a synonym. More...
 
Xapian::termcount count_matching_subqs () const
 Count the number of leaf subqueries which match at the current position. More...
 
void gather_position_lists (OrPositionList *orposlist)
 Gather PositionList* objects for a subtree. More...
 
- Public Member Functions inherited from BranchPostList
 BranchPostList (PostList *l_, PostList *r_, MultiMatch *matcher_)
 
virtual ~BranchPostList ()
 
- Public Member Functions inherited from Xapian::PostingIterator::Internal
virtual ~Internal ()
 We have virtual methods and want to be able to delete derived classes using a pointer to the base class, so we need a virtual destructor. More...
 
virtual const std::string * get_sort_key () const
 
virtual const std::string * get_collapse_key () const
 If the collapse key is already known, return it. More...
 
virtual PositionListread_position_list ()
 Read the position list for the term in the current document and return a pointer to it (owned by the PostList). More...
 
virtual PositionListopen_position_list () const
 Read the position list for the term in the current document and return a pointer to it (not owned by the PostList). More...
 
Internalnext ()
 Advance the current position to the next document in the postlist. More...
 
Internalskip_to (Xapian::docid did)
 Skip forward to the specified docid. More...
 
- Public Member Functions inherited from Xapian::Internal::intrusive_base
 intrusive_base ()
 Construct with no references. More...
 

Private Attributes

Xapian::docid lhead
 
Xapian::docid rhead
 
bool lvalid
 
bool rvalid
 
double lmax
 
double rmax
 
double minmax
 
Xapian::doccount dbsize
 

Additional Inherited Members

- Public Attributes inherited from Xapian::Internal::intrusive_base
unsigned _refs
 Reference count. More...
 
- Protected Member Functions inherited from BranchPostList
void handle_prune (PostList *&kid, PostList *ret)
 Utility method, to call recalc_maxweight() and do the pruning if a next() or skip_to() returns non-NULL result. More...
 
- Protected Member Functions inherited from Xapian::PostingIterator::Internal
 Internal ()
 Only constructable as a base class for derived classes. More...
 
- Protected Attributes inherited from BranchPostList
PostListl
 Left sub-postlist. More...
 
PostListr
 Right sub-postlist. More...
 
MultiMatchmatcher
 The object which is using this postlist to perform a match. More...
 

Detailed Description

A postlist comprising two postlists ORed together.

This postlist returns a posting if it is in either of the sub-postlists. The weight for a posting is the sum of the weights of the sub-postings, if both exist, or the sum of the single sub-posting which exists otherwise.

Definition at line 38 of file orpostlist.h.

Constructor & Destructor Documentation

◆ OrPostList()

OrPostList::OrPostList ( PostList left_,
PostList right_,
MultiMatch matcher_,
Xapian::doccount  dbsize_ 
)

Member Function Documentation

◆ at_end()

bool OrPostList::at_end ( ) const
virtual

Return true if the current position is past the last entry in this list.

Implements Xapian::PostingIterator::Internal.

Definition at line 385 of file orpostlist.cc.

References AssertParanoid, Xapian::PostingIterator::Internal::at_end(), BranchPostList::l, LOGCALL, BranchPostList::r, and RETURN.

◆ check()

PostList * OrPostList::check ( Xapian::docid  did,
double  w_min,
bool &  valid 
)
virtual

Check if the specified docid occurs in this postlist.

The caller is required to ensure that the specified docid actually exists in the database.

This method acts like skip_to() if that can be done at little extra cost, in which case it then sets valid to true.

Otherwise it simply checks if a particular docid is present. If it is, valid is set to true. If it isn't, it sets valid to false, and leaves the position unspecified (and hence the result of calling methods which depend on the current position, such as get_docid() and at_end(), are also unspecified). In this state, next() will advance to the first matching position after docid, and skip_to() will act as it would if the position was the first matching position after docid. If valid is set to false, then NULL must be returned (pruning in this situation doesn't make sense).

The default implementation calls skip_to().

Reimplemented from Xapian::PostingIterator::Internal.

Definition at line 196 of file orpostlist.cc.

References Assert, Xapian::PostingIterator::Internal::at_end(), check_handling_prune(), dbsize, Xapian::PostingIterator::Internal::get_docid(), BranchPostList::handle_prune(), BranchPostList::l, lhead, lmax, LOGCALL, LOGLINE, lvalid, BranchPostList::matcher, minmax, BranchPostList::r, RETURN, rhead, rmax, rvalid, and AndMaybePostList::sync_rhs().

◆ count_matching_subqs()

Xapian::termcount OrPostList::count_matching_subqs ( ) const
virtual

Count the number of leaf subqueries which match at the current position.

Reimplemented from Xapian::PostingIterator::Internal.

Definition at line 449 of file orpostlist.cc.

References Xapian::PostingIterator::Internal::count_matching_subqs(), BranchPostList::l, lhead, LOGCALL, BranchPostList::r, RETURN, and rhead.

◆ gather_position_lists()

void OrPostList::gather_position_lists ( OrPositionList orposlist)
virtual

Gather PositionList* objects for a subtree.

Reimplemented from Xapian::PostingIterator::Internal.

Definition at line 458 of file orpostlist.cc.

References Xapian::PostingIterator::Internal::gather_position_lists(), BranchPostList::l, lhead, BranchPostList::r, and rhead.

◆ get_description()

std::string OrPostList::get_description ( ) const
virtual

Return a string description of this object.

Implements Xapian::PostingIterator::Internal.

Definition at line 394 of file orpostlist.cc.

References Xapian::PostingIterator::Internal::get_description(), BranchPostList::l, and BranchPostList::r.

◆ get_docid()

Xapian::docid OrPostList::get_docid ( ) const
virtual

Return the current docid.

Implements Xapian::PostingIterator::Internal.

Definition at line 345 of file orpostlist.cc.

References Assert, lhead, LOGCALL, RETURN, and rhead.

◆ get_doclength()

Xapian::termcount OrPostList::get_doclength ( ) const
virtual

Return the document length of the document the current term comes from.

This is obtained by asking the subpostlist which contains the current document for the document length. If both subpostlists are valid, the left one is asked.

Implements Xapian::PostingIterator::Internal.

Definition at line 400 of file orpostlist.cc.

References Assert, Xapian::PostingIterator::Internal::get_doclength(), BranchPostList::l, lhead, LOGCALL, LOGLINE, BranchPostList::r, RETURN, and rhead.

◆ get_maxweight()

double OrPostList::get_maxweight ( ) const
virtual

Return an upper bound on what get_weight() can return.

Implements Xapian::PostingIterator::Internal.

Definition at line 365 of file orpostlist.cc.

References lmax, LOGCALL, RETURN, and rmax.

Referenced by recalc_maxweight().

◆ get_termfreq_est()

Xapian::doccount OrPostList::get_termfreq_est ( ) const
virtual

Get an estimate of the number of documents indexed by this term.

It should always be true that: get_termfreq_min() <= get_termfreq_est() <= get_termfreq_max()

Implements Xapian::PostingIterator::Internal.

Definition at line 291 of file orpostlist.cc.

References dbsize, est(), Xapian::PostingIterator::Internal::get_termfreq_est(), BranchPostList::l, LOGCALL, BranchPostList::r, rare, and RETURN.

◆ get_termfreq_est_using_stats()

TermFreqs OrPostList::get_termfreq_est_using_stats ( const Xapian::Weight::Internal stats) const
virtual

Get an estimate for the termfreq and reltermfreq, given the stats.

The frequencies may be for a combination of databases, or for just the relevant documents, so the results need not lie in the bounds given by get_termfreq_min() and get_termfreq_max().

Reimplemented from Xapian::PostingIterator::Internal.

Definition at line 312 of file orpostlist.cc.

References Assert, Xapian::Weight::Internal::collection_size, est(), Xapian::PostingIterator::Internal::get_termfreq_est_using_stats(), BranchPostList::l, LOGCALL, BranchPostList::r, RETURN, Xapian::Weight::Internal::rset_size, and Xapian::Weight::Internal::total_length.

◆ get_termfreq_max()

Xapian::doccount OrPostList::get_termfreq_max ( ) const
virtual

Get an upper bound on the number of documents indexed by this term.

Implements Xapian::PostingIterator::Internal.

Definition at line 277 of file orpostlist.cc.

References dbsize, Xapian::PostingIterator::Internal::get_termfreq_max(), BranchPostList::l, LOGCALL, BranchPostList::r, and RETURN.

◆ get_termfreq_min()

Xapian::doccount OrPostList::get_termfreq_min ( ) const
virtual

Get a lower bound on the number of documents indexed by this term.

Implements Xapian::PostingIterator::Internal.

Definition at line 284 of file orpostlist.cc.

References Xapian::PostingIterator::Internal::get_termfreq_min(), BranchPostList::l, LOGCALL, BranchPostList::r, and RETURN.

◆ get_unique_terms()

Xapian::termcount OrPostList::get_unique_terms ( ) const
virtual

Return the number of unique terms in the document.

Implements Xapian::PostingIterator::Internal.

Definition at line 420 of file orpostlist.cc.

References Assert, Xapian::PostingIterator::Internal::get_unique_terms(), BranchPostList::l, lhead, LOGCALL, LOGLINE, BranchPostList::r, RETURN, and rhead.

◆ get_wdf()

Xapian::termcount OrPostList::get_wdf ( ) const
virtual

get_wdf() for OR postlists returns the sum of the wdfs of the sub postlists which are at the current document - this is desirable when the OR is part of a synonym.

Reimplemented from Xapian::PostingIterator::Internal.

Definition at line 440 of file orpostlist.cc.

References Xapian::PostingIterator::Internal::get_wdf(), BranchPostList::l, lhead, LOGCALL, BranchPostList::r, RETURN, and rhead.

◆ get_weight()

double OrPostList::get_weight ( ) const
virtual

Return the weight contribution for the current position.

Implements Xapian::PostingIterator::Internal.

Definition at line 354 of file orpostlist.cc.

References Assert, Xapian::PostingIterator::Internal::get_weight(), BranchPostList::l, lhead, LOGCALL, BranchPostList::r, RETURN, and rhead.

◆ next()

PostList * OrPostList::next ( double  w_min)
virtual

Advance the current position to the next document in the postlist.

The list starts before the first entry in the list, so next(), skip_to() or check() must be called before any methods which need the context of the current position.

Parameters
w_minThe minimum weight contribution that is needed (this is just a hint which PostList subclasses may ignore).
Returns
If a non-NULL pointer is returned, then the caller should substitute the returned pointer for its pointer to us, and then delete us. This "pruning" can only happen for a non-leaf subclass of this class.

Implements Xapian::PostingIterator::Internal.

Definition at line 51 of file orpostlist.cc.

References Assert, Xapian::PostingIterator::Internal::at_end(), dbsize, Xapian::PostingIterator::Internal::get_docid(), BranchPostList::handle_prune(), BranchPostList::l, lhead, lmax, LOGCALL, LOGLINE, lvalid, BranchPostList::matcher, minmax, next_handling_prune(), BranchPostList::r, RETURN, rhead, rmax, rvalid, skip_to_handling_prune(), and AndMaybePostList::sync_rhs().

◆ recalc_maxweight()

double OrPostList::recalc_maxweight ( )
virtual

Recalculate the upper bound on what get_weight() can return.

If the tree has pruned, get_maxweight() may use cached values. Calling this method instead forces a full recalculation.

Note that this method may be called after the postlist has reached the end. In this situation, the method should return 0.

Implements Xapian::PostingIterator::Internal.

Definition at line 372 of file orpostlist.cc.

References get_maxweight(), BranchPostList::l, lmax, LOGCALL, minmax, BranchPostList::r, Xapian::PostingIterator::Internal::recalc_maxweight(), RETURN, and rmax.

◆ skip_to()

PostList * OrPostList::skip_to ( Xapian::docid  did,
double  w_min 
)
virtual

Skip forward to the specified docid.

If the specified docid isn't in the list, position ourselves on the first document after it (or at_end() if no greater docids are present).

Parameters
w_minThe minimum weight contribution that is needed (this is just a hint which PostList subclasses may ignore).
Returns
If a non-NULL pointer is returned, then the caller should substitute the returned pointer for its pointer to us, and then delete us. This "pruning" can only happen for a non-leaf subclass of this class.

Implements Xapian::PostingIterator::Internal.

Definition at line 131 of file orpostlist.cc.

References Assert, Xapian::PostingIterator::Internal::at_end(), dbsize, Xapian::PostingIterator::Internal::get_docid(), BranchPostList::handle_prune(), BranchPostList::l, lhead, lmax, LOGCALL, LOGLINE, lvalid, BranchPostList::matcher, minmax, BranchPostList::r, RETURN, rhead, rmax, rvalid, skip_to_handling_prune(), and AndMaybePostList::sync_rhs().

Member Data Documentation

◆ dbsize

Xapian::doccount OrPostList::dbsize
private

Definition at line 43 of file orpostlist.h.

Referenced by check(), get_termfreq_est(), get_termfreq_max(), next(), and skip_to().

◆ lhead

Xapian::docid OrPostList::lhead
private

◆ lmax

double OrPostList::lmax
private

Definition at line 42 of file orpostlist.h.

Referenced by check(), get_maxweight(), next(), recalc_maxweight(), and skip_to().

◆ lvalid

bool OrPostList::lvalid
private

Definition at line 41 of file orpostlist.h.

Referenced by check(), next(), and skip_to().

◆ minmax

double OrPostList::minmax
private

Definition at line 42 of file orpostlist.h.

Referenced by check(), next(), recalc_maxweight(), and skip_to().

◆ rhead

Xapian::docid OrPostList::rhead
private

◆ rmax

double OrPostList::rmax
private

Definition at line 42 of file orpostlist.h.

Referenced by check(), get_maxweight(), next(), recalc_maxweight(), and skip_to().

◆ rvalid

bool OrPostList::rvalid
private

Definition at line 41 of file orpostlist.h.

Referenced by check(), next(), and skip_to().


The documentation for this class was generated from the following files: