xapian-core  1.4.27
Classes | Public Member Functions | Private Member Functions | Private Attributes | List of all members
MultiAndPostList Class Reference

N-way AND postlist. More...

#include <multiandpostlist.h>

+ Inheritance diagram for MultiAndPostList:
+ Collaboration diagram for MultiAndPostList:

Classes

struct  ComparePostListTermFreqAscending
 Comparison functor which orders PostList* by ascending get_termfreq_est(). More...
 

Public Member Functions

template<class RandomItor >
 MultiAndPostList (RandomItor pl_begin, RandomItor pl_end, MultiMatch *matcher_, Xapian::doccount db_size_)
 Construct from 2 random-access iterators to a container of PostList*, a pointer to the matcher, and the document collection size. More...
 
 MultiAndPostList (PostList *l, PostList *r, double lmax, double rmax, MultiMatch *matcher_, Xapian::doccount db_size_)
 Construct as the decay product of an OrPostList or AndMaybePostList. More...
 
 ~MultiAndPostList ()
 
Xapian::doccount get_termfreq_min () const
 Get a lower bound on the number of documents indexed by this term. More...
 
Xapian::doccount get_termfreq_max () const
 Get an upper 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...
 
double get_maxweight () const
 Return an upper bound on what get_weight() can return. More...
 
Xapian::docid get_docid () const
 Return the current docid. More...
 
Xapian::termcount get_doclength () const
 Return the length of current document. More...
 
Xapian::termcount get_unique_terms () const
 Return the number of unique terms in the current document. More...
 
double get_weight () const
 Return the weight contribution for the current position. More...
 
bool at_end () const
 Return true if the current position is past the last entry in this list. 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, double w_min)
 Skip forward to the specified docid. More...
 
std::string get_description () const
 Return a string description of this object. More...
 
Xapian::termcount get_wdf () const
 get_wdf() for MultiAndPostlists returns the sum of the wdfs of the sub postlists. 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 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...
 
virtual Internalcheck (Xapian::docid did, double w_min, bool &valid)
 Check if the specified docid occurs in this 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 Member Functions

void operator= (const MultiAndPostList &)
 Don't allow assignment. More...
 
 MultiAndPostList (const MultiAndPostList &)
 Don't allow copying. More...
 
double new_min (double w_min, size_t n)
 Calculate the new minimum weight for sub-postlist n. More...
 
void next_helper (size_t n, double w_min)
 Call next on a sub-postlist n, and handle any pruning. More...
 
void skip_to_helper (size_t n, Xapian::docid did_min, double w_min)
 Call skip_to on a sub-postlist n, and handle any pruning. More...
 
void check_helper (size_t n, Xapian::docid did_min, double w_min, bool &valid)
 Call check on a sub-postlist n, and handle any pruning. More...
 
void allocate_plist_and_max_wt ()
 Allocate plist and max_wt arrays of n_kids each. More...
 
PostListfind_next_match (double w_min)
 Advance the sublists to the next match. More...
 

Private Attributes

Xapian::docid did
 The current docid, or zero if we haven't started or are at_end. More...
 
size_t n_kids
 The number of sub-postlists. More...
 
PostList ** plist
 Array of pointers to sub-postlists. More...
 
double * max_wt
 Array of maximum weights for the sub-postlists. More...
 
double max_total
 Total maximum weight (== sum of max_wt values). More...
 
Xapian::doccount db_size
 The number of documents in the database. More...
 
MultiMatchmatcher
 Pointer to the matcher object, so we can report pruning. More...
 

Additional Inherited Members

- Public Attributes inherited from Xapian::Internal::intrusive_base
unsigned _refs
 Reference count. More...
 
- Protected Member Functions inherited from Xapian::PostingIterator::Internal
 Internal ()
 Only constructable as a base class for derived classes. More...
 

Detailed Description

N-way AND postlist.

Definition at line 32 of file multiandpostlist.h.

Constructor & Destructor Documentation

◆ MultiAndPostList() [1/3]

MultiAndPostList::MultiAndPostList ( const MultiAndPostList )
private

◆ MultiAndPostList() [2/3]

template<class RandomItor >
MultiAndPostList::MultiAndPostList ( RandomItor  pl_begin,
RandomItor  pl_end,
MultiMatch matcher_,
Xapian::doccount  db_size_ 
)
inline

Construct from 2 random-access iterators to a container of PostList*, a pointer to the matcher, and the document collection size.

Definition at line 122 of file multiandpostlist.h.

References allocate_plist_and_max_wt().

◆ MultiAndPostList() [3/3]

MultiAndPostList::MultiAndPostList ( PostList l,
PostList r,
double  lmax,
double  rmax,
MultiMatch matcher_,
Xapian::doccount  db_size_ 
)
inline

◆ ~MultiAndPostList()

MultiAndPostList::~MultiAndPostList ( )

Definition at line 43 of file multiandpostlist.cc.

Referenced by MultiAndPostList().

Member Function Documentation

◆ allocate_plist_and_max_wt()

void MultiAndPostList::allocate_plist_and_max_wt ( )
private

Allocate plist and max_wt arrays of n_kids each.

Exceptions
std::bad_alloc.

Definition at line 31 of file multiandpostlist.cc.

Referenced by check_helper(), and MultiAndPostList().

◆ at_end()

bool MultiAndPostList::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 191 of file multiandpostlist.cc.

Referenced by MultiAndPostList().

◆ check_helper()

void MultiAndPostList::check_helper ( size_t  n,
Xapian::docid  did_min,
double  w_min,
bool &  valid 
)
inlineprivate

Call check on a sub-postlist n, and handle any pruning.

Definition at line 97 of file multiandpostlist.h.

References allocate_plist_and_max_wt(), Xapian::PostingIterator::Internal::check(), find_next_match(), new_min(), and MultiMatch::recalc_maxweight().

◆ count_matching_subqs()

Xapian::termcount MultiAndPostList::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 275 of file multiandpostlist.cc.

Referenced by MultiAndPostList().

◆ find_next_match()

PostList * MultiAndPostList::find_next_match ( double  w_min)
private

Advance the sublists to the next match.

Definition at line 209 of file multiandpostlist.cc.

References Xapian::PostingIterator::Internal::get_docid().

Referenced by check_helper().

◆ gather_position_lists()

void MultiAndPostList::gather_position_lists ( OrPositionList orposlist)
virtual

Gather PositionList* objects for a subtree.

Reimplemented from Xapian::PostingIterator::Internal.

Definition at line 285 of file multiandpostlist.cc.

Referenced by MultiAndPostList().

◆ get_description()

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

Return a string description of this object.

Implements Xapian::PostingIterator::Internal.

Definition at line 252 of file multiandpostlist.cc.

Referenced by MultiAndPostList().

◆ get_docid()

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

Return the current docid.

Implements Xapian::PostingIterator::Internal.

Definition at line 152 of file multiandpostlist.cc.

Referenced by MultiAndPostList().

◆ get_doclength()

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

Return the length of current document.

Implements Xapian::PostingIterator::Internal.

Definition at line 158 of file multiandpostlist.cc.

References Assert, and AssertEq.

Referenced by MultiAndPostList().

◆ get_maxweight()

double MultiAndPostList::get_maxweight ( ) const
virtual

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

Implements Xapian::PostingIterator::Internal.

Definition at line 146 of file multiandpostlist.cc.

Referenced by MultiAndPostList().

◆ get_termfreq_est()

Xapian::doccount MultiAndPostList::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 92 of file multiandpostlist.cc.

References Assert, and LOGCALL.

Referenced by get_termfreq_min(), and MultiAndPostList().

◆ get_termfreq_est_using_stats()

TermFreqs MultiAndPostList::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 108 of file multiandpostlist.cc.

References Assert, Xapian::Weight::Internal::collection_size, TermFreqs::collfreq, if(), LOGCALL, TermFreqs::reltermfreq, RETURN, Xapian::Weight::Internal::rset_size, TermFreqs::termfreq, Xapian::Weight::Internal::total_length, and usual.

Referenced by MultiAndPostList().

◆ get_termfreq_max()

Xapian::doccount MultiAndPostList::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 80 of file multiandpostlist.cc.

Referenced by MultiAndPostList().

◆ get_termfreq_min()

Xapian::doccount MultiAndPostList::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 55 of file multiandpostlist.cc.

References AssertRelParanoid, and get_termfreq_est().

Referenced by MultiAndPostList().

◆ get_unique_terms()

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

Return the number of unique terms in the current document.

Implements Xapian::PostingIterator::Internal.

Definition at line 169 of file multiandpostlist.cc.

References Assert, and AssertEq.

Referenced by MultiAndPostList().

◆ get_wdf()

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

get_wdf() for MultiAndPostlists returns the sum of the wdfs of the sub postlists.

The wdf isn't really meaningful in many situations, but if the lists are being combined as a synonym we want the sum of the wdfs, so we do that in general.

Reimplemented from Xapian::PostingIterator::Internal.

Definition at line 265 of file multiandpostlist.cc.

Referenced by MultiAndPostList().

◆ get_weight()

double MultiAndPostList::get_weight ( ) const
virtual

Return the weight contribution for the current position.

Implements Xapian::PostingIterator::Internal.

Definition at line 180 of file multiandpostlist.cc.

References Assert.

Referenced by MultiAndPostList().

◆ new_min()

double MultiAndPostList::new_min ( double  w_min,
size_t  n 
)
inlineprivate

Calculate the new minimum weight for sub-postlist n.

Definition at line 70 of file multiandpostlist.h.

Referenced by check_helper(), next_helper(), and skip_to_helper().

◆ next()

PostList * MultiAndPostList::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 238 of file multiandpostlist.cc.

◆ next_helper()

void MultiAndPostList::next_helper ( size_t  n,
double  w_min 
)
inlineprivate

Call next on a sub-postlist n, and handle any pruning.

Definition at line 75 of file multiandpostlist.h.

References new_min(), Xapian::PostingIterator::Internal::next(), and MultiMatch::recalc_maxweight().

◆ operator=()

void MultiAndPostList::operator= ( const MultiAndPostList )
private

◆ recalc_maxweight()

double MultiAndPostList::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 197 of file multiandpostlist.cc.

Referenced by MultiAndPostList().

◆ skip_to()

PostList * MultiAndPostList::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 245 of file multiandpostlist.cc.

Referenced by MultiAndPostList().

◆ skip_to_helper()

void MultiAndPostList::skip_to_helper ( size_t  n,
Xapian::docid  did_min,
double  w_min 
)
inlineprivate

Call skip_to on a sub-postlist n, and handle any pruning.

Definition at line 86 of file multiandpostlist.h.

References new_min(), MultiMatch::recalc_maxweight(), and Xapian::PostingIterator::Internal::skip_to().

Member Data Documentation

◆ db_size

Xapian::doccount MultiAndPostList::db_size
private

The number of documents in the database.

Definition at line 64 of file multiandpostlist.h.

◆ did

Xapian::docid MultiAndPostList::did
private

The current docid, or zero if we haven't started or are at_end.

Definition at line 49 of file multiandpostlist.h.

◆ matcher

MultiMatch* MultiAndPostList::matcher
private

Pointer to the matcher object, so we can report pruning.

Definition at line 67 of file multiandpostlist.h.

◆ max_total

double MultiAndPostList::max_total
private

Total maximum weight (== sum of max_wt values).

Definition at line 61 of file multiandpostlist.h.

◆ max_wt

double* MultiAndPostList::max_wt
private

Array of maximum weights for the sub-postlists.

Definition at line 58 of file multiandpostlist.h.

◆ n_kids

size_t MultiAndPostList::n_kids
private

The number of sub-postlists.

Definition at line 52 of file multiandpostlist.h.

◆ plist

PostList** MultiAndPostList::plist
private

Array of pointers to sub-postlists.

Definition at line 55 of file multiandpostlist.h.


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