Skip to content

Commit b983a9c

Browse files
committed
fix(query): preserve full maxDistance precision in VECTOR_RANGE query
Replace %.1f format specifier with %s to avoid truncating user-provided maxDistance values. Previously, maxDistance(0.01) would produce "VECTOR_RANGE 0.0" (matching nothing) and maxDistance(0.05) would produce "VECTOR_RANGE 0.1" (doubling the intended radius). Add unit test verifying sub-decimal precision is preserved.
1 parent 975b6b4 commit b983a9c

2 files changed

Lines changed: 19 additions & 1 deletion

File tree

core/src/main/java/com/redis/vl/query/MultiVectorQuery.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ public String buildQueryString() {
133133
Vector v = vectors.get(i);
134134
String rangeQuery =
135135
String.format(
136-
"@%s:[VECTOR_RANGE %.1f $vector_%d]=>{$YIELD_DISTANCE_AS: distance_%d}",
136+
"@%s:[VECTOR_RANGE %s $vector_%d]=>{$YIELD_DISTANCE_AS: distance_%d}",
137137
v.getFieldName(), v.getMaxDistance(), i, i);
138138
rangeQueries.add(rangeQuery);
139139
}

core/src/test/java/com/redis/vl/query/MultiVectorQueryMaxDistanceTest.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,4 +141,22 @@ void testQueryStringMixedMaxDistance() {
141141
assertThat(queryString).contains("@field_1:[VECTOR_RANGE 2.0 $vector_0]");
142142
assertThat(queryString).contains("@field_2:[VECTOR_RANGE 0.3 $vector_1]");
143143
}
144+
145+
@Test
146+
@DisplayName("MultiVectorQuery: Should preserve full precision in query string")
147+
void testQueryStringPreservesFullPrecision() {
148+
Vector vector1 =
149+
Vector.builder().vector(SAMPLE_VECTOR).fieldName("field_1").maxDistance(0.01).build();
150+
151+
Vector vector2 =
152+
Vector.builder().vector(SAMPLE_VECTOR_2).fieldName("field_2").maxDistance(0.05).build();
153+
154+
MultiVectorQuery query = MultiVectorQuery.builder().vectors(vector1, vector2).build();
155+
156+
String queryString = query.toQueryString();
157+
158+
// These would have been truncated to 0.0 and 0.1 with %.1f format
159+
assertThat(queryString).contains("VECTOR_RANGE 0.01");
160+
assertThat(queryString).contains("VECTOR_RANGE 0.05");
161+
}
144162
}

0 commit comments

Comments
 (0)