mirror of
https://github.com/meilisearch/meilisearch.git
synced 2024-11-30 09:04:59 +08:00
feat: Add all_obkv_to_json function
This commit is contained in:
parent
57c9f03e51
commit
7c0e544839
@ -450,7 +450,7 @@ impl Search {
|
||||
let documents = index.documents(&txn, result.documents_ids)?;
|
||||
let mut jsons = Vec::new();
|
||||
for (_, obkv) in documents {
|
||||
let json = milli::obkv_to_json(&displayed_fields, &fields_ids_map, obkv)?;
|
||||
let json = milli::obkv_to_json(&displayed_fields, &fields_ids_map, &obkv)?;
|
||||
jsons.push(json);
|
||||
}
|
||||
|
||||
|
@ -88,7 +88,7 @@ pub fn absolute_from_relative_position(field_id: FieldId, relative: RelativePosi
|
||||
pub fn obkv_to_json(
|
||||
displayed_fields: &[FieldId],
|
||||
fields_ids_map: &FieldsIdsMap,
|
||||
obkv: obkv::KvReaderU16,
|
||||
obkv: &obkv::KvReaderU16,
|
||||
) -> Result<Object> {
|
||||
displayed_fields
|
||||
.iter()
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -920,7 +920,7 @@ mod tests {
|
||||
let fidmap = index.fields_ids_map(&rtxn).unwrap();
|
||||
for document in index.all_documents(&rtxn).unwrap() {
|
||||
let document = document.unwrap();
|
||||
let json = crate::obkv_to_json(&fidmap.ids().collect::<Vec<_>>(), &fidmap, document.1)
|
||||
let json = crate::obkv_to_json(&fidmap.ids().collect::<Vec<_>>(), &fidmap, &document.1)
|
||||
.unwrap();
|
||||
println!("json: {:?}", json);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user