Classes | Public Types | Public Member Functions | Static Public Member Functions | Static Public Attributes | List of all members
Xapian::Query Class Reference

Class representing a query. More...

Public Types

enum  op {
  OP_AND = 0, OP_OR = 1, OP_AND_NOT = 2, OP_XOR = 3,
  OP_AND_MAYBE = 4, OP_FILTER = 5, OP_NEAR = 6, OP_PHRASE = 7,
  OP_VALUE_RANGE = 8, OP_SCALE_WEIGHT = 9, OP_ELITE_SET = 10, OP_VALUE_GE = 11,
  OP_VALUE_LE = 12, OP_SYNONYM = 13, OP_MAX = 14, OP_WILDCARD = 15,
  OP_INVALID = 99, LEAF_TERM = 100, LEAF_POSTING_SOURCE, LEAF_MATCH_ALL,
  LEAF_MATCH_NOTHING
}
 Query operators. More...
 
enum  { WILDCARD_LIMIT_ERROR, WILDCARD_LIMIT_FIRST, WILDCARD_LIMIT_MOST_FREQUENT }
 

Public Member Functions

 Query ()
 Default constructor.
 
 ~Query ()
 Destructor.
 
 Query (const Query &o)
 Copying is allowed. More...
 
Queryoperator= (const Query &o)
 Copying is allowed. More...
 
 Query (const std::string &term, Xapian::termcount wqf=1, Xapian::termpos pos=0)
 Construct a Query object for a term. More...
 
 Query (Xapian::PostingSource *source)
 Construct a Query object for a PostingSource. More...
 
 Query (double factor, const Xapian::Query &subquery)
 Scale using OP_SCALE_WEIGHT. More...
 
 Query (op op_, const Xapian::Query &subquery, double factor)
 Scale using OP_SCALE_WEIGHT. More...
 
 Query (op op_, const Xapian::Query &a, const Xapian::Query &b)
 Construct a Query object by combining two others. More...
 
 Query (op op_, const std::string &a, const std::string &b)
 Construct a Query object by combining two terms. More...
 
 Query (op op_, Xapian::valueno slot, const std::string &range_limit)
 Construct a Query object for a single-ended value range. More...
 
 Query (op op_, Xapian::valueno slot, const std::string &range_lower, const std::string &range_upper)
 Construct a Query object for a value range. More...
 
 Query (op op_, const std::string &pattern, Xapian::termcount max_expansion=0, int max_type=WILDCARD_LIMIT_ERROR, op combiner=OP_SYNONYM)
 Query constructor for OP_WILDCARD queries. More...
 
template<typename I >
 Query (op op_, I begin, I end, Xapian::termcount window=0)
 Construct a Query object from a begin/end iterator pair. More...
 
const TermIterator get_terms_begin () const
 Begin iterator for terms in the query object. More...
 
const TermIterator get_terms_end () const
 End iterator for terms in the query object.
 
const TermIterator get_unique_terms_begin () const
 Begin iterator for unique terms in the query object. More...
 
Xapian::termcount get_length () const
 Return the length of this query object. More...
 
bool empty () const
 Check if this query is Xapian::Query::MatchNothing. More...
 
std::string serialise () const
 Serialise this object into a string. More...
 
op get_type () const
 Get the type of the top level of the query. More...
 
size_t get_num_subqueries () const
 Get the number of subqueries of the top level query. More...
 
const Query get_subquery (size_t n) const
 Read a top level subquery. More...
 
std::string get_description () const
 Return a string describing this object.
 
const Query operator &= (const Query &o)
 Combine with another Xapian::Query object using OP_AND. More...
 
const Query operator|= (const Query &o)
 Combine with another Xapian::Query object using OP_OR. More...
 
const Query operator^= (const Query &o)
 Combine with another Xapian::Query object using OP_XOR. More...
 
const Query operator*= (double factor)
 Scale using OP_SCALE_WEIGHT. More...
 
const Query operator/= (double factor)
 Inverse scale using OP_SCALE_WEIGHT. More...
 
 Query (Query::op op_)
 Construct with just an operator. More...
 

Static Public Member Functions

static const Query unserialise (const std::string &serialised, const Registry &reg=Registry())
 Unserialise a string and return a Query object. More...
 

Static Public Attributes

static const Xapian::Query MatchNothing
 A query matching no documents. More...
 
static const Xapian::Query MatchAll
 A query matching all documents. More...
 

Detailed Description

Class representing a query.

Member Enumeration Documentation

◆ anonymous enum

anonymous enum
Enumerator
WILDCARD_LIMIT_ERROR 

Throw an error if OP_WILDCARD exceeds its expansion limit.

Xapian::WildcardError will be thrown when the query is actually run.

WILDCARD_LIMIT_FIRST 

Stop expanding when OP_WILDCARD reaches its expansion limit.

This makes the wildcard expand to only the first N terms (sorted by byte order).

WILDCARD_LIMIT_MOST_FREQUENT 

Limit OP_WILDCARD expansion to the most frequent terms.

If OP_WILDCARD would expand to more than its expansion limit, the most frequent terms are taken. This approach works well for cases such as expanding a partial term at the end of a query string which the user hasn't finished typing yet - as well as being less expense to evaluate than the full expansion, using only the most frequent terms tends to give better results too.

◆ op

Query operators.

Enumerator
OP_ELITE_SET 

Pick the best N subqueries and combine with OP_OR.

If you want to implement a feature which finds documents similar to a piece of text, an obvious approach is to build an "OR" query from all the terms in the text, and run this query against a database containing the documents. However such a query can contain a lots of terms and be quite slow to perform, yet many of these terms don't contribute usefully to the results.

The OP_ELITE_SET operator can be used instead of OP_OR in this situation. OP_ELITE_SET selects the most important ''N'' terms and then acts as an OP_OR query with just these, ignoring any other terms. This will usually return results just as good as the full OP_OR query, but much faster.

In general, the OP_ELITE_SET operator can be used when you have a large OR query, but it doesn't matter if the search completely ignores some of the less important terms in the query.

The subqueries don't have to be terms, but if they aren't then OP_ELITE_SET will look at the estimated frequencies of the subqueries and so could pick a subset which don't actually match any documents even if the full OR would match some.

You can specify a parameter to the query constructor which control the number of terms which OP_ELITE_SET will pick. If not specified, this defaults to 10 (Xapian used to default to ceil(sqrt(number_of_subqueries)) if there are more than 100 subqueries, but this rather arbitrary special case was dropped in 1.3.0). For example, this will pick the best 7 terms:

        Xapian::Query query(Xapian::Query::OP_ELITE_SET, subqs.begin(), subqs.end(), 7);
        

If the number of subqueries is less than this threshold, OP_ELITE_SET behaves identically to OP_OR.

OP_MAX 

Pick the maximum weight of any subquery.

Matches the same documents as OP_OR, but the weight contributed is the maximum weight from any matching subquery (for OP_OR, it's the sum of the weights from the matching subqueries).

Added in Xapian 1.3.2.

OP_WILDCARD 

Wildcard expansion.

Added in Xapian 1.3.3.

Constructor & Destructor Documentation

◆ Query() [1/12]

Xapian::Query::Query ( const Query o)
inline

Copying is allowed.

The internals are reference counted, so copying is cheap.

◆ Query() [2/12]

Xapian::Query::Query ( const std::string &  term,
Xapian::termcount  wqf = 1,
Xapian::termpos  pos = 0 
)

Construct a Query object for a term.

◆ Query() [3/12]

Xapian::Query::Query ( Xapian::PostingSource source)
explicit

Construct a Query object for a PostingSource.

◆ Query() [4/12]

Xapian::Query::Query ( double  factor,
const Xapian::Query subquery 
)

Scale using OP_SCALE_WEIGHT.

Parameters
factorNon-negative real number to multiply weights by.
subqueryQuery object to scale weights from.

◆ Query() [5/12]

Xapian::Query::Query ( op  op_,
const Xapian::Query subquery,
double  factor 
)

Scale using OP_SCALE_WEIGHT.

In this form, the op_ parameter is totally redundant - use Query(factor, subquery) in preference.

Parameters
op_Must be OP_SCALE_WEIGHT.
factorNon-negative real number to multiply weights by.
subqueryQuery object to scale weights from.

◆ Query() [6/12]

Xapian::Query::Query ( op  op_,
const Xapian::Query a,
const Xapian::Query b 
)
inline

Construct a Query object by combining two others.

Parameters
op_The operator to combine the queries with.
aFirst subquery.
bSecond subquery.

◆ Query() [7/12]

Xapian::Query::Query ( op  op_,
const std::string &  a,
const std::string &  b 
)
inline

Construct a Query object by combining two terms.

Parameters
op_The operator to combine the terms with.
aFirst term.
bSecond term.

◆ Query() [8/12]

Xapian::Query::Query ( op  op_,
Xapian::valueno  slot,
const std::string &  range_limit 
)

Construct a Query object for a single-ended value range.

Parameters
op_Must be OP_VALUE_LE or OP_VALUE_GE currently.
slotThe value slot to work over.
range_limitThe limit of the range.

◆ Query() [9/12]

Xapian::Query::Query ( op  op_,
Xapian::valueno  slot,
const std::string &  range_lower,
const std::string &  range_upper 
)

Construct a Query object for a value range.

Parameters
op_Must be OP_VALUE_RANGE currently.
slotThe value slot to work over.
range_lowerLower end of the range.
range_upperUpper end of the range.

◆ Query() [10/12]

Xapian::Query::Query ( op  op_,
const std::string &  pattern,
Xapian::termcount  max_expansion = 0,
int  max_type = WILDCARD_LIMIT_ERROR,
op  combiner = OP_SYNONYM 
)

Query constructor for OP_WILDCARD queries.

Parameters
op_Must be OP_WILDCARD
patternThe wildcard pattern - currently this is just a string and the wildcard expands to terms which start with exactly this string.
max_expansionThe maximum number of terms to expand to (default: 0, which means no limit)
max_typeHow to enforce max_expansion - one of WILDCARD_LIMIT_ERROR (the default), WILDCARD_LIMIT_FIRST or WILDCARD_LIMIT_MOST_FREQUENT. When searching multiple databases, the expansion limit is currently applied independently for each database, so the total number of terms may be higher than the limit. This is arguably a bug, and may change in future versions.
combinerThe op_ to combine the terms with - one of OP_SYNONYM (the default), OP_OR or OP_MAX.

◆ Query() [11/12]

template<typename I >
Xapian::Query::Query ( op  op_,
begin,
end,
Xapian::termcount  window = 0 
)
inline

Construct a Query object from a begin/end iterator pair.

Dereferencing the iterator should return a Xapian::Query, a non-NULL Xapian::Query*, a std::string or a type which converts to one of these (e.g. const char*).

Parameters
op_The operator to combine the queries with.
beginBegin iterator.
endEnd iterator.
windowWindow size for OP_NEAR and OP_PHRASE, or 0 to use the number of subqueries as the window size (default: 0).

◆ Query() [12/12]

Xapian::Query::Query ( Query::op  op_)
inlineexplicit

Construct with just an operator.

Parameters
op_The operator to use - currently only OP_INVALID is useful.

Member Function Documentation

◆ empty()

bool Xapian::Query::empty ( ) const
inline

Check if this query is Xapian::Query::MatchNothing.

◆ get_length()

Xapian::termcount Xapian::Query::get_length ( ) const

Return the length of this query object.

◆ get_num_subqueries()

size_t Xapian::Query::get_num_subqueries ( ) const

Get the number of subqueries of the top level query.

◆ get_subquery()

const Query Xapian::Query::get_subquery ( size_t  n) const

Read a top level subquery.

Parameters
nReturn the n-th subquery (starting from 0) - only valid when 0 <= n < get_num_subqueries().

◆ get_terms_begin()

const TermIterator Xapian::Query::get_terms_begin ( ) const

Begin iterator for terms in the query object.

The iterator returns terms in ascending query position order, and will return the same term in each unique position it occurs in. If you want the terms in sorted order and without duplicates, see get_unique_terms_begin().

◆ get_type()

op Xapian::Query::get_type ( ) const

Get the type of the top level of the query.

◆ get_unique_terms_begin()

const TermIterator Xapian::Query::get_unique_terms_begin ( ) const

Begin iterator for unique terms in the query object.

Terms are sorted and terms with the same name removed from the list.

If you want the terms in ascending query position order, see get_terms_begin().

◆ operator &=()

const Query Xapian::Query::operator&= ( const Query o)
inline

Combine with another Xapian::Query object using OP_AND.

◆ operator*=()

const Query Xapian::Query::operator*= ( double  factor)
inline

Scale using OP_SCALE_WEIGHT.

Parameters
factorNon-negative real number to multiply weights by.

◆ operator/=()

const Query Xapian::Query::operator/= ( double  factor)
inline

Inverse scale using OP_SCALE_WEIGHT.

Parameters
factorPositive real number to divide weights by.

◆ operator=()

Query& Xapian::Query::operator= ( const Query o)
inline

Copying is allowed.

The internals are reference counted, so assignment is cheap.

◆ operator^=()

const Query Xapian::Query::operator^= ( const Query o)
inline

Combine with another Xapian::Query object using OP_XOR.

◆ operator|=()

const Query Xapian::Query::operator|= ( const Query o)
inline

Combine with another Xapian::Query object using OP_OR.

◆ serialise()

std::string Xapian::Query::serialise ( ) const

Serialise this object into a string.

◆ unserialise()

static const Query Xapian::Query::unserialise ( const std::string &  serialised,
const Registry reg = Registry() 
)
static

Unserialise a string and return a Query object.

Parameters
serialisedthe string to unserialise.
regXapian::Registry object to use to unserialise user-subclasses of Xapian::PostingSource (default: standard registry).

Member Data Documentation

◆ MatchAll

const Xapian::Query Xapian::Query::MatchAll
static

A query matching all documents.

This is a static instance of Xapian::Query(std::string()). If you are constructing Query objects in different threads, avoid using MatchAll as the reference counting of the static object can get messed up by concurrent access).

◆ MatchNothing

const Xapian::Query Xapian::Query::MatchNothing
static

A query matching no documents.

This is a static instance of a default-constructed Xapian::Query object. It is safe to use concurrently from different threads, unlike MatchAll (this is because MatchNothing has a NULL internal object so there's no reference counting happening).


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

Documentation for Xapian (version 1.4.9).
Generated on Sat Nov 3 2018 by Doxygen 1.8.13.