# 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');
}
}
+ $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,
$doc_id;
}
+# returns begin and end PostingIterator
+sub find_doc_ids {
+ my ($self, $termval) = @_;
+ my $db = $self->{xdb};
+
+ ($db->postlist_begin($termval), $db->postlist_end($termval));
+}
+
sub batch_do {
my ($self, $termval, $cb) = @_;
my $batch_size = 1000; # don't let @ids grow too large to avoid OOM
}
}
+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) = @_;
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);