@@ -68,9 +68,13 @@ public ByteDenseVectorFunction(
6868 super (scoreScript , field );
6969 field .getElementType ().checkDimensions (field .get ().getDims (), queryVector .size ());
7070 float [] floatValues = new float [queryVector .size ()];
71+ double queryMagnitude = 0 ;
7172 for (int i = 0 ; i < queryVector .size (); i ++) {
72- floatValues [i ] = queryVector .get (i ).floatValue ();
73+ float value = queryVector .get (i ).floatValue ();
74+ floatValues [i ] = value ;
75+ queryMagnitude += value * value ;
7376 }
77+ queryMagnitude = Math .sqrt (queryMagnitude );
7478
7579 switch (ElementType .checkValidVector (floatValues , allowedTypes )) {
7680 case FLOAT :
@@ -79,11 +83,6 @@ public ByteDenseVectorFunction(
7983 qvMagnitude = -1 ; // invalid valid, not used for float vectors
8084
8185 if (normalizeFloatQuery ) {
82- double queryMagnitude = 0.0 ;
83- for (float val : floatQueryVector ) {
84- queryMagnitude += val * val ;
85- }
86- queryMagnitude = Math .sqrt (queryMagnitude );
8786 for (int i = 0 ; i < floatQueryVector .length ; i ++) {
8887 floatQueryVector [i ] /= (float ) queryMagnitude ;
8988 }
@@ -92,12 +91,10 @@ public ByteDenseVectorFunction(
9291 case BYTE :
9392 floatQueryVector = null ;
9493 byteQueryVector = new byte [floatValues .length ];
95- float queryMagnitude = 0 ;
9694 for (int i = 0 ; i < floatValues .length ; i ++) {
9795 byteQueryVector [i ] = (byte ) floatValues [i ];
98- queryMagnitude += floatValues [i ] * floatValues [i ];
9996 }
100- this .qvMagnitude = (float ) Math . sqrt ( queryMagnitude ) ;
97+ this .qvMagnitude = (float ) queryMagnitude ;
10198 break ;
10299 default :
103100 throw new AssertionError ("Unexpected element type" );
@@ -116,7 +113,7 @@ public ByteDenseVectorFunction(ScoreScript scoreScript, DenseVectorDocValuesFiel
116113 super (scoreScript , field );
117114 byteQueryVector = queryVector ;
118115 floatQueryVector = null ;
119- float queryMagnitude = 0.0f ;
116+ double queryMagnitude = 0.0f ;
120117 for (byte value : queryVector ) {
121118 queryMagnitude += value * value ;
122119 }
@@ -512,6 +509,7 @@ public ByteCosineSimilarity(ScoreScript scoreScript, DenseVectorDocValuesField f
512509 public double cosineSimilarity () {
513510 setNextVector ();
514511 if (floatQueryVector != null ) {
512+ // float vector is already normalized by the superclass constructor
515513 return field .get ().cosineSimilarity (floatQueryVector , false );
516514 } else {
517515 return field .get ().cosineSimilarity (byteQueryVector , qvMagnitude );
0 commit comments