Skip to content

Commit 0260eac

Browse files
committed
assert fix and minor cleanup
1 parent 402c767 commit 0260eac

File tree

4 files changed

+27
-27
lines changed

4 files changed

+27
-27
lines changed

server/src/main/java/org/elasticsearch/index/codec/vectors/DefaultIVFVectorsReader.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ public float[] centroid(int centroidOrdinal) throws IOException {
134134
@Override
135135
public void bulkScore(NeighborQueue queue, int start, int end) throws IOException {
136136
// TODO: bulk score centroids like we do with posting lists
137-
assert start > 0;
137+
assert start >= 0;
138138
assert end > 0;
139139
assert start + end <= numCentroids;
140140
centroids.seek(quantizedCentroidsOffset + quantizedVectorByteSize * start);

server/src/main/java/org/elasticsearch/index/codec/vectors/DefaultIVFVectorsWriter.java

Lines changed: 26 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -244,32 +244,34 @@ CentroidAssignments calculateAndWriteCentroids(
244244

245245
List<CentroidPartition> centroidPartitions = new ArrayList<>();
246246

247-
List<float[]> centroidsList = Arrays.stream(centroids).toList();
248-
FloatVectorValues centroidsAsFVV = FloatVectorValues.fromFloats(centroidsList, fieldInfo.getVectorDimension());
249-
250-
HierarchicalKMeans hierarchicalKMeans = new HierarchicalKMeans(fieldInfo.getVectorDimension());
251-
KMeansResult result = hierarchicalKMeans.cluster(centroidsAsFVV, centroids.length / (int) Math.sqrt(centroids.length));
252-
float[][] parentCentroids = result.centroids();
253-
int[] parentChildAssignments = result.assignments();
254-
// TODO: explore using soar assignments here as well
255-
// int[] parentChildSoarAssignments = result.soarAssignments();
256-
257-
AssignmentArraySorter sorter = new AssignmentArraySorter(centroids, centroidOrds, parentChildAssignments);
258-
sorter.sort(0, centroids.length);
259-
260-
for (int i = 0; i < parentChildAssignments.length; i++) {
261-
int label = parentChildAssignments[i];
262-
int centroidCount = 0;
263-
int j = i;
264-
for (; j < parentChildAssignments.length; j++) {
265-
if (parentChildAssignments[j] != label) {
266-
break;
247+
if(centroids.length > IVFVectorsFormat.DEFAULT_VECTORS_PER_CLUSTER) {
248+
List<float[]> centroidsList = Arrays.stream(centroids).toList();
249+
FloatVectorValues centroidsAsFVV = FloatVectorValues.fromFloats(centroidsList, fieldInfo.getVectorDimension());
250+
251+
HierarchicalKMeans hierarchicalKMeans = new HierarchicalKMeans(fieldInfo.getVectorDimension());
252+
KMeansResult result = hierarchicalKMeans.cluster(centroidsAsFVV, centroids.length / (int) Math.sqrt(centroids.length));
253+
float[][] parentCentroids = result.centroids();
254+
int[] parentChildAssignments = result.assignments();
255+
// TODO: explore using soar assignments here as well
256+
// int[] parentChildSoarAssignments = result.soarAssignments();
257+
258+
AssignmentArraySorter sorter = new AssignmentArraySorter(centroids, centroidOrds, parentChildAssignments);
259+
sorter.sort(0, centroids.length);
260+
261+
for (int i = 0; i < parentChildAssignments.length; i++) {
262+
int label = parentChildAssignments[i];
263+
int centroidCount = 0;
264+
int j = i;
265+
for (; j < parentChildAssignments.length; j++) {
266+
if (parentChildAssignments[j] != label) {
267+
break;
268+
}
269+
centroidCount++;
267270
}
268-
centroidCount++;
271+
int childOrdinal = i;
272+
i = j;
273+
centroidPartitions.add(new CentroidPartition(parentCentroids[label], childOrdinal, centroidCount));
269274
}
270-
int childOrdinal = i;
271-
i = j;
272-
centroidPartitions.add(new CentroidPartition(parentCentroids[label], childOrdinal, centroidCount));
273275
}
274276

275277
writeCentroidsAndPartitions(centroidPartitions, centroids, fieldInfo, globalCentroid, centroidOutput);

server/src/main/java/org/elasticsearch/index/codec/vectors/IVFVectorsFormat.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@
4545
public class IVFVectorsFormat extends KnnVectorsFormat {
4646

4747
public static final String NAME = "IVFVectorsFormat";
48-
4948
// centroid ordinals -> centroid values, offsets
5049
public static final String CENTROID_EXTENSION = "cenivf";
5150
// offsets contained in cen_ivf, [vector ordinals, actually just docIds](long varint), quantized

server/src/main/java/org/elasticsearch/index/codec/vectors/cluster/KMeansLocal.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,6 @@ private static int getBestCentroid(float[][] centroids, float[] vector) {
147147
bestCentroidOffset = i;
148148
}
149149
}
150-
151150
return bestCentroidOffset;
152151
}
153152

0 commit comments

Comments
 (0)