Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions docs/changelog/118774.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
pr: 118774
summary: Apply default k for knn query eagerly
area: Vector Search
type: bug
issues: []
Original file line number Diff line number Diff line change
Expand Up @@ -2006,7 +2006,7 @@ && isNotUnitVector(squaredMagnitude)) {

public Query createKnnQuery(
VectorData queryVector,
Integer k,
int k,
int numCands,
Float numCandsFactor,
Query filter,
Expand Down Expand Up @@ -2039,7 +2039,7 @@ private boolean needsRescore(Float rescoreOversample) {

private Query createKnnBitQuery(
byte[] queryVector,
Integer k,
int k,
int numCands,
Query filter,
Float similarityThreshold,
Expand All @@ -2061,7 +2061,7 @@ private Query createKnnBitQuery(

private Query createKnnByteQuery(
byte[] queryVector,
Integer k,
int k,
int numCands,
Query filter,
Float similarityThreshold,
Expand All @@ -2088,7 +2088,7 @@ private Query createKnnByteQuery(

private Query createKnnFloatQuery(
float[] queryVector,
Integer k,
int k,
int numCands,
Float numCandsFactor,
Query filter,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -495,15 +495,13 @@ protected QueryBuilder doIndexMetadataRewrite(QueryRewriteContext context) throw
@Override
protected Query doToQuery(SearchExecutionContext context) throws IOException {
MappedFieldType fieldType = context.getFieldType(fieldName);
int requestSize;
if (k != null) {
requestSize = k;
final int k;
if (this.k != null) {
k = this.k;
} else {
requestSize = context.requestSize() == null || context.requestSize() < 0 ? DEFAULT_SIZE : context.requestSize();
k = context.requestSize() == null || context.requestSize() < 0 ? DEFAULT_SIZE : context.requestSize();
}
int adjustedNumCands = numCands == null
? Math.round(Math.min(NUM_CANDS_MULTIPLICATIVE_FACTOR * requestSize, NUM_CANDS_LIMIT))
: numCands;
int adjustedNumCands = numCands == null ? Math.round(Math.min(NUM_CANDS_MULTIPLICATIVE_FACTOR * k, NUM_CANDS_LIMIT)) : numCands;
if (fieldType == null) {
return new MatchNoDocsQuery();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,6 @@
import java.util.stream.Stream;

import static org.elasticsearch.index.mapper.vectors.DenseVectorFieldMapper.NUM_CANDS_OVERSAMPLE_LIMIT;
import static org.elasticsearch.search.SearchService.DEFAULT_SIZE;
import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.hasSize;
Expand Down Expand Up @@ -82,7 +81,7 @@ private void checkIndexTypeAndDimensions() {

abstract KnnVectorQueryBuilder createKnnVectorQueryBuilder(
String fieldName,
Integer k,
int k,
int numCands,
RescoreVectorBuilder rescoreVectorBuilder,
Float similarity
Expand Down Expand Up @@ -138,8 +137,8 @@ protected void initializeAdditionalMappings(MapperService mapperService) throws
@Override
protected KnnVectorQueryBuilder doCreateTestQueryBuilder() {
String fieldName = randomBoolean() ? VECTOR_FIELD : VECTOR_ALIAS_FIELD;
Integer k = randomBoolean() ? null : randomIntBetween(1, 100);
int numCands = randomIntBetween(k == null ? DEFAULT_SIZE : k + 20, 1000);
int k = randomIntBetween(1, 100);
int numCands = randomIntBetween(k + 20, 1000);
KnnVectorQueryBuilder queryBuilder = createKnnVectorQueryBuilder(
fieldName,
k,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ DenseVectorFieldMapper.ElementType elementType() {
@Override
protected KnnVectorQueryBuilder createKnnVectorQueryBuilder(
String fieldName,
Integer k,
int k,
int numCands,
RescoreVectorBuilder rescoreVectorBuilder,
Float similarity
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ DenseVectorFieldMapper.ElementType elementType() {
@Override
KnnVectorQueryBuilder createKnnVectorQueryBuilder(
String fieldName,
Integer k,
int k,
int numCands,
RescoreVectorBuilder rescoreVectorBuilder,
Float similarity
Expand Down