Merge pull request #163 from meilisearch/export-compute-docid

Expose a function to compute the DocumentId from an Hashable value
This commit is contained in:
Clément Renault 2019-06-25 12:25:38 +02:00 committed by GitHub
commit ae8b4f56f2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 9 additions and 7 deletions

View File

@ -9,3 +9,4 @@ pub use rocksdb;
pub use self::database::{Database, Index, CustomSettings};
pub use self::number::Number;
pub use self::ranked_map::RankedMap;
pub use self::serde::compute_document_id;

View File

@ -16,10 +16,11 @@ where D: serde::Serialize,
document.serialize(serializer)
}
fn calculate_hash<T: Hash>(t: &T) -> u64 {
pub fn compute_document_id<T: Hash>(t: &T) -> DocumentId {
let mut s = SipHasher::new();
t.hash(&mut s);
s.finish()
let hash = s.finish();
DocumentId(hash)
}
struct ExtractDocumentId<'a> {
@ -214,8 +215,8 @@ impl<'a> ser::SerializeMap for ExtractDocumentIdMapSerializer<'a> {
if self.identifier == key {
// TODO is it possible to have multiple ids?
let id = bincode::serialize(value).unwrap();
let hash = calculate_hash(&id);
self.document_id = Some(DocumentId(hash));
let document_id = compute_document_id(&id);
self.document_id = Some(document_id);
}
Ok(())
@ -245,8 +246,8 @@ impl<'a> ser::SerializeStruct for ExtractDocumentIdStructSerializer<'a> {
if self.identifier == key {
// TODO can it be possible to have multiple ids?
let id = bincode::serialize(value).unwrap();
let hash = calculate_hash(&id);
self.document_id = Some(DocumentId(hash));
let document_id = compute_document_id(&id);
self.document_id = Some(document_id);
}
Ok(())

View File

@ -16,7 +16,7 @@ mod indexer;
mod serializer;
pub use self::deserializer::Deserializer;
pub use self::extract_document_id::extract_document_id;
pub use self::extract_document_id::{extract_document_id, compute_document_id};
pub use self::convert_to_string::ConvertToString;
pub use self::convert_to_number::ConvertToNumber;
pub use self::indexer::Indexer;