feat: Add make Record function

This commit is contained in:
Alex Wellnitz 2023-10-26 10:54:11 +02:00
parent 5ef01eb1da
commit 718e57355b
2 changed files with 23 additions and 0 deletions

View File

@ -1,5 +1,7 @@
use std::{cmp::min, collections::HashMap, fs, path::Path}; use std::{cmp::min, collections::HashMap, fs, path::Path};
use serde_json::{Value, json};
use crate::{analyze::tokenizer::Tokenizer, types::Stats}; use crate::{analyze::tokenizer::Tokenizer, types::Stats};
pub struct Rustysearch { pub struct Rustysearch {
@ -195,4 +197,11 @@ impl Rustysearch {
let info = parts.next().unwrap().to_string(); let info = parts.next().unwrap().to_string();
(term, info) (term, info)
} }
/// Given a ``term`` and a dict of ``term_info``, creates a line for
/// writing to the segment file.
///
pub fn make_record(&self, term: &str, term_info: &Value) -> String {
format!("{}\t{}\n", term, json!(term_info).to_string())
}
} }

View File

@ -1,6 +1,7 @@
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use rustysearch::{search::Rustysearch, types::Stats}; use rustysearch::{search::Rustysearch, types::Stats};
use serde_json::json;
#[test] #[test]
fn test_write_new_stats() { fn test_write_new_stats() {
@ -118,6 +119,19 @@ mod tests {
assert_eq!(tokens, vec!["hello", "world"]); assert_eq!(tokens, vec!["hello", "world"]);
} }
#[test]
fn test_make_record() {
let search = Rustysearch::new("/tmp/rustysearch");
let term = "hello world";
let term_info = json!({
"frequency": 100,
"idf": 1.5,
});
let record = search.make_record(term, &term_info);
assert_eq!(record, "hello world\t{\"frequency\":100,\"idf\":1.5}\n");
}
// Helper function to clean up the stats file // Helper function to clean up the stats file
fn clean_stats(tmp_path: &str) { fn clean_stats(tmp_path: &str) {
let search = Rustysearch::new(tmp_path); let search = Rustysearch::new(tmp_path);