mirror of
https://github.com/meilisearch/MeiliSearch
synced 2024-06-08 13:57:47 +02:00
38 lines
1.1 KiB
Rust
38 lines
1.1 KiB
Rust
use crate::DocIndex;
|
|
use sdset::{Set, SetBuf};
|
|
use std::borrow::Cow;
|
|
use zlmdb::types::{ByteSlice, CowSlice};
|
|
use zlmdb::Result as ZResult;
|
|
|
|
#[derive(Copy, Clone)]
|
|
pub struct PostingsLists {
|
|
pub(crate) postings_lists: zlmdb::Database<ByteSlice, CowSlice<DocIndex>>,
|
|
}
|
|
|
|
impl PostingsLists {
|
|
pub fn put_postings_list(
|
|
&self,
|
|
writer: &mut zlmdb::RwTxn,
|
|
word: &[u8],
|
|
words_indexes: &Set<DocIndex>,
|
|
) -> ZResult<()> {
|
|
self.postings_lists.put(writer, word, words_indexes)
|
|
}
|
|
|
|
pub fn del_postings_list(&self, writer: &mut zlmdb::RwTxn, word: &[u8]) -> ZResult<bool> {
|
|
self.postings_lists.delete(writer, word)
|
|
}
|
|
|
|
pub fn postings_list<'txn>(
|
|
&self,
|
|
reader: &'txn zlmdb::RoTxn,
|
|
word: &[u8],
|
|
) -> ZResult<Option<Cow<'txn, Set<DocIndex>>>> {
|
|
match self.postings_lists.get(reader, word)? {
|
|
Some(Cow::Borrowed(slice)) => Ok(Some(Cow::Borrowed(Set::new_unchecked(slice)))),
|
|
Some(Cow::Owned(vec)) => Ok(Some(Cow::Owned(SetBuf::new_unchecked(vec)))),
|
|
None => Ok(None),
|
|
}
|
|
}
|
|
}
|