From 47d21e78be57a8f4615be5872e08ec4539423d1f Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sun, 21 Mar 2021 15:50:45 +0600 Subject: lei import: vivify external-only messages Keyword storage for external-only messages was preventing messages from being explicitly imported. Teach lei_store to vivify keyword-only entries into fully-indexed messages on import. --- lib/PublicInbox/SearchIdx.pm | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'lib/PublicInbox/SearchIdx.pm') diff --git a/lib/PublicInbox/SearchIdx.pm b/lib/PublicInbox/SearchIdx.pm index 3237aadc..3f933121 100644 --- a/lib/PublicInbox/SearchIdx.pm +++ b/lib/PublicInbox/SearchIdx.pm @@ -11,6 +11,7 @@ use strict; use v5.10.1; use parent qw(PublicInbox::Search PublicInbox::Lock Exporter); use PublicInbox::Eml; +use PublicInbox::Search qw(xap_terms); use PublicInbox::InboxWritable; use PublicInbox::MID qw(mids_for_index mids); use PublicInbox::MsgIter; @@ -34,6 +35,7 @@ use constant DEBUG => !!$ENV{DEBUG}; my $xapianlevels = qr/\A(?:full|medium)\z/; my $hex = '[a-f0-9]'; my $OID = $hex .'{40,}'; +my @VMD_MAP = (kw => 'K', label => 'L'); our $INDEXLEVELS = qr/\A(?:full|medium|basic)\z/; sub new { @@ -428,7 +430,15 @@ sub eml2doc ($$$;$) { sub add_xapian ($$$$) { my ($self, $eml, $smsg, $mids) = @_; begin_txn_lazy($self); + my $merge_vmd = delete $smsg->{-merge_vmd}; my $doc = eml2doc($self, $eml, $smsg, $mids); + if (my $old = $merge_vmd ? _get_doc($self, $smsg->{num}) : undef) { + my @x = @VMD_MAP; + while (my ($field, $pfx) = splice(@x, 0, 2)) { + my $vals = xap_terms($pfx, $old); + $doc->add_boolean_term($pfx.$_) for keys %$vals; + } + } $self->{xdb}->replace_document($smsg->{num}, $doc); } @@ -531,8 +541,6 @@ sub remove_eidx_info { $self->{xdb}->replace_document($docid, $doc); } -my @VMD_MAP = (kw => 'K', label => 'L'); - sub set_vmd { my ($self, $docid, $vmd) = @_; begin_txn_lazy($self); -- cgit v1.2.3-24-ge0c7