about summary refs log tree commit homepage
path: root/lib/PublicInbox/SearchMsg.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/PublicInbox/SearchMsg.pm')
-rw-r--r--lib/PublicInbox/SearchMsg.pm16
1 files changed, 10 insertions, 6 deletions
diff --git a/lib/PublicInbox/SearchMsg.pm b/lib/PublicInbox/SearchMsg.pm
index a9f3180b..4ad8a0c9 100644
--- a/lib/PublicInbox/SearchMsg.pm
+++ b/lib/PublicInbox/SearchMsg.pm
@@ -110,7 +110,6 @@ sub references_sorted {
 sub ensure_metadata {
         my ($self) = @_;
         my $doc = $self->{doc};
-        my $i = $doc->termlist_begin;
         my $end = $doc->termlist_end;
 
         unless (defined $PFX2TERM_RE) {
@@ -118,12 +117,17 @@ sub ensure_metadata {
                 $PFX2TERM_RE = qr/\A($or)/;
         }
 
-        for (; $i != $end; $i->inc) {
-                my $val = $i->get_termname;
+        while (my ($pfx, $field) = each %PublicInbox::Search::PFX2TERM_RMAP) {
+                # ideally we'd move this out of the loop:
+                my $i = $doc->termlist_begin;
 
-                if ($val =~ s/$PFX2TERM_RE//o) {
-                        my $field = $PublicInbox::Search::PFX2TERM_RMAP{$1};
-                        $self->{$field} = $val;
+                $i->skip_to($pfx);
+                if ($i != $end) {
+                        my $val = $i->get_termname;
+
+                        if ($val =~ s/$PFX2TERM_RE//o) {
+                                $self->{$field} = $val;
+                        }
                 }
         }
 }