about summary refs log tree commit homepage
path: root/lib/PublicInbox/SearchView.pm
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2020-12-05 10:11:38 +0000
committerEric Wong <e@80x24.org>2020-12-05 21:41:52 +0000
commit525555d14118f92f86be54c683f797089c52a78d (patch)
tree59baf4193882b020ffe67da2e6e96156e86e8b41 /lib/PublicInbox/SearchView.pm
parent89990b0cfc8bbdabc8d650325d9e1bc585df8a0c (diff)
downloadpublic-inbox-525555d14118f92f86be54c683f797089c52a78d.tar.gz
isearch: emulate per-inbox search with ->ALL
Using "eidx_key:" boolean prefix to limit results to a given
inbox, we can use ->ALL to emulate and replace per-Inbox
xap15/[0-9] search indices.

With this change, the presence of "extindex.all.topdir" in the
$PI_CONFIG will cause the WWW code to use that extindex and
ignore per-inbox Xapian DBs in xap15/[0-9].

Unfortunately IMAP search still requires old per-inbox indices,
for now.  Mapping extindex Xapian docids to per-Inbox UIDs and
vice-versa is proving tricky.  Fortunately, IMAP search is
rarely used and optional.  The RFCs don't specify expensive
phrase search, either, so `indexlevel=medium' can be used in
per-inbox Xapian indices to save space.

For primarily WWW (and future JMAP) users; this should result in
significant disk space, FD, and page cache footprint savings for
large instances with many inboxes and many cross-posted
messages.
Diffstat (limited to 'lib/PublicInbox/SearchView.pm')
-rw-r--r--lib/PublicInbox/SearchView.pm10
1 files changed, 5 insertions, 5 deletions
diff --git a/lib/PublicInbox/SearchView.pm b/lib/PublicInbox/SearchView.pm
index 26426c01..f3c96126 100644
--- a/lib/PublicInbox/SearchView.pm
+++ b/lib/PublicInbox/SearchView.pm
@@ -30,7 +30,7 @@ sub mbox_results {
 
 sub sres_top_html {
         my ($ctx) = @_;
-        my $srch = $ctx->{-inbox}->search or
+        my $srch = $ctx->{-inbox}->isrch or
                 return PublicInbox::WWW::need($ctx, 'Search');
         my $q = PublicInbox::SearchQuery->new($ctx->{qp});
         my $x = $q->{x};
@@ -95,7 +95,7 @@ sub mset_summary {
         my $res = \($ctx->{-html_tip});
         my $ibx = $ctx->{-inbox};
         my $obfs_ibx = $ibx->{obfuscate} ? $ibx : undef;
-        my @nums = @{$ibx->search->mset_to_artnums($mset)};
+        my @nums = @{$ibx->isrch->mset_to_artnums($mset)};
         my %num2msg = map { $_->{num} => $_ } @{$ibx->over->get_all(@nums)};
         my ($min, $max);
 
@@ -201,7 +201,7 @@ sub search_nav_top {
         }
         my $A = $q->qs_html(x => 'A', r => undef);
         $rv .= qq{|<a\nhref="?$A">Atom feed</a>]};
-        if ($ctx->{-inbox}->search->has_threadid) {
+        if ($ctx->{-inbox}->isrch->has_threadid) {
                 $rv .= qq{\n\t\t\tdownload mbox.gz: } .
                         # we set name=z w/o using it since it seems required for
                         # lynx (but works fine for w3m).
@@ -288,7 +288,7 @@ sub mset_thread {
         my ($ctx, $mset, $q) = @_;
         my $ibx = $ctx->{-inbox};
         my @pct = map { get_pct($_) } $mset->items;
-        my $msgs = $ibx->search->mset_to_smsg($ibx, $mset);
+        my $msgs = $ibx->isrch->mset_to_smsg($ibx, $mset);
         my $i = 0;
         $_->{pct} = $pct[$i++] for @$msgs;
         my $r = $q->{r};
@@ -353,7 +353,7 @@ sub ctx_prepare {
 
 sub adump {
         my ($cb, $mset, $q, $ctx) = @_;
-        $ctx->{ids} = $ctx->{-inbox}->search->mset_to_artnums($mset);
+        $ctx->{ids} = $ctx->{-inbox}->isrch->mset_to_artnums($mset);
         $ctx->{search_query} = $q; # used by WwwAtomStream::atom_header
         PublicInbox::WwwAtomStream->response($ctx, 200, \&adump_i);
 }