mirror of
https://github.com/meilisearch/MeiliSearch
synced 2024-12-25 06:00:08 +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()
|
||||
}
|
||||
|
||||
/// 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.
|
||||
pub fn json_to_string(value: &Value) -> Option<String> {
|
||||
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!(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…
x
Reference in New Issue
Block a user