1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
use super::Scorer;
use crate::core::SegmentReader;
use crate::query::Explanation;
use crate::{DocId, Result};
pub trait Weight: Send + Sync + 'static {
fn scorer(&self, reader: &SegmentReader) -> Result<Box<dyn Scorer>>;
fn explain(&self, reader: &SegmentReader, doc: DocId) -> Result<Explanation>;
fn count(&self, reader: &SegmentReader) -> Result<u32> {
let mut scorer = self.scorer(reader)?;
if let Some(delete_bitset) = reader.delete_bitset() {
Ok(scorer.count(delete_bitset))
} else {
Ok(scorer.count_including_deleted())
}
}
}