Skip to content

Commit e419764

Browse files
Skip setting vector search limit if unlimited.
Skip setting limit if unlimited and rely on server side command validation. Closes: #4963
1 parent ee1a94f commit e419764

File tree

2 files changed

+16
-3
lines changed

2 files changed

+16
-3
lines changed

spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/VectorSearchOperation.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,10 @@ public Document toDocument(AggregationOperationContext context) {
236236
}
237237

238238
$vectorSearch.append("index", indexName);
239-
$vectorSearch.append("limit", limit.max());
239+
240+
if(limit.isLimited()) {
241+
$vectorSearch.append("limit", limit.max());
242+
}
240243

241244
if (numCandidates != null) {
242245
$vectorSearch.append("numCandidates", numCandidates);

spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/aggregation/VectorSearchOperationUnitTests.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,14 @@
1515
*/
1616
package org.springframework.data.mongodb.core.aggregation;
1717

18-
import static org.assertj.core.api.Assertions.*;
18+
import static org.springframework.data.mongodb.test.util.Assertions.assertThat;
1919

2020
import java.util.List;
2121

2222
import org.bson.Document;
2323
import org.junit.jupiter.api.Test;
24-
2524
import org.springframework.data.annotation.Id;
25+
import org.springframework.data.domain.Limit;
2626
import org.springframework.data.mongodb.core.aggregation.VectorSearchOperation.SearchType;
2727
import org.springframework.data.mongodb.core.mapping.Field;
2828
import org.springframework.data.mongodb.core.query.Criteria;
@@ -103,6 +103,16 @@ void mapsCriteriaToDomainType() {
103103
.containsExactly(new Document("$vectorSearch", new Document($VECTOR_SEARCH).append("filter", filter)));
104104
}
105105

106+
@Test // GH-4963
107+
void shouldSkipLimitIfUnlimited() {
108+
109+
VectorSearchOperation $search = VectorSearchOperation.search("vector_index").path("plot_embedding")
110+
.vector(-0.0016261312, -0.028070757, -0.011342932).limit(Limit.unlimited());
111+
112+
List<Document> stages = $search.toPipelineStages(TestAggregationContext.contextFor(Movie.class));
113+
assertThat(stages.get(0)).doesNotContainKey("$vectorSearch.limit");
114+
}
115+
106116
static class Movie {
107117

108118
@Id String id;

0 commit comments

Comments
 (0)