sub mitem_kw ($$;$) {
my ($smsg, $mitem, $flagged) = @_;
- my $kw = xap_terms('K', $mitem->get_document);
+ my $kw = xap_terms('K', my $doc = $mitem->get_document);
$kw->{flagged} = 1 if $flagged;
- # we keep the empty array here to prevent expensive work in
+ # we keep the empty {kw} array here to prevent expensive work in
# ->xsmsg_vmd, _unbless_smsg will clobber it iff it's empty
$smsg->{kw} = [ sort keys %$kw ];
+ my $L = xap_terms('L', $doc);
+ $smsg->{L} = [ sort keys %$L ] if scalar(keys %$L);
}
# like over->get_art
my $num = int(($docid - 1) / $nshard) + 1;
my $ibx = $self->{shard2ibx}->[$shard];
my $smsg = $ibx->over->get_art($num);
- return if $smsg->{bytes} == 0;
- mitem_kw($smsg, $mitem) if $ibx->can('msg_keywords');
+ return if $smsg->{bytes} == 0; # external message
+ if ($ibx->can('msg_keywords')) {
+ mitem_kw($smsg, $mitem);
+ }
$smsg;
}
$mset = $srch->mset($mo->{qstr}, $mo);
mset_progress($lei, $desc, $mset->size,
$mset->get_matches_estimated);
+ wait_startq($lei); # wait for keyword updates
my $ids = $srch->mset_to_artnums($mset, $mo);
my $ctx = { ids => $ids };
my $i = 0;
my $smsg = $over->get_art($n) or next;
my $mitem = delete $n2item{$smsg->{num}};
next if $smsg->{bytes} == 0;
- wait_startq($lei); # wait for keyword updates
if ($mitem) {
if ($can_kw) {
mitem_kw($smsg, $mitem, $fl);
} elsif ($fl) {
+ # call ->xsmsg_vmd, later
$smsg->{lei_q_tt_flagged} = 1;
}
}
$mset = $self->mset($mo->{qstr}, $mo);
mset_progress($lei, 'xsearch', $mset->size,
$mset->size, $mset->get_matches_estimated);
+ wait_startq($lei); # wait for keyword updates
for my $mitem ($mset->items) {
my $smsg = smsg_for($self, $mitem) or next;
- wait_startq($lei);
$each_smsg->($smsg, $mitem);
}
} while (_mset_more($mset, $mo));