diff --git a/apps/labrinth/src/search/backend/typesense/filter.rs b/apps/labrinth/src/search/backend/typesense/filter.rs index 14b36b7b1f..7000a4922b 100644 --- a/apps/labrinth/src/search/backend/typesense/filter.rs +++ b/apps/labrinth/src/search/backend/typesense/filter.rs @@ -483,7 +483,7 @@ mod tests { assert_eq!(filter.matches("$versions(").count(), 1); assert!(filter.contains("license:=`MIT`")); assert!(filter.contains( - "categories:`fabric` && game_versions:1.20.1 || categories:`forge` && game_versions:1.21.1" + "categories:`fabric` && game_versions:`1.20.1` || categories:`forge` && game_versions:`1.21.1`" )); } diff --git a/apps/labrinth/src/search/backend/typesense/mod.rs b/apps/labrinth/src/search/backend/typesense/mod.rs index 29bd93e11c..db561d5da3 100644 --- a/apps/labrinth/src/search/backend/typesense/mod.rs +++ b/apps/labrinth/src/search/backend/typesense/mod.rs @@ -304,6 +304,8 @@ const fn default_max_candidates() -> usize { impl TypesenseConfig { pub fn new(meta_namespace: Option) -> Self { + let use_cache = meta_namespace.is_none() && ENV.TYPESENSE_USE_CACHE; + Self { url: ENV.TYPESENSE_URL.clone(), api_key: ENV.TYPESENSE_API_KEY.clone(), @@ -312,7 +314,7 @@ impl TypesenseConfig { index_chunk_size: ENV.SEARCH_INDEX_CHUNK_SIZE, import_batch_size: ENV.TYPESENSE_IMPORT_BATCH_SIZE, delete_batch_size: ENV.TYPESENSE_DELETE_BATCH_SIZE, - use_cache: ENV.TYPESENSE_USE_CACHE, + use_cache, } } diff --git a/apps/labrinth/src/search/filter/normalize.rs b/apps/labrinth/src/search/filter/normalize.rs index 2644fabfa3..ca841b106b 100644 --- a/apps/labrinth/src/search/filter/normalize.rs +++ b/apps/labrinth/src/search/filter/normalize.rs @@ -73,7 +73,12 @@ fn normalize_not(expression: FilterExpr) -> FilterExpr { } } -fn normalize_predicate(predicate: FilterPredicate) -> FilterExpr { +fn normalize_predicate(mut predicate: FilterPredicate) -> FilterExpr { + if let FilterCondition::In { values, .. } = &mut predicate.condition { + values.sort(); + values.dedup(); + } + if predicate.field.as_str() == "minecraft_java_server.ping.data" && let FilterCondition::Exists { negated } = predicate.condition {