diff --git a/src/controllers/krate/search.rs b/src/controllers/krate/search.rs index de2290e9ae2..08b66fd70e8 100644 --- a/src/controllers/krate/search.rs +++ b/src/controllers/krate/search.rs @@ -506,17 +506,16 @@ impl<'a> FilterParams<'a> { // OR (exact_match = exact_match' AND rank < rank') // OR exact_match < exact_match'` let q_string = self.q_string.expect("q_string should not be None"); - let q = to_tsquery_with_search_config( - configuration::TsConfigurationByName("english"), - q_string, - ); + let q = sql::("plainto_tsquery('english', ") + .bind::(q_string) + .sql(")"); let rank = ts_rank_cd(crates::textsearchable_index_col, q); let name_exact_match = Crate::with_name(q_string); vec![ Box::new( name_exact_match .eq(exact) - .and(rank.eq(rank_in)) + .and(rank.clone().eq(rank_in)) .and(crates::name.nullable().gt(crate_name_by_id(id))) .nullable(), ), diff --git a/src/tests/routes/crates/list.rs b/src/tests/routes/crates/list.rs index b2a6b2a633e..3ea054f719b 100644 --- a/src/tests/routes/crates/list.rs +++ b/src/tests/routes/crates/list.rs @@ -429,7 +429,8 @@ fn index_sorting() { } // Sort by relevance - for query in ["q=foo_sort", "q=sort"] { + // Add query containing a space to ensure tsquery works + for query in ["q=foo_sort", "q=sort", "q=foo%20sort"] { let (resp, calls) = page_with_seek(&anon, query); assert_eq!(calls, resp[0].meta.total + 1); let decoded_seeks = resp