meilisearch/src/lib.rs

61 lines
1.8 KiB
Rust
Raw Normal View History

2020-08-12 16:43:02 +08:00
mod criterion;
2020-10-22 18:50:04 +08:00
mod fields_ids_map;
2020-10-21 21:55:48 +08:00
mod index;
mod mdfs;
mod query_tokens;
2020-08-13 20:15:05 +08:00
mod search;
2020-08-28 20:16:37 +08:00
pub mod heed_codec;
pub mod proximity;
pub mod subcommand;
2020-08-31 03:50:30 +08:00
pub mod tokenizer;
pub mod update;
2020-06-05 02:25:51 +08:00
use std::borrow::Cow;
2020-08-13 20:15:05 +08:00
use std::collections::HashMap;
2020-05-31 22:09:34 +08:00
use std::hash::BuildHasherDefault;
use anyhow::Context;
use fxhash::{FxHasher32, FxHasher64};
use serde_json::{Map, Value};
2020-06-05 02:25:51 +08:00
2020-08-13 20:15:05 +08:00
pub use self::criterion::{Criterion, default_criteria};
pub use self::fields_ids_map::FieldsIdsMap;
2020-10-21 21:55:48 +08:00
pub use self::index::Index;
pub use self::search::{Search, SearchResult};
pub use self::heed_codec::{
RoaringBitmapCodec, BEU32StrCodec, StrStrU8Codec,
ObkvCodec, BoRoaringBitmapCodec, CboRoaringBitmapCodec,
};
pub use self::update::UpdateStore;
2020-05-31 22:09:34 +08:00
pub type FastMap4<K, V> = HashMap<K, V, BuildHasherDefault<FxHasher32>>;
pub type FastMap8<K, V> = HashMap<K, V, BuildHasherDefault<FxHasher64>>;
2020-05-31 22:09:34 +08:00
pub type SmallString32 = smallstr::SmallString<[u8; 32]>;
2020-06-11 17:55:03 +08:00
pub type SmallVec32<T> = smallvec::SmallVec<[T; 32]>;
pub type SmallVec16<T> = smallvec::SmallVec<[T; 16]>;
2020-05-31 22:09:34 +08:00
pub type BEU32 = heed::zerocopy::U32<heed::byteorder::BE>;
2020-10-18 21:16:57 +08:00
pub type BEU64 = heed::zerocopy::U64<heed::byteorder::BE>;
2020-05-31 22:09:34 +08:00
pub type DocumentId = u32;
pub type Attribute = u32;
pub type Position = u32;
type MergeFn = for<'a> fn(&[u8], &[Cow<'a, [u8]>]) -> anyhow::Result<Vec<u8>>;
/// Transform a raw obkv store into a JSON Object.
pub fn obkv_to_json(
displayed_fields: &[u8],
fields_ids_map: &FieldsIdsMap,
obkv: obkv::KvReader,
) -> anyhow::Result<Map<String, Value>>
{
displayed_fields.iter()
.copied()
.flat_map(|id| obkv.get(id).map(|value| (id, value)))
.map(|(id, value)| {
let name = fields_ids_map.name(id).context("unknown obkv field id")?;
let value = serde_json::from_slice(value)?;
Ok((name.to_owned(), value))
})
.collect()
}