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;
|
2020-10-01 22:28:49 +08:00
|
|
|
mod mdfs;
|
2020-06-05 15:48:46 +08:00
|
|
|
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;
|
2020-09-22 16:53:20 +08:00
|
|
|
pub mod proximity;
|
2020-10-19 19:44:17 +08:00
|
|
|
pub mod subcommand;
|
2020-08-31 03:50:30 +08:00
|
|
|
pub mod tokenizer;
|
2020-10-26 01:32:01 +08:00
|
|
|
pub mod update;
|
2020-06-05 02:25:51 +08:00
|
|
|
|
2020-10-31 23:10:15 +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;
|
2020-10-31 23:10:15 +08:00
|
|
|
|
2020-11-05 20:34:15 +08:00
|
|
|
use anyhow::Context;
|
2020-06-30 04:25:59 +08:00
|
|
|
use fxhash::{FxHasher32, FxHasher64};
|
2020-11-05 20:34:15 +08:00
|
|
|
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};
|
2020-10-23 20:11:00 +08:00
|
|
|
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};
|
2020-09-07 21:42:20 +08:00
|
|
|
pub use self::heed_codec::{
|
2020-10-22 20:23:33 +08:00
|
|
|
RoaringBitmapCodec, BEU32StrCodec, StrStrU8Codec,
|
|
|
|
ObkvCodec, BoRoaringBitmapCodec, CboRoaringBitmapCodec,
|
2020-09-07 21:42:20 +08:00
|
|
|
};
|
2020-10-26 01:32:01 +08:00
|
|
|
pub use self::update::UpdateStore;
|
2020-05-31 22:09:34 +08:00
|
|
|
|
|
|
|
pub type FastMap4<K, V> = HashMap<K, V, BuildHasherDefault<FxHasher32>>;
|
2020-06-30 04:25:59 +08:00
|
|
|
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;
|
2020-08-06 17:08:24 +08:00
|
|
|
pub type Attribute = u32;
|
2020-07-07 18:21:22 +08:00
|
|
|
pub type Position = u32;
|
2020-10-31 23:10:15 +08:00
|
|
|
|
|
|
|
type MergeFn = for<'a> fn(&[u8], &[Cow<'a, [u8]>]) -> anyhow::Result<Vec<u8>>;
|
2020-11-05 20:34:15 +08:00
|
|
|
|
|
|
|
/// 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()
|
|
|
|
}
|