Skip to content

Commit 80b48cf

Browse files
committed
Fix cherry pick
1 parent 763fe63 commit 80b48cf

File tree

3 files changed

+22
-59
lines changed

3 files changed

+22
-59
lines changed

server/src/main/java/org/elasticsearch/index/mapper/BlockDocValuesReader.java

Lines changed: 21 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
import org.elasticsearch.index.mapper.BlockLoader.IntBuilder;
3131
import org.elasticsearch.index.mapper.BlockLoader.LongBuilder;
3232
import org.elasticsearch.index.mapper.vectors.DenseVectorFieldMapper;
33-
import org.elasticsearch.index.mapper.vectors.DenseVectorFieldMapper.ElementType;
3433
import org.elasticsearch.index.mapper.vectors.VectorEncoderDecoder;
3534
import org.elasticsearch.search.fetch.StoredFieldsSpec;
3635

@@ -530,39 +529,31 @@ public Builder builder(BlockFactory factory, int expectedCount) {
530529

531530
@Override
532531
public AllReader reader(LeafReaderContext context) throws IOException {
533-
switch (fieldType.getElementType()) {
534-
case FLOAT -> {
535-
FloatVectorValues floatVectorValues = context.reader().getFloatVectorValues(fieldName);
536-
if (floatVectorValues != null) {
537-
if (fieldType.isNormalized()) {
538-
return new FloatDenseVectorNormalizedValuesBlockReader(
539-
floatVectorValues,
540-
dimensions,
541-
context.reader().getNumericDocValues(fieldType.name() + COSINE_MAGNITUDE_FIELD_SUFFIX)
542-
);
543-
}
544-
return new FloatDenseVectorValuesBlockReader(floatVectorValues, dimensions);
545-
}
546-
}
547-
case BYTE -> {
548-
ByteVectorValues byteVectorValues = context.reader().getByteVectorValues(fieldName);
549-
if (byteVectorValues != null) {
550-
return new ByteDenseVectorValuesBlockReader(byteVectorValues, dimensions);
551-
}
532+
FloatVectorValues floatVectorValues = context.reader().getFloatVectorValues(fieldName);
533+
if (floatVectorValues != null) {
534+
if (fieldType.isNormalized()) {
535+
return new FloatDenseVectorNormalizedValuesBlockReader(
536+
floatVectorValues,
537+
dimensions,
538+
context.reader().getNumericDocValues(fieldType.name() + COSINE_MAGNITUDE_FIELD_SUFFIX)
539+
);
552540
}
541+
return new FloatDenseVectorValuesBlockReader(floatVectorValues, dimensions);
553542
}
543+
554544
return new ConstantNullsReader();
555545
}
556546
}
557547

558-
private static class DenseVectorValuesBlockReader extends BlockDocValuesReader {
559-
private final FloatVectorValues floatVectorValues;
560-
private final KnnVectorValues.DocIndexIterator iterator;
561-
private final int dimensions;
548+
private abstract static class DenseVectorValuesBlockReader<T extends KnnVectorValues> extends BlockDocValuesReader {
562549

563-
DenseVectorValuesBlockReader(FloatVectorValues floatVectorValues, int dimensions) {
564-
this.floatVectorValues = floatVectorValues;
565-
iterator = floatVectorValues.iterator();
550+
protected final T vectorValues;
551+
protected final KnnVectorValues.DocIndexIterator iterator;
552+
protected final int dimensions;
553+
554+
DenseVectorValuesBlockReader(T vectorValues, int dimensions) {
555+
this.vectorValues = vectorValues;
556+
iterator = vectorValues.iterator();
566557
this.dimensions = dimensions;
567558
}
568559

@@ -587,18 +578,15 @@ private void read(int doc, BlockLoader.FloatBuilder builder) throws IOException
587578
builder.appendNull();
588579
} else if (iterator.docID() == doc || iterator.advance(doc) == doc) {
589580
builder.beginPositionEntry();
590-
float[] floats = floatVectorValues.vectorValue(iterator.index());
591-
assert floats.length == dimensions
592-
: "unexpected dimensions for vector value; expected " + dimensions + " but got " + floats.length;
593-
for (float aFloat : floats) {
594-
builder.appendFloat(aFloat);
595-
}
581+
appendDoc(builder);
596582
builder.endPositionEntry();
597583
} else {
598584
builder.appendNull();
599585
}
600586
}
601587

588+
protected abstract void appendDoc(BlockLoader.FloatBuilder builder) throws IOException;
589+
602590
@Override
603591
public int docId() {
604592
return iterator.docID();
@@ -657,26 +645,6 @@ public String toString() {
657645
}
658646
}
659647

660-
private static class ByteDenseVectorValuesBlockReader extends DenseVectorValuesBlockReader<ByteVectorValues> {
661-
ByteDenseVectorValuesBlockReader(ByteVectorValues floatVectorValues, int dimensions) {
662-
super(floatVectorValues, dimensions);
663-
}
664-
665-
protected void appendDoc(BlockLoader.FloatBuilder builder) throws IOException {
666-
byte[] bytes = vectorValues.vectorValue(iterator.index());
667-
assert bytes.length == dimensions
668-
: "unexpected dimensions for vector value; expected " + dimensions + " but got " + bytes.length;
669-
for (byte aFloat : bytes) {
670-
builder.appendFloat(aFloat);
671-
}
672-
}
673-
674-
@Override
675-
public String toString() {
676-
return "BlockDocValuesReader.ByteDenseVectorValuesBlockReader";
677-
}
678-
}
679-
680648
public static class BytesRefsFromOrdsBlockLoader extends DocValuesBlockLoader {
681649
private final String fieldName;
682650

x-pack/plugin/esql/src/internalClusterTest/java/org/elasticsearch/xpack/esql/DenseVectorFieldTypeIT.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -216,8 +216,7 @@ public void setup() throws IOException {
216216
if (similarity == DenseVectorFieldMapper.VectorSimilarity.DOT_PRODUCT) {
217217
// Normalize the vector
218218
float magnitude = DenseVector.getMagnitude(vector);
219-
vector.replaceAll(number -> number.floatValue() / magnitude);
220-
}
219+
vector.replaceAll(number -> number.floatValue() / magnitude);
221220
}
222221
docs[i] = prepareIndex("test").setId("" + i).setSource("id", String.valueOf(i), "vector", vector);
223222
indexedVectors.put(i, vector);

x-pack/plugin/esql/src/internalClusterTest/java/org/elasticsearch/xpack/esql/plugin/KnnFunctionIT.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
import static org.elasticsearch.index.IndexMode.LOOKUP;
3636
import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertAcked;
3737
import static org.elasticsearch.xpack.esql.DenseVectorFieldTypeIT.ALL_DENSE_VECTOR_INDEX_TYPES;
38-
import static org.elasticsearch.xpack.esql.DenseVectorFieldTypeIT.NON_QUANTIZED_DENSE_VECTOR_INDEX_TYPES;
3938
import static org.hamcrest.CoreMatchers.containsString;
4039
import static org.hamcrest.Matchers.lessThanOrEqualTo;
4140

@@ -54,9 +53,6 @@ public static Iterable<Object[]> parameters() throws Exception {
5453
for (String indexType : ALL_DENSE_VECTOR_INDEX_TYPES) {
5554
params.add(new Object[] { DenseVectorFieldMapper.ElementType.FLOAT, indexType });
5655
}
57-
for (String indexType : NON_QUANTIZED_DENSE_VECTOR_INDEX_TYPES) {
58-
params.add(new Object[] { DenseVectorFieldMapper.ElementType.BYTE, indexType });
59-
}
6056

6157
// Remove flat index types, as knn does not do a top k for flat
6258
params.removeIf(param -> param[1] != null && ((String) param[1]).contains("flat"));

0 commit comments

Comments
 (0)