From 1b14910344c10f85ce29281a5a7803ab3b2971be Mon Sep 17 00:00:00 2001
From: Eric Wong <e@80x24.org>
Date: Fri, 9 Sep 2016 00:01:27 +0000
Subject: [PATCH] search: increase term positions for each quoted hunk

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 | 23 +++++++++++------------
 1 file changed, 11 insertions(+), 12 deletions(-)

diff --git a/lib/PublicInbox/SearchIdx.pm b/lib/PublicInbox/SearchIdx.pm
index 25452dae..0e499ad1 100644
--- a/lib/PublicInbox/SearchIdx.pm
+++ b/lib/PublicInbox/SearchIdx.pm
@@ -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);
-- 
2.50.0