pub struct BestFirst<S = ()> { /* private fields */ }Expand description
相关性优先的待爬队列。容量由调用方按“还能再抓几页“给出,满了以后新链接只有比队里最差的
好才挤进来:队列长度不超过 limit,和广度优先一样内存有界。
每项带一个打分依据 S(super::LinkSignal),词权重变了以后按它重新打分(Self::rescore)。
Implementations§
Source§impl<S> BestFirst<S>
impl<S> BestFirst<S>
pub fn len(&self) -> usize
pub fn is_empty(&self) -> bool
pub fn contains(&self, hash: u64) -> bool
Sourcepub fn offer(
&mut self,
hash: u64,
url: Url,
depth: usize,
score: f32,
signal: S,
room: usize,
) -> Offer
pub fn offer( &mut self, hash: u64, url: Url, depth: usize, score: f32, signal: S, room: usize, ) -> Offer
放入一个链接。room 是队列现在最多能有多少项(limit 减去已经调度的页数)。
已经在队里的,分数更高时换成这次的分数和打分依据。
Sourcepub fn pop_diverse(
&mut self,
scheduled: &HashMap<String, usize>,
cap: usize,
proven: impl Fn(&str) -> bool,
) -> Option<(Url, usize, f32)>
pub fn pop_diverse( &mut self, scheduled: &HashMap<String, usize>, cap: usize, proven: impl Fn(&str) -> bool, ) -> Option<(Url, usize, f32)>
按簇分散地出队:分数最高的链接所在的簇已经调度了 cap 页时,改出别的簇里分数不低于
最高分一半的最好链接;没有这样的链接就还是出最高分的。scheduled 是每个簇已调度的页数,
proven 说一个簇是不是已经证明了产出好:这样的簇不受 cap 限制,而且队首在没证明过的簇
里时,证明过的簇里分数不低于最高分一半的链接先出。
Sourcepub fn peek_score(&self) -> Option<f32>
pub fn peek_score(&self) -> Option<f32>
队首(分数最高)的分数。
Sourcepub fn take_signal(&mut self) -> Option<S>
pub fn take_signal(&mut self) -> Option<S>
最近一次出队的项的打分依据(取走)。
Trait Implementations§
Auto Trait Implementations§
impl<S> Freeze for BestFirst<S>
impl<S> RefUnwindSafe for BestFirst<S>
impl<S> Send for BestFirst<S>
impl<S> Sync for BestFirst<S>
impl<S> Unpin for BestFirst<S>
impl<S> UnsafeUnpin for BestFirst<S>
impl<S> UnwindSafe for BestFirst<S>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more