X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FSearchIdx.pm;h=446cfb0d50afd8be723a24c4f6f5751de80ba548;hb=2f5bb422a75f38e9c2fdca5d526fd8832ca9de45;hp=3d80b002f709448776aada0b03033ebf38a9bad4;hpb=24294059123d4edd9e31f211d72c641a5d1a0d72;p=public-inbox.git diff --git a/lib/PublicInbox/SearchIdx.pm b/lib/PublicInbox/SearchIdx.pm index 3d80b002..446cfb0d 100644 --- a/lib/PublicInbox/SearchIdx.pm +++ b/lib/PublicInbox/SearchIdx.pm @@ -134,7 +134,9 @@ sub add_values ($$) { my $lines = $values->[PublicInbox::Search::LINES]; add_val($doc, PublicInbox::Search::LINES, $lines); - my $yyyymmdd = strftime('%Y%m%d', gmtime($ts)); + my $ds = $values->[PublicInbox::Search::DS]; + add_val($doc, PublicInbox::Search::DS, $ds); + my $yyyymmdd = strftime('%Y%m%d', gmtime($ds)); add_val($doc, PublicInbox::Search::YYYYMMDD, $yyyymmdd); } @@ -298,7 +300,7 @@ sub add_message { } my $lines = $mime->body_raw =~ tr!\n!\n!; - my @values = ($smsg->ts, $num, $bytes, $lines); + my @values = ($smsg->ds, $num, $bytes, $lines, $smsg->ts); add_values($doc, \@values); my $tg = $self->term_generator; @@ -350,7 +352,7 @@ sub add_message { # populates smsg->references for smsg->to_doc_data my $refs = parse_references($smsg); - $mid0 = $mids->[0] unless defined $mid0; + $mid0 = $mids->[0] unless defined $mid0; # v1 compatibility my $data = $smsg->to_doc_data($oid, $mid0); foreach my $mid (@$mids) { $tg->index_text($mid, 1, 'XM'); @@ -367,10 +369,12 @@ sub add_message { } } + $self->delete_article($num) if defined $num; # for reindexing if ($skel) { push @values, $mids, $xpath, $data; $skel->index_skeleton(\@values); $doc->add_boolean_term('Q' . $_) foreach @$mids; + $doc->add_boolean_term('XNUM' . $num) if defined $num; $doc_id = $self->{xdb}->add_document($doc); } else { $doc_id = link_and_save($self, $doc, $mids, $refs, @@ -419,6 +423,16 @@ sub remove_message { } } +sub delete_article { + my ($self, $num) = @_; + my $ndel = 0; + batch_do($self, 'XNUM' . $num, sub { + my ($ids) = @_; + $ndel += scalar @$ids; + $self->{xdb}->delete_document($_) for @$ids; + }); +} + # MID is a hint in V2 sub remove_by_oid { my ($self, $oid, $mid) = @_; @@ -547,6 +561,10 @@ sub link_and_save { 1; }); } + if ($vivified > 1) { + my $id = '<'.join('> <', @$mids).'>'; + warn "BUG: vivified multiple ($vivified) ghosts for $id\n"; + } # not really important, but we return any vivified ghost docid, here: return $doc_id if defined $doc_id; link_doc($self, $doc, $refs, $old_tid);