X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FSearch.pm;h=523003b3c269ae42e9ee210e91415b2846735daa;hb=1f1b1f0e22f7b4cbe5c8e843c1932222c0461393;hp=dd6d3710d03d48592d835f302b02eddce82f52df;hpb=4bbafbc4bc8869e3f0fb35fdde727b2334fd6b46;p=public-inbox.git diff --git a/lib/PublicInbox/Search.pm b/lib/PublicInbox/Search.pm index dd6d3710..523003b3 100644 --- a/lib/PublicInbox/Search.pm +++ b/lib/PublicInbox/Search.pm @@ -5,6 +5,7 @@ # Read-only search interface for use by the web and NNTP interfaces package PublicInbox::Search; use strict; +use v5.10.1; use parent qw(Exporter); our @EXPORT_OK = qw(retry_reopen int_val get_pct xap_terms); use List::Util qw(max); @@ -15,7 +16,7 @@ use Carp (); # compatibility with old indices (so don't change them it) use constant { TS => 0, # Received: in Unix time (IMAP INTERNALDATE, JMAP receivedAt) - YYYYMMDD => 1, # Date: header for searching in the WWW UI + YYYYMMDD => 1, # redundant with DT below DT => 2, # Date: YYYYMMDDHHMMSS (IMAP SENT*, JMAP sentAt) # added for public-inbox 1.6.0+ @@ -154,12 +155,9 @@ my %prob_prefix = ( our @HELP = ( 's:' => 'match within Subject e.g. s:"a quick brown fox"', 'd:' => < < 'match within message body, including text attachments', 'nq:' => 'match non-quoted text within message body', @@ -180,6 +178,9 @@ EOF 'dfpre:' => 'match pre-image git blob ID', 'dfpost:' => 'match post-image git blob ID', 'dfblob:' => 'match either pre or post-image git blob ID', + 'rt:' => <{xdb}); - my $xpfx = $self->{xpfx}; - return reopen($self) if $xpfx =~ m!/xapian[0-9]+\z!; # true - opendir(my $dh, $xpfx) or return warn("$xpfx gone: $!\n"); # true - my $nr = grep(/\A[0-9]+\z/, readdir($dh)) or - return warn("$xpfx has no shards\n"); # true - return reopen($self) if $nr == ($self->{nshard} // -1); - delete @$self{qw(xdb qp)}; - undef; -} - sub new { my ($class, $ibx) = @_; ref $ibx or die "BUG: expected PublicInbox::Inbox object: $ibx"; @@ -412,12 +399,10 @@ sub retry_reopen { my ($self, $cb, @arg) = @_; for my $i (1..10) { if (wantarray) { - my @ret; - eval { @ret = $cb->($self, @arg) }; + my @ret = eval { $cb->($self, @arg) }; return @ret unless $@; } else { - my $ret; - eval { $ret = $cb->($self, @arg) }; + my $ret = eval { $cb->($self, @arg) }; return $ret unless $@; } # Exception: The revision being read has been discarded - @@ -584,4 +569,12 @@ sub xap_terms ($$;@) { wantarray ? sort(keys(%ret)) : \%ret; } +# get combined docid from over.num: +# (not generic Xapian, only works with our sharding scheme) +sub num2docid ($$) { + my ($self, $num) = @_; + my $nshard = $self->{nshard}; + ($num - 1) * $nshard + $num % $nshard + 1; +} + 1;