Skip to content
This repository was archived by the owner on Jan 11, 2023. It is now read-only.

Commit a1c7d0e

Browse files
author
Erik Bernhardsson
authored
Merge pull request #19 from LeagueCode/nearset-pqEntries
Update get Nearset pq entries
2 parents 6be868e + f5da71b commit a1c7d0e

1 file changed

Lines changed: 22 additions & 8 deletions

File tree

src/main/java/com/spotify/annoy/ANNIndex.java

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -228,8 +228,17 @@ public class PQEntry implements Comparable<PQEntry> {
228228
this.nodeOffset = nodeOffset;
229229
}
230230

231-
private float margin;
232-
private long nodeOffset;
231+
private final float margin;
232+
private final long nodeOffset;
233+
234+
public float getMargin() {
235+
return margin;
236+
}
237+
238+
public long getNodeOffset() {
239+
return nodeOffset;
240+
}
241+
233242

234243
@Override
235244
public int compareTo(final PQEntry o) {
@@ -254,17 +263,21 @@ public final List<Integer> getNearest(final float[] queryVector,
254263
public final List<Integer> getNearest(final float[] queryVector,
255264
final int nResults, int searchK) {
256265

257-
ArrayList<PQEntry> sortedNNs = getNearestPqEntries(queryVector, nResults);
266+
List<PQEntry> resultingPQEntries = getNearestPqEntries(queryVector, nResults, searchK);
258267

259268
ArrayList<Integer> result = new ArrayList<>(nResults);
260-
for (int i = 0; i < nResults && i < sortedNNs.size(); i++) {
261-
result.add((int) sortedNNs.get(i).nodeOffset);
269+
for (PQEntry pqEntry: resultingPQEntries) {
270+
result.add((int) pqEntry.nodeOffset);
262271
}
263272
return result;
264273
}
265274

266-
@Override
267-
public ArrayList<PQEntry> getNearestPqEntries(final float[] queryVector, final int nResults ) {
275+
@Override
276+
public final List<PQEntry> getNearestPqEntries( final float[] queryVector, final int nResults ) {
277+
return getNearestPqEntries(queryVector, nResults, -1);
278+
}
279+
280+
public List<PQEntry> getNearestPqEntries(final float[] queryVector, final int nResults, int searchK ) {
268281
if (queryVector.length != DIMENSION) {
269282
throw new RuntimeException(String.format("queryVector must be size of %d, but was %d",
270283
DIMENSION, queryVector.length));
@@ -325,7 +338,8 @@ public ArrayList<PQEntry> getNearestPqEntries(final float[] queryVector, final i
325338
}
326339
}
327340
Collections.sort(sortedNNs);
328-
return sortedNNs;
341+
342+
return sortedNNs.subList(0, nResults);
329343
}
330344

331345
/**

0 commit comments

Comments
 (0)