22 #ifndef XAPIAN_INCLUDED_QUERY_H
23 #define XAPIAN_INCLUDED_QUERY_H
25 #if !defined XAPIAN_IN_XAPIAN_H && !defined XAPIAN_LIB_BUILD
26 # error Never use <xapian/query.h> directly; include <xapian.h> instead.
30 #include <string_view>
269 OP_EDIT_DISTANCE = 16,
305 WILDCARD_LIMIT_ERROR = 0x00,
311 WILDCARD_LIMIT_FIRST = 0x01,
321 WILDCARD_LIMIT_MOST_FREQUENT = 0x02,
324 WILDCARD_LIMIT_MASK_ = 0x03,
330 WILDCARD_PATTERN_MULTI = 0x10,
336 WILDCARD_PATTERN_SINGLE = 0x20,
342 WILDCARD_PATTERN_GLOB = WILDCARD_PATTERN_MULTI|WILDCARD_PATTERN_SINGLE
450 bool positional = (op_ == OP_NEAR || op_ == OP_PHRASE);
451 add_subquery(positional, a);
452 add_subquery(positional, b);
462 template<
typename S1,
typename S2,
464 std::enable_if<std::is_constructible<std::string_view, S1>::value &&
465 std::is_constructible<std::string_view, S2>::value,
470 add_subquery(
false, std::string_view(a));
471 add_subquery(
false, std::string_view(b));
491 std::string_view range_lower, std::string_view range_upper);
532 std::string_view pattern,
534 int flags = WILDCARD_LIMIT_ERROR,
535 op combiner = OP_SYNONYM);
572 std::string_view pattern,
576 unsigned edit_distance,
577 size_t min_prefix_len = 0);
595 typename std::enable_if<
596 std::is_convertible<typename std::iterator_traits<I>::value_type,
598 std::is_convertible<typename std::iterator_traits<I>::value_type,
600 std::is_convertible<typename std::iterator_traits<I>::value_type,
601 std::string_view>::value,
603 typename iterator_category =
604 typename std::iterator_traits<I>::iterator_category>
608 init(op_, window, begin, end, iterator_category());
609 bool positional = (op_ == OP_NEAR || op_ == OP_PHRASE);
610 for (I i = begin; i != end; ++i) {
611 add_subquery(positional, *i);
620 Query(op op_, XapianSWIGQueryItor qbegin, XapianSWIGQueryItor qend,
624 Query(op op_, XapianSWIGStrItor qbegin, XapianSWIGStrItor qend,
661 bool empty() const noexcept {
666 std::string serialise()
const;
675 static const Query unserialise(std::string_view serialised,
701 const
Query get_subquery(
size_t n) const;
704 std::
string get_description() const;
737 const
Query operator*=(
double factor) {
738 return (*
this =
Query(factor, *
this));
746 return (*
this =
Query(1.0 / factor, *
this));
766 const I & begin,
const I & end, std::random_access_iterator_tag)
768 init(op_, end - begin, window);
773 const I &,
const I &, std::input_iterator_tag)
775 init(op_, 0, window);
778 void add_subquery(
bool positional,
const Xapian::Query & subquery);
794 add_subquery(positional, *subquery);
829 return Query(factor, q);
840 return Query(factor, q);
851 return Query(1.0 / factor, q);
900 operator~(
const Query &q)
911 struct PostListAndEstimate;
912 class QueryOptimiser;
948 bool keep_zero_weight =
true)
const;
992 }
else if (
this != &o &&
1009 }
else if (
this != &o &&
1026 }
else if (
internal.get() == o.
internal.get()) {
1029 }
else if (
internal &&
Compiler attribute macros.
#define XAPIAN_PURE_FUNCTION
Like XAPIAN_CONST_FUNCTION, but such a function can also examine global memory, perhaps via pointer o...
Base class for objects managed by intrusive_ptr.
A smart pointer that uses intrusive reference counting.
friend const InvertedQuery_ operator~(const Query &q)
void operator=(const InvertedQuery_ &)
friend const Query operator&(const Query &a, const InvertedQuery_ &b)
Combine two Xapian::Query objects using OP_AND_NOT.
InvertedQuery_(const InvertedQuery_ &o)
InvertedQuery_(const Query &query_)
friend const Query operator&=(Query &a, const InvertedQuery_ &b)
Combine two Xapian::Query objects using OP_AND_NOT with result in the first.
Base class which provides an "external" source of postings.
virtual termpos get_pos() const
virtual void postlist_sub_bool_or_like(Xapian::Internal::OrContext &ctx, Xapian::Internal::QueryOptimiser *qopt, Xapian::Internal::TermFreqs *termfreqs) const
virtual termcount get_length() const noexcept
virtual termcount get_wqf() const
static Query::Internal * unserialise(const char **p, const char *end, const Registry ®)
virtual const Query get_subquery(size_t n) const
virtual bool postlist_sub_and_like(Xapian::Internal::AndContext &ctx, Xapian::Internal::QueryOptimiser *qopt, double factor, Xapian::Internal::TermFreqs *termfreqs) const
virtual void postlist_sub_or_like(Xapian::Internal::OrContext &ctx, Xapian::Internal::QueryOptimiser *qopt, double factor, Xapian::Internal::TermFreqs *termfreqs, bool keep_zero_weight=true) const
virtual std::string get_description() const =0
virtual void gather_terms(void *void_terms) const
virtual void postlist_sub_xor(Xapian::Internal::XorContext &ctx, Xapian::Internal::QueryOptimiser *qopt, double factor, Xapian::Internal::TermFreqs *termfreqs) const
virtual Query::op get_type() const noexcept=0
virtual Xapian::Internal::PostListAndEstimate postlist(Xapian::Internal::QueryOptimiser *qopt, double factor, Xapian::Internal::TermFreqs *termfreqs) const =0
virtual size_t get_num_subqueries() const noexcept
virtual void serialise(std::string &result) const =0
Class representing a query.
void add_subquery(bool, const char *subquery)
const Query operator/=(double factor)
Inverse scale using OP_SCALE_WEIGHT.
Query(const char *term, Xapian::termcount wqf=1, Xapian::termpos pos=0)
Construct a Query object for a term.
Query(Query &&)=default
Move constructor.
const Query operator^=(const Query &o)
Combine with another Xapian::Query object using OP_XOR.
const TermIterator get_unique_terms_end() const noexcept
End iterator for unique terms in the query object.
Query & operator=(Query &&)=default
Move assignment operator.
const TermIterator get_terms_end() const noexcept
End iterator for terms in the query object.
Query(const std::string &term, Xapian::termcount wqf=1, Xapian::termpos pos=0)
Construct a Query object for a term.
@ LEAF_POSTING_SOURCE
Value returned by get_type() for a PostingSource.
@ OP_XOR
Match documents which an odd number of subqueries match.
@ LEAF_MATCH_ALL
Value returned by get_type() for MatchAll or equivalent.
@ OP_AND
Match only documents which all subqueries match.
@ OP_OR
Match documents which at least one subquery matches.
@ OP_AND_NOT
Match documents which the first subquery matches but no others do.
@ OP_INVALID
Construct an invalid query.
void add_subquery(bool positional, const Xapian::Query &subquery)
Query(op op_, I begin, I end, Xapian::termcount window=0)
Construct a Query object from a begin/end iterator pair.
void init(Query::op op_, Xapian::termcount window, const I &begin, const I &end, std::random_access_iterator_tag)
void add_subquery(bool, const std::string &subquery)
static const Xapian::Query MatchNothing
A query matching no documents.
bool empty() const noexcept
Check if this query is Xapian::Query::MatchNothing.
const Query operator|=(const Query &o)
Combine with another Xapian::Query object using OP_OR.
Query(Internal *internal_)
Query(const Query &o)
Copying is allowed.
void add_subquery(bool, std::string_view subquery)
void add_subquery(bool positional, const Xapian::Query *subquery)
Query(op op_, S1 a, S2 b)
Construct a Query object by combining two terms.
Query(op op_, const Xapian::Query &a, const Xapian::Query &b)
Construct a Query object by combining two others.
Xapian::Internal::intrusive_ptr< Internal > internal
void init(Query::op op_, Xapian::termcount window, const I &, const I &, std::input_iterator_tag)
Query(Query::op op_)
Construct with just an operator.
Query() noexcept
Construct a query matching no documents.
Query & operator=(const Query &o)
Copying is allowed.
static const Xapian::Query MatchAll
A query matching all documents.
Registry for user subclasses.
Class for iterating over a list of terms.
The Xapian namespace contains public interfaces for the Xapian library.
unsigned XAPIAN_TERMCOUNT_BASE_TYPE termcount
A counts of terms.
const Query operator^(const Query &a, const Query &b)
Combine two Xapian::Query objects using OP_XOR.
const Query operator|(const Query &a, const Query &b)
Combine two Xapian::Query objects using OP_OR.
const Query operator&(const Query &a, const Query &b)
Combine two Xapian::Query objects using OP_AND.
unsigned valueno
The number for a value slot in a document.
const Query operator&=(Query &a, const InvertedQuery_ &b)
Combine two Xapian::Query objects using OP_AND_NOT with result in the first.
const Query operator*(double factor, const Query &q)
Scale a Xapian::Query object using OP_SCALE_WEIGHT.
unsigned XAPIAN_TERMPOS_BASE_TYPE termpos
A term position within a document or query.
const Query operator/(const Query &q, double factor)
Inverse-scale a Xapian::Query object using OP_SCALE_WEIGHT.
Class for iterating over a list of document ids.
Class for looking up user subclasses during unserialisation.
The frequencies for a term.
Class for iterating over a list of terms.
Define XAPIAN_VISIBILITY_* macros.
#define XAPIAN_VISIBILITY_DEFAULT
#define XAPIAN_VISIBILITY_INTERNAL