diff options
author | Paul Masurel <paul.masurel@gmail.com> | 2018-03-27 17:35:20 +0900 |
---|---|---|
committer | Paul Masurel <paul.masurel@gmail.com> | 2018-03-27 17:35:20 +0900 |
commit | ffa03bad71bbbf2368cc852304fc06ecaea7015a (patch) | |
tree | 051a89f236e27ab35aaddaf3c83f19c7775f66fb /src/query/scorer.rs | |
parent | 98cf4ba63a77ebca3b75720c41d5dfad0361f293 (diff) |
TermScorer does not handle deletes
Diffstat (limited to 'src/query/scorer.rs')
-rw-r--r-- | src/query/scorer.rs | 22 |
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 \ |