diff options
author | Eric Wong <e@80x24.org> | 2016-09-09 00:01:22 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2016-09-09 00:02:16 +0000 |
commit | c617254e00ae43414236603cf9bbcdc8cbc2b139 (patch) | |
tree | c1092f94233b4532f29d288984f11738ece400c5 /lib/PublicInbox/SearchIdx.pm | |
parent | f9663d67d1b228b6ceaeaab8329968b0d7e445cb (diff) | |
download | public-inbox-c617254e00ae43414236603cf9bbcdc8cbc2b139.tar.gz |
Sometimes it can be useful to search based on who the message was sent to, sent by, or Cc:-ed. Of course, headers can be faked, but they usually are not... Anyways this mostly matches the behavior of mairix(1).
Diffstat (limited to 'lib/PublicInbox/SearchIdx.pm')
-rw-r--r-- | lib/PublicInbox/SearchIdx.pm | 59 |
1 files changed, 42 insertions, 17 deletions
diff --git a/lib/PublicInbox/SearchIdx.pm b/lib/PublicInbox/SearchIdx.pm index f54f5f2f..37fefbea 100644 --- a/lib/PublicInbox/SearchIdx.pm +++ b/lib/PublicInbox/SearchIdx.pm @@ -96,12 +96,51 @@ sub _lock_release { close $lockfh or die "close failed: $!\n"; } -sub add_val { +sub add_val ($$$) { my ($doc, $col, $num) = @_; $num = Search::Xapian::sortable_serialise($num); $doc->add_value($col, $num); } +sub add_values ($$$) { + my ($smsg, $bytes, $num) = @_; + + my $ts = $smsg->ts; + my $doc = $smsg->{doc}; + add_val($doc, &PublicInbox::Search::TS, $ts); + + defined($num) and add_val($doc, &PublicInbox::Search::NUM, $num); + + defined($bytes) and add_val($doc, &PublicInbox::Search::BYTES, $bytes); + + add_val($doc, &PublicInbox::Search::LINES, + $smsg->{mime}->body_raw =~ tr!\n!\n!); + + my $yyyymmdd = strftime('%Y%m%d', gmtime($ts)); + $doc->add_value(&PublicInbox::Search::YYYYMMDD, $yyyymmdd); +} + +sub index_users ($$) { + my ($tg, $smsg) = @_; + + my $from = $smsg->from; + my $to = $smsg->to; + my $cc = $smsg->cc; + + $tg->index_text($from, 1, 'A'); # A - author + $tg->increase_termpos; + + $tg->index_text($to, 1, 'XTO') if $to ne ''; + $tg->index_text($cc, 1, 'XCC') if $cc ne ''; + my $tc = join("\t", $to, $cc); + $tg->index_text($tc, 1, 'XTC') if $tc ne ''; + my $tcf = join("\t", $tc, $from); + $tg->index_text($tcf, 1, 'XTCF') if $tcf ne ''; + + $tg->index_text($from); + $tg->increase_termpos; +} + sub add_message { my ($self, $mime, $bytes, $num, $blob) = @_; # mime = Email::MIME object my $db = $self->{xdb}; @@ -129,20 +168,7 @@ sub add_message { $doc->add_term(xpfx('path') . id_compress($path)); } - my $ts = $smsg->ts; - add_val($doc, &PublicInbox::Search::TS, $ts); - - defined($num) and - add_val($doc, &PublicInbox::Search::NUM, $num); - - defined($bytes) and - add_val($doc, &PublicInbox::Search::BYTES, $bytes); - - add_val($doc, &PublicInbox::Search::LINES, - $mime->body_raw =~ tr!\n!\n!); - - my $yyyymmdd = strftime('%Y%m%d', gmtime($ts)); - $doc->add_value(&PublicInbox::Search::YYYYMMDD, $yyyymmdd); + add_values($smsg, $bytes, $num); my $tg = $self->term_generator; @@ -152,8 +178,7 @@ sub add_message { $tg->index_text($subj) if $subj; $tg->increase_termpos; - $tg->index_text($smsg->from); - $tg->increase_termpos; + index_users($tg, $smsg); msg_iter($mime, sub { my ($part, $depth, @idx) = @{$_[0]}; |