From 73a10ad5ed31f1b807b571628cd809d282c6cb50 Mon Sep 17 00:00:00 2001 From: Benjamin Trent <4357155+benwtrent@users.noreply.github.com> Date: Wed, 2 Jul 2025 16:47:59 -0400 Subject: [PATCH 1/2] Reduce quantization optimization steps at ivf query time --- .../index/codec/vectors/DefaultIVFVectorsReader.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/server/src/main/java/org/elasticsearch/index/codec/vectors/DefaultIVFVectorsReader.java b/server/src/main/java/org/elasticsearch/index/codec/vectors/DefaultIVFVectorsReader.java index 9ef017796500c..cea13eecd5b5e 100644 --- a/server/src/main/java/org/elasticsearch/index/codec/vectors/DefaultIVFVectorsReader.java +++ b/server/src/main/java/org/elasticsearch/index/codec/vectors/DefaultIVFVectorsReader.java @@ -33,6 +33,7 @@ import static org.apache.lucene.index.VectorSimilarityFunction.MAXIMUM_INNER_PRODUCT; import static org.elasticsearch.index.codec.vectors.BQSpaceUtils.transposeHalfByte; import static org.elasticsearch.index.codec.vectors.BQVectorUtils.discretize; +import static org.elasticsearch.index.codec.vectors.OptimizedScalarQuantizer.DEFAULT_LAMBDA; import static org.elasticsearch.simdvec.ES91OSQVectorsScorer.BULK_SIZE; /** @@ -211,7 +212,7 @@ private static class MemorySegmentPostingsVisitor implements PostingVisitor { quantizedQueryScratch = new byte[QUERY_BITS * discretizedDimensions / 8]; quantizedByteLength = discretizedDimensions / 8 + (Float.BYTES * 3) + Short.BYTES; quantizedVectorByteSize = (discretizedDimensions / 8); - quantizer = new OptimizedScalarQuantizer(fieldInfo.getVectorSimilarityFunction()); + quantizer = new OptimizedScalarQuantizer(fieldInfo.getVectorSimilarityFunction(), DEFAULT_LAMBDA, 2); osqVectorsScorer = ESVectorUtil.getES91OSQVectorsScorer(indexInput, fieldInfo.getVectorDimension()); } From b771b375221cce73297daa2f58f3d0ae302082c0 Mon Sep 17 00:00:00 2001 From: Benjamin Trent Date: Thu, 3 Jul 2025 12:23:40 -0400 Subject: [PATCH 2/2] Apply suggestions from code review --- .../index/codec/vectors/DefaultIVFVectorsReader.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/main/java/org/elasticsearch/index/codec/vectors/DefaultIVFVectorsReader.java b/server/src/main/java/org/elasticsearch/index/codec/vectors/DefaultIVFVectorsReader.java index cea13eecd5b5e..ac95f3c8ad0af 100644 --- a/server/src/main/java/org/elasticsearch/index/codec/vectors/DefaultIVFVectorsReader.java +++ b/server/src/main/java/org/elasticsearch/index/codec/vectors/DefaultIVFVectorsReader.java @@ -212,7 +212,7 @@ private static class MemorySegmentPostingsVisitor implements PostingVisitor { quantizedQueryScratch = new byte[QUERY_BITS * discretizedDimensions / 8]; quantizedByteLength = discretizedDimensions / 8 + (Float.BYTES * 3) + Short.BYTES; quantizedVectorByteSize = (discretizedDimensions / 8); - quantizer = new OptimizedScalarQuantizer(fieldInfo.getVectorSimilarityFunction(), DEFAULT_LAMBDA, 2); + quantizer = new OptimizedScalarQuantizer(fieldInfo.getVectorSimilarityFunction(), DEFAULT_LAMBDA, 1); osqVectorsScorer = ESVectorUtil.getES91OSQVectorsScorer(indexInput, fieldInfo.getVectorDimension()); }