Browse Source

Skip setting vector search limit if unlimited.

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

Closes: #4963
pull/4968/head
Christoph Strobl 7 months ago
parent
commit
e419764023
No known key found for this signature in database
GPG Key ID: E6054036D0C37A4B
  1. 5
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/VectorSearchOperation.java
  2. 14
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/aggregation/VectorSearchOperationUnitTests.java

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

@ -236,7 +236,10 @@ public class VectorSearchOperation implements AggregationOperation { @@ -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);

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

@ -15,14 +15,14 @@ @@ -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 { @@ -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;

Loading…
Cancel
Save