summaryrefslogtreecommitdiffstats
path: root/src/query/scorer.rs
diff options
context:
space:
mode:
authorPaul Masurel <paul.masurel@gmail.com>2018-03-27 17:35:20 +0900
committerPaul Masurel <paul.masurel@gmail.com>2018-03-27 17:35:20 +0900
commitffa03bad71bbbf2368cc852304fc06ecaea7015a (patch)
tree051a89f236e27ab35aaddaf3c83f19c7775f66fb /src/query/scorer.rs
parent98cf4ba63a77ebca3b75720c41d5dfad0361f293 (diff)
TermScorer does not handle deletes
Diffstat (limited to 'src/query/scorer.rs')
-rw-r--r--src/query/scorer.rs22
1 files changed, 17 insertions, 5 deletions
diff --git a/src/query/scorer.rs b/src/query/scorer.rs
index 7deadb0..3f9de7a 100644
--- a/src/query/scorer.rs
+++ b/src/query/scorer.rs
@@ -5,6 +5,7 @@ use docset::{DocSet, SkipResult};
use common::BitSet;
use std::ops::DerefMut;
use downcast;
+use fastfield::DeleteBitSet;
/// Scored set of documents matching a query within a specific segment.
///
@@ -17,13 +18,23 @@ pub trait Scorer: downcast::Any + DocSet + 'static {
/// Consumes the complete `DocSet` and
/// push the scored documents to the collector.
- fn collect(&mut self, collector: &mut Collector) {
- while self.advance() {
- collector.collect(self.doc(), self.score());
+ fn collect(&mut self, collector: &mut Collector, delete_bitset_opt: Option<&DeleteBitSet>) {
+ if let Some(delete_bitset) = delete_bitset_opt {
+ while self.advance() {
+ let doc = self.doc();
+ if !delete_bitset.is_deleted(doc) {
+ collector.collect(doc, self.score());
+ }
+ }
+ } else {
+ while self.advance() {
+ collector.collect(self.doc(), self.score());
+ }
}
}
}
+
#[allow(missing_docs)]
mod downcast_impl {
downcast!(super::Scorer);
@@ -34,9 +45,9 @@ impl Scorer for Box<Scorer> {
self.deref_mut().score()
}
- fn collect(&mut self, collector: &mut Collector) {
+ fn collect(&mut self, collector: &mut Collector, delete_bitset: Option<&DeleteBitSet>) {
let scorer = self.deref_mut();
- scorer.collect(collector);
+ scorer.collect(collector, delete_bitset);
}
}
@@ -50,6 +61,7 @@ impl DocSet for EmptyScorer {
false
}
+
fn doc(&self) -> DocId {
panic!(
"You may not call .doc() on a scorer \