From eed9d11aa588d505453701bd03d6926d8c2e39fe Mon Sep 17 00:00:00 2001 From: Brian Sam-Bodden Date: Fri, 20 Feb 2026 07:22:39 -0800 Subject: [PATCH 1/3] fix(query): avoid sending EF_RUNTIME for KNN when not explicitly set EF_RUNTIME is only valid for HNSW indexes and causes errors with FLAT indexes. Default knnEfRuntime to 0 and only include it in the FTHybridParams when explicitly configured to a non-zero value. --- .../main/java/com/redis/vl/query/HybridQuery.java | 12 +++++++++--- .../java/com/redis/vl/query/HybridQueryTest.java | 2 +- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/com/redis/vl/query/HybridQuery.java b/core/src/main/java/com/redis/vl/query/HybridQuery.java index 7d61b76..b2ca0f9 100644 --- a/core/src/main/java/com/redis/vl/query/HybridQuery.java +++ b/core/src/main/java/com/redis/vl/query/HybridQuery.java @@ -80,6 +80,7 @@ public enum CombinationMethod { } private static final String DEFAULT_VECTOR_PARAM = "vector"; + private static final int DEFAULT_KNN_EF_RUNTIME = 0; private final String text; private final String textFieldName; @@ -376,8 +377,13 @@ private FTHybridVectorParams.VectorMethod buildVectorMethod() { FTHybridVectorParams.Range.of(rangeRadius).epsilon(rangeEpsilon); return range; } - // Default: KNN - return FTHybridVectorParams.Knn.of(numResults).efRuntime(knnEfRuntime); + // Default: KNN — only set EF_RUNTIME if explicitly configured (non-default value) + // EF_RUNTIME is only valid for HNSW indexes and causes errors with FLAT indexes + FTHybridVectorParams.Knn knn = FTHybridVectorParams.Knn.of(numResults); + if (knnEfRuntime != DEFAULT_KNN_EF_RUNTIME) { + knn = knn.efRuntime(knnEfRuntime); + } + return knn; } private Combiner buildCombiner() { @@ -419,7 +425,7 @@ public static class HybridQueryBuilder { private String textScorer = "BM25STD"; private String yieldTextScoreAs; private VectorSearchMethod vectorSearchMethod = VectorSearchMethod.KNN; - private int knnEfRuntime = 10; + private int knnEfRuntime = DEFAULT_KNN_EF_RUNTIME; private Float rangeRadius; private float rangeEpsilon = 0.01f; private String yieldVsimScoreAs; diff --git a/core/src/test/java/com/redis/vl/query/HybridQueryTest.java b/core/src/test/java/com/redis/vl/query/HybridQueryTest.java index 5813383..747ab07 100644 --- a/core/src/test/java/com/redis/vl/query/HybridQueryTest.java +++ b/core/src/test/java/com/redis/vl/query/HybridQueryTest.java @@ -39,7 +39,7 @@ void testBuilderDefaults() { assertThat(query.getVectorSearchMethod()).isEqualTo(VectorSearchMethod.KNN); assertThat(query.getCombinationMethod()).isEqualTo(CombinationMethod.RRF); assertThat(query.getDtype()).isEqualTo("float32"); - assertThat(query.getKnnEfRuntime()).isEqualTo(10); + assertThat(query.getKnnEfRuntime()).isEqualTo(0); assertThat(query.getRangeEpsilon()).isEqualTo(0.01f); assertThat(query.getVectorParamName()).isEqualTo("vector"); assertThat(query.getYieldTextScoreAs()).isNull(); From 57fe243dd877e4b4be4685b50907ea0e04ac4617 Mon Sep 17 00:00:00 2001 From: Brian Sam-Bodden Date: Fri, 20 Feb 2026 07:22:55 -0800 Subject: [PATCH 2/3] fix(query): load all fields by default in FT.HYBRID post-processing When no specific return fields are configured, call loadAll() so that document content is included in the FT.HYBRID response. Without this, queries return matched document keys but with empty field values. --- core/src/main/java/com/redis/vl/query/HybridQuery.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/com/redis/vl/query/HybridQuery.java b/core/src/main/java/com/redis/vl/query/HybridQuery.java index b2ca0f9..94f4a58 100644 --- a/core/src/main/java/com/redis/vl/query/HybridQuery.java +++ b/core/src/main/java/com/redis/vl/query/HybridQuery.java @@ -294,10 +294,12 @@ public FTHybridParams buildFTHybridParams() { // Build COMBINE clause Combiner combiner = buildCombiner(); - // Build POST-PROCESSING clause + // Build POST-PROCESSING clause — LOAD fields so document content is returned in the response FTHybridPostProcessingParams.Builder postBuilder = FTHybridPostProcessingParams.builder(); if (!returnFields.isEmpty()) { postBuilder.load(returnFields.toArray(new String[0])); + } else { + postBuilder.loadAll(); } postBuilder.limit(Limit.of(0, numResults)); From 488dd5375aba3cf8841af5216ac3fb8fdfcc725f Mon Sep 17 00:00:00 2001 From: Brian Sam-Bodden Date: Fri, 20 Feb 2026 08:10:03 -0800 Subject: [PATCH 3/3] release: bump to version 0.13.1 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 55bd7ad..38244a4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1 +1 @@ -version = 0.13.0 +version = 0.13.1