]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/Search.pm
Merge remote-tracking branch 'origin/wwwlisting'
[public-inbox.git] / lib / PublicInbox / Search.pm
index 7175ddc5a2e06c078ef10f1d7875e3eebd62d709..090d998b6c2c3d6fda2365d9ae92ada6f0dd40e6 100644 (file)
@@ -50,6 +50,9 @@ use constant {
 
 my %bool_pfx_external = (
        mid => 'Q', # Message-ID (full/exact), this is mostly uniQue
+       dfpre => 'XDFPRE',
+       dfpost => 'XDFPOST',
+       dfblob => 'XDFPRE XDFPOST',
 );
 
 my $non_quoted_body = 'XNQ XDFN XDFA XDFB XDFHH XDFCTX XDFPRE XDFPOST';
@@ -74,9 +77,6 @@ my %prob_prefix = (
        dfb => 'XDFB',
        dfhh => 'XDFHH',
        dfctx => 'XDFCTX',
-       dfpre => 'XDFPRE',
-       dfpost => 'XDFPOST',
-       dfblob => 'XDFPRE XDFPOST',
 
        # default:
        '' => 'XM S A XQUOT XFN ' . $non_quoted_body,
@@ -219,14 +219,13 @@ sub _do_enquire {
 
 sub _enquire_once {
        my ($self, $query, $opts) = @_;
-       my $enquire = enquire($self);
+       my $enquire = Search::Xapian::Enquire->new($self->{xdb});
        $enquire->set_query($query);
        $opts ||= {};
         my $desc = !$opts->{asc};
        if (($opts->{mset} || 0) == 2) {
                $enquire->set_docid_order(Search::Xapian::ENQ_ASCENDING());
                $enquire->set_weighting_scheme(Search::Xapian::BoolWeight->new);
-               delete $self->{enquire};
        } elsif ($opts->{relevance}) {
                $enquire->set_sort_by_relevance_then_value(TS, $desc);
        } else {
@@ -260,13 +259,14 @@ sub qp {
        $qp->set_database($self->{xdb});
        $qp->set_stemmer($self->stemmer);
        $qp->set_stemming_strategy(STEM_SOME);
+       $qp->set_max_wildcard_expansion(100);
        $qp->add_valuerangeprocessor(
                Search::Xapian::NumberValueRangeProcessor->new(YYYYMMDD, 'd:'));
        $qp->add_valuerangeprocessor(
                Search::Xapian::NumberValueRangeProcessor->new(DT, 'dt:'));
 
        while (my ($name, $prefix) = each %bool_pfx_external) {
-               $qp->add_boolean_prefix($name, $prefix);
+               $qp->add_boolean_prefix($name, $_) foreach split(/ /, $prefix);
        }
 
        # we do not actually create AltId objects,
@@ -333,11 +333,6 @@ sub subject_normalized {
        $subj;
 }
 
-sub enquire {
-       my ($self) = @_;
-       $self->{enquire} ||= Search::Xapian::Enquire->new($self->{xdb});
-}
-
 sub help {
        my ($self) = @_;
        $self->qp; # parse altids