MeiliSearch/meilisearch-core/src/store/postings_lists.rs

42 lines
1.2 KiB
Rust
Raw Normal View History

2019-10-18 13:05:28 +02:00
use crate::DocIndex;
2019-10-21 12:05:53 +02:00
use heed::types::{ByteSlice, CowSlice};
use heed::Result as ZResult;
2019-10-16 17:05:24 +02:00
use sdset::{Set, SetBuf};
2019-10-18 13:05:28 +02:00
use std::borrow::Cow;
2019-10-03 15:04:11 +02:00
#[derive(Copy, Clone)]
pub struct PostingsLists {
2019-10-21 12:05:53 +02:00
pub(crate) postings_lists: heed::Database<ByteSlice, CowSlice<DocIndex>>,
}
2019-10-03 15:04:11 +02:00
impl PostingsLists {
pub fn put_postings_list(
2019-10-18 13:21:41 +02:00
self,
2019-10-21 12:05:53 +02:00
writer: &mut heed::RwTxn,
2019-10-03 15:04:11 +02:00
word: &[u8],
2019-10-16 17:05:24 +02:00
words_indexes: &Set<DocIndex>,
2019-10-18 13:05:28 +02:00
) -> ZResult<()> {
2019-10-16 17:05:24 +02:00
self.postings_lists.put(writer, word, words_indexes)
}
2019-10-21 12:05:53 +02:00
pub fn del_postings_list(self, writer: &mut heed::RwTxn, word: &[u8]) -> ZResult<bool> {
2019-10-16 17:05:24 +02:00
self.postings_lists.delete(writer, word)
}
pub fn clear(self, writer: &mut heed::RwTxn) -> ZResult<()> {
self.postings_lists.clear(writer)
}
2019-10-16 17:05:24 +02:00
pub fn postings_list<'txn>(
2019-10-18 13:21:41 +02:00
self,
2019-10-21 12:05:53 +02:00
reader: &'txn heed::RoTxn,
word: &[u8],
2019-10-18 13:05:28 +02:00
) -> ZResult<Option<Cow<'txn, Set<DocIndex>>>> {
2019-10-16 17:05:24 +02:00
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),
}
}
}