diff --git a/meilisearch-core/src/raw_indexer.rs b/meilisearch-core/src/raw_indexer.rs index f54210ed6..c78d1f4ff 100644 --- a/meilisearch-core/src/raw_indexer.rs +++ b/meilisearch-core/src/raw_indexer.rs @@ -199,8 +199,8 @@ fn index_token( fn token_to_docindex(id: DocumentId, indexed_pos: IndexedPos, token: &Token, word_index: usize) -> Option { let word_index = u16::try_from(word_index).ok()?; - let char_index = u16::try_from(token.char_index).ok()?; - let char_length = u16::try_from(token.word.chars().count()).ok()?; + let char_index = u16::try_from(token.byte_start).ok()?; + let char_length = u16::try_from(token.word.len()).ok()?; let docindex = DocIndex { document_id: id, diff --git a/meilisearch-http/src/helpers/meilisearch.rs b/meilisearch-http/src/helpers/meilisearch.rs index dd5e2c79f..2db6472ca 100644 --- a/meilisearch-http/src/helpers/meilisearch.rs +++ b/meilisearch-http/src/helpers/meilisearch.rs @@ -479,7 +479,7 @@ fn calculate_highlights( for (attribute, matches) in matches.iter() { if attributes_to_highlight.contains(attribute) { if let Some(Value::String(value)) = document.get(attribute) { - let value: Vec<_> = value.chars().collect(); + let value = value.clone(); let mut highlighted_value = String::new(); let mut index = 0; @@ -492,16 +492,16 @@ fn calculate_highlights( let before = value.get(index..m.start); let highlighted = value.get(m.start..(m.start + m.length)); if let (Some(before), Some(highlighted)) = (before, highlighted) { - highlighted_value.extend(before); + highlighted_value.push_str(before); highlighted_value.push_str(""); - highlighted_value.extend(highlighted); + highlighted_value.push_str(highlighted); highlighted_value.push_str(""); index = m.start + m.length; } else { error!("value: {:?}; index: {:?}, match: {:?}", value, index, m); } } - highlighted_value.extend(value[index..].iter()); + highlighted_value.push_str(&value[index..]); highlight_result.insert(attribute.to_string(), Value::String(highlighted_value)); }; }