diff --git a/meilisearch-lib/src/index/search.rs b/meilisearch-lib/src/index/search.rs index 4521d3ed0..dbd39f458 100644 --- a/meilisearch-lib/src/index/search.rs +++ b/meilisearch-lib/src/index/search.rs @@ -554,6 +554,11 @@ impl<'a, A: AsRef<[u8]>> Formatter<'a, A> { }) .collect(), ), + Value::Number(number) => { + let number_string_value = + self.format_string(number.to_string(), matcher, format_options); + Value::String(number_string_value) + } value => value, } } @@ -788,6 +793,92 @@ mod test { assert_eq!(value["author"], "J. R. R. Tolkien"); } + #[test] + fn formatted_with_highlight_in_number() { + let stop_words = fst::Set::default(); + let mut config = AnalyzerConfig::default(); + config.stop_words(&stop_words); + let analyzer = Analyzer::new(config); + let formatter = Formatter::new(&analyzer, (String::from(""), String::from(""))); + + let mut fields = FieldsIdsMap::new(); + let title = fields.insert("title").unwrap(); + let author = fields.insert("author").unwrap(); + let publication_year = fields.insert("publication_year").unwrap(); + + let mut buf = Vec::new(); + let mut obkv = obkv::KvWriter::new(&mut buf); + + obkv.insert( + title, + Value::String("The Hobbit".into()).to_string().as_bytes(), + ) + .unwrap(); + + obkv.finish().unwrap(); + obkv = obkv::KvWriter::new(&mut buf); + + obkv.insert( + author, + Value::String("J. R. R. Tolkien".into()) + .to_string() + .as_bytes(), + ) + .unwrap(); + obkv.finish().unwrap(); + + obkv = obkv::KvWriter::new(&mut buf); + + obkv.insert( + publication_year, + Value::Number(1937.into()).to_string().as_bytes(), + ) + .unwrap(); + + obkv.finish().unwrap(); + + let obkv = obkv::KvReader::new(&buf); + + let mut formatted_options = BTreeMap::new(); + formatted_options.insert( + title, + FormatOptions { + highlight: false, + crop: None, + }, + ); + formatted_options.insert( + author, + FormatOptions { + highlight: false, + crop: None, + }, + ); + formatted_options.insert( + publication_year, + FormatOptions { + highlight: true, + crop: None, + }, + ); + + let mut matching_words = BTreeMap::new(); + matching_words.insert("1937", Some(4)); + + let value = format_fields( + &fields, + obkv, + &formatter, + &matching_words, + &formatted_options, + ) + .unwrap(); + + assert_eq!(value["title"], "The Hobbit"); + assert_eq!(value["author"], "J. R. R. Tolkien"); + assert_eq!(value["publication_year"], "1937"); + } + /// https://github.com/meilisearch/MeiliSearch/issues/1368 #[test] fn formatted_with_highlight_emoji() {