mirror of
https://github.com/meilisearch/MeiliSearch
synced 2024-11-23 05:14:27 +01:00
Merge #707
707: Add all_obkv_to_json function r=Kerollmops a=GregoryConrad ## What does this PR do? When embedding milli in an application (other than Meilisearch), it often makes sense to not use the `displayed_attributes` functionality and instead just use milli as a full document store. Thus, this PR adds a function, `all_obkv_to_json`, to supplement the already exposed `milli::obkv_to_json` so that those embedding milli *do not* need to deal with `displayed_attributes` if they don't need to. ~This PR also introduces a slight breaking change: `obkv_to_json` now accepts a reference to `obkv::KvReaderU16` instead of taking ownership of it. As far as I can tell, this seems like a change for the better (`obkv_to_json` only acts upon `obkv` rather than consuming it), but I can change it back if you so desire.~ (reverted in [935a724
](935a724c57
)) ## PR checklist Please check if your PR fulfills the following requirements: - [x] Does this PR fix an existing issue, or have you listed the changes applied in the PR description (and why they are needed)? - [x] Have you read the contributing guidelines? - [x] Have you made sure that the title is accurate and descriptive of the changes? Thank you so much for contributing to Meilisearch! Co-authored-by: Gregory Conrad <gregorysconrad@gmail.com>
This commit is contained in:
commit
f698e6cfdf
@ -105,6 +105,12 @@ pub fn obkv_to_json(
|
|||||||
.collect()
|
.collect()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Transform every field of a raw obkv store into a JSON Object.
|
||||||
|
pub fn all_obkv_to_json(obkv: obkv::KvReaderU16, fields_ids_map: &FieldsIdsMap) -> Result<Object> {
|
||||||
|
let all_keys = obkv.iter().map(|(k, _v)| k).collect::<Vec<_>>();
|
||||||
|
obkv_to_json(all_keys.as_slice(), fields_ids_map, obkv)
|
||||||
|
}
|
||||||
|
|
||||||
/// Transform a JSON value into a string that can be indexed.
|
/// Transform a JSON value into a string that can be indexed.
|
||||||
pub fn json_to_string(value: &Value) -> Option<String> {
|
pub fn json_to_string(value: &Value) -> Option<String> {
|
||||||
fn inner(value: &Value, output: &mut String) -> bool {
|
fn inner(value: &Value, output: &mut String) -> bool {
|
||||||
@ -285,4 +291,26 @@ mod tests {
|
|||||||
assert_eq!(0x12345678, absolute_from_relative_position(0x1234, 0x5678));
|
assert_eq!(0x12345678, absolute_from_relative_position(0x1234, 0x5678));
|
||||||
assert_eq!(0xFFFFFFFF, absolute_from_relative_position(0xFFFF, 0xFFFF));
|
assert_eq!(0xFFFFFFFF, absolute_from_relative_position(0xFFFF, 0xFFFF));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_all_obkv_to_json() {
|
||||||
|
let mut fields_ids_map = FieldsIdsMap::new();
|
||||||
|
let id1 = fields_ids_map.insert("field1").unwrap();
|
||||||
|
let id2 = fields_ids_map.insert("field2").unwrap();
|
||||||
|
|
||||||
|
let mut writer = obkv::KvWriterU16::memory();
|
||||||
|
writer.insert(id1, b"1234").unwrap();
|
||||||
|
writer.insert(id2, b"4321").unwrap();
|
||||||
|
let contents = writer.into_inner().unwrap();
|
||||||
|
let obkv = obkv::KvReaderU16::new(&contents);
|
||||||
|
|
||||||
|
let expected = json!({
|
||||||
|
"field1": 1234,
|
||||||
|
"field2": 4321,
|
||||||
|
});
|
||||||
|
let expected = expected.as_object().unwrap();
|
||||||
|
let actual = all_obkv_to_json(obkv, &fields_ids_map).unwrap();
|
||||||
|
|
||||||
|
assert_eq!(&actual, expected);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user