X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FSearch.pm;h=445c2d8a403f4b3a314954852d7afd3819de565f;hb=adecbd43d2eed046fe6e88a459d03567461fd84b;hp=1398ea4198432a9f1354f5cc66fe601702c6a454;hpb=3e64a28248d554cabd688ebd3354f153524d293d;p=public-inbox.git diff --git a/lib/PublicInbox/Search.pm b/lib/PublicInbox/Search.pm index 1398ea41..445c2d8a 100644 --- a/lib/PublicInbox/Search.pm +++ b/lib/PublicInbox/Search.pm @@ -12,6 +12,7 @@ use constant TS => 0; # timestamp use constant NUM => 1; # NNTP article number use constant BYTES => 2; # :bytes as defined in RFC 3977 use constant LINES => 3; # :lines as defined in RFC 3977 +use constant YYYYMMDD => 4; # for searching in the WWW UI use Search::Xapian qw/:standard/; use PublicInbox::SearchMsg; @@ -50,6 +51,7 @@ my %bool_pfx_internal = ( thread => 'G', # newsGroup (or similar entity - e.g. a web forum name) ); +# do we still need these? probably not.. my %bool_pfx_external = ( path => 'XPATH', mid => 'Q', # uniQue id (Message-ID) @@ -61,6 +63,29 @@ my %prob_prefix = ( m => 'Q', # 'mid' is exact, 'm' can do partial ); +# not documenting m: and mid: for now, the using the URLs works w/o Xapian +our @HELP = ( + 's:' => < <set_database($self->{xdb}); $qp->set_stemmer($self->stemmer); $qp->set_stemming_strategy(STEM_SOME); - $qp->add_valuerangeprocessor($self->ts_range_processor); - $qp->add_valuerangeprocessor($self->date_range_processor); + $qp->add_valuerangeprocessor( + Search::Xapian::StringValueRangeProcessor->new(YYYYMMDD, 'd:')); while (my ($name, $prefix) = each %bool_pfx_external) { $qp->add_boolean_prefix($name, $prefix); @@ -189,10 +214,14 @@ sub qp { # we do not actually create AltId objects, # just parse the spec to avoid the extra DB handles for now. if (my $altid = $self->{altid}) { + my $user_pfx = $self->{-user_pfx} ||= []; for (@$altid) { # $_ = 'serial:gmane:/path/to/gmane.msgmap.sqlite3' /\Aserial:(\w+):/ or next; my $pfx = $1; + push @$user_pfx, "$pfx:", < XGMANE $qp->add_boolean_prefix($pfx, 'X'.uc($pfx)); } @@ -205,14 +234,6 @@ sub qp { $self->{query_parser} = $qp; } -sub ts_range_processor { - $_[0]->{tsrp} ||= Search::Xapian::NumberValueRangeProcessor->new(TS); -} - -sub date_range_processor { - $_[0]->{drp} ||= Search::Xapian::DateValueRangeProcessor->new(TS); -} - sub num_range_processor { $_[0]->{nrp} ||= Search::Xapian::NumberValueRangeProcessor->new(NUM); } @@ -328,4 +349,14 @@ sub enquire { $self->{enquire} ||= Search::Xapian::Enquire->new($self->{xdb}); } +sub help { + my ($self) = @_; + $self->qp; # parse altids + my @ret = @HELP; + if (my $user_pfx = $self->{-user_pfx}) { + push @ret, @$user_pfx; + } + \@ret; +} + 1;