mirror of
https://github.com/quickwit-oss/tantivy.git
synced 2026-05-26 21:20:40 +00:00
blip
This commit is contained in:
@@ -18,7 +18,6 @@ use std::cell::RefCell;
|
||||
use core::error::*;
|
||||
use rand::{thread_rng, Rng};
|
||||
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct SegmentId(pub String);
|
||||
|
||||
@@ -156,3 +155,12 @@ impl SharedMmapMemory {
|
||||
SharedMmapMemory(Arc::new(mmap_memory))
|
||||
}
|
||||
}
|
||||
|
||||
impl Borrow<[u8]> for SharedMmapMemory {
|
||||
|
||||
fn borrow(&self) -> &[u8] {
|
||||
let SharedMmapMemory(ref arc) = *self;
|
||||
let mmap: &Mmap = arc.borrow();
|
||||
unsafe { mmap.as_slice() }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,47 +1,55 @@
|
||||
use core::directory::Directory;
|
||||
use core::directory::Segment;
|
||||
use core::schema::Term;
|
||||
// use fst::stream::Streamer;
|
||||
use core::directory::SharedMmapMemory;
|
||||
use fst::Streamer;
|
||||
use fst;
|
||||
use std::borrow::Borrow;
|
||||
|
||||
pub struct SegmentIndexReader {
|
||||
segment: Segment,
|
||||
term_offsets: fst::Map,
|
||||
postings_data: SharedMmapMemory,
|
||||
}
|
||||
|
||||
|
||||
impl SegmentIndexReader {
|
||||
|
||||
fn term_cursor<'a>(&'a self) -> SegmentTermCur<'a> {
|
||||
SegmentTermCur {
|
||||
segment: &self.segment,
|
||||
fst_streamer: self.term_offsets.stream(),
|
||||
postings_data: self.postings_data.borrow(),
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
pub struct SegmentDocCursor<'a> {
|
||||
postings_data: &'a [u8],
|
||||
offset: usize,
|
||||
}
|
||||
|
||||
struct SegmentTermCur<'a> {
|
||||
segment: &'a Segment,
|
||||
fst_streamer: fst::map::Stream<'a>,
|
||||
postings_data: &'a [u8],
|
||||
}
|
||||
|
||||
impl<'a> SegmentTermCur<'a> {
|
||||
|
||||
fn next(&mut self,) -> Option<(Term, SegmentDocCursor<'a>)> {
|
||||
match self.fst_streamer.next() {
|
||||
Some((k, offset)) => {
|
||||
let term = Term::from(k);
|
||||
let doc_cursor = SegmentDocCursor {
|
||||
postings_data: self.postings_data,
|
||||
offset: offset as usize,
|
||||
};
|
||||
Some((term, doc_cursor))
|
||||
},
|
||||
None => None
|
||||
}
|
||||
}
|
||||
}
|
||||
//
|
||||
// pub struct SegmentDocCursor<'a> {
|
||||
// data: &'a [u8],
|
||||
// }
|
||||
//
|
||||
// struct SegmentTermCur<'a> {
|
||||
// segment: &'a Segment,
|
||||
// fst_streamer: fst::map::Stream<'a>,
|
||||
// term: Term<'a>,
|
||||
//
|
||||
// }
|
||||
//
|
||||
// impl<'a> SegmentTermCur<'a> {
|
||||
//
|
||||
// fn next(&mut self,) -> Option<(Term<'a>, SegmentDocCursor<'a>)> {
|
||||
// match self.fst_streamer.next() {
|
||||
// Some(_) => None,
|
||||
// None => None
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//
|
||||
//
|
||||
// impl SegmentIndexReader {
|
||||
//
|
||||
// fn term_cursor<'a>(&'a self) -> SegmentTermCur<'a> {
|
||||
// let term: Term<'a> {
|
||||
// self.
|
||||
// };
|
||||
// SegmentTermCur {
|
||||
// segment: &self.segment,
|
||||
// fst_streamer: self.term_offsets.stream(),
|
||||
// term:
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// }
|
||||
|
||||
@@ -31,6 +31,12 @@ impl Term {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn from(data: &[u8]) -> Term {
|
||||
Term {
|
||||
data: Vec::from(data),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn write_into(&self, buf: &mut Vec<u8>) {
|
||||
buf.clear();
|
||||
buf.extend(&self.data);
|
||||
|
||||
Reference in New Issue
Block a user