This is mainly a rebase against current master, but also required an update to the (just pushed) empty query string handling Apparently there's at least 4 ways to test a C++ string for being empty, so here I try a different way of writing it. Interdiff follows: diff --git a/lib/regexp-fields.cc b/lib/regexp-fields.cc index 26b22fe2..1598c17f 100644 --- a/lib/regexp-fields.cc +++ b/lib/regexp-fields.cc @@ -156,12 +156,17 @@ RegexpFieldProcessor::RegexpFieldProcessor (std::string prefix, Xapian::Query RegexpFieldProcessor::operator() (const std::string & str) { - if (str.size () == 0) - return Xapian::Query(Xapian::Query::OP_AND_NOT, + if (str.empty ()) { + if (options & NOTMUCH_FIELD_PROBABILISTIC) { + return Xapian::Query(Xapian::Query::OP_AND_NOT, Xapian::Query::MatchAll, Xapian::Query (Xapian::Query::OP_WILDCARD, term_prefix)); + } else { + return Xapian::Query (term_prefix); + } + } - if (str.length() > 0 && str.at (0) == '/') { + if (str.at (0) == '/') { if (str.length() > 1 && str.at (str.size () - 1) == '/'){ std::string regexp_str = str.substr(1,str.size () - 2); if (slot != Xapian::BAD_VALUENO) {