move to_named_doc to Document trait (#2205)

This commit is contained in:
PSeitz
2023-10-04 06:03:07 +02:00
committed by GitHub
parent 166fc15239
commit 041d4fced7
3 changed files with 37 additions and 11 deletions

View File

@@ -195,17 +195,6 @@ impl TantivyDocument {
Ok(document)
}
/// Create a named document from the doc.
pub fn to_named_doc(&self, schema: &Schema) -> NamedFieldDocument {
let mut field_map = BTreeMap::new();
for (field, field_values) in self.get_sorted_field_values() {
let field_name = schema.get_field_name(field);
let values: Vec<OwnedValue> = field_values.into_iter().cloned().collect();
field_map.insert(field_name.to_string(), values);
}
NamedFieldDocument(field_map)
}
/// Encode the schema in JSON.
///
/// Encoding a document cannot fail.

View File

@@ -158,6 +158,7 @@ mod default_doc_type;
mod existing_type_impls;
mod se;
use std::collections::BTreeMap;
use std::fmt::Debug;
use std::mem;
use std::net::Ipv6Addr;
@@ -220,6 +221,20 @@ pub trait Document: DocumentDeserialize + Send + Sync + 'static {
grouped_field_values.push((current_field, current_group));
grouped_field_values
}
/// Create a named document from the doc.
fn to_named_doc(&self, schema: &Schema) -> NamedFieldDocument {
let mut field_map = BTreeMap::new();
for (field, field_values) in self.get_sorted_field_values() {
let field_name = schema.get_field_name(field);
let values: Vec<OwnedValue> = field_values
.into_iter()
.map(|val| val.as_value().into())
.collect();
field_map.insert(field_name.to_string(), values);
}
NamedFieldDocument(field_map)
}
}
/// A single field value.

View File

@@ -255,6 +255,28 @@ impl<'de> serde::Deserialize<'de> for OwnedValue {
}
}
impl<'a, V: Value<'a> + ?Sized> From<ReferenceValue<'a, V>> for OwnedValue {
fn from(val: ReferenceValue<'a, V>) -> OwnedValue {
match val {
ReferenceValue::Null => OwnedValue::Null,
ReferenceValue::Str(val) => OwnedValue::Str(val.to_string()),
ReferenceValue::U64(val) => OwnedValue::U64(val),
ReferenceValue::I64(val) => OwnedValue::I64(val),
ReferenceValue::F64(val) => OwnedValue::F64(val),
ReferenceValue::Date(val) => OwnedValue::Date(val),
ReferenceValue::Facet(val) => OwnedValue::Facet(val.clone()),
ReferenceValue::Bytes(val) => OwnedValue::Bytes(val.to_vec()),
ReferenceValue::IpAddr(val) => OwnedValue::IpAddr(val),
ReferenceValue::Bool(val) => OwnedValue::Bool(val),
ReferenceValue::PreTokStr(val) => OwnedValue::PreTokStr(val.clone()),
ReferenceValue::Array(val) => OwnedValue::Array(val.map(|v| v.into()).collect()),
ReferenceValue::Object(val) => {
OwnedValue::Object(val.map(|(k, v)| (k.to_string(), v.into())).collect())
}
}
}
}
impl From<String> for OwnedValue {
fn from(s: String) -> OwnedValue {
OwnedValue::Str(s)