about summary refs log tree commit homepage
path: root/lib
diff options
context:
space:
mode:
authorEric Wong (Contractor, The Linux Foundation) <e@80x24.org>2018-03-03 17:42:20 +0000
committerEric Wong (Contractor, The Linux Foundation) <e@80x24.org>2018-03-03 17:42:20 +0000
commit95bd8265dfb67ba90e7068bf5a4360168a1f30b6 (patch)
tree3862ca220b4db34f2bbef9de96a5d8bb4cccf09c /lib
parent43fd7e7bda1b8eeb32cf43f6fd89568a938aedf5 (diff)
downloadpublic-inbox-95bd8265dfb67ba90e7068bf5a4360168a1f30b6.tar.gz
Since we support duplicate MIDs in v2, the NNTP article number
becomes the true unique identifier and we want a way to do fast
lookups on it.

While we're at it, stop putting XPATH in the term partitions
since we only need it in the skeleton DB.
Diffstat (limited to 'lib')
-rw-r--r--lib/PublicInbox/SearchIdx.pm8
-rw-r--r--lib/PublicInbox/SearchIdxSkeleton.pm4
2 files changed, 7 insertions, 5 deletions
diff --git a/lib/PublicInbox/SearchIdx.pm b/lib/PublicInbox/SearchIdx.pm
index f63e0720..3ef444d6 100644
--- a/lib/PublicInbox/SearchIdx.pm
+++ b/lib/PublicInbox/SearchIdx.pm
@@ -322,7 +322,6 @@ sub add_message {
                 if ($subj ne '') {
                         $xpath = $self->subject_path($subj);
                         $xpath = id_compress($xpath);
-                        $doc->add_boolean_term('XPATH' . $xpath);
                 }
 
                 my $lines = $mime->body_raw =~ tr!\n!\n!;
@@ -398,7 +397,8 @@ sub add_message {
                         $skel->index_skeleton(\@values);
                         $doc_id = $self->{xdb}->add_document($doc);
                 } else {
-                        $doc_id = link_and_save($self, $doc, $mids, $refs);
+                        $doc_id = link_and_save($self, $doc, $mids, $refs,
+                                                $num, $xpath);
                 }
         };
 
@@ -504,10 +504,12 @@ sub link_doc {
 }
 
 sub link_and_save {
-        my ($self, $doc, $mids, $refs) = @_;
+        my ($self, $doc, $mids, $refs, $num, $xpath) = @_;
         my $db = $self->{xdb};
         my $old_tid;
         my $doc_id;
+        $doc->add_boolean_term('XNUM' . $num) if defined $num;
+        $doc->add_boolean_term('XPATH' . $xpath) if defined $xpath;
         my $vivified = 0;
         foreach my $mid (@$mids) {
                 $self->each_smsg_by_mid($mid, sub {
diff --git a/lib/PublicInbox/SearchIdxSkeleton.pm b/lib/PublicInbox/SearchIdxSkeleton.pm
index 3fe6a4ad..4066b591 100644
--- a/lib/PublicInbox/SearchIdxSkeleton.pm
+++ b/lib/PublicInbox/SearchIdxSkeleton.pm
@@ -98,7 +98,6 @@ sub index_skeleton_real ($$) {
         my $ts = $values->[PublicInbox::Search::TS];
         my $smsg = PublicInbox::SearchMsg->new(undef);
         my $doc = $smsg->{doc};
-        $doc->add_boolean_term('XPATH' . $xpath) if defined $xpath;
         foreach my $mid (@$mids) {
                 $doc->add_term('Q' . $mid);
         }
@@ -106,8 +105,9 @@ sub index_skeleton_real ($$) {
         $doc->set_data($doc_data);
         $smsg->{ts} = $ts;
         $smsg->load_from_data($doc_data);
+        my $num = $values->[PublicInbox::Search::NUM];
         my @refs = ($smsg->references =~ /<([^>]+)>/g);
-        $self->link_and_save($doc, $mids, \@refs);
+        $self->link_and_save($doc, $mids, \@refs, $num, $xpath);
 }
 
 1;