@@ -215,26 +215,32 @@ public KnnVectorsFormat getKnnVectorsFormatForField(String field) {
215
215
// ask to explore a lot of candidates to ensure the same returned hits,
216
216
// as graphs of 2 indices are organized differently
217
217
Query query = knnQuery ("vector" , randomVector (dim ), 50 );
218
- List <String > ids1 = new ArrayList <>();
219
- List <Integer > docs1 = new ArrayList <>();
220
- List <String > ids2 = new ArrayList <>();
221
- List <Integer > docs2 = new ArrayList <>();
222
-
223
- TopDocs topDocs = searcher .search (query , 5 );
218
+ int searchSize = 5 ;
219
+ List <String > ids1 = new ArrayList <>(searchSize );
220
+ List <Integer > docs1 = new ArrayList <>(searchSize );
221
+ List <String > ids2 = new ArrayList <>(searchSize );
222
+ List <Integer > docs2 = new ArrayList <>(searchSize );
223
+
224
+ // Check if a duplicate score exists in n+1, if so, this test is invalid
225
+ // Else, continue to fail on ID equality as this test failed
226
+ TopDocs topDocs = searcher .search (query , searchSize + 1 );
224
227
float lastScore = -1 ;
225
228
StoredFields storedFields = reader .storedFields ();
226
- for (ScoreDoc scoreDoc : topDocs .scoreDocs ) {
229
+ for (int j = 0 ; j < searchSize + 1 ; j ++) {
230
+ ScoreDoc scoreDoc = topDocs .scoreDocs [j ];
227
231
if (scoreDoc .score == lastScore ) {
228
232
// if we have repeated score this test is invalid
229
233
continue OUTER ;
230
234
} else {
231
235
lastScore = scoreDoc .score ;
232
236
}
233
- Document doc = storedFields .document (scoreDoc .doc , Set .of ("id" ));
234
- ids1 .add (doc .get ("id" ));
235
- docs1 .add (scoreDoc .doc );
237
+ if (j < searchSize ) {
238
+ Document doc = storedFields .document (scoreDoc .doc , Set .of ("id" ));
239
+ ids1 .add (doc .get ("id" ));
240
+ docs1 .add (scoreDoc .doc );
241
+ }
236
242
}
237
- TopDocs topDocs2 = searcher2 .search (query , 5 );
243
+ TopDocs topDocs2 = searcher2 .search (query , searchSize );
238
244
StoredFields storedFields2 = reader2 .storedFields ();
239
245
for (ScoreDoc scoreDoc : topDocs2 .scoreDocs ) {
240
246
Document doc = storedFields2 .document (scoreDoc .doc , Set .of ("id" ));
0 commit comments