]> Sergey Matveev's repositories - public-inbox.git/commitdiff
search: increase term positions for each quoted hunk
authorEric Wong <e@80x24.org>
Fri, 9 Sep 2016 00:01:27 +0000 (00:01 +0000)
committerEric Wong <e@80x24.org>
Fri, 9 Sep 2016 00:02:20 +0000 (00:02 +0000)
We pay a storage cost for storing positional information
in Xapian, make good use of it by attempting to preserve
it for (hopefully) better search results.

lib/PublicInbox/SearchIdx.pm

index 25452daec4280eae41a3d8f311c49bd2d5c0cbde..0e499ad16af0a6155dacc0520d54d9cee6489786 100644 (file)
@@ -135,6 +135,13 @@ sub index_users ($$) {
        $tg->increase_termpos;
 }
 
+sub index_body ($$$) {
+       my ($tg, $lines, $inc) = @_;
+       $tg->index_text(join("\n", @$lines), $inc, $inc ? 'XNQ' : 'XQUOT');
+       @$lines = ();
+       $tg->increase_termpos;
+}
+
 sub add_message {
        my ($self, $mime, $bytes, $num, $blob) = @_; # mime = Email::MIME object
        my $db = $self->{xdb};
@@ -185,23 +192,15 @@ sub add_message {
                        my @lines = split(/\n/, $body);
                        while (defined(my $l = shift @lines)) {
                                if ($l =~ /^>/) {
+                                       index_body($tg, \@orig, 1) if @orig;
                                        push @quot, $l;
                                } else {
+                                       index_body($tg, \@quot, 0) if @quot;
                                        push @orig, $l;
                                }
                        }
-                       if (@quot) {
-                               my $s = join("\n", @quot);
-                               @quot = ();
-                               $tg->index_text($s, 0, 'XQUOT');
-                               $tg->increase_termpos;
-                       }
-                       if (@orig) {
-                               my $s = join("\n", @orig);
-                               @orig = ();
-                               $tg->index_text($s, 1, 'XNQ');
-                               $tg->increase_termpos;
-                       }
+                       index_body($tg, \@quot, 0) if @quot;
+                       index_body($tg, \@orig, 1) if @orig;
                });
 
                link_message($self, $smsg, $old_tid);