Skip setting vector search limit if unlimited.

Skip setting limit if unlimited and rely on server side command validation.

Closes: #4963
This commit is contained in:
Christoph Strobl
2025-05-07 11:22:54 +02:00
parent ee1a94f009
commit e419764023
2 changed files with 16 additions and 3 deletions

View File

@@ -236,7 +236,10 @@ public class VectorSearchOperation implements AggregationOperation {
}
$vectorSearch.append("index", indexName);
$vectorSearch.append("limit", limit.max());
if(limit.isLimited()) {
$vectorSearch.append("limit", limit.max());
}
if (numCandidates != null) {
$vectorSearch.append("numCandidates", numCandidates);

View File

@@ -15,14 +15,14 @@
*/
package org.springframework.data.mongodb.core.aggregation;
import static org.assertj.core.api.Assertions.*;
import static org.springframework.data.mongodb.test.util.Assertions.assertThat;
import java.util.List;
import org.bson.Document;
import org.junit.jupiter.api.Test;
import org.springframework.data.annotation.Id;
import org.springframework.data.domain.Limit;
import org.springframework.data.mongodb.core.aggregation.VectorSearchOperation.SearchType;
import org.springframework.data.mongodb.core.mapping.Field;
import org.springframework.data.mongodb.core.query.Criteria;
@@ -103,6 +103,16 @@ class VectorSearchOperationUnitTests {
.containsExactly(new Document("$vectorSearch", new Document($VECTOR_SEARCH).append("filter", filter)));
}
@Test // GH-4963
void shouldSkipLimitIfUnlimited() {
VectorSearchOperation $search = VectorSearchOperation.search("vector_index").path("plot_embedding")
.vector(-0.0016261312, -0.028070757, -0.011342932).limit(Limit.unlimited());
List<Document> stages = $search.toPipelineStages(TestAggregationContext.contextFor(Movie.class));
assertThat(stages.get(0)).doesNotContainKey("$vectorSearch.limit");
}
static class Movie {
@Id String id;