Skip to content

Commit 6ebcea3

Browse files
committed
Fix compile
1 parent 9b587c9 commit 6ebcea3

File tree

8 files changed

+48
-6
lines changed

8 files changed

+48
-6
lines changed

server/src/main/java/org/elasticsearch/index/codec/vectors/es92/BFloat16.java renamed to server/src/main/java/org/elasticsearch/index/codec/vectors/BFloat16.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,14 @@
77
* License v3.0 only", or the "Server Side Public License, v 1".
88
*/
99

10-
package org.elasticsearch.index.codec.vectors.es92;
10+
package org.elasticsearch.index.codec.vectors;
1111

1212
import org.apache.lucene.util.BitUtil;
1313

1414
import java.nio.ByteOrder;
1515
import java.nio.ShortBuffer;
1616

17-
class BFloat16 {
17+
public class BFloat16 {
1818

1919
public static final int BYTES = Short.BYTES;
2020

@@ -47,4 +47,14 @@ public static void bFloat16ToFloat(byte[] bfBytes, float[] floats) {
4747
floats[i] = bFloat16ToFloat((short) BitUtil.VH_LE_SHORT.get(bfBytes, i * 2));
4848
}
4949
}
50+
51+
public static void bFloat16ToFloat(ShortBuffer bFloats, float[] floats) {
52+
assert floats.length == bFloats.remaining();
53+
assert bFloats.order() == ByteOrder.LITTLE_ENDIAN;
54+
for (int i = 0; i < floats.length; i++) {
55+
floats[i] = bFloat16ToFloat(bFloats.get());
56+
}
57+
}
58+
59+
private BFloat16() {}
5060
}

server/src/main/java/org/elasticsearch/index/codec/vectors/es92/ES92BFloat16FlatVectorsReader.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import org.apache.lucene.util.RamUsageEstimator;
4343
import org.apache.lucene.util.hnsw.RandomVectorScorer;
4444
import org.elasticsearch.core.IOUtils;
45+
import org.elasticsearch.index.codec.vectors.BFloat16;
4546

4647
import java.io.IOException;
4748
import java.util.Map;

server/src/main/java/org/elasticsearch/index/codec/vectors/es92/ES92BFloat16FlatVectorsWriter.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
import org.apache.lucene.util.hnsw.RandomVectorScorerSupplier;
4747
import org.apache.lucene.util.hnsw.UpdateableRandomVectorScorer;
4848
import org.elasticsearch.core.IOUtils;
49+
import org.elasticsearch.index.codec.vectors.BFloat16;
4950

5051
import java.io.Closeable;
5152
import java.io.IOException;

server/src/main/java/org/elasticsearch/index/codec/vectors/es92/OffHeapBFloat16VectorValues.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import org.apache.lucene.util.Bits;
3333
import org.apache.lucene.util.hnsw.RandomVectorScorer;
3434
import org.apache.lucene.util.packed.DirectMonotonicReader;
35+
import org.elasticsearch.index.codec.vectors.BFloat16;
3536

3637
import java.io.IOException;
3738

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

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.apache.lucene.util.BytesRef;
2323
import org.elasticsearch.common.io.stream.ByteArrayStreamInput;
2424
import org.elasticsearch.index.IndexVersion;
25+
import org.elasticsearch.index.codec.vectors.BFloat16;
2526
import org.elasticsearch.index.mapper.BlockLoader.BlockFactory;
2627
import org.elasticsearch.index.mapper.BlockLoader.BooleanBuilder;
2728
import org.elasticsearch.index.mapper.BlockLoader.Builder;
@@ -36,6 +37,9 @@
3637
import org.elasticsearch.search.fetch.StoredFieldsSpec;
3738

3839
import java.io.IOException;
40+
import java.nio.ByteBuffer;
41+
import java.nio.ByteOrder;
42+
import java.nio.ShortBuffer;
3943

4044
import static org.elasticsearch.index.mapper.vectors.DenseVectorFieldMapper.COSINE_MAGNITUDE_FIELD_SUFFIX;
4145

@@ -536,7 +540,8 @@ public Builder builder(BlockFactory factory, int expectedCount) {
536540
@Override
537541
public AllReader reader(LeafReaderContext context) throws IOException {
538542
switch (fieldType.getElementType()) {
539-
case FLOAT -> {
543+
case FLOAT, BFLOAT16 -> {
544+
// BFloat16 is handled by the implementation of FloatVectorValues
540545
FloatVectorValues floatVectorValues = context.reader().getFloatVectorValues(fieldName);
541546
if (floatVectorValues != null) {
542547
if (fieldType.isNormalized()) {
@@ -1052,6 +1057,7 @@ public AllReader reader(LeafReaderContext context) throws IOException {
10521057
}
10531058
return switch (elementType) {
10541059
case FLOAT -> new FloatDenseVectorFromBinary(docValues, dims, indexVersion);
1060+
case BFLOAT16 -> new BFloat16DenseVectorFromBinary(docValues, dims, indexVersion);
10551061
case BYTE -> new ByteDenseVectorFromBinary(docValues, dims, indexVersion);
10561062
case BIT -> new BitDenseVectorFromBinary(docValues, dims, indexVersion);
10571063
};
@@ -1135,6 +1141,26 @@ public String toString() {
11351141
}
11361142
}
11371143

1144+
private static class BFloat16DenseVectorFromBinary extends FloatDenseVectorFromBinary {
1145+
BFloat16DenseVectorFromBinary(BinaryDocValues docValues, int dims, IndexVersion indexVersion) {
1146+
super(docValues, dims, indexVersion);
1147+
}
1148+
1149+
@Override
1150+
protected void decodeDenseVector(BytesRef bytesRef, float[] scratch) {
1151+
VectorEncoderDecoder.decodeDenseVector(indexVersion, bytesRef, scratch);
1152+
ShortBuffer sb = ByteBuffer.wrap(bytesRef.bytes, bytesRef.offset, bytesRef.length)
1153+
.order(ByteOrder.LITTLE_ENDIAN)
1154+
.asShortBuffer();
1155+
BFloat16.bFloat16ToFloat(sb, scratch);
1156+
}
1157+
1158+
@Override
1159+
public String toString() {
1160+
return "BFloat16DenseVectorFromBinary.Bytes";
1161+
}
1162+
}
1163+
11381164
private static class ByteDenseVectorFromBinary extends AbstractDenseVectorFromBinary<byte[]> {
11391165
ByteDenseVectorFromBinary(BinaryDocValues docValues, int dims, IndexVersion indexVersion) {
11401166
this(docValues, dims, indexVersion, dims);

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
import org.elasticsearch.features.NodeFeature;
5050
import org.elasticsearch.index.IndexVersion;
5151
import org.elasticsearch.index.IndexVersions;
52+
import org.elasticsearch.index.codec.vectors.BFloat16;
5253
import org.elasticsearch.index.codec.vectors.ES813FlatVectorFormat;
5354
import org.elasticsearch.index.codec.vectors.ES813Int8FlatVectorFormat;
5455
import org.elasticsearch.index.codec.vectors.ES814HnswScalarQuantizedVectorsFormat;
@@ -1065,17 +1066,17 @@ public ElementType elementType() {
10651066

10661067
@Override
10671068
public void writeValue(ByteBuffer byteBuffer, float value) {
1068-
byteBuffer.putShort((short) (Float.floatToIntBits(value) >>> 16));
1069+
byteBuffer.putShort(BFloat16.floatToBFloat16(value));
10691070
}
10701071

10711072
@Override
10721073
public void readAndWriteValue(ByteBuffer byteBuffer, XContentBuilder b) throws IOException {
1073-
b.value(Float.intBitsToFloat(byteBuffer.getShort() << 16));
1074+
b.value(BFloat16.bFloat16ToFloat(byteBuffer.getShort()));
10741075
}
10751076

10761077
@Override
10771078
public int getNumBytes(int dimensions) {
1078-
return dimensions * Short.BYTES;
1079+
return dimensions * BFloat16.BYTES;
10791080
}
10801081
}
10811082

server/src/test/java/org/elasticsearch/index/codec/vectors/es92/ES92BinaryQuantizedBFloat16VectorsFormatTests.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
import org.elasticsearch.common.settings.Settings;
6262
import org.elasticsearch.index.IndexModule;
6363
import org.elasticsearch.index.IndexSettings;
64+
import org.elasticsearch.index.codec.vectors.BFloat16;
6465
import org.elasticsearch.index.codec.vectors.es818.ES818BinaryQuantizedVectorsFormat;
6566
import org.elasticsearch.index.shard.ShardId;
6667
import org.elasticsearch.index.shard.ShardPath;

server/src/test/java/org/elasticsearch/index/codec/vectors/es92/ES92HnswBinaryQuantizedBFloat16VectorsFormatTests.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
import org.elasticsearch.common.settings.Settings;
5353
import org.elasticsearch.index.IndexModule;
5454
import org.elasticsearch.index.IndexSettings;
55+
import org.elasticsearch.index.codec.vectors.BFloat16;
5556
import org.elasticsearch.index.codec.vectors.es818.ES818BinaryQuantizedVectorsFormat;
5657
import org.elasticsearch.index.codec.vectors.es818.ES818HnswBinaryQuantizedVectorsFormat;
5758
import org.elasticsearch.index.shard.ShardId;

0 commit comments

Comments
 (0)