Pulkitg64 commented on code in PR #16473:
URL: https://github.com/apache/lucene/pull/16473#discussion_r3814482981
##########
lucene/core/src/java/org/apache/lucene/codecs/lucene104/Lucene104ScalarQuantizedVectorsWriter.java:
##########
@@ -523,33 +538,44 @@ public long ramBytesUsed() {
return total;
}
- static class FieldWriter extends FlatFieldVectorsWriter<float[]> {
+ abstract static class FieldWriter<T> extends FlatFieldVectorsWriter<T> {
private static final long SHALLOW_SIZE =
shallowSizeOfInstance(FieldWriter.class);
- private final FieldInfo fieldInfo;
+ protected final FieldInfo fieldInfo;
private boolean finished;
- private final FlatFieldVectorsWriter<float[]> flatFieldVectorsWriter;
+ protected final FlatFieldVectorsWriter<T> flatFieldVectorsWriter;
private final float[] dimensionSums;
private final FloatArrayList magnitudes = new FloatArrayList();
+ protected final int dim;
- FieldWriter(FieldInfo fieldInfo, FlatFieldVectorsWriter<float[]>
flatFieldVectorsWriter) {
+ FieldWriter(FieldInfo fieldInfo, FlatFieldVectorsWriter<T>
flatFieldVectorsWriter) {
this.fieldInfo = fieldInfo;
this.flatFieldVectorsWriter = flatFieldVectorsWriter;
- this.dimensionSums = new float[fieldInfo.getVectorDimension()];
+ this.dim = fieldInfo.getVectorDimension();
+ this.dimensionSums = new float[dim];
+ }
+
+ @SuppressWarnings("unchecked")
+ static FieldWriter<?> create(
+ FieldInfo fieldInfo, FlatFieldVectorsWriter<?> flatFieldVectorsWriter)
{
+ return switch (fieldInfo.getVectorEncoding()) {
+ case BYTE -> throw new UnsupportedOperationException("Byte Vectors
aren't supported");
+ case FLOAT32 ->
+ new Float32FieldWriter(
+ fieldInfo, (FlatFieldVectorsWriter<float[]>)
flatFieldVectorsWriter);
+ case FLOAT16 ->
+ new Float16FieldWriter(
+ fieldInfo, (FlatFieldVectorsWriter<short[]>)
flatFieldVectorsWriter);
+ };
}
@Override
- public List<float[]> getVectors() {
+ public List<T> getVectors() {
return flatFieldVectorsWriter.getVectors();
}
- public void normalizeVectors() {
- for (int i = 0; i < flatFieldVectorsWriter.getVectors().size(); i++) {
- float[] vector = flatFieldVectorsWriter.getVectors().get(i);
- float magnitude = magnitudes.get(i);
- for (int j = 0; j < vector.length; j++) {
- vector[j] /= magnitude;
- }
- }
+ @Override
+ public T copyValue(T vectorValue) {
Review Comment:
No it existed before as well. We just made it generic too and the position
got changed.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]