Skip to content

Commit 88faf24

Browse files
committed
Enable early termination for HNSW by default
1 parent f91124a commit 88faf24

File tree

2 files changed

+26
-4
lines changed

2 files changed

+26
-4
lines changed

server/src/main/java/org/elasticsearch/index/mapper/vectors/DenseVectorFieldMapper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ public class DenseVectorFieldMapper extends FieldMapper {
126126
private static final float EPS = 1e-3f;
127127
public static final int BBQ_MIN_DIMS = 64;
128128

129-
private static final boolean DEFAULT_HNSW_EARLY_TERMINATION = false;
129+
private static final boolean DEFAULT_HNSW_EARLY_TERMINATION = true;
130130
public static final FeatureFlag IVF_FORMAT = new FeatureFlag("ivf_format");
131131

132132
public static boolean isNotUnitVector(float magnitude) {

server/src/test/java/org/elasticsearch/search/vectors/AbstractKnnVectorQueryBuilderTestCase.java

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import org.apache.lucene.search.BooleanClause;
1313
import org.apache.lucene.search.BooleanQuery;
1414
import org.apache.lucene.search.MatchNoDocsQuery;
15+
import org.apache.lucene.search.PatienceKnnVectorQuery;
1516
import org.apache.lucene.search.Query;
1617
import org.apache.lucene.search.knn.KnnSearchStrategy;
1718
import org.elasticsearch.TransportVersion;
@@ -206,11 +207,21 @@ protected void doAssertLuceneQuery(KnnVectorQueryBuilder queryBuilder, Query que
206207
switch (elementType()) {
207208
case FLOAT -> assertThat(
208209
query,
209-
anyOf(instanceOf(ESKnnFloatVectorQuery.class), instanceOf(DenseVectorQuery.Floats.class), instanceOf(BooleanQuery.class))
210+
anyOf(
211+
instanceOf(ESKnnFloatVectorQuery.class),
212+
instanceOf(DenseVectorQuery.Floats.class),
213+
instanceOf(BooleanQuery.class),
214+
instanceOf(PatienceKnnVectorQuery.class)
215+
)
210216
);
211217
case BYTE -> assertThat(
212218
query,
213-
anyOf(instanceOf(ESKnnByteVectorQuery.class), instanceOf(DenseVectorQuery.Bytes.class), instanceOf(BooleanQuery.class))
219+
anyOf(
220+
instanceOf(ESKnnByteVectorQuery.class),
221+
instanceOf(DenseVectorQuery.Bytes.class),
222+
instanceOf(BooleanQuery.class),
223+
instanceOf(PatienceKnnVectorQuery.class)
224+
)
214225
);
215226
}
216227

@@ -278,7 +289,18 @@ protected void doAssertLuceneQuery(KnnVectorQueryBuilder queryBuilder, Query que
278289
if (query instanceof VectorSimilarityQuery vectorSimilarityQuery) {
279290
query = vectorSimilarityQuery.getInnerKnnQuery();
280291
}
281-
assertThat(query, anyOf(equalTo(knnVectorQueryBuilt), equalTo(bruteForceVectorQueryBuilt)));
292+
assertThat(
293+
query,
294+
anyOf(
295+
equalTo(knnVectorQueryBuilt),
296+
equalTo(
297+
knnVectorQueryBuilt instanceof ESKnnByteVectorQuery esKnnByteVectorQuery
298+
? PatienceKnnVectorQuery.fromByteQuery(esKnnByteVectorQuery)
299+
: PatienceKnnVectorQuery.fromFloatQuery((ESKnnFloatVectorQuery) knnVectorQueryBuilt)
300+
),
301+
equalTo(bruteForceVectorQueryBuilt)
302+
)
303+
);
282304
}
283305

284306
public void testWrongDimension() {

0 commit comments

Comments
 (0)