From 37cad08788ba4ab75ec9f7dbfbe4daae643c3d8b Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Thu, 27 Aug 2026 04:24:27 +0000 Subject: [PATCH 1/2] perf: eliminate string cloning in abstract_text Replaced cloning of the word string for every index position with borrowing the `String` from the `HashMap`. This substantially reduces unnecessary heap allocations when mapping occurrences. Additionally, updated `sort_by_key` to `sort_unstable_by_key` to further improve sorting performance. Co-authored-by: undivisible <136312656+undivisible@users.noreply.github.com> --- src/embedded_search.rs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/embedded_search.rs b/src/embedded_search.rs index a556cb8..63e33d6 100644 --- a/src/embedded_search.rs +++ b/src/embedded_search.rs @@ -527,21 +527,21 @@ fn text<'a>(parts: impl Iterator) -> String { } fn abstract_text(index: Option>>) -> String { + let index = index.unwrap_or_default(); let mut words = index - .unwrap_or_default() - .into_iter() + .iter() .flat_map(|(word, positions)| { positions - .into_iter() - .map(move |position| (position, word.clone())) + .iter() + .map(move |&position| (position, word.as_str())) }) .collect::>(); - words.sort_by_key(|(position, _)| *position); + words.sort_unstable_by_key(|(position, _)| *position); let mut iter = words.into_iter().take(48).map(|(_, word)| word); match iter.next() { - Some(first) => iter.fold(first, |mut acc, word| { + Some(first) => iter.fold(first.to_owned(), |mut acc, word| { acc.push(' '); - acc.push_str(&word); + acc.push_str(word); acc }), None => String::new(), From 0932580dfc83f5541257f598ff4a2048ecdd3ca6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Max=20Carter=20=E7=A5=81=E6=98=8E=E6=80=9D?= Date: Fri, 11 Sep 2026 11:28:43 +0800 Subject: [PATCH 2/2] fix: use tuple cache key in clear_cache test Cache keys are (embedded, mode, query) after the collision fix; the clear_cache unit test still inserted a bare String and failed to compile. --- src/lib.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index c9b6ecd..0ab59d0 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1333,7 +1333,10 @@ mod tests { filters: SearchFilters::default(), }; - client.cache.insert("rust".to_owned(), dummy_response); + client.cache.insert( + (false, SearchMode::Balanced, "rust".to_owned()), + dummy_response, + ); assert_eq!(client.cached_entries(), 1); client.clear_cache();